| | |
| | | import cc.mrbird.febs.dapp.mapper.*; |
| | | import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService; |
| | | import cc.mrbird.febs.dapp.service.DappWalletService; |
| | | import cc.mrbird.febs.rabbit.producer.UsdtUpdateProducer; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.text.DecimalFormat; |
| | | import java.text.Format; |
| | |
| | | } |
| | | |
| | | |
| | | @Resource |
| | | private UsdtUpdateProducer usdtUpdateProducer; |
| | | |
| | | /** |
| | | * 挂机结束时间一到,所有挂机停止开始计算收益 |
| | | * 根据设置的会员等级对应的(收益率*挂机本金)/(挂机时长*60分钟)=每分钟的收益 |
| | | * 计算每个挂机的挂机时长*每分钟的收益 |
| | | */ |
| | | @Scheduled(cron = "0 0/1 * * * ? ") |
| | | public void endOnHookPlan(){ |
| | | Log.info("挂机结束时间到了"); |
| | | DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.END_TIME.getType(), DataDictionaryEnum.END_TIME.getCode()); |
| | | DateTime date = DateUtil.date(); |
| | | DateTime endTime = DateUtil.parseTimeToday(endTimeDic.getValue()); |
| | | |
| | | //系统开关 |
| | | DataDictionaryCustom onOff = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.ON_OFF.getType(), DataDictionaryEnum.ON_OFF.getCode()); |
| | | String onOffStr = onOff.getValue() == null ? "OFF":onOff.getValue(); |
| | | if(DateUtil.compare(date,endTime)>=0 || "ON".equals(onOffStr)){ |
| | | igtOnHookPlanOrderDao.updatePlanOrder(); |
| | | } |
| | | } |
| | | |
| | | // @Scheduled(cron = "0/5 * * * * ? ") |
| | | @Scheduled(cron = "0 0/1 * * * ? ") |
| | | public void updatePlanOrder(){ |
| | | Log.info("开始更新挂机主表状态"); |
| | | List<IgtOnHookPlanOrder> igtOnHookPlanOrders = igtOnHookPlanOrderDao.selectByState(3); |
| | | if(CollUtil.isNotEmpty(igtOnHookPlanOrders)){ |
| | | // List<Long> ids = igtOnHookPlanOrderDao.selectIdsByState(3); |
| | | // //更新状态避免重复查询 |
| | | // igtOnHookPlanOrderDao.updateByIds(ids); |
| | | for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){ |
| | | Long memberId = igtOnHookPlanOrder.getMemberId(); |
| | | BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); |
| | | |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | //避免重复 |
| | | QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId()); |
| | | List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper); |
| | | if(CollUtil.isNotEmpty(dappOnHookDones)){ |
| | | continue; |
| | | } |
| | | //生成记录 |
| | | DappOnHookDone dappOnHookDone = new DappOnHookDone(dappMemberEntity.getId(), igtOnHookPlanOrder.getId()); |
| | | dappOnHookDoneDao.insert(dappOnHookDone); |
| | | //获取收益率 |
| | | DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity()); |
| | | String identityDicValue = identityDic.getValue(); |
| | | JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue); |
| | | BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString()) |
| | | .multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN); |
| | | //获取收益 |
| | | BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN); |
| | | |
| | | String refererIds = dappMemberEntity.getRefererIds(); |
| | | List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true); |
| | | //生成流水佣金和盈利分成和流水记录,返回剩余盈利 |
| | | BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId()); |
| | | //平台分成,返回剩余盈利 |
| | | BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,totalProfit,igtOnHookPlanOrder.getId()); |
| | | totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal); |
| | | |
| | | igtOnHookPlanOrder.setState(2); |
| | | //一次挂机剩余的全部金额 |
| | | BigDecimal totalMoney = totalProfit.add(planAmount); |
| | | |
| | | igtOnHookPlanOrder.setProfit(totalProfit); |
| | | igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); |
| | | dappMemberEntity.setIsOnHook(3); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney); |
| | | |
| | | BigDecimal add = availableAmount.add(totalMoney); |
| | | BigDecimal subtract = add.subtract(totalProfit); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5,igtOnHookPlanOrder.getId()); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); |
| | | usdtUpdateProducer.sendOnHookEnd(igtOnHookPlanOrder.getId()); |
| | | } |
| | | } |
| | | |
| | |
| | | Log.info("更新用户代理等级"); |
| | | DateTime date = DateUtil.date(); |
| | | //查询账户总金额大于51的有效用户 |
| | | List<DappMemberEntity> dappMemberEntities = dappWalletCoinDao.selectTotalAmount(); |
| | | List<DappMemberEntity> dappMemberEntities = dappWalletCoinDao.selectByIdentity(); |
| | | // List<DappMemberEntity> dappMemberEntities = dappWalletCoinDao.selectTotalAmount(); |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | //没有账户金额大于51,则全部为会员 |
| | | dappMemberDao.updateIdentity(); |
| | | }else{ |
| | | List<DappMemberEntity> LEVEL_IB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_MB.getCode(), DataDictionaryEnum.LEVEL_IB.getCode()); |
| | | List<DappMemberEntity> LEVEL_FIB = getMemberLevelList(LEVEL_IB, DataDictionaryEnum.LEVEL_IB.getCode(), DataDictionaryEnum.LEVEL_FIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_CIB = getMemberLevelList(LEVEL_FIB, DataDictionaryEnum.LEVEL_FIB.getCode(), DataDictionaryEnum.LEVEL_CIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_AIB = getMemberLevelList(LEVEL_CIB, DataDictionaryEnum.LEVEL_CIB.getCode(), DataDictionaryEnum.LEVEL_AIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_GIB = getMemberLevelList(LEVEL_AIB, DataDictionaryEnum.LEVEL_AIB.getCode(), DataDictionaryEnum.LEVEL_GIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_BP = getMemberLevelList(LEVEL_GIB, DataDictionaryEnum.LEVEL_GIB.getCode(), DataDictionaryEnum.LEVEL_BP.getCode()); |
| | | List<DappMemberEntity> LEVEL_SP = getMemberLevelList(LEVEL_BP, DataDictionaryEnum.LEVEL_BP.getCode(), DataDictionaryEnum.LEVEL_SP.getCode()); |
| | | List<DappMemberEntity> LEVEL_GP = getMemberLevelList(LEVEL_SP, DataDictionaryEnum.LEVEL_SP.getCode(), DataDictionaryEnum.LEVEL_GP.getCode()); |
| | | List<DappMemberEntity> LEVEL_FIB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_IB.getCode(), DataDictionaryEnum.LEVEL_FIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_CIB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_FIB.getCode(), DataDictionaryEnum.LEVEL_CIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_AIB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_CIB.getCode(), DataDictionaryEnum.LEVEL_AIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_GIB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_AIB.getCode(), DataDictionaryEnum.LEVEL_GIB.getCode()); |
| | | List<DappMemberEntity> LEVEL_BP = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_GIB.getCode(), DataDictionaryEnum.LEVEL_BP.getCode()); |
| | | List<DappMemberEntity> LEVEL_SP = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_BP.getCode(), DataDictionaryEnum.LEVEL_SP.getCode()); |
| | | List<DappMemberEntity> LEVEL_GP = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_SP.getCode(), DataDictionaryEnum.LEVEL_GP.getCode()); |
| | | |
| | | //会员升级-只要下级存在某个等级,在这条线都直接升级为该等级 |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_IB.getCode(),LEVEL_IB); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_FIB.getCode(),LEVEL_FIB); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_CIB.getCode(),LEVEL_CIB); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_AIB.getCode(),LEVEL_AIB); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_GIB.getCode(),LEVEL_GIB); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_BP.getCode(),LEVEL_BP); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_SP.getCode(),LEVEL_SP); |
| | | updateMemberLevelUp(DataDictionaryEnum.LEVEL_GP.getCode(),LEVEL_GP); |
| | | } |
| | | } |
| | | |
| | | private void updateMemberLevelUp(String code,List<DappMemberEntity> dappMemberEntities){ |
| | | if(CollUtil.isNotEmpty(dappMemberEntities)){ |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | String refererIds = dappMemberEntity.getRefererIds(); |
| | | if(StrUtil.isNotEmpty(refererIds)){ |
| | | List<String> strings = StrUtil.splitTrim(refererIds, ","); |
| | | for(String inviteId : strings){ |
| | | DappMemberEntity memberEntity = dappMemberDao.selectMemberInfoByInviteId(inviteId); |
| | | if(ObjectUtil.isNotEmpty(memberEntity)){ |
| | | memberEntity.setIdentity(code); |
| | | dappMemberDao.updateById(memberEntity); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private List<DappMemberEntity> getMemberLevelList(List<DappMemberEntity> dappMemberEntities,String identity,String identityNext){ |
| | | List<DappMemberEntity> dappMemberEntitiesNext = new ArrayList<>(); |
| | | if(CollUtil.isNotEmpty(dappMemberEntities)){ |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | continue; |
| | | } |
| | | Long memberEntityId = dappMemberEntity.getId(); |
| | | String refererId = dappMemberEntity.getRefererId(); |
| | | String inviteId = dappMemberEntity.getInviteId(); |
| | | //下级是否存在三个账户总金额大于51的会员,并且代理等级为identity |
| | | List<DappMemberEntity> levelMbMembers = dappMemberDao.selectTotalAmountByRefererIdAndIdentity(inviteId,identity); |
| | | if(CollUtil.isNotEmpty(levelMbMembers) && 3 <= levelMbMembers.size()){ |
| | | //是否存在三条以上的推广线路,存在才能升级,不满足则 |
| | | List<DappMemberEntity> levelMbMembers = dappMemberDao.selectTotalMemberByRefererIdAndIdentity(inviteId); |
| | | if(3 > levelMbMembers.size()){ |
| | | // dappMemberEntity.setIdentity(DataDictionaryEnum.LEVEL_MB.getCode()); |
| | | // dappMemberDao.updateById(dappMemberEntity); |
| | | dappMemberDao.updateIdentityByMemberId(DataDictionaryEnum.LEVEL_MB.getCode(),memberEntityId); |
| | | continue; |
| | | } |
| | | int identityDown = 0; |
| | | for(DappMemberEntity dappMemberDown : levelMbMembers){ |
| | | //下级是否存在账户总金额大于51的会员,并且代理等级为identity |
| | | List<DappMemberEntity> levelMbMembersDown = dappMemberDao.selectTotalAmountByRefererIdAndIdentity(dappMemberDown.getInviteId(),identity); |
| | | if(CollUtil.isNotEmpty(levelMbMembersDown)){ |
| | | identityDown = identityDown + 1; |
| | | } |
| | | |
| | | } |
| | | if(identityDown >= 3){ |
| | | //设置identityNext级别 |
| | | dappMemberDao.updateIdentityByMemberId(identityNext,memberEntityId); |
| | | //获取他的上级会员信息 |
| | | DappMemberEntity dappMemberEntityNext = dappMemberDao.selectMemberInfoByInviteId(refererId); |
| | | dappMemberEntitiesNext.add(dappMemberEntityNext); |
| | | } |
| | | } |
| | | } |