From 65cf739fe077c398d35e58a083a1c7be40a3b7a2 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Sun, 06 Aug 2023 23:32:39 +0800
Subject: [PATCH] 数据修改

---
 src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java               |    2 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java     |  107 ++++++++++++++++++++++----
 src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java            |    2 
 src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java                  |    2 
 src/main/java/cc/mrbird/febs/job/BnbTransferJob.java                          |   11 ++
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java     |   11 ++
 src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml                    |   15 +++
 src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java         |    4 +
 src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java                |    8 +
 src/main/resources/mapper/dapp/DappMemberDao.xml                              |    4 +
 src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java                   |    2 
 src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java              |    2 
 src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java                      |   28 +++++++
 src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml                       |    6 +
 src/main/java/cc/mrbird/febs/common/tree/MemberNode.java                      |    2 
 src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java |   23 ++++-
 src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java         |    2 
 17 files changed, 205 insertions(+), 26 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
index 8ed6ab5..f5d1f69 100644
--- a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
+++ b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
@@ -68,7 +68,7 @@
     private String resolveToken(String token) {
         try {
             RSA rsa = new RSA(AppContants.PRIVATE_KEY, null);
-            String[] tokens = StrUtil.split(rsa.decryptStr(token, KeyType.PrivateKey), "_");
+            String[] tokens = StrUtil.splitToArray(rsa.decryptStr(token, KeyType.PrivateKey), "_");
             if (verifyTokenExpired(Long.parseLong(tokens[1]))) {
                 return tokens[0];
             } else {
diff --git a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
index 3b57b22..5e57dfa 100644
--- a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
+++ b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
@@ -4,6 +4,7 @@
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.ArrayDeque;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -136,4 +137,31 @@
 
         return null;
     }
+
+    /**
+     * 获取某一个MemberNode的所有上级节点
+     * @param node MemberNode节点
+     * @return MemberNode的List,按照从上到下的顺序排列
+     */
+    public List<MemberNode> getAllAncestors(MemberNode node) {
+        List<MemberNode> ancestorList = new ArrayList<>();
+        getAllAncestorsHelper(node, ancestorList);
+        return ancestorList;
+    }
+
+    /**
+     * 递归辅助方法,用于获取某一个MemberNode的所有上级节点
+     * @param node 当前节点
+     * @param ancestorList 存储上级节点的List
+     */
+    private void getAllAncestorsHelper(MemberNode node, List<MemberNode> ancestorList) {
+        if (node == null || node.getRefererId() == null) {
+            return;
+        }
+
+        MemberNode parent = getNode(node.getRefererId());
+        ancestorList.add(parent);
+
+        getAllAncestorsHelper(parent, ancestorList);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java b/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java
index d26e14b..e4216d1 100644
--- a/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java
+++ b/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java
@@ -18,6 +18,8 @@
 
     private String refererId;
 
+    private Integer type;
+
     public List<MemberNode> CHILD = new LinkedList<>();
 
     public MemberNode(Long memberId, String phone, String inviteId, String refererId) {
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
index 359ed8e..b3967d9 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -56,7 +56,7 @@
     private String chainType;
 
     /**
-     * 是否是超级节点 1-是 2-否
+     * 推广标识 1-左 2-右
      */
     private Integer nodeType;
 
@@ -64,8 +64,12 @@
      * 账号类型 admin normal
      */
     private String accountType;
-
+    //小区业绩
     private BigDecimal usdtBalance;
+    //左边区域业绩
+    private BigDecimal leftAchieve;
+    //右边区域业绩
+    private BigDecimal rightAchieve;
 
     /**
      * 激活状态 1-已激活 2-未激活
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java b/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java
index 68225cc..19e60ff 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java
@@ -16,7 +16,7 @@
 public class MallAchieveRecord extends BaseEntity {
 
     private Long memberId;
-
+    //剩余业绩
     private BigDecimal amount;
     //订单成本
     private BigDecimal costAmount;
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java b/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java
index 9fdc314..362caa1 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java
@@ -14,6 +14,8 @@
     private Long parentNode;
 
     private Integer deep;
+    //1:左边 2:右边 0:根节点
+    private Integer type;
 
     @TableField(exist = false)
     private String phone;
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
index 0f2f671..c389b7f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -90,4 +90,6 @@
     DappMemberEntity selectInviteLeft(@Param("inviteId")String inviteId);
 
     DappMemberEntity selectInviteRight(@Param("inviteId")String inviteId);
+
+    List<DappMemberEntity> selectMemberByActiveStatus();
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java
index 7095fbc..cebef6f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java
@@ -19,5 +19,9 @@
 
     BigDecimal selectSumAchieveByMemberIds(@Param("list")List<Long> mallMembersOffLinePerkIds, @Param("date") Date date);
 
+    BigDecimal selectSumAchieveByMemberIdList(@Param("list")List<Long> mallMembersOffLinePerkIds);
+
     List<MallAchieveRecord> selectListByDate(@Param("date")Date profitDate);
+
+    List<MallAchieveRecord> selectListByMemberId(@Param("memberId")Long memberId);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java
index 479e0ea..3e8ad46 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java
@@ -12,4 +12,6 @@
     List<MatrixTreeNode> selectAllMatrixTreeNode();
 
     MatrixTreeNode selectByTreeNode(@Param("treeNode") Long treeNode);
+
+    MatrixTreeNode selectByParentNodeAndType(@Param("parentNodeMemberId")Long parentNodeMemberId, @Param("nodeType")Integer nodeType);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
index 09d829b..958855f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -104,4 +104,6 @@
     void speedPayOrderMsg(Long orderId);
 
     void speedAutoLevelUpMsg(Long memberId);
+
+    void memberPerk();
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index 48aea73..dfb2b33 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -933,11 +933,20 @@
                 BigDecimal.ZERO,
                 payOrderNo,
                 id);
-        dappFundFlowDao.insert(donateScoreFlow);
+
+        /**
+         * 支付成功,消费后成有效账户后可分享(有效用户可推广)
+         */
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+        if(2 == dappMemberEntity.getActiveStatus()){
+            dappMemberEntity.setActiveStatus(1);
+            dappMemberDao.updateById(dappMemberEntity);
+        }
         /**
          * todo 发送一条订单出的消息
          */
         chainProducer.sendSpeedPayOrderMsg(id);
+        chainProducer.sendAutoLevelUpMsg(member.getId());
     }
 
     public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {
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 4315ec3..4bc2400 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
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.contants.AppContants;
 import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.tree.MatrixTree;
 import cc.mrbird.febs.common.tree.MemberNode;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
@@ -2488,26 +2489,100 @@
             return;
         }
 
-        List<DataDictionaryCustom> dicList = dataDictionaryCustomMapper.selectDicByType(AppContants.AGENT_LEVEL);
-        DataDictionaryCustom dic = null;
-        for (DataDictionaryCustom dataDictionaryCustom : dicList) {
-            if (Integer.parseInt(dataDictionaryCustom.getValue()) == parentNode.CHILD.size()) {
-                dic = dataDictionaryCustom;
-                break;
-            }
-        }
-
-        if (dic == null) {
+        MatrixTree matrixTree = MatrixTree.getInstance();
+        List<MemberNode> allNodes = matrixTree.getAllAncestors(parentNode); // 获取某一个MemberNode的所有上级节点
+        allNodes.add(parentNode);
+        if(CollUtil.isEmpty(allNodes)){
             return;
         }
+        /**
+         * 更新所有上级的小区业绩
+         */
+        for(MemberNode memberNode : allNodes){
+            BigDecimal smallAchieve = BigDecimal.ZERO;
+            List<MemberNode> allNodesChildList = memberNode.getCHILD();
+            if(CollUtil.isNotEmpty(allNodesChildList)){
+                List<Long> left = allNodesChildList.stream().filter(allNodesChild -> allNodesChild.getType() == 1).map(MemberNode::getMemberId).collect(Collectors.toList());
+                List<Long> right = allNodesChildList.stream().filter(allNodesChild -> allNodesChild.getType() == 2).map(MemberNode::getMemberId).collect(Collectors.toList());
 
-        MallMember parentMember = memberMapper.selectById(parentNode.getMemberId());
-        parentMember.setChildNodeCnt(parentNode.CHILD.size());
-        int levelCode = MemberLevelEnum.getLevelCode(parentMember.getLevel());
-        if (Integer.parseInt(dic.getValue()) >= levelCode) {
-            parentMember.setLevel(dic.getCode());
+                BigDecimal leftAmount = mallAchieveRecordMapper.selectSumAchieveByMemberIdList(left);
+
+                BigDecimal rightAmount = mallAchieveRecordMapper.selectSumAchieveByMemberIdList(right);
+                if(leftAmount.compareTo(rightAmount) > 0){
+                    smallAchieve = rightAmount;
+                }else{
+                    smallAchieve = leftAmount;
+                }
+                //更新用户的区域业绩
+                DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberNode.getMemberId());
+                dappMemberEntity.setUsdtBalance(smallAchieve);
+                dappMemberEntity.setLeftAchieve(leftAmount);
+                dappMemberEntity.setRightAchieve(rightAmount);
+                dappMemberDao.updateById(dappMemberEntity);
+                log.info("用户:{},leftAchieve :{}, rightAchieve:{}, smallAchieve:{}",
+                        dappMemberEntity.getAddress(), leftAmount, rightAmount, smallAchieve);
+
+                /**
+                 * 判断是否符合升级条件
+                 */
+                String nextLevel = MemberLevelEnum.MEMBER.getNextLevel(dappMemberEntity.getAccountType());
+                DataDictionaryCustom memberLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                        DataDictionaryEnum.V1.getType()
+                        , nextLevel);
+                if(ObjectUtil.isNotEmpty(memberLevelDic)){
+                    String value = memberLevelDic.getValue();
+                    cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(value);
+                    BigDecimal smallAchieveDic = new BigDecimal(parseObj.get("smallAchieve").toString());
+                    if(smallAchieve.compareTo(smallAchieveDic) >= 0){
+                        //升级
+                        dappMemberEntity.setAccountType(nextLevel);
+                        dappMemberDao.updateById(dappMemberEntity);
+                    }
+                }
+            }
         }
-        memberMapper.updateById(parentMember);
+    }
+
+    @Override
+    public void memberPerk() {
+        List<DappMemberEntity> dappMemberEntityList = dappMemberDao.selectMemberByActiveStatus();
+        if(CollUtil.isEmpty(dappMemberEntityList)){
+            return;
+        }
+        DataDictionaryCustom staticReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.STATIC_RELEASE.getType(),
+                DataDictionaryEnum.STATIC_RELEASE.getCode()
+        );
+        if(ObjectUtil.isEmpty(staticReleaseDic)){
+            return;
+        }
+        BigDecimal staticRelease = new BigDecimal(staticReleaseDic.getValue() == null ? "0" : staticReleaseDic.getValue());
+        if(BigDecimal.ZERO.compareTo(staticRelease) >= 0){
+            return;
+        }
+        for(DappMemberEntity dappMemberEntity :  dappMemberEntityList){
+            if(1 != dappMemberEntity.getActiveStatus()){
+                break;
+            }
+            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(dappMemberEntity.getId());
+            /**
+             * 按照订单、比例生成对应的静态释放
+             */
+            for(MallAchieveRecord mallAchieveRecord : mallAchieveRecords){
+                BigDecimal costAmount = mallAchieveRecord.getCostAmount();
+                BigDecimal amount = mallAchieveRecord.getAmount();
+                BigDecimal eachDayPerk = costAmount.multiply(staticRelease).setScale(2,BigDecimal.ROUND_DOWN);
+                /**
+                 * 生成一条静态补贴的流水
+                 * 增加账户余额
+                 * 生成减少赠送积分流水
+                 * 减少账户的赠送积分
+                 * 业绩记录减少实际业绩amount
+                 *
+                 */
+            }
+
+        }
     }
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java
index bd7895b..2fc58bd 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java
@@ -7,6 +7,7 @@
 import cc.mrbird.febs.dapp.mapper.DappMemberDao;
 import cc.mrbird.febs.dapp.mapper.MatrixTreeNodeMapper;
 import cc.mrbird.febs.dapp.service.IMatrixTreeNodeService;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -30,16 +31,26 @@
 
         MatrixTree instance = MatrixTree.getInstance();
         MemberNode node = instance.getNode(memberId);
+        //节点存在则直接返回
         if (node != null) {
             return null;
         }
-
+        //未找到节点
         if (StrUtil.isNotBlank(mallMember.getRefererId())) {
+            //返回直推上级所在节点
             MemberNode parentNode = instance.getNode(mallMember.getRefererId());
 
             MemberNode notWholeNode = null;
             if (parentNode != null) {
-                notWholeNode = instance.findNotWholeNode(parentNode);
+                Long parentNodeMemberId = parentNode.getMemberId();
+                MatrixTreeNode matrixTreeNode = matrixTreeNodeMapper.selectByParentNodeAndType(parentNodeMemberId,mallMember.getNodeType());
+                if(ObjectUtil.isNotEmpty(matrixTreeNode)){
+                    //直推上级的第一代子节点
+                    MemberNode nodeParentChild = instance.getNode(matrixTreeNode.getTreeNode());
+                    notWholeNode = instance.findNotWholeNode(nodeParentChild);
+                }else{
+                    notWholeNode = instance.findNotWholeNode(parentNode);
+                }
             } else {
                 notWholeNode = instance.findNotWholeNode();
             }
@@ -47,17 +58,21 @@
             MatrixTreeNode treeNode = new MatrixTreeNode();
             treeNode.setTreeNode(mallMember.getId());
             treeNode.setParentNode(notWholeNode.getMemberId());
+            treeNode.setType(mallMember.getNodeType());
             matrixTreeNodeMapper.insert(treeNode);
         } else {
             MatrixTreeNode treeNode = new MatrixTreeNode();
             treeNode.setTreeNode(mallMember.getId());
+            treeNode.setType(0);
             matrixTreeNodeMapper.insert(treeNode);
         }
-
+        MatrixTreeNode matrixTreeNode = matrixTreeNodeMapper.selectByTreeNode(memberId);
+        DappMemberEntity dappMemberEntity = mallMemberMapper.selectById(matrixTreeNode.getParentNode());
         node = new MemberNode();
         node.setMemberId(memberId);
         node.setInviteId(mallMember.getInviteId());
-        node.setRefererId(mallMember.getRefererId());
+        node.setRefererId(dappMemberEntity.getInviteId());
+        node.setType(mallMember.getNodeType());
         return instance.addNode(node);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
index 0b17fa1..62082de 100644
--- a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
+++ b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
@@ -24,9 +24,18 @@
 @ConditionalOnProperty(prefix = "system", name = "quartz-job", havingValue = "true")
 public class BnbTransferJob{
 
+
+    @Autowired
+    private DappSystemService dappSystemService;
+
+    /**
+     * 每天按照消费金额的5‰静释放(千分之五的静态释放比例)
+     * (按购买顺序结算,同时有5个订单就有结算记录)
+     * (设置多少,全部按照最新的来释放)
+     */
     @Scheduled(cron = "0 0 0 * * ?")
     public void aKlineJobDay() {
-        dappSystemService.aKlineJobDay();
+        dappSystemService.memberPerk();
     }
 
 
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index 2ecc2c5..eb3c3eb 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -309,4 +309,8 @@
     <select id="selectInviteRight" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
         select * from dapp_member where invite_right = #{inviteId}
     </select>
+
+    <select id="selectMemberByActiveStatus" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+        select * from dapp_member where active_status = 1
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml b/src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml
index 23f7942..28702b3 100644
--- a/src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml
+++ b/src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml
@@ -23,9 +23,24 @@
         and date_format(achieve_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d');
     </select>
 
+    <select id="selectSumAchieveByMemberIdList" resultType="java.math.BigDecimal">
+        select IFNULL(sum(IFNULL(amount,0)),0)
+        from mall_achieve_record
+        where  member_id IN
+        <foreach collection = "list" item = "item"  separator=","  open = "(" close = ")" >
+            #{item}
+        </foreach >
+    </select>
+
     <select id="selectListByDate" resultType="cc.mrbird.febs.dapp.entity.MallAchieveRecord">
         select * from mall_achieve_record
         where date_format(achieve_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d');
     </select>
 
+    <select id="selectListByMemberId" resultType="cc.mrbird.febs.dapp.entity.MallAchieveRecord">
+        select * from mall_achieve_record
+        where member_id = #{memberId}
+        order by CREATE_TIME asc
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml b/src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml
index d7af182..8638b56 100644
--- a/src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml
+++ b/src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml
@@ -11,4 +11,10 @@
     <select id="selectByTreeNode" resultType="cc.mrbird.febs.dapp.entity.MatrixTreeNode">
         select * from matrix_tree_node where tree_node=#{treeNode}
     </select>
+
+    <select id="selectByParentNodeAndType" resultType="cc.mrbird.febs.dapp.entity.MatrixTreeNode">
+        select * from matrix_tree_node
+            where tree_node = #{parentNodeMemberId}
+              and type = #{nodeType}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1