KKSU
2024-06-13 b60666a3fe9822277efd717380e619f08ac3ad9f
星级矩阵
10 files modified
159 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java 3 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java 37 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/vo/MemberNodeVo.java 18 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java 62 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java 5 ●●●●● patch | view | raw | blame | history
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);
}
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());
                    //发送节点投资
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);
        }
        MemberNodeVo memberNodeVo = new MemberNodeVo();
        memberNodeVo.setLeftNode(getInviteId(dbMemberNode.getLeftNode()));
        memberNodeVo.setRightNode(getInviteId(dbMemberNode.getRightNode()));
        return null;
    public MemberNodeVo buildTeamMatrix(DbMemberNode dbMemberNode) {
        Long id = dbMemberNode.getId();
        MemberNodeVo memberNodeVo = new MemberNodeVo();
        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());
        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);
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<>();
}
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);
//        }
//    }
}
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";
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),
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 ===
}
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);
    }
}
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);
    }
}