src/main/java/cc/mrbird/febs/dapp/entity/DappAchieveMemberTreeEntity.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/tree/MatrixTree.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/tree/MemberNode.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/dapp/DappAchieveTreeDao.xml | ●●●●● 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>