From b60666a3fe9822277efd717380e619f08ac3ad9f Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 13 Jun 2024 11:42:23 +0800
Subject: [PATCH] 星级矩阵

---
 src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java          |    3 
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java  |    5 +
 src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java           |    6 ++
 src/main/java/cc/mrbird/febs/dapp/vo/MemberNodeVo.java                    |   18 +++++-
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |   37 +++++++++--
 src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java                   |    2 
 src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java                        |    2 
 src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java           |    5 +
 src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java                      |   62 ++++++++------------
 src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java              |   19 ++++++
 10 files changed, 109 insertions(+), 50 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
index c5f03ea..53a780d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -7,6 +7,7 @@
 import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
 import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
 import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
+import cc.mrbird.febs.dapp.vo.MemberNodeVo;
 import cc.mrbird.febs.dapp.vo.WalletInfoVo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -49,5 +50,5 @@
 
     FebsResponse nodeList();
 
-    FebsResponse memberNode(MemberNodeDto memberNodeDto);
+    MemberNodeVo memberNode(MemberNodeDto memberNodeDto);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
index f3bd471..1e180dd 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -209,8 +209,9 @@
                         DappFundFlowEntity fundFlowPerk = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null);
                         dappFundFlowDao.insert(fundFlowPerk);
                     }
-                    //生成业绩数
-                    chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId());
+                    //复投
+//                    chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId());
+                    chainProducer.sendNodeMsg(fundFlow.getMemberId());
                     //发送推荐规则奖励
                     chainProducer.sendInvitePerkMsg(fundFlow.getId());
                     //发送节点投资
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 696d9db..c03d789 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
@@ -164,7 +164,7 @@
             DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount().negate(), 1, 2, transferDto.getFee(), transferDto.getTxHash());
             dappFundFlowDao.insert(fundFlow);
 
-            chainProducer.sendAchieveTreeMsg(member.getId());
+//            chainProducer.sendAchieveTreeMsg(member.getId());
         } else {
             int type = 1;
             // 1-认购 2-充值tfc
@@ -467,7 +467,7 @@
     }
 
     @Override
-    public FebsResponse memberNode(MemberNodeDto memberNodeDto) {
+    public MemberNodeVo memberNode(MemberNodeDto memberNodeDto) {
         DappMemberEntity member = LoginUserUtil.getAppUser();
         Integer type = memberNodeDto.getType();
 
@@ -479,18 +479,39 @@
         if(ObjectUtil.isEmpty(dbMemberNode)){
             return null;
         }
-        if(ObjectUtil.isNotEmpty(dbMemberNode.getLeftNode())){
 
-        }
+        return buildTeamMatrix(dbMemberNode);
+    }
+
+    public MemberNodeVo buildTeamMatrix(DbMemberNode dbMemberNode) {
+        Long id = dbMemberNode.getId();
+
         MemberNodeVo memberNodeVo = new MemberNodeVo();
-        memberNodeVo.setLeftNode(getInviteId(dbMemberNode.getLeftNode()));
-        memberNodeVo.setRightNode(getInviteId(dbMemberNode.getRightNode()));
+        memberNodeVo.setInviteId(getInviteId(id));
+        memberNodeVo.setId(id);
+        memberNodeVo.setParentNode(ObjectUtil.isEmpty(dbMemberNode.getParentNode()) ? 0L : dbMemberNode.getParentNode());
+        memberNodeVo.setLeftNode(ObjectUtil.isEmpty(dbMemberNode.getLeftNode()) ? 0L : dbMemberNode.getLeftNode());
+        memberNodeVo.setRightNode(ObjectUtil.isEmpty(dbMemberNode.getRightNode()) ? 0L : dbMemberNode.getRightNode());
+        memberNodeVo.setLeftRight(ObjectUtil.isEmpty(dbMemberNode.getLeftRight()) ? 0 : dbMemberNode.getLeftRight());
 
-        return null;
+        QueryWrapper<DbMemberNode> childQuery = new QueryWrapper<>();
+        childQuery.eq("parent_node",id);
+        childQuery.eq("type", dbMemberNode.getType());
+        childQuery.eq("work_state", DbMemberNode.STATE_ONE);
+        List<DbMemberNode> childrenNode = dbMemberNodeMapper.selectList(childQuery);
+        if(CollUtil.isEmpty(childrenNode)){
+            return memberNodeVo;
+        }
+
+        List<MemberNodeVo> list = new ArrayList<>();
+        for (DbMemberNode childNode : childrenNode) {
+            list.add(buildTeamMatrix(childNode));
+        }
+        memberNodeVo.setChildren(list);
+        return memberNodeVo;
     }
 
     public String getInviteId(Long memberNodeId){
-        MemberNodeVo memberNodeVo = new MemberNodeVo();
         DbMemberNode dbMemberNode = dbMemberNodeMapper.selectById(memberNodeId);
         Long memberId = dbMemberNode.getMemberId();
         DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/MemberNodeVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/MemberNodeVo.java
index c581b90..de69638 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/MemberNodeVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/MemberNodeVo.java
@@ -11,12 +11,24 @@
 @ApiModel(value = "MemberNodeVo", description = "星团")
 public class MemberNodeVo {
 
+
+    @ApiModelProperty(value = "邀请码")
     private String inviteId;
+    @ApiModelProperty(value = "ID")
+    private Long id;
 
-    private String leftNode;
+    @ApiModelProperty(value = "父节点ID")
+    private Long parentNode;//父节点memberID
 
-    private String rightNode;
+    @ApiModelProperty(value = "左节点ID")
+    private Long leftNode;
 
-    @ApiModelProperty(value = "子节点")
+    @ApiModelProperty(value = "右节点ID")
+    private Long rightNode;
+
+    @ApiModelProperty(value = "左右节点 1-左 2-右")
+    private Integer leftRight;
+
+    @ApiModelProperty(value = "节点")
     private List<MemberNodeVo> children = new ArrayList<>();
 }
diff --git a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
index c4ee5f2..86b436c 100644
--- a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
+++ b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
@@ -1,18 +1,8 @@
 package cc.mrbird.febs.job;
 
-import cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity;
-import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.mapper.DappAchieveTreeDao;
-import cc.mrbird.febs.dapp.mapper.DappMemberDao;
-import cc.mrbird.febs.tree.MatrixTree;
-import cc.mrbird.febs.tree.MemberNode;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.util.List;
 
 /**
  * @author wzy
@@ -23,30 +13,30 @@
 @ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
 public class MatrixTreeInit {
 
-    @Autowired
-    private DappAchieveTreeDao dappAchieveTreeDao;
-
-    @Autowired
-    private DappMemberDao dappMemberDao;
-
-    @PostConstruct
-    public void init() {
-//        List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeList();
-        List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeListV2();
-
-        MatrixTree instance = MatrixTree.getInstance();
-        for (DappAchieveTreeEntity treeNode : tree) {
-            Long memberId = treeNode.getMemberId();
-            DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
-
-
-            MemberNode node = new MemberNode();
-            node.setAddress(dappMemberEntity.getAddress());
-            node.setInviteId(dappMemberEntity.getInviteId());
-            node.setRefererId(dappMemberEntity.getRefererId());
-            node.setMemberId(treeNode.getMemberId());
-            node.setFundId(treeNode.getFundId());
-            instance.addNode(node);
-        }
-    }
+//    @Autowired
+//    private DappAchieveTreeDao dappAchieveTreeDao;
+//
+//    @Autowired
+//    private DappMemberDao dappMemberDao;
+//
+//    @PostConstruct
+//    public void init() {
+////        List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeList();
+//        List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeListV2();
+//
+//        MatrixTree instance = MatrixTree.getInstance();
+//        for (DappAchieveTreeEntity treeNode : tree) {
+//            Long memberId = treeNode.getMemberId();
+//            DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+//
+//
+//            MemberNode node = new MemberNode();
+//            node.setAddress(dappMemberEntity.getAddress());
+//            node.setInviteId(dappMemberEntity.getInviteId());
+//            node.setRefererId(dappMemberEntity.getRefererId());
+//            node.setMemberId(treeNode.getMemberId());
+//            node.setFundId(treeNode.getFundId());
+//            instance.addNode(node);
+//        }
+//    }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
index 99626f0..857046c 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
@@ -6,6 +6,8 @@
  **/
 public class QueueConstants {
     //发送推荐规则奖励
+    public static final String TFC_NODE_AGAIN = "queue_tfc_node_again";
+    //发送推荐规则奖励
     public static final String TFC_NODE_PERK_QUEEN = "queue_tfc_node_perk";
     //发送推荐规则奖励
     public static final String TFC_INVITE_PERK_QUEEN = "queue_tfc_invite_perk";
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
index b0cb0a8..3cf556d 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
@@ -6,6 +6,8 @@
 public enum QueueEnum {
 
     //发送推荐规则奖励
+    TFC_NODE_AGAIN("exchange_tfc_node_again", "route_key_tfc_node_again", QueueConstants.TFC_NODE_AGAIN),
+    //发送推荐规则奖励
     TFC_NODE_PERK("exchange_tfc_node_perk", "route_key_tfc_node_perk", QueueConstants.TFC_NODE_PERK_QUEEN),
     //发送推荐规则奖励
     TFC_INVITE_PERK("exchange_tfc_invite_perk", "route_key_tfc_invite_perk", QueueConstants.TFC_INVITE_PERK_QUEEN),
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
index 8b6fea9..898fadf 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -139,4 +139,23 @@
         return BindingBuilder.bind(nodePerkQueue()).to(nodePerkExchange()).with(QueueEnum.TFC_NODE_PERK.getRoute());
     }
     // === 发送节点奖励 end ===
+
+
+
+    // === 发送复投 start ===
+    @Bean
+    public DirectExchange nodeAgainExchange() {
+        return new DirectExchange(QueueEnum.TFC_NODE_AGAIN.getExchange());
+    }
+
+    @Bean
+    public Queue nodeAgainQueue() {
+        return new Queue(QueueEnum.TFC_NODE_AGAIN.getQueue());
+    }
+
+    @Bean
+    public Binding nodeAgainBind() {
+        return BindingBuilder.bind(nodeAgainQueue()).to(nodeAgainExchange()).with(QueueEnum.TFC_NODE_AGAIN.getRoute());
+    }
+    // === 发送复投 end ===
 }
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 5d81562..1602b8e 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -56,4 +56,10 @@
         log.info("消费节点投资,流水ID:{}", id);
         dappSystemService.nodePerkMsg(id);
     }
+
+    @RabbitListener(queues = QueueConstants.TFC_NODE_AGAIN)
+    public void nodeMsg(Long id) {
+        log.info("复投:{}", id);
+        dappSystemService.achieveTreeV2(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 43167f1..17fe0fa 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -76,4 +76,9 @@
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
         rabbitTemplate.convertAndSend(QueueEnum.TFC_NODE_PERK.getExchange(), QueueEnum.TFC_NODE_PERK.getRoute(), id, correlationData);
     }
+    public void sendNodeMsg(Long id) {
+        log.info("发送复投:{}", id);
+        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+        rabbitTemplate.convertAndSend(QueueEnum.TFC_NODE_AGAIN.getExchange(), QueueEnum.TFC_NODE_AGAIN.getRoute(), id, correlationData);
+    }
 }

--
Gitblit v1.9.1