From cf7f5d0ca619660bbce938204755a565a776b53f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 30 Nov 2022 18:20:25 +0800
Subject: [PATCH] 20221130

---
 src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java          |    2 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |   26 +++++++-
 src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java           |   48 ++++++++-------
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |   14 +++-
 src/test/java/cc/mrbird/febs/TreeTest.java                                |   14 +++-
 src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java           |    4 
 src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java            |    4 +
 src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java         |    4 +
 src/main/resources/mapper/dapp/DappSystemProfitDao.xml                    |   12 ++++
 9 files changed, 89 insertions(+), 39 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java
index d885a7a..863bca6 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java
@@ -17,6 +17,10 @@
     private Integer state;
     public static final int STATE_IN = 1;
     public static final int STATE_OUT = 2;
+    //层级奖励是否产生 1:否 2:是
+    private Integer levelProfit;
+    public static final int ENUM_NO = 1;
+    public static final int ENUM_YES = 2;
 
     public DappSystemProfit(Long memberId, BigDecimal amount) {
         this.memberId = memberId;
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java
index 2d89543..f1f88fe 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java
@@ -39,7 +39,7 @@
     public BigDecimal getProfit(int memberCnt) {
         for (LevelProfitEnum value : LevelProfitEnum.values()) {
             if (value.memberCnt == memberCnt) {
-                return new BigDecimal(value.profit).multiply(new BigDecimal(0.01)).setScale(BigDecimal.ROUND_DOWN, 2);
+                return new BigDecimal(value.profit).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN);
             }
         }
         return BigDecimal.ZERO;
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java
index f3f65c8..2f5faeb 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java
@@ -9,4 +9,8 @@
     DappSystemProfit selectSystemProfitByState(@Param("state") int stateOut);
 
     DappSystemProfit selectByIdForUpdate(@Param("id") Long id,@Param("state") int stateOut);
+
+    void updateLevelProfitById(@Param("levelProfit") int levelProfit,@Param("id")Long id);
+
+    void updateStateById(@Param("state") int stateOut,@Param("id")Long id);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
index 0cd20b8..c5e7d8f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -295,6 +295,11 @@
         if(ObjectUtil.isEmpty(dappSystemProfit)){
             return;
         }
+        Integer levelProfitState = dappSystemProfit.getLevelProfit();
+
+        if(DappSystemProfit.ENUM_YES == levelProfitState){
+            return;
+        }
         Long memberId = dappSystemProfit.getMemberId();
         //获取用户的上级用户信息
         DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
@@ -318,7 +323,15 @@
         //返回十层
         List<String> refererIdList = StrUtil.split(refererIds, ',');
         //i:计数层数,同时i也为对应层数应推广的人数,当达到对应的直推人数时,才能获取对应层级奖励
-        for(int i = 0;i < 10; i++){
+        if(CollUtil.isEmpty(refererIdList)){
+            return;
+        }
+        //层级奖励最大循环次数
+        int maxLevel = 10;
+        if(maxLevel > refererIdList.size()){
+            maxLevel = refererIdList.size();
+        }
+        for(int i = 0;i < maxLevel; i++){
             if(systemProfitTotal.compareTo(levelProfitTotal) < 0){
                 String inviteId = refererIdList.get(i);
                 //获取每层用户的直推人数,判断能否获得这个层级的层级奖励
@@ -331,7 +344,7 @@
                     continue;
                 }
                 //获取对应层级奖励
-                BigDecimal profit = LevelProfitEnum.YI.getProfit(i);
+                BigDecimal profit = LevelProfitEnum.YI.getProfit(i+1);
                 String accountType = refererMember.getAccountType();
                 //根据会员的等级类型,获取对应的百分比收益
                 DataDictionaryCustom memberLevelSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("MEMBER_LEVEL", accountType);
@@ -354,6 +367,8 @@
             //发送转币消息
             chainProducer.sendBnbTransferMsg(fundFlow.getId());
         }
+
+        dappSystemProfitDao.updateLevelProfitById(DappSystemProfit.ENUM_YES,dappSystemProfit.getId());
     }
 
     @Override
@@ -402,8 +417,7 @@
         redisUtils.set(redisKey,realCount,0L);
 
         DappSystemProfit dappSystemProfitNow = dappSystemProfitDao.selectByIdForUpdate(dappSystemProfit.getId(),DappSystemProfit.STATE_IN);
-        dappSystemProfitNow.setState(DappSystemProfit.STATE_OUT);
-        dappSystemProfitDao.updateById(dappSystemProfitNow);
+        dappSystemProfitDao.updateStateById(DappSystemProfit.STATE_OUT,dappSystemProfitNow.getId());
 
         //todo 直接拿走0.95ge
         DappFundFlowEntity fundFlowOut = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), new BigDecimal(0.95), 7, 1, BigDecimal.ZERO, null,dappSystemProfitNow.getId());
@@ -424,6 +438,7 @@
         transferDto.setBuyType(2);
         transferDto.setId(fundFlow.getId());
         transferDto.setFlag("success");
+        transferDto.setAmount(investAmount);
         transferDto.setMemberId(dappSystemProfitNow.getMemberId());
         dappWalletService.transferAgain(transferDto);
     }
@@ -433,6 +448,9 @@
         log.info("{}",id);
         //获取对应的流水记录
         DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
+        if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+            return;
+        }
         if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == dappFundFlowEntity.getStatus()){
             return;
         }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index 0ec4e67..131056c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -172,17 +172,20 @@
             }
 
             if ("success".equals(transferDto.getFlag())) {
+                DappFundFlowEntity flow = dappFundFlowDao.selectById(transferDto.getId());
+                if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == flow.getStatus()){
+                    return null;
+                }
                 //插入一条会员入列记录,即加入动能队列
                 DappSystemProfit dappSystemProfit = new DappSystemProfit(member.getId(), transferDto.getAmount());
                 dappSystemProfitDao.insert(dappSystemProfit);
-                //升级成为Agent
-                dappMemberDao.updateMemberAccountType(DataDictionaryEnum.AGENT.getCode(),member.getId());
 
-                DappFundFlowEntity flow = dappFundFlowDao.selectById(transferDto.getId());
                 flow.setFromHash(transferDto.getTxHash());
                 flow.setSystemProfitId(dappSystemProfit.getId());
                 flow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
                 dappFundFlowDao.updateById(flow);
+                //升级成为Agent
+                dappMemberDao.updateMemberAccountType(DataDictionaryEnum.AGENT.getCode(),member.getId());
 
                 //直接拿走0.05个BNB放入技术方
                 DataDictionaryCustom systemProfit = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYSTEM_PROFIT.getType(), DataDictionaryEnum.SYSTEM_PROFIT.getCode());
@@ -198,7 +201,8 @@
 
                 DataDictionaryCustom directProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.DIRECT_PROFIT.getType(), DataDictionaryEnum.DIRECT_PROFIT.getCode());
                 BigDecimal directProfitStr = new BigDecimal(StrUtil.isEmpty(directProfitSet.getValue()) ? "0.3" : directProfitSet.getValue());
-                BigDecimal directProfit = (transferDto.getAmount().subtract(new BigDecimal(systemProfitStr))).multiply(directProfitStr).setScale(BigDecimal.ROUND_DOWN, 2);
+                BigDecimal subtract = transferDto.getAmount().subtract(new BigDecimal(systemProfitStr));
+                BigDecimal directProfit = subtract.multiply(directProfitStr).setScale(2,BigDecimal.ROUND_DOWN);
                 
                 DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), directProfit, 3, 1, BigDecimal.ZERO, transferDto.getTxHash(),dappSystemProfit.getId());
                 dappFundFlowDao.insert(fundFlow);
@@ -411,7 +415,7 @@
 
             DataDictionaryCustom directProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.DIRECT_PROFIT.getType(), DataDictionaryEnum.DIRECT_PROFIT.getCode());
             BigDecimal directProfitStr = new BigDecimal(StrUtil.isEmpty(directProfitSet.getValue()) ? "0.3" : directProfitSet.getValue());
-            BigDecimal directProfit = (transferDto.getAmount().subtract(new BigDecimal(systemProfitStr))).multiply(directProfitStr).setScale(BigDecimal.ROUND_DOWN, 2);
+            BigDecimal directProfit = (transferDto.getAmount().subtract(new BigDecimal(systemProfitStr))).multiply(directProfitStr).setScale(2,BigDecimal.ROUND_DOWN);
 
             DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), directProfit, 3, 1, BigDecimal.ZERO, transferDto.getTxHash(),dappSystemProfit.getId());
             dappFundFlowDao.insert(fundFlow);
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
index ad37063..1f1d768 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.rabbit.QueueConstants;
+import cn.hutool.core.date.DateUtil;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
@@ -22,34 +23,35 @@
     @Autowired
     private DappSystemService dappSystemService;
 
-    @RabbitListener(queues = QueueConstants.ACHIEVE_TREE)
-    public void achieveTree(String id) {
-        log.info("收到业绩树消息");
-        dappSystemService.achieveTree(Long.parseLong(id));
-    }
-
-    /**
-     * 生产者在tfc应用
-     * @param data
-     */
-    @RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
-    public void tfcNewPrice(String data) {
-//        dappSystemService.tfcNewPrice(data);
-    }
-
-    /**
-     * @param data
-     */
-    @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
-    public void feeDistribute(String data) {
-        dappSystemService.feeDistribute(data);
-    }
+//    @RabbitListener(queues = QueueConstants.ACHIEVE_TREE)
+//    public void achieveTree(String id) {
+//        log.info("收到业绩树消息");
+//        dappSystemService.achieveTree(Long.parseLong(id));
+//    }
+//
+//    /**
+//     * 生产者在tfc应用
+//     * @param data
+//     */
+//    @RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
+//    public void tfcNewPrice(String data) {
+////        dappSystemService.tfcNewPrice(data);
+//    }
+//
+//    /**
+//     * @param data
+//     */
+//    @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
+//    public void feeDistribute(String data) {
+//        dappSystemService.feeDistribute(data);
+//    }
 
     /**层级奖励分发消息
      * @param id
      */
     @RabbitListener(queues = QueueConstants.QUEUE_LEVEL_PROFIT)
     public void levelProfit(Long id) {
+        log.info("消费层级奖励分发消息:{}", id);
         dappSystemService.levelProfit(id);
     }
 
@@ -58,6 +60,7 @@
      */
     @RabbitListener(queues = QueueConstants.QUEUE_MEMBER_OUT)
     public void memberOut(Long id) {
+        log.info("消费计算是否有人出局:{}", id);
         dappSystemService.memberOut(id);
     }
 
@@ -66,6 +69,7 @@
      */
     @RabbitListener(queues = QueueConstants.QUEUE_BNB_TRANSFER)
     public void bnbTransfer(Long id) {
+        log.info("消费转账拨币:{}", id);
         dappSystemService.bnbTransfer(id);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
index ff8c0b4..4c55582 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -78,9 +78,9 @@
      * 计算是否有人出局分发消息
      */
     public void sendMemberOutMsg(Long id) {
-        log.info("计算是否有人出局:{}", DateUtil.now());
+        log.info("计算是否有人出局:{}", id);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.LEVEL_PROFIT.getExchange(), QueueEnum.LEVEL_PROFIT.getRoute(), id, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.MEMBER_OUT.getExchange(), QueueEnum.MEMBER_OUT.getRoute(), id, correlationData);
     }
 
     /**
diff --git a/src/main/resources/mapper/dapp/DappSystemProfitDao.xml b/src/main/resources/mapper/dapp/DappSystemProfitDao.xml
index a584bc4..9dcc9dc 100644
--- a/src/main/resources/mapper/dapp/DappSystemProfitDao.xml
+++ b/src/main/resources/mapper/dapp/DappSystemProfitDao.xml
@@ -19,4 +19,16 @@
         for update
     </select>
 
+    <update id="updateLevelProfitById">
+        update dapp_system_profit
+        set level_Profit = #{levelProfit}
+        where id = #{id}
+    </update>
+
+    <update id="updateStateById">
+        update dapp_system_profit
+        set state = #{state}
+        where id = #{id}
+    </update>
+
 </mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/TreeTest.java b/src/test/java/cc/mrbird/febs/TreeTest.java
index 54e91c9..170b7ed 100644
--- a/src/test/java/cc/mrbird/febs/TreeTest.java
+++ b/src/test/java/cc/mrbird/febs/TreeTest.java
@@ -65,7 +65,11 @@
         transferDto.setFee(BigDecimal.ZERO);
         transferDto.setType(1);
         transferDto.setBuyType(2);
-        transferDto.setMemberId(106L);
+        transferDto.setMemberId(119L);
+        Long transfer = dappWalletService.transfer(transferDto);
+        transferDto.setTxHash("ceshi"+ DateUtil.now());
+        transferDto.setId(transfer);
+        transferDto.setFlag("success");
         dappWalletService.transfer(transferDto);
     }
     @Test
@@ -74,19 +78,19 @@
         TransferDto transferDto = new TransferDto();
         transferDto.setType(1);
         transferDto.setTxHash("ceshi"+ DateUtil.now());
-        transferDto.setId(324L);
+        transferDto.setId(422L);
         transferDto.setFlag("success");
         transferDto.setBuyType(2);
         transferDto.setAmount(new BigDecimal(1.05));
         transferDto.setFee(BigDecimal.ZERO);
-        transferDto.setMemberId(106L);
+        transferDto.setMemberId(111L);
         dappWalletService.transfer(transferDto);
     }
 
     @Test
     public void resetMatrix() {
-//        dappSystemService.resetMatrix();
-//        dappAchieveMemberTreeDao.emptyTable();
+        dappSystemService.levelProfit(9L);
+        dappSystemService.memberOut(9L);
     }
 
     @Test

--
Gitblit v1.9.1