wzy
2022-08-26 293533a11236c2027241827ddff246db3e37f4c8
finish ahieveTree consumer
5 files added
3 files modified
187 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java 76 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/tree/MatrixTree.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/tree/MemberNode.java 9 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml 31 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappAchieveTreeDao.xml 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java
New file
@@ -0,0 +1,24 @@
package cc.mrbird.febs.dapp.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("dapp_achieve_member_tree")
public class DappAchieveMemberTreeEntity extends BaseEntity {
    private Long topNode;
    private Long treeNode;
    private Long parentNode;
    private Long leftNode;
    private Long rightNode;
    private Integer hasMoney;
    private Integer deep;
}
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java
New file
@@ -0,0 +1,20 @@
package cc.mrbird.febs.dapp.mapper;
import cc.mrbird.febs.dapp.entity.DappAchieveMemberTreeEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface DappAchieveMemberTreeDao extends BaseMapper<DappAchieveMemberTreeEntity> {
    List<DappAchieveMemberTreeEntity> selectNotBottomNodeInMatrix(Long memberId);
    List<DappAchieveMemberTreeEntity> selectMatrixTreeByTopNode(Long memberId);
    DappAchieveMemberTreeEntity selectNodeByDeep(@Param("memberId") Long memberId, @Param("deep") Integer deep);
    int resetMatrixTree(Long memberId);
    int reentryMoney(Long memberId);
}
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java
New file
@@ -0,0 +1,10 @@
package cc.mrbird.febs.dapp.mapper;
import cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
public interface DappAchieveTreeDao extends BaseMapper<DappAchieveTreeEntity> {
    DappAchieveTreeEntity selectByMidNode(@Param("memberId") Long memberId);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -16,6 +16,8 @@
import cc.mrbird.febs.dapp.vo.SlipSettingVo;
import cc.mrbird.febs.job.SystemTradeJob;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cc.mrbird.febs.tree.MatrixTree;
import cc.mrbird.febs.tree.MemberNode;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
@@ -61,6 +63,9 @@
    private final DappSymbolDailyPriceMapper dappSymbolDailyPriceMapper;
    private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper;
    private final DappWalletCoinDao dappWalletCoinDao;
    private final DappAchieveTreeDao dappAchieveTreeDao;
    private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
    @Override
@@ -727,7 +732,78 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public synchronized void achieveTree(Long memberId) {
        DappMemberEntity member = dappMemberDao.selectById(memberId);
        // 在大树中,插入当前节点
        DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity();
        achieveTree.setMidNode(memberId);
        achieveTree.setValidState(1);
        dappAchieveTreeDao.insert(achieveTree);
        // 在内存树(大树)中插入当前节点,并返回父节点
        MemberNode node = new MemberNode(member.getId(), member.getAddress(), member.getInviteId(), member.getRefererId());
        MatrixTree tree = MatrixTree.getInstance();
        MemberNode parentNode = tree.addNode(node);
        // 创建该节点的矩阵
        DappAchieveMemberTreeEntity achieveMemberTree = new DappAchieveMemberTreeEntity();
        achieveMemberTree.setTreeNode(memberId);
        achieveMemberTree.setTopNode(memberId);
        achieveMemberTree.setDeep(1);
        achieveMemberTree.setHasMoney(1);
        achieveMemberTree.setParentNode(parentNode.getMemberId());
        dappAchieveMemberTreeDao.insert(achieveMemberTree);
        // 修改父节点在数据库中的左/右节点数据
        DappAchieveTreeEntity treeMidNode = dappAchieveTreeDao.selectByMidNode(parentNode.getMemberId());
        boolean isLeft = false;
        if (parentNode.getLeft() != null && memberId.equals(parentNode.getLeft().getMemberId())) {
            treeMidNode.setLeftNode(memberId);
            isLeft = true;
        } else {
            treeMidNode.setRightNode(memberId);
        }
        dappAchieveTreeDao.updateById(treeMidNode);
        // 更新矩阵中的数据
        List<DappAchieveMemberTreeEntity> matrixNodes = dappAchieveMemberTreeDao.selectNotBottomNodeInMatrix(parentNode.getMemberId());
        for (DappAchieveMemberTreeEntity matrixNode : matrixNodes) {
            if (isLeft) {
                matrixNode.setLeftNode(memberId);
            } else {
                matrixNode.setRightNode(memberId);
            }
            dappAchieveMemberTreeDao.updateById(matrixNode);
            DappAchieveMemberTreeEntity newMatrixNode = new DappAchieveMemberTreeEntity();
            newMatrixNode.setTreeNode(memberId);
            newMatrixNode.setTopNode(matrixNode.getTopNode());
            newMatrixNode.setParentNode(parentNode.getMemberId());
            newMatrixNode.setHasMoney(1);
            newMatrixNode.setDeep(matrixNode.getDeep() + 1);
            dappAchieveMemberTreeDao.insert(newMatrixNode);
            if (matrixNode.getDeep() == 2) {
                finishMatrixTree(matrixNode.getTopNode());
            }
        }
    }
    // 完成矩阵树,并重置矩阵且重入
    public void finishMatrixTree(Long memberId) {
        List<DappAchieveMemberTreeEntity> matrixTree = dappAchieveMemberTreeDao.selectMatrixTreeByTopNode(memberId);
        // 如果达到标准,则重置该矩阵树
        if (matrixTree.size() == 7) {
            dappAchieveMemberTreeDao.resetMatrixTree(memberId);
            dappAchieveMemberTreeDao.reentryMoney(memberId);
            DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3);
            if (bottomNode != null) {
                finishMatrixTree(bottomNode.getTopNode());
            }
        }
    }
}
src/main/java/cc/mrbird/febs/tree/MatrixTree.java
@@ -166,4 +166,12 @@
        return getNode(node.getRight(), param);
    }
    /**
     * 移除树中节点
     *
     * @param param
     */
    public void remove(Object param) {
    }
}
src/main/java/cc/mrbird/febs/tree/MemberNode.java
@@ -22,4 +22,13 @@
    private MemberNode left;
    private MemberNode right;
    public MemberNode(Long memberId, String address, String inviteId, String refererId) {
        this.memberId = memberId;
        this.address = address;
        this.inviteId = inviteId;
        this.refererId = refererId;
    }
    public MemberNode() {}
}
src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml
New file
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.mrbird.febs.dapp.mapper.DappAchieveMemberTreeDao">
    <select id="selectNotBottomNodeInMatrix" resultType="cc.mrbird.febs.dapp.entity.DappAchieveMemberTreeEntity">
        select * from dapp_achieve_member_tree
        where tree_node=#{memberId} and deep in (1, 2)
    </select>
    <select id="selectMatrixTreeByTopNode" resultType="cc.mrbird.febs.dapp.entity.DappAchieveMemberTreeEntity">
        select * from dapp_achieve_member_tree
        where top_node=#{memberId} and has_money=1
    </select>
    <select id="selectNodeByDeep" resultType="cc.mrbird.febs.dapp.entity.DappAchieveMemberTreeEntity">
        select * from dapp_achieve_member_tree
        where tree_node=#{memberId} and deep=#{deep}
    </select>
    <select id="resetMatrixTree" resultType="java.lang.Integer">
        update dapp_achieve_member_tree
        set has_money=2
        where top_node=#{memberId} and deep in (2,3)
    </select>
    <select id="reentryMoney" resultType="java.lang.Integer">
        update dapp_achieve_member_tree
        set has_money=1
        where tree_node=#{memberId}
    </select>
</mapper>
src/main/resources/mapper/dapp/DappAchieveTreeDao.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cc.mrbird.febs.dapp.mapper.DappAchieveTreeDao">
    <select id="selectByMidNode" resultType="cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity">
        select * from dapp_achieve_tree where mid_node=#{memberId}
    </select>
</mapper>