package cc.mrbird.febs.job; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.mapper.*; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; import org.jline.utils.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.List; @Slf4j @Component public class OnHookPlanJob { @Autowired private IgtOnHookPlanOrderItemDao igtOnHookPlanOrderItemDao; @Autowired private IgtOnHookPlanOrderDao igtOnHookPlanOrderDao; @Autowired private DappWalletCoinDao dappWalletCoinDao; @Autowired private DappAccountMoneyChangeDao dappAccountMoneyChangeDao; @Autowired private DappMemberDao dappMemberDao; /** * 五分钟更新一次数据 * 让挂机字表的状态为1:已生效 * 更新挂机主表的挂机剩余金额总收益 * 如果挂机主表的状态为1开始,但是挂机子表中已经没有对应数据,则更新挂机主表的状态 */ // @Scheduled(cron = "0/5 * * * * ? ") @Scheduled(cron = "0 0/5 * * * ? ") public void updatePlanOrderItem(){ Log.info("开始更新挂机字表状态"); List igtOnHookPlanOrders = igtOnHookPlanOrderDao.selectByState(1); if(CollUtil.isEmpty(igtOnHookPlanOrders)){ return; } for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){ //让挂机子表的状态为1:已生效 //todo 获取所属期数去更新数据 Long orderId = igtOnHookPlanOrder.getId(); Long memberId = igtOnHookPlanOrder.getMemberId(); IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = igtOnHookPlanOrderItemDao.selectByOrderIdAndMemberIdAndState(orderId,memberId,2); if(ObjectUtil.isNotEmpty(igtOnHookPlanOrderItem)){ igtOnHookPlanOrderItem.setState(1); igtOnHookPlanOrderItemDao.updateById(igtOnHookPlanOrderItem); if(BigDecimal.ZERO.compareTo(igtOnHookPlanOrderItem.getProfit()) < 0){ //增加挂机主表的挂机总收益和增加挂机剩余金额 Integer updateCount = igtOnHookPlanOrderDao.addAvaAmountAddProfitById(igtOnHookPlanOrder.getId() ,igtOnHookPlanOrderItem.getProfit() ,igtOnHookPlanOrderItem.getAmount()); }else{ //增加挂机主表的挂机总收益和减少挂机剩余金额 Integer updateCount = igtOnHookPlanOrderDao.updateAvaAmountById(igtOnHookPlanOrder.getId() ,igtOnHookPlanOrderItem.getProfit() ,igtOnHookPlanOrderItem.getAmount()); } } } } /** * 根据订单主表获取订单主表中还在开始状态的订单 * 查询相关关联的子表 * 如果子表中的关联数据都已经 生效状态 1:已生效,则 * 1、更新主表状态为结束 * 2、计算总盈利 * 3、更新用户的余额和总额 * 4、生成一条资金流水记录 * 5、TODO * 根据会员等级计算其他的流水,比如分佣金这类操作 */ // @Scheduled(cron = "0/5 * * * * ? ") @Scheduled(cron = "0 0/1 * * * ? ") public void updatePlanOrder(){ Log.info("开始更新挂机主表状态"); List igtOnHookPlanOrders = igtOnHookPlanOrderDao.selectByState(1); if(CollUtil.isEmpty(igtOnHookPlanOrders)){ return; } for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){ Long orderId = igtOnHookPlanOrder.getId(); Long memberId = igtOnHookPlanOrder.getMemberId(); BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount(); IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = igtOnHookPlanOrderItemDao.selectByOrderIdAndMemberIdAndState(orderId,memberId,2); if(ObjectUtil.isEmpty(igtOnHookPlanOrderItem)){ BigDecimal totalProfit = igtOnHookPlanOrderItemDao.selectTotalProfitByByOrderIdAndMemberIdAndState(orderId,memberId,1,2); BigDecimal totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByByOrderIdAndMemberIdAndState(orderId,memberId,1,2); igtOnHookPlanOrder.setState(2); //一次挂机剩余的全部金额 BigDecimal totalMoney = totalAmount.add(totalProfit).add(avaAmount); if(totalMoney.compareTo(planAmount)<=0){ igtOnHookPlanOrder.setProfitState(2); }else{ igtOnHookPlanOrder.setProfitState(1); } igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); dappMemberEntity.setIsOnHook(3); dappMemberDao.updateById(dappMemberEntity); DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); //如果中奖,返回本金加收益加剩余投注金额 BigDecimal total = totalProfit.add(totalAmount).add(igtOnHookPlanOrder.getAvaAmount()).setScale(2, BigDecimal.ROUND_DOWN); dappWalletCoinDao.addTotalAndaddAvailableById(memberId,total); BigDecimal add = availableAmount.add(total); DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, availableAmount, total, add, "投注盈利", 5); dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); } } } @Scheduled(cron = "0 0/1 * * * ? ") public void updateMemberIsOnHook(){ Log.info("开始更新用户是否挂机状态"); dappMemberDao.updateIsOnHook(); } }