From 293533a11236c2027241827ddff246db3e37f4c8 Mon Sep 17 00:00:00 2001 From: wzy <wzy19931122ai@163.com> Date: Fri, 26 Aug 2022 00:06:55 +0800 Subject: [PATCH] finish ahieveTree consumer --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 76 +++++++++++++++++++ src/main/java/cc/mrbird/febs/tree/MemberNode.java | 9 ++ src/main/resources/mapper/dapp/DappAchieveTreeDao.xml | 9 ++ src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml | 31 +++++++ src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java | 20 +++++ src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java | 10 ++ src/main/java/cc/mrbird/febs/tree/MatrixTree.java | 8 ++ src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java | 24 ++++++ 8 files changed, 187 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java new file mode 100644 index 0000000..0b6971c --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java @@ -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; +} diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java new file mode 100644 index 0000000..9554766 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java @@ -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); +} diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java new file mode 100644 index 0000000..7a5b319 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java @@ -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); +} 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 c6db697..033e34e 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 @@ -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()); + } + } } } diff --git a/src/main/java/cc/mrbird/febs/tree/MatrixTree.java b/src/main/java/cc/mrbird/febs/tree/MatrixTree.java index deea01b..74c1096 100644 --- a/src/main/java/cc/mrbird/febs/tree/MatrixTree.java +++ b/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) { + } } diff --git a/src/main/java/cc/mrbird/febs/tree/MemberNode.java b/src/main/java/cc/mrbird/febs/tree/MemberNode.java index 0a36ec6..2bb90ad 100644 --- a/src/main/java/cc/mrbird/febs/tree/MemberNode.java +++ b/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() {} } diff --git a/src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml b/src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml new file mode 100644 index 0000000..be96535 --- /dev/null +++ b/src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml @@ -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> \ No newline at end of file diff --git a/src/main/resources/mapper/dapp/DappAchieveTreeDao.xml b/src/main/resources/mapper/dapp/DappAchieveTreeDao.xml new file mode 100644 index 0000000..07cc0f0 --- /dev/null +++ b/src/main/resources/mapper/dapp/DappAchieveTreeDao.xml @@ -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> \ No newline at end of file -- Gitblit v1.9.1