src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
@@ -26,4 +26,6 @@ FebsResponse awardInfo(); void updatePlanOrderItem(); void endOnHookMessage(Long orderId); } src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
@@ -444,6 +444,66 @@ } } @Override public void endOnHookMessage(Long orderId) { IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId); if(ObjectUtil.isEmpty(igtOnHookPlanOrder)){ return; } Long memberId = igtOnHookPlanOrder.getMemberId(); BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); if(ObjectUtil.isEmpty(dappMemberEntity)){ return; } //避免重复 QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId()); List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper); if(CollUtil.isNotEmpty(dappOnHookDones)){ return; } //生成记录 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); } private String getProfitCase(String identity,BigDecimal balance){ //匹配会员等级获取对应的收益率 List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.LEVEL_MB.getType()); src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
@@ -6,6 +6,7 @@ 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; @@ -23,6 +24,7 @@ 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; @@ -277,6 +279,9 @@ } @Resource private UsdtUpdateProducer usdtUpdateProducer; // @Scheduled(cron = "0/5 * * * * ? ") @Scheduled(cron = "0 0/1 * * * ? ") public void updatePlanOrder(){ @@ -287,54 +292,56 @@ // //更新状态避免重复查询 // igtOnHookPlanOrderDao.updateByIds(ids); for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){ Long memberId = igtOnHookPlanOrder.getMemberId(); BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); usdtUpdateProducer.sendOnHookEnd(igtOnHookPlanOrder.getId()); 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); // 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/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
@@ -508,4 +508,22 @@ return BindingBuilder.bind(queueWholeBomb()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_WHOLE_BOMB); } // === 更新用户挂机 start === public static final String END_ON_HOOK_EXCHANGE = "exchange_end_on_hook"; public static final String END_ON_HOOK_QUEUE = "queue_end_on_hook"; public static final String END_ON_HOOK_ROUTE_KEY = "route_key_end_on_hook"; @Bean public Queue endOnHookQueue() { // 定义一个名称为QUEUE_A,持久化的队列 return new Queue(END_ON_HOOK_QUEUE, true); } public DirectExchange endOnHookExchange() { return new DirectExchange(END_ON_HOOK_EXCHANGE); } @Bean public Binding endOnHookBind() { return BindingBuilder.bind(endOnHookQueue()).to(endOnHookExchange()).with(RabbitMqConfig.END_ON_HOOK_ROUTE_KEY); } // === 更新用户挂机 end === } src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
@@ -5,6 +5,7 @@ import cc.mrbird.febs.dapp.chain.TrxUsdtUpdateService; import cc.mrbird.febs.dapp.chain.UsdtErc20UpdateService; import cc.mrbird.febs.dapp.chain.entity.EthUsdtChargeDto; import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService; import cc.mrbird.febs.job.BlockCoinUpdateJob; import cc.mrbird.febs.rabbit.RabbitMqConfig; import cn.hutool.core.util.StrUtil; @@ -34,8 +35,18 @@ private BlockCoinService blockCoinService; @Resource private ApiIgtOnHookPlanService apiIgtOnHookPlanService; @Resource TrxUsdtUpdateService trxUsdtUpdateService; @RabbitListener(queues = RabbitMqConfig.END_ON_HOOK_QUEUE) public void endOnHook(Long orderId) { log.info("处理用户结束挂机的消息:{}#", orderId); apiIgtOnHookPlanService.endOnHookMessage(orderId); } @RabbitListener(queues = RabbitMqConfig.QUEUE_USDT_UPDATE) public void doSomething(String content) { log.info("#USDT同步---->{}#", content); src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs.rabbit.producer; import cc.mrbird.febs.rabbit.QueueEnum; import cc.mrbird.febs.rabbit.RabbitMqConfig; import cn.hutool.core.util.IdUtil; import lombok.extern.slf4j.Slf4j; @@ -7,6 +8,8 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.UUID; /** * @author wzy @@ -24,6 +27,12 @@ rabbitTemplate.setConfirmCallback(this); } public void sendOnHookEnd(Long orderId) { log.info("发送用户结束挂机的消息:{}", orderId); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(RabbitMqConfig.END_ON_HOOK_EXCHANGE, RabbitMqConfig.END_ON_HOOK_ROUTE_KEY, orderId, correlationData); } public void sendMsg(String content) { CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID()); rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_USDT_UPDATE, RabbitMqConfig.ROUTING_KEY_USDT_UPDATE, content, correlationData);