src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderDao.java
@@ -34,4 +34,6 @@ void updateByIds(List<Long> ids); IPage<DappAccountMoneyChangeEntity> findFlowListInPage(Page<DappAccountMoneyChangeEntity> page, @Param("orderId")Long id); void updatePlanOrder(); } src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
@@ -17,6 +17,7 @@ import cc.mrbird.febs.dapp.vo.ApiPlanInfoVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -137,6 +138,7 @@ public FebsResponse endPlan(Long orderId) { DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser(); Long memberId = dappMemberEntity.getId(); //判断系统是否已经结算过了 QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("order_id",orderId); List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper); @@ -148,14 +150,29 @@ igtOnHookPlanOrder.setState(2); igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); BigDecimal totalProfit = igtOnHookPlanOrder.getProfit(); // BigDecimal totalProfit = igtOnHookPlanOrder.getProfit(); BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount(); // BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount(); //更新用户表是否正在挂机状态字段为否 DappMemberEntity dappMember = dappMemberDao.selectById(memberId); dappMember.setIsOnHook(3); dappMemberDao.updateById(dappMember); //获取当前用户每分钟应该获取的收益 String identity = dappMember.getIdentity(); //当前用户的挂机收益率 BigDecimal hangingRevenue = getHangingRevenue(identity); BigDecimal multiply = hangingRevenue.multiply(planAmount); DataDictionaryCustom maxHoursDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MAX_HOURS.getType(), DataDictionaryEnum.MAX_HOURS.getCode()); //挂机总时长(分钟) BigDecimal maxHours = new BigDecimal(maxHoursDic.getValue()).multiply(new BigDecimal(60)); //得到每分钟的收益 BigDecimal minuteProfit = multiply.divide(maxHours, 4, BigDecimal.ROUND_DOWN); //获取挂机开始时间到现在的总时长(分钟数) Date startTime = igtOnHookPlanOrder.getStartTime(); long between = DateUtil.between(startTime, DateUtil.date(), DateUnit.MINUTE); //获得总收益 BigDecimal totalProfit = minuteProfit.multiply(new BigDecimal(between)); String refererIds = dappMemberEntity.getRefererIds(); List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true); @@ -164,7 +181,8 @@ //平台分成,返回剩余盈利 BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,igtOnHookPlanOrder.getProfit(),igtOnHookPlanOrder.getId()); totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal); BigDecimal totalMoney = avaAmount.add(totalProfit); // BigDecimal totalMoney = avaAmount.add(totalProfit); BigDecimal totalMoney = planAmount.add(totalProfit); DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney); @@ -172,6 +190,25 @@ dappOnHookDoneDao.insert(dappOnHookDone); return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001")); } public static void main(String[] args) { DateTime startTime = DateUtil.offsetMinute(DateUtil.date(), 10); System.out.println(startTime); System.out.println(DateUtil.date()); long between = DateUtil.between(startTime, DateUtil.date(), DateUnit.MINUTE); System.out.println(between); } private BigDecimal getHangingRevenue(String identity){ DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), identity); String dataDictionaryCustomValue = dataDictionaryCustom.getValue(); cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(dataDictionaryCustomValue); String runningCommission = jsonObject.get("hangingRevenue").toString(); return new BigDecimal(runningCommission).multiply(new BigDecimal(0.01)); } @Override @@ -474,7 +511,19 @@ 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); //获取当前用户每分钟应该获取的收益 BigDecimal multiply = hangingRevenueLevel.multiply(planAmount); DataDictionaryCustom maxHoursDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MAX_HOURS.getType(), DataDictionaryEnum.MAX_HOURS.getCode()); //挂机总时长(分钟) BigDecimal maxHours = new BigDecimal(maxHoursDic.getValue()).multiply(new BigDecimal(60)); //得到每分钟的收益 BigDecimal minuteProfit = multiply.divide(maxHours, 4, BigDecimal.ROUND_DOWN); //获取挂机开始时间到现在的总时长(分钟数) Date startTime = igtOnHookPlanOrder.getStartTime(); long between = DateUtil.between(startTime, DateUtil.date(), DateUnit.MINUTE); //获得总收益 BigDecimal totalProfit = minuteProfit.multiply(new BigDecimal(between)).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); @@ -522,14 +571,14 @@ return null; } public static void main(String[] args) { DateTime nowTime = DateUtil.parseTimeToday(DateUtil.format(DateUtil.date(),"HH:mm:ss")); System.out.println(nowTime); int maxTimes = 10; for(int i =1;i<maxTimes;){ maxTimes --; System.out.println(maxTimes); } } // public static void main(String[] args) { // // DateTime nowTime = DateUtil.parseTimeToday(DateUtil.format(DateUtil.date(),"HH:mm:ss")); // System.out.println(nowTime); // int maxTimes = 10; // for(int i =1;i<maxTimes;){ // maxTimes --; // System.out.println(maxTimes); // } // } } src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
@@ -282,66 +282,31 @@ @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.parseDate(endTimeDic.getValue()); if(DateUtil.compare(endTime,date)>=0){ // 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){ usdtUpdateProducer.sendOnHookEnd(igtOnHookPlanOrder.getId()); // 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); } } src/main/resources/application-prod.yml
@@ -2,7 +2,7 @@ datasource: dynamic: # 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗 p6spy: true p6spy: false hikari: connection-timeout: 30000 max-lifetime: 1800000 src/main/resources/mapper/dapp/IgtOnHookPlanOrderDao.xml
@@ -109,4 +109,12 @@ order by a.create_time asc </select> <update id="updatePlanOrder"> update igt_on_hook_plan_order set state = 3 where state = 1 </update> </mapper> src/test/java/cc/mrbird/febs/JunitTest.java
@@ -220,14 +220,14 @@ // @Autowired // private IgtOnHookPlanOrderDao igtOnHookPlanOrderDao; // // @Autowired // private DappWalletCoinDao dappWalletCoinDao; @Autowired private DappWalletCoinDao dappWalletCoinDao; // // @Autowired // private DappAccountMoneyChangeDao dappAccountMoneyChangeDao; // // @Autowired // private DappMemberDao dappMemberDao; @Autowired private DappMemberDao dappMemberDao; // // @Autowired // private DappOnHookAwardDao dappOnHookAwardDao; @@ -253,46 +253,46 @@ // System.out.println(active); // } // // @Test // public void testUpdateIgt(){Log.info("更新用户代理等级"); // DateTime date = DateUtil.date(); // //查询账户总金额大于51的有效用户 // 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()); // } // } // // private List<DappMemberEntity> getMemberLevelList(List<DappMemberEntity> dappMemberEntities,String identity,String identityNext){ // List<DappMemberEntity> dappMemberEntitiesNext = new ArrayList<>(); // if(CollUtil.isNotEmpty(dappMemberEntities)){ // for(DappMemberEntity dappMemberEntity : dappMemberEntities){ // 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()){ // //设置identityNext级别 // dappMemberDao.updateIdentityByMemberId(identityNext,memberEntityId); // //获取他的上级会员信息 // DappMemberEntity dappMemberEntityNext = dappMemberDao.selectMemberInfoByInviteId(refererId); // dappMemberEntitiesNext.add(dappMemberEntityNext); // } // } // } // return dappMemberEntitiesNext; // } @Test public void testUpdateIgt(){Log.info("更新用户代理等级"); DateTime date = DateUtil.date(); //查询账户总金额大于51的有效用户 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()); } } private List<DappMemberEntity> getMemberLevelList(List<DappMemberEntity> dappMemberEntities,String identity,String identityNext){ List<DappMemberEntity> dappMemberEntitiesNext = new ArrayList<>(); if(CollUtil.isNotEmpty(dappMemberEntities)){ for(DappMemberEntity dappMemberEntity : dappMemberEntities){ 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()){ //设置identityNext级别 dappMemberDao.updateIdentityByMemberId(identityNext,memberEntityId); //获取他的上级会员信息 DappMemberEntity dappMemberEntityNext = dappMemberDao.selectMemberInfoByInviteId(refererId); dappMemberEntitiesNext.add(dappMemberEntityNext); } } } return dappMemberEntitiesNext; } // // @Test // public void testProfitSharing(){