From 4957e91b9cbd769a95872329d5fd628c211d5655 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 03 Nov 2022 17:24:50 +0800
Subject: [PATCH] 20221021

---
 src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java                             |  101 +++++++++++++-----------
 src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java                         |   18 ++++
 src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java            |   11 ++
 src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java          |    2 
 src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java |   60 +++++++++++++++
 src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java            |    9 ++
 6 files changed, 154 insertions(+), 47 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java b/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
index 1aca6b1..51d8c56 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
@@ -26,4 +26,6 @@
     FebsResponse awardInfo();
 
     void updatePlanOrderItem();
+
+    void endOnHookMessage(Long orderId);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
index 003aaee..8ebb07e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
+++ b/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());
diff --git a/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java b/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
index b86b8c1..b5af876 100644
--- a/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
+++ b/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);
             }
         }
 
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
index bdaf0c5..8531e09 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
+++ b/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 ===
+
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
index aef580f..967c75f 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
+++ b/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);
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
index a256eda..ad6292a 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
+++ b/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);

--
Gitblit v1.9.1