From 8e6989a4472063a2edb5e63c16610ccf8450a562 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 01 Aug 2023 23:07:15 +0800
Subject: [PATCH] 商品、订单

---
 src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java               |    1 
 src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java               |   52 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java     |  190 +--
 src/main/java/cc/mrbird/febs/dapp/dto/AddOrderDto.java                        |   22 
 src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java               |  194 ----
 src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java            |    4 
 src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java            |   15 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java     |  177 +++
 src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java              |    9 
 src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java         |   23 
 src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java               |  191 ----
 src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java                  |  382 --------
 src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractInit.java       |    1 
 src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java                |    2 
 src/main/java/cc/mrbird/febs/dapp/service/IMatrixTreeNodeService.java         |   10 
 src/main/java/cc/mrbird/febs/dapp/dto/MallOrderQueryDto.java                  |   20 
 src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java              |   17 
 src/main/java/cc/mrbird/febs/common/utils/MallUtils.java                      |   35 
 src/main/resources/mapper/dapp/DappMemberDao.xml                              |   51 +
 src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java                   |   19 
 src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java              |    6 
 src/main/java/cc/mrbird/febs/dapp/init/MatrixTreeInit.java                    |   45 +
 src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java                      |  139 +++
 src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java                    |    6 
 src/main/java/cc/mrbird/febs/common/tree/MemberNode.java                      |   34 
 src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java      |   97 ++
 src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java                            |   50 
 src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java |   63 +
 src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderItemMapper.java             |    9 
 src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java              |   12 
 src/main/java/cc/mrbird/febs/dapp/entity/MallOrderInfo.java                   |    6 
 src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderInfoMapper.java             |    9 
 src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java                  |   29 
 src/main/java/cc/mrbird/febs/job/BnbTransferJob.java                          |  169 ---
 src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java                       |   63 -
 src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml                    |   31 
 src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java                          |    1 
 src/main/java/cc/mrbird/febs/dapp/vo/MallGoodsListVo.java                     |   49 +
 src/main/java/cc/mrbird/febs/dapp/dto/MallGoodsQueryDto.java                  |   15 
 src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java                 |   71 -
 src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java         |    7 
 src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java           |   88 +
 src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml                       |   14 
 src/main/java/cc/mrbird/febs/dapp/vo/MallOrderListVo.java                     |   61 +
 src/main/java/cc/mrbird/febs/dapp/vo/MallOrderItemVo.java                     |   26 
 src/main/resources/mapper/dapp/DappWalletCoinDao.xml                          |    9 
 46 files changed, 1,277 insertions(+), 1,247 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
new file mode 100644
index 0000000..3b57b22
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
@@ -0,0 +1,139 @@
+package cc.mrbird.febs.common.tree;
+
+import cn.hutool.core.collection.CollUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayDeque;
+import java.util.List;
+
+/**
+ *
+ *
+ * @author wzy
+ * @date 2023-04-18
+ **/
+@Slf4j
+public class MatrixTree {
+
+    private static final MatrixTree MATRIX_TREE = new MatrixTree();
+    public static MatrixTree getInstance() {
+        return MATRIX_TREE;
+    }
+
+    private int childNodeCnt = 2;
+
+    // 节点数量
+    private int count = 0;
+    private MemberNode root;
+
+    private MatrixTree() {
+        count = 1;
+    }
+
+    /**
+     * @param node 待添加的节点
+     * @return 返回父节点
+     */
+    public MemberNode addNode(MemberNode node) {
+        if (root == null) {
+            root = node;
+            return null;
+        }
+
+        MemberNode childTreeRoot = getNode(node.getRefererId());
+
+        MemberNode parentNode = findNotWholeNode(childTreeRoot == null ? root : childTreeRoot);
+        parentNode.addNode(node);
+        return parentNode;
+    }
+
+    public MemberNode addNode(MemberNode node, Long parentNodeId) {
+        if (parentNodeId == null) {
+            root = node;
+            return null;
+        }
+
+        MemberNode parentNode = getNode(parentNodeId);
+        parentNode.addNode(node);
+        return parentNode;
+    }
+
+    /**
+     * 层级遍历,查到子节点未满3个的节点
+     * @return
+     */
+    public MemberNode findNotWholeNode(MemberNode root) {
+        ArrayDeque<MemberNode> deque = new ArrayDeque<>();
+        deque.add(root);
+
+        MemberNode result = null;
+        while(!deque.isEmpty()) {
+            int num = deque.size();
+
+            for (int i = 0; i < num; i++) {
+                MemberNode memberNode = deque.removeFirst();
+                if (memberNode.CHILD.size() < childNodeCnt) {
+                    result = memberNode;
+                    break;
+                }
+
+                for (MemberNode node : memberNode.CHILD) {
+                    deque.addLast(node);
+                }
+            }
+
+            if (result != null) {
+                break;
+            }
+        }
+
+        return result;
+    }
+
+    public MemberNode findNotWholeNode() {
+        return findNotWholeNode(root);
+    }
+
+    /**
+     * 查找整个树下对应节点
+     * @param param memberId/address/inviteId
+     * @return
+     */
+    public MemberNode getNode(Object param) {
+        if (root == null) {
+            return null;
+        }
+
+        if (root.getMemberId().equals(param) || root.getInviteId().equals(param)) {
+            return root;
+        }
+
+        return getNode(root.CHILD, param);
+    }
+
+    /**
+     * 查找某节点下的对应节点
+     *
+     * @param nodeList 某节点
+     * @param param memberId/address/inviteId
+     * @return
+     */
+    public MemberNode getNode(List<MemberNode> nodeList, Object param) {
+        if (CollUtil.isEmpty(nodeList)) {
+            return null;
+        }
+
+        for (MemberNode node : nodeList) {
+            if (node.getMemberId().equals(param) || node.getInviteId().equals(param)) {
+                return node;
+            }
+
+            MemberNode childNode = getNode(node.CHILD, param);
+            if (childNode != null) {
+                return childNode;
+            }
+        }
+
+        return null;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java b/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java
new file mode 100644
index 0000000..d26e14b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/tree/MemberNode.java
@@ -0,0 +1,34 @@
+package cc.mrbird.febs.common.tree;
+
+import lombok.Data;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2022-08-23
+ **/
+@Data
+public class MemberNode {
+
+    private Long memberId;
+
+    private String inviteId;
+
+    private String refererId;
+
+    public List<MemberNode> CHILD = new LinkedList<>();
+
+    public MemberNode(Long memberId, String phone, String inviteId, String refererId) {
+        this.memberId = memberId;
+        this.inviteId = inviteId;
+        this.refererId = refererId;
+    }
+
+    public MemberNode() {}
+
+    public void addNode(MemberNode node) {
+        this.CHILD.add(node);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java b/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
new file mode 100644
index 0000000..82a673b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
@@ -0,0 +1,35 @@
+package cc.mrbird.febs.common.utils;
+
+import cn.hutool.core.util.StrUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+public class MallUtils {
+
+    public static String getRandomNum(int length) {
+        String str = "0123456789";
+        Random random = new Random();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length; ++i) {
+            int number = random.nextInt(str.length());
+            sb.append(str.charAt(number));
+        }
+
+        return sb.toString();
+    }
+
+    public static String getOrderNum(String prefix) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
+        String dd=df.format(new Date());
+        if (StrUtil.isNotBlank(prefix)) {
+            return prefix+dd+getRandomNum(5);
+        }
+        return dd+getRandomNum(5);
+    }
+
+    public static String getOrderNum() {
+        return getOrderNum(null);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractInit.java b/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractInit.java
index 96f8fc9..c37ec2d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractInit.java
+++ b/src/main/java/cc/mrbird/febs/dapp/contract/andao/AndaoContractInit.java
@@ -35,6 +35,5 @@
         }
         System.out.println("启动区块事件监听,监听起始:"+start);
         andaoContractMain.listenBetting(start);
-        andaoContractMain.listenBettings(start);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
index 0a1c382..b758006 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
@@ -56,13 +56,6 @@
         return new FebsResponse().success();
     }
 
-    @ApiOperation(value = "根据flowID,重新消费", notes = "根据flowID,重新消费")
-    @GetMapping(value = "/sendFlow/{flowId}")
-    public FebsResponse sendFlow(@PathVariable("flowId") String flowId) {
-        chainProducer.sendContractAnDao(Long.parseLong(flowId));
-        return new FebsResponse().success();
-    }
-
 //    @ApiOperation(value = "头部数据", notes = "头部数据")
 //    @GetMapping(value = "/totalIncome")
 //    public FebsResponse totalIncome() {
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java
new file mode 100644
index 0000000..2d46299
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java
@@ -0,0 +1,97 @@
+package cc.mrbird.febs.dapp.controller;
+
+import cc.mrbird.febs.common.annotation.EncryptEnable;
+import cc.mrbird.febs.common.contants.AppContants;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.dapp.dto.*;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.service.DappMemberService;
+import cc.mrbird.febs.dapp.service.DappSystemService;
+import cc.mrbird.febs.dapp.service.DappWalletService;
+import cc.mrbird.febs.dapp.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author
+ * @date 2022-03-17
+ **/
+@Slf4j
+@EncryptEnable
+@RequiredArgsConstructor
+@CrossOrigin("*")
+@RestController
+@Api(value = "dapp接口", tags = "dappOrder接口")
+@RequestMapping(value = "/dapi/order")
+public class ApiDappOrderController {
+
+    private final DappMemberService dappMemberService;
+
+    @ApiOperation(value = "商品列表", notes = "商品列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class)
+    })
+    @PostMapping(value = "/findMallGoodsList")
+    public FebsResponse findMallGoodsList(@RequestBody MallGoodsQueryDto queryDto) {
+        return new FebsResponse().success().data(dappMemberService.findMallGoodsListInPage(queryDto));
+    }
+
+    @ApiOperation(value = "商品详情", notes = "商品详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class)
+    })
+    @GetMapping(value = "/goodsDetails/{id}")
+    public FebsResponse goodsDetails(@PathVariable("id") Long id) {
+        return new FebsResponse().success().data(dappMemberService.findGoodsDetailsById(id));
+    }
+
+    @ApiOperation(value = "订单列表", notes = "订单列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallOrderListVo.class)
+    })
+    @PostMapping(value = "/findMallOrderList")
+    public FebsResponse findMallOrderList(@RequestBody MallOrderQueryDto queryDto) {
+        return new FebsResponse().success().data(dappMemberService.findMallOrderListInPage(queryDto));
+    }
+
+    @ApiOperation(value = "订单详情", notes = "订单详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallOrderListVo.class)
+    })
+    @GetMapping(value = "/orderDetails/{id}")
+    public FebsResponse orderDetails(@PathVariable("id") Long id) {
+        return new FebsResponse().success().data(dappMemberService.findOrderDetailsById(id));
+    }
+
+    @ApiOperation(value = "创建订单", notes = "创建订单")
+    @PostMapping(value = "/createOrder")
+    public FebsResponse createOrder(@RequestBody AddOrderDto addOrderDto) {
+        Long orderId = dappMemberService.createOrder(addOrderDto);
+        return new FebsResponse().success().data(orderId).message("操作成功");
+    }
+
+    @ApiOperation(value = "取消订单", notes = "取消订单")
+    @PostMapping(value = "/cancelOrder/{id}")
+    public FebsResponse cancelOrder(@PathVariable("id") Long id) {
+        dappMemberService.cancelOrder(id);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @ApiOperation(value = "支付订单", notes = "支付订单")
+    @PostMapping(value = "/payOrder")
+    public FebsResponse payOrder(@PathVariable("id") Long id) {
+        dappMemberService.payOrder(id);
+        return new FebsResponse().success().message("操作成功");
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/AddOrderDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/AddOrderDto.java
new file mode 100644
index 0000000..7c0ed9d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/AddOrderDto.java
@@ -0,0 +1,22 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "AddOrderDto", description = "新增订单接口参数接收类")
+public class AddOrderDto {
+
+    @NotNull(message = "参数不能为空")
+    @ApiModelProperty(value = "商品ID", example = "1")
+    private Long goodsId;
+
+
+    @NotNull(message = "参数不能为空")
+    @ApiModelProperty(value = "数量", example = "1")
+    private Integer goodsCnt;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/MallGoodsQueryDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/MallGoodsQueryDto.java
new file mode 100644
index 0000000..6cacc60
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/MallGoodsQueryDto.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MallGoodsQueryDto {
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNow;
+
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/MallOrderQueryDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/MallOrderQueryDto.java
new file mode 100644
index 0000000..a803b61
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/MallOrderQueryDto.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MallOrderQueryDto {
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNow;
+
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "状态;1-待支付2-已支付3-已取消", example = "10")
+    private Integer status;
+
+    @ApiModelProperty(hidden = true)
+    private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
index df3dc5e..dfad4f4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -33,15 +33,6 @@
         this.fee = fee;
     }
 
-//    public DappFundFlowEntity(Long memberId, BigDecimal amount, Integer type, Integer status, BigDecimal fee,Long systemProfitId) {
-//        this.memberId = memberId;
-//        this.amount = amount;
-//        this.type = type;
-//        this.status = status;
-//        this.fee = fee;
-//        this.systemProfitId = systemProfitId;
-//    }
-
     public DappFundFlowEntity(Long memberId, BigDecimal amount, Integer type, Integer status, BigDecimal fee, String fromHash) {
         this.memberId = memberId;
         this.amount = amount;
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 5567fd4..359ed8e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -39,6 +39,8 @@
     private Integer withdrawAble;
 
     private String inviteId;
+    private String inviteRight;
+    private String inviteLeft;
 
     private String refererId;
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
index 3a181b3..dae04b1 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
@@ -7,10 +7,6 @@
 
 import java.math.BigDecimal;
 
-/**
- * @author 
- * @date 2022-03-17
- **/
 @Data
 @TableName("dapp_wallet_coin")
 public class DappWalletCoinEntity extends BaseEntity {
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java b/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java
new file mode 100644
index 0000000..68225cc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MallAchieveRecord.java
@@ -0,0 +1,52 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-06-15
+ **/
+@Data
+@TableName("mall_achieve_record")
+public class MallAchieveRecord extends BaseEntity {
+
+    private Long memberId;
+
+    private BigDecimal amount;
+    //订单成本
+    private BigDecimal costAmount;
+
+    private Date achieveTime;
+
+    private Long orderId;
+
+    private Long orderItemId;
+    //1-进行中 2-已结束
+    private Integer isNormal;
+
+    private Date payTime;
+    public MallAchieveRecord() {}
+
+
+    public MallAchieveRecord(Long memberId,
+                             BigDecimal amount,
+                             BigDecimal costAmount,
+                             Date achieveTime,
+                             Long orderId,
+                             Integer isNormal,
+                             Date payTime) {
+        this.memberId = memberId;
+        this.amount = amount;
+        this.costAmount = costAmount;
+        this.achieveTime = achieveTime;
+        this.orderId = orderId;
+        this.isNormal = isNormal;
+        this.payTime = payTime;
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MallOrderInfo.java b/src/main/java/cc/mrbird/febs/dapp/entity/MallOrderInfo.java
index 0eb715e..2c05da4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/MallOrderInfo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MallOrderInfo.java
@@ -26,7 +26,7 @@
     private String payMethod;
     //支付订单号
     private String payOrderNo;
-    //支付结果 1-成功2-未成功
+    //支付结果 1-成功2-失败
     private String payResult;
 
     /**
@@ -34,6 +34,10 @@
      */
     private Integer status;
 
+    public static final Integer STATUS_WAIT = 1;
+    public static final Integer STATUS_PAY = 2;
+    public static final Integer STATUS_CANCEL = 3;
+
     /**
      * 取消类型;1-超时未支付2-主动取消
      */
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java b/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java
new file mode 100644
index 0000000..9fdc314
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MatrixTreeNode.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName(value = "matrix_tree_node")
+public class MatrixTreeNode extends BaseEntity {
+
+    private Long treeNode;
+
+    private Long parentNode;
+
+    private Integer deep;
+
+    @TableField(exist = false)
+    private String phone;
+
+    @TableField(exist = false)
+    private String name;
+
+    @TableField(exist = false)
+    private String inviteId;
+
+    @TableField(exist = false)
+    private String referrerId;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
index c6f3a9f..a9b973a 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
@@ -4,35 +4,65 @@
 
 @Getter
 public enum DataDictionaryEnum {
-    // 前期节点归集地址
-    TOTAL_ADDRESS("SYSTEM_SETTING","TOTAL_ADDRESS"),
-    // 分发地址的私钥
-    FEE_ADDRESS_KEY("SYSTEM_SETTING","FEE_ADDRESS_KEY"),
-    // 复投盈利收益
-    INVEST_AMOUNT_PROFIT("SYSTEM_SETTING","INVEST_AMOUNT_PROFIT"),
-    // 投资金额
-    INVEST_AMOUNT("SYSTEM_SETTING","INVEST_AMOUNT"),
-    // 当前轮数
-    QUEUE_COUNT("SYSTEM_SETTING","QUEUE_COUNT"),
-    // 会员代理等级
-    BIG_BOSS("MEMBER_LEVEL","BIG_BOSS"),
-    BOSS("MEMBER_LEVEL","BOSS"),
-    AGENT("MEMBER_LEVEL","AGENT"),
-    MEMBER("MEMBER_LEVEL","MEMBER"),
-    // 层级奖励比率
-    LEVEL_PROFIT("SYSTEM_SETTING","LEVEL_PROFIT"),
-    // 直推奖励比率
-    DIRECT_PROFIT("SYSTEM_SETTING","DIRECT_PROFIT"),
-    // 技术方收取BNB数量
-    SYSTEM_PROFIT("SYSTEM_SETTING","SYSTEM_PROFIT"),
-    // 每日返利的产矿百分比
-    REBATE_PERCENT("SYSTEM_SETTING","REBATE_PERCENT"),
-    // 分给推荐三人的终身VIP会员手续费
-    MEMBER_FEE("SYSTEM_SETTING","MEMBER_FEE"),
-    // 提现手续费
-    WITHDRAW_SERVICE_FEE("SYSTEM_SETTING", "WITHDRAW_SERVICE_FEE"),
-    // 币的价格
-    SYMBOL_PRICE("SYSTEM_SETTING", "SYMBOL_PRICE");
+    /**
+     * shareSpeedPercent 共享区加速百分比
+     * shareMaxPercent 共享区加速最大值
+     * smallAchieve    升级要求业绩
+     * teamPercent      团队静态收益
+     * orderSalePercent 全网销售额加权平分分红
+     *  {"shareMinPercent":"0.00004","shareMaxPercent":"0.01","smallAchieve":"20000","teamPercent":"0.15","orderSalePercent":"0"}
+     *  {"shareMinPercent":"0.00005","shareMaxPercent":"0.012","smallAchieve":"60000","teamPercent":"0.3","orderSalePercent":"0"}
+     *  {"shareMinPercent":"0.00006","shareMaxPercent":"0.014","smallAchieve":"200000","teamPercent":"0.45","orderSalePercent":"0"}
+     *  {"shareMinPercent":"0.00007","shareMaxPercent":"0.016","smallAchieve":"600000","teamPercent":"0.60","orderSalePercent":"0"}
+     *  {"shareMinPercent":"0.00008","shareMaxPercent":"0.018","smallAchieve":"2000000","teamPercent":"0.75","orderSalePercent":"0.02"}
+     *  {"shareMinPercent":"0.00009","shareMaxPercent":"0.020","smallAchieve":"6000000","teamPercent":"0.90","orderSalePercent":"0.02"}
+     *  {"shareMinPercent":"0.0001","shareMaxPercent":"0.022","smallAchieve":"20000000","teamPercent":"1","orderSalePercent":"0.02"}
+     */
+    V1("TEAM_LEVEL","V1"),
+    V2("TEAM_LEVEL","V2"),
+    V3("TEAM_LEVEL","V3"),
+    V4("TEAM_LEVEL","V4"),
+    V5("TEAM_LEVEL","V5"),
+    V6("TEAM_LEVEL","V6"),
+    V7("TEAM_LEVEL","V7"),
+    /**
+     *  商城入单的10%入底池
+     */
+    USDT_ORDER_PERCENT("USDT_ORDER_PERCENT","USDT_ORDER_PERCENT"),
+    /**
+     *  积分价格 = USDT底池 / 积分底池
+     */
+    SCORE_PRICE("SCORE_PRICE","SCORE_PRICE"),
+    /**
+     *  积分底池
+     */
+    SCORE_POOL("SCORE_POOL","SCORE_POOL"),
+    /**
+     *  USDT底池
+     */
+    USDT_POOL("USDT_POOL","USDT_POOL"),
+    /**
+     *
+     *  每个帐号下的消费订单独立结算,最大封顶为此消费单的本金5%(每日每人的最大获得比例)每天(可设定,最小为0)
+     */
+    MAX_RELEASE("MAX_RELEASE","MAX_RELEASE"),
+    /**
+     *  直推加速,享受直推人的100%个人静态释放
+     *  直推消费分享:享受直接分享人每日消费金额释放的100%加速。
+     *  (a推b,b收益5块,那么a也有5块。)
+     */
+    DIRECT_RELEASE("DIRECT_RELEASE","DIRECT_RELEASE"),
+    /**
+     *  每天按照消费金额的5‰个人静态释放
+     * (千分之五的静态释放比例)
+     * (按购买顺序结算,同时有5个订单就有结算记录)
+     * (设置多少,全部按照最新的来释放)
+     */
+    STATIC_RELEASE("STATIC_RELEASE","STATIC_RELEASE"),
+    /**
+     *  赠送消费金额1.5倍增值积分(释放额度,额度为零就要复购)
+     */
+    DONATE_SCORE_PERCENT("DONATE_SCORE_PERCENT","DONATE_SCORE_PERCENT");
 
     private String type;
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
index 13fbb44..e2c6d2a 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -4,76 +4,13 @@
 
 /**
  * 流水类型
- * 类型 1-认购节点 2-直推收益 3-技术方收款 4-入金,买入A币 5-进入a底池...
  */
 @Getter
 public enum FundFlowEnum {
-    //进入提现池-(USDT 提现池)
-    USDT_IN_W_POOL("USDT_IN_W_POOL", 34),
-    //权益额度
-    MEMBER_AMOUNT_PERK_TOTAL("MEMBER_AMOUNT_PERK_TOTAL", 33),
-    //ANDAO互转
-    ANDAO_MEMBER_TO_MENBER("ANDAO_MEMBER_TO_MENBER", 32),
-    //AUSDT互转
-    AUSDT_MEMBER_TO_MENBER("AUSDT_MEMBER_TO_MENBER", 31),
-    //20%全网加权分红(按20%释放递减)-(全网收益)
-    POOL_MEMBER_A_CNT("POOL_MEMBER_A_CNT", 30),
-    //每小时燃烧-(AN DAO燃烧)
-    A_COIN_FIRE("A_COIN_FIRE", 29),
-    //入金,买入AUSD币-(买入AUSD)
-    BUY_AUSD_COIN("BUY_AUSD_COIN", 28),
-    //闪对钱包转USDT(USDT流水)-(闪兑USDT)
-    WALLET_COIN_TO_USDT_W("WALLET_COIN_TO_USDT_W", 27),
-    //闪对钱包转USDT-(AN DAO-USDT)
-    WALLET_COIN_TO_USDT("WALLET_COIN_TO_USDT", 25),
-    //资产钱包转账到闪对钱包-(闪兑AN DAO)
-    WALLET_MINE_TO_COIN_FEE("WALLET_MINE_TO_COIN_FEE", 24),
-    //资产钱包转账到闪对钱包-(资产AN DAO-闪兑AN DAO)
-    WALLET_MINE_TO_COIN("WALLET_MINE_TO_COIN", 23),
-    //节点的全网分红-(DAO 5平级收益)
-    DAO_5_NODE_EQUALS_PERK("DAO_5_NODE_EQUALS_PERK", 22),
-    //-(DAO 5节点收益奖)
-    DAO_5_NODE_PERK("DAO_5_NODE_PERK", 21),
-    //-(DAO 4节点收益)
-    DAO_4_NODE_PERK("DAO_4_NODE_PERK", 20),
-    //-(DAO 3节点收益)
-    DAO_3_NODE_PERK("DAO_3_NODE_PERK", 19),
-    //dao5的平级全网分红-(每日DAO 5平级收益总量)
-    DAO_5_CNT_EQUALS_MEMBER("DAO_5_CNT_EQUALS_MEMBER", 18),
-    //dao5的全网分红-(每日DAO 5的全网收益总量)
-    DAO_5_CNT_MEMBER("DAO_5_CNT_MEMBER", 17),
-    //dao4的全网分红-(每日DAO 4的全网收益总量)
-    DAO_4_CNT_MEMBER("DAO_4_CNT_MEMBER", 16),
-    //dao3的全网分红-(每日DAO 3的全网收益总量)
-    DAO_3_CNT_MEMBER("DAO_3_CNT_MEMBER", 15),
-    //10%级差奖给会员-(业绩奖)
-    LEVEL_A_PERCENT_CNT_MEMBER("LEVEL_A_PERCENT_CNT_MEMBER", 14),
-    //10%级差奖-(业绩奖收益总量)
-    LEVEL_A_PERCENT_CNT("LEVEL_A_PERCENT_CNT", 13),
-    //5%基金会-(基金会收益总量)
-    FOUNDATION_A_PERCENT("NODE_A_PERCENT_TO_MEMBER", 12),
-    //5%节点平分-(超级节点收益)
-    NODE_A_PERCENT_TO_MEMBER("NODE_A_PERCENT_TO_MEMBER", 11),
-    //5%节点-(超级节点收益总量)
-    NODE_A_PERCENT("NODE_A_PERCENT", 10),
-    //10%直推-(直推收益)
-    DIRECT_A_PERCENT("DIRECT_A_PERCENT", 9),
-    //20%全网加权分红(按20%释放递减)-(全网加权分红收益总量)
-    POOL_ALL_MEMBER_A_CNT("POOL_ALL_MEMBER_A_CNT", 8),
-    //50%客户秒到-(AN DAO)
-    MEMBER_GET_A_CNT("MEMBER_GET_A_CNT", 7),
-    //进入b底池-(USDT B池)
-    USDT_IN_B_POOL("USDT_IN_B_POOL", 6),
-    //进入a底池-(USDT A池)
-    USDT_IN_A_POOL("USDT_IN_A_POOL", 5),
-    //入金,买入A币-(买入AN DAO)
-    BUY_A_COIN("BUY_A_COIN", 4),
-    //技术方收款-(技术方收益)
-    PROJECT_PERK("PROJECT_PERK", 3),
-    //直推收益-(节点直推收益)
-    DIRECT_PERK("DIRECT_PERK", 2),
-    //认购节点-(买入节点)
-    BUY_NODE("BUY_NODE", 1);
+    //赠送积分
+    PAY_ORDER("PAY_ORDER", 2),
+    //赠送积分
+    DONATE_SCORE("DONATE_SCORE", 1);
 
     private String type;
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
index 9bcc7ce..5993384 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
@@ -9,11 +9,13 @@
 public enum MemberLevelEnum {
     /**
      */
-    NODE_5("NODE_5",5,"DAO5"),
-    NODE_4("NODE_4",4,"DAO4"),
-    NODE_3("NODE_3",3,"DAO3"),
-    NODE_2("NODE_2",2,"DAO2"),
-    NODE_1("NODE_1",1,"DAO1"),
+    V7("V7",5,"V7"),
+    V6("V6",5,"V6"),
+    V5("V5",5,"V5"),
+    V4("V4",4,"V4"),
+    V3("V3",3,"V3"),
+    V2("V2",2,"V2"),
+    V1("V1",1,"V1"),
     MEMBER("MEMBER",0,"MEMBER");
 
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/init/MatrixTreeInit.java b/src/main/java/cc/mrbird/febs/dapp/init/MatrixTreeInit.java
new file mode 100644
index 0000000..1a75fbf
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/init/MatrixTreeInit.java
@@ -0,0 +1,45 @@
+package cc.mrbird.febs.dapp.init;
+
+import cc.mrbird.febs.dapp.entity.MatrixTreeNode;
+import cc.mrbird.febs.dapp.mapper.MatrixTreeNodeMapper;
+import cc.mrbird.febs.common.tree.MatrixTree;
+import cc.mrbird.febs.common.tree.MemberNode;
+import cn.hutool.core.collection.CollUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+/**
+ * 初始化
+ */
+@Slf4j
+@Component
+public class MatrixTreeInit {
+
+    @Autowired
+    private MatrixTreeNodeMapper matrixTreeNodeMapper;
+
+    @PostConstruct
+    public void init() {
+        List<MatrixTreeNode> tree = matrixTreeNodeMapper.selectAllMatrixTreeNode();
+
+        if (CollUtil.isEmpty(tree)) {
+            return;
+        }
+
+        for (MatrixTreeNode node : tree) {
+            MemberNode memberNode = new MemberNode();
+            memberNode.setMemberId(node.getTreeNode());
+            memberNode.setInviteId(node.getInviteId());
+            memberNode.setRefererId(node.getReferrerId());
+            MatrixTree.getInstance().addNode(memberNode, node.getParentNode());
+        }
+
+        MatrixTree instance = MatrixTree.getInstance();
+    }
+
+
+}
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 dc65f0d..0f2f671 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -1,8 +1,9 @@
 package cc.mrbird.febs.dapp.mapper;
 
+import cc.mrbird.febs.dapp.dto.MallGoodsQueryDto;
+import cc.mrbird.febs.dapp.dto.MallOrderQueryDto;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.vo.AdminTeamInfoVo;
-import cc.mrbird.febs.dapp.vo.DappMemberInfoVo;
+import cc.mrbird.febs.dapp.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -75,4 +76,18 @@
     List<DappMemberEntity> selectByNodetype();
 
     List<String> selectAddress();
+
+    IPage<MallGoodsListVo> selectMallGoodsListQueryInPage( @Param("record")MallGoodsQueryDto queryDto, Page<MallGoodsListVo> page);
+
+    IPage<MallOrderListVo> selectMallOrderListQueryInPage( @Param("record")MallOrderQueryDto queryDto, Page<MallOrderListVo> page);
+
+    MallOrderListVo selectMallOrderListVoById(@Param("orderId")Long id);
+
+    List<MallOrderItemVo> selectMallOrderItemVoByOrderId(@Param("orderId")Long id);
+
+    MallGoodsListVo selectMallGoodsListVoById(@Param("goodsId")Long id);
+
+    DappMemberEntity selectInviteLeft(@Param("inviteId")String inviteId);
+
+    DappMemberEntity selectInviteRight(@Param("inviteId")String inviteId);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
index 66fe044..d9fa421 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
@@ -41,6 +41,7 @@
     List<DappMemberEntity> selectTotalAmount();
 
     void addTotalAndaddAvailableByMemberId(@Param("memberId")Long id, @Param("balance")BigDecimal multiply);
+    void reduceTotalAndAvailableByMemberId(@Param("memberId")Long id, @Param("balance")BigDecimal multiply);
 
     List<DappWalletCoinEntity> selectAmountThanZero();
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java
new file mode 100644
index 0000000..7095fbc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MallAchieveRecordMapper.java
@@ -0,0 +1,23 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.MallAchieveRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+public interface MallAchieveRecordMapper extends BaseMapper<MallAchieveRecord> {
+    /**
+     *  根据日期获取总业绩
+     * @param type D:某一天;M:某一月
+     * @param date
+     * @return
+     */
+    BigDecimal selectAchieveTotal(@Param("type") String type, @Param("date") Date date);
+
+    BigDecimal selectSumAchieveByMemberIds(@Param("list")List<Long> mallMembersOffLinePerkIds, @Param("date") Date date);
+
+    List<MallAchieveRecord> selectListByDate(@Param("date")Date profitDate);
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderInfoMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderInfoMapper.java
index 1534434..710b061 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderInfoMapper.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderInfoMapper.java
@@ -1,16 +1,7 @@
 package cc.mrbird.febs.dapp.mapper;
 
-import cc.mrbird.febs.dapp.dto.MallOrderInfoDto;
 import cc.mrbird.febs.dapp.entity.MallOrderInfo;
-import cc.mrbird.febs.dapp.entity.MallOrderItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 public interface MallOrderInfoMapper extends BaseMapper<MallOrderInfo> {
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderItemMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderItemMapper.java
new file mode 100644
index 0000000..1ed548e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MallOrderItemMapper.java
@@ -0,0 +1,9 @@
+package cc.mrbird.febs.dapp.mapper;
+
+
+import cc.mrbird.febs.dapp.entity.MallOrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface MallOrderItemMapper extends BaseMapper<MallOrderItem> {
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java
new file mode 100644
index 0000000..479e0ea
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MatrixTreeNodeMapper.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.MatrixTreeNode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface MatrixTreeNodeMapper extends BaseMapper<MatrixTreeNode> {
+
+    List<MatrixTreeNode> selectAllMatrixTreeNode();
+
+    MatrixTreeNode selectByTreeNode(@Param("treeNode") Long treeNode);
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
index 11cc823..20353e1 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -37,9 +37,9 @@
 
     void setNewestPrice(PriceSettingDto priceSettingDto);
 
-    DappMemberEntity insertMember(String address, String refererId);
+    DappMemberEntity insertMember(String address, String refererId,int nodeType);
 
-    DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType);
+    DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType,int nodeType);
 
     TeamListVo findTeamList();
 
@@ -79,4 +79,17 @@
 
     FebsResponse agentLevelSetUpdate(AgentLevelSetUpdateDto agentLevelSetUpdateDto);
 
+    IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto);
+
+    IPage<MallOrderListVo> findMallOrderListInPage(MallOrderQueryDto queryDto);
+
+    MallOrderListVo findOrderDetailsById(Long id);
+
+    MallGoodsListVo findGoodsDetailsById(Long id);
+
+    Long createOrder(AddOrderDto addOrderDto);
+
+    void cancelOrder(Long id);
+
+    void payOrder(Long id);
 }
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 21a8ea8..09d829b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -12,8 +12,6 @@
 
     SystemDto system();
 
-    void achieveTree(Long memberId);
-
     /**
      * 投入收益
      *
@@ -102,4 +100,8 @@
     void contractAnDaoMsg(Long flowId);
 
     void contractAnDaoInMsg(Long flowId);
+
+    void speedPayOrderMsg(Long orderId);
+
+    void speedAutoLevelUpMsg(Long memberId);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/IMatrixTreeNodeService.java b/src/main/java/cc/mrbird/febs/dapp/service/IMatrixTreeNodeService.java
new file mode 100644
index 0000000..83c5768
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/service/IMatrixTreeNodeService.java
@@ -0,0 +1,10 @@
+package cc.mrbird.febs.dapp.service;
+
+import cc.mrbird.febs.common.tree.MemberNode;
+import cc.mrbird.febs.dapp.entity.MatrixTreeNode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IMatrixTreeNodeService extends IService<MatrixTreeNode> {
+
+    public MemberNode addTreeNode(Long memberId);
+}
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 a3dee21..48aea73 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
@@ -31,6 +31,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.jsoup.helper.DataUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.web3j.utils.Strings;
@@ -63,6 +64,9 @@
     private final DappMemberNodeMapper dappMemberNodeMapper;
     private final DappAKlineMapper dappAKlineMapper;
     private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper;
+    private final MallGoodsMapper mallGoodsMapper;
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final MallOrderItemMapper mallOrderItemMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -140,9 +144,21 @@
 
         if (member == null) {
             String referenceID = null;
+            int nodeType = 0;
             //
             if (!"asdf4321".equals(connectDto.getInviteId())) {
-                DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null);
+                DappMemberEntity left = dappMemberDao.selectInviteLeft(connectDto.getInviteId());
+                DappMemberEntity right = dappMemberDao.selectInviteRight(connectDto.getInviteId());
+                if(ObjectUtil.isEmpty(left) && ObjectUtil.isEmpty(right)){
+                    throw new FebsException("recommender is not exist");
+                }
+                if(ObjectUtil.isEmpty(left)){
+                    nodeType = 2;
+                }else{
+                    nodeType = 1;
+                }
+                String inviteId = ObjectUtil.isEmpty(left) ? right.getInviteId() : left.getInviteId();
+                DappMemberEntity parent = dappMemberDao.selectByAddress(inviteId, null);
                 if (parent == null) {
                     throw new FebsException("recommender is not exist");
                 }
@@ -151,7 +167,7 @@
             } else {
                 connectDto.setInviteId(null);
             }
-            member = insertMember(connectDto.getAddress(), referenceID);
+            member = insertMember(connectDto.getAddress(), referenceID,nodeType);
         }
 
         String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign());
@@ -305,18 +321,19 @@
     }
 
     @Override
-    public DappMemberEntity insertMember(String address, String refererId) {
+    public DappMemberEntity insertMember(String address, String refererId,int nodeType) {
 
-        return insertMember(address, refererId, "BSC", DataDictionaryEnum.MEMBER.getCode());
+        return insertMember(address, refererId, "BSC", MemberLevelEnum.MEMBER.getType(),nodeType);
     }
 
     @Override
-    public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType) {
+    public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType,int nodeType) {
         DappMemberEntity member = new DappMemberEntity();
         member.setAddress(address);
         member.setChainType(chainType);
         member.setAccountType(accountType);
         member.setActiveStatus(2);
+        member.setNodeType(nodeType);
 
         dappMemberDao.insert(member);
 
@@ -333,8 +350,10 @@
             // 若没有推荐人,则直接激活
             member.setActiveStatus(2);
         }
-
-        member.setInviteId(ShareCodeUtil.toSerialCode(member.getId()));
+        String inviteIdStr = ShareCodeUtil.toSerialCode(member.getId());
+        member.setInviteId(inviteIdStr);
+        member.setInviteLeft(inviteIdStr+"L");
+        member.setInviteRight(inviteIdStr+"R");
         member.setRefererId(refererId);
         if (StrUtil.isNotBlank(refererId)) {
             boolean flag = false;
@@ -777,6 +796,150 @@
         return new FebsResponse().success();
     }
 
+    @Override
+    public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) {
+        Page<MallGoodsListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        return dappMemberDao.selectMallGoodsListQueryInPage(queryDto, page);
+    }
+
+    @Override
+    public IPage<MallOrderListVo> findMallOrderListInPage(MallOrderQueryDto queryDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        queryDto.setMemberId(member.getId());
+        Page<MallOrderListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        return dappMemberDao.selectMallOrderListQueryInPage(queryDto, page);
+    }
+
+    @Override
+    public MallOrderListVo findOrderDetailsById(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        MallOrderListVo mallOrderListVo = dappMemberDao.selectMallOrderListVoById(id);
+        List<MallOrderItemVo> mallOrderItemVoList = dappMemberDao.selectMallOrderItemVoByOrderId(id);
+        mallOrderListVo.setItems(mallOrderItemVoList);
+        return mallOrderListVo;
+    }
+
+    @Override
+    public MallGoodsListVo findGoodsDetailsById(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        MallGoodsListVo mallGoodsListVo = dappMemberDao.selectMallGoodsListVoById(id);
+        return mallGoodsListVo;
+    }
+
+    @Override
+    @Transactional
+    public Long createOrder(AddOrderDto addOrderDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        /**
+         * 1、商品是否上架
+         * 2、用户余额是否足够
+         */
+        MallGoods mallGoods = mallGoodsMapper.selectById(addOrderDto.getGoodsId());
+        if(ObjectUtil.isEmpty(mallGoods)){
+            throw new FebsException("商品不存在");
+        }
+        if(MallGoods.ISSALE_STATUS_DISABLED == mallGoods.getIsSale()){
+            throw new FebsException("商品已下架");
+        }
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId());
+        if(ObjectUtil.isEmpty(dappWalletCoinEntity)){
+            throw new FebsException("余额不足");
+        }
+        BigDecimal presentPrice = new BigDecimal(mallGoods.getPresentPrice());
+        BigDecimal totalAmount = presentPrice.multiply(new BigDecimal(addOrderDto.getGoodsCnt())).setScale(2,BigDecimal.ROUND_DOWN);
+        if(BigDecimal.ZERO.compareTo(totalAmount) >= 0){
+            throw new FebsException("商品异常");
+        }
+        BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
+        if(totalAmount.compareTo(availableAmount) > 0){
+            throw new FebsException("余额不足");
+        }
+        /**
+         * 生成一条待支付的订单
+         */
+
+        String orderNo = MallUtils.getOrderNum();
+        MallOrderInfo mallOrderInfo = new MallOrderInfo();
+        mallOrderInfo.setOrderNo(orderNo);
+        mallOrderInfo.setMemberId(member.getId());
+        mallOrderInfo.setOrderTime(DateUtil.date());
+        mallOrderInfo.setAmount(totalAmount);
+        mallOrderInfo.setStatus(MallOrderInfo.STATUS_WAIT);
+        mallOrderInfo.setOrderType(1);
+        mallOrderInfoMapper.insert(mallOrderInfo);
+        MallOrderItem mallOrderItem = new MallOrderItem();
+        mallOrderItem.setOrderId(mallOrderInfo.getId());
+        mallOrderItem.setGoodsId(addOrderDto.getGoodsId());
+        mallOrderItem.setGoodsName(mallGoods.getGoodsName());
+        mallOrderItem.setCnt(addOrderDto.getGoodsCnt());
+        mallOrderItem.setPrice(presentPrice);
+        mallOrderItem.setAmount(totalAmount);
+        mallOrderItemMapper.insert(mallOrderItem);
+        return mallOrderInfo.getId();
+    }
+
+    @Override
+    @Transactional
+    public void cancelOrder(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
+        if (ObjectUtil.isEmpty(orderInfo)) {
+            throw new FebsException("订单异常");
+        }
+
+        if (MallOrderInfo.STATUS_WAIT != orderInfo.getStatus()) {
+            throw new FebsException("只能取消待支付的订单");
+        }
+
+        orderInfo.setStatus(MallOrderInfo.STATUS_CANCEL);
+        orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
+        mallOrderInfoMapper.updateById(orderInfo);
+    }
+
+    @Override
+    @Transactional
+    public void payOrder(Long id) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
+        if (ObjectUtil.isEmpty(orderInfo)) {
+            throw new FebsException("订单异常");
+        }
+
+        if (MallOrderInfo.STATUS_WAIT != orderInfo.getStatus()) {
+            throw new FebsException("只能支付待支付的订单");
+        }
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId());
+        BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
+        BigDecimal totalAmount = orderInfo.getAmount();
+        if(totalAmount.compareTo(availableAmount) > 0){
+            throw new FebsException("余额不足");
+        }
+        orderInfo.setPayTime(DateUtil.date());
+        String payOrderNo = MallUtils.getOrderNum("PAY");
+        orderInfo.setPayOrderNo(payOrderNo);
+        orderInfo.setPayMethod("余额支付");
+        orderInfo.setPayResult("成功");
+        orderInfo.setStatus(MallOrderInfo.STATUS_PAY);
+        mallOrderInfoMapper.updateById(orderInfo);
+        /**
+         * 更新用户余额
+         */
+        dappWalletCoinDao.reduceTotalAndAvailableByMemberId(member.getId(),totalAmount);
+        DappFundFlowEntity donateScoreFlow = new DappFundFlowEntity(
+                member.getId(),
+                totalAmount.negate(),
+                FundFlowEnum.PAY_ORDER.getCode(),
+                2,
+                BigDecimal.ZERO,
+                payOrderNo,
+                id);
+        dappFundFlowDao.insert(donateScoreFlow);
+        /**
+         * todo 发送一条订单出的消息
+         */
+        chainProducer.sendSpeedPayOrderMsg(id);
+    }
+
     public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {
         List<List<String>> partitionedList = new ArrayList<>();
         int size = originalList.size();
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 8c5623b..4315ec3 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.MemberNode;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.common.utils.SpringContextUtil;
@@ -15,10 +16,9 @@
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.dapp.service.DappWalletService;
+import cc.mrbird.febs.dapp.service.IMatrixTreeNodeService;
 import cc.mrbird.febs.dapp.vo.AKLineLimitVo;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
-import cc.mrbird.febs.tree.MatrixTree;
-import cc.mrbird.febs.tree.MemberNode;
 import cc.mrbird.febs.tree.TreeConstants;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
@@ -73,6 +73,9 @@
     private final DappWalletMineDao dappWalletMineDao;
     private final DappAKlineMapper dappAKlineMapper;
 
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final MallAchieveRecordMapper mallAchieveRecordMapper;
+
 
 
     @Override
@@ -82,111 +85,6 @@
         SystemDto system = new SystemDto();
         system.setBuyAmount(new BigDecimal("100"));
         return system;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public synchronized void achieveTree(Long memberId) {
-        DappMemberEntity member = dappMemberDao.selectById(memberId);
-
-        int batchNo = 0;
-        DappAchieveTreeEntity newestTreeNode = dappAchieveTreeDao.selectNewestTreeNode();
-        if (newestTreeNode != null) {
-            if (newestTreeNode.getValidState() == 2) {
-                batchNo = newestTreeNode.getBatchNo() + 1;
-            } else {
-                batchNo = newestTreeNode.getBatchNo();
-            }
-        }
-
-        // 在大树中,插入当前节点
-        DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity();
-        achieveTree.setMidNode(memberId);
-        achieveTree.setValidState(1);
-        achieveTree.setBatchNo(batchNo);
-        dappAchieveTreeDao.insert(achieveTree);
-
-        // 在内存树(大树)中插入当前节点,并返回父节点
-        MemberNode node = new MemberNode(member.getId(), member.getAddress(), member.getInviteId(), member.getRefererId());
-
-        MatrixTree tree = MatrixTree.getInstance();
-        MemberNode exist = tree.getNode(member.getId());
-        if (exist != null) {
-            return;
-        }
-
-        MemberNode parentNode = tree.addNode(node);
-
-        // 创建该节点的矩阵
-        DappAchieveMemberTreeEntity achieveMemberTree = new DappAchieveMemberTreeEntity();
-        achieveMemberTree.setTreeNode(memberId);
-        achieveMemberTree.setTopNode(memberId);
-        achieveMemberTree.setDeep(1);
-        achieveMemberTree.setHasMoney(1);
-        if (parentNode != null) {
-            achieveMemberTree.setParentNode(parentNode.getMemberId());
-        }
-        dappAchieveMemberTreeDao.insert(achieveMemberTree);
-
-        // 激活用户状态
-        member.setActiveStatus(1);
-        dappMemberDao.updateById(member);
-
-        putIntoProfit(memberId, 2);
-        if (parentNode == null) {
-            return;
-        }
-
-        // 修改父节点在数据库中的左/右节点数据
-        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, 1);
-        // 如果达到标准,则重置该矩阵树
-        if (matrixTree.size() == 7) {
-            dappAchieveMemberTreeDao.resetMatrixTree(memberId);
-            dappAchieveMemberTreeDao.reentryMoney(memberId);
-
-            putIntoProfit(memberId, 1);
-            DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3);
-            if (bottomNode != null) {
-                finishMatrixTree(bottomNode.getTopNode());
-            }
-        }
     }
 
     @Override
@@ -2534,6 +2432,84 @@
 
     }
 
+    @Override
+    public void speedPayOrderMsg(Long orderId) {
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
+        if(ObjectUtil.isEmpty(mallOrderInfo)){
+            return;
+        }
+        if(MallOrderInfo.STATUS_PAY != mallOrderInfo.getStatus()){
+            return;
+        }
+        Long memberId = mallOrderInfo.getMemberId();
+        /**
+         * 赠送消费金额1.5倍增值积分
+         */
+        BigDecimal amount = mallOrderInfo.getAmount();
+        DataDictionaryCustom donateScorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.DONATE_SCORE_PERCENT.getType(),
+                DataDictionaryEnum.DONATE_SCORE_PERCENT.getCode()
+        );
+        BigDecimal donateScorePercent = new BigDecimal(donateScorePercentDic.getValue());
+        BigDecimal donateScore = amount.multiply(donateScorePercent);
+        dappWalletMineDao.updateBalance(donateScore,donateScore,memberId);
+        DappFundFlowEntity donateScoreFlow = new DappFundFlowEntity(
+                memberId,
+                donateScore,
+                FundFlowEnum.DONATE_SCORE.getCode(),
+                2,
+                BigDecimal.ZERO,
+                null,
+                orderId);
+        dappFundFlowDao.insert(donateScoreFlow);
+        /**
+         * 新增一条业绩
+         */
+        MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(
+                memberId,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime()
+        );
+        mallAchieveRecordMapper.insert(mallAchieveRecord);
+
+    }
+
+
+    private final IMatrixTreeNodeService matrixTreeNodeService;
+
+    @Override
+    public void speedAutoLevelUpMsg(Long memberId) {log.info("###代理自动升级###");
+        DappMemberEntity member = dappMemberDao.selectById(memberId);
+        if (MemberLevelEnum.V7.getType().equals(member.getAccountType())) {
+            return;
+        }
+
+        MemberNode parentNode = matrixTreeNodeService.addTreeNode(memberId);
+        if (parentNode == null) {
+            log.info("父级节点未找到:{}", memberId);
+            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) {
+            return;
+        }
+
+        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());
+        }
+        memberMapper.updateById(parentMember);
+    }
+
     /**
      * 测试转账
      * @param args
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
new file mode 100644
index 0000000..bd7895b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/MatrixTreeNodeServiceImpl.java
@@ -0,0 +1,63 @@
+package cc.mrbird.febs.dapp.service.impl;
+
+import cc.mrbird.febs.common.tree.MatrixTree;
+import cc.mrbird.febs.common.tree.MemberNode;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.MatrixTreeNode;
+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.StrUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MatrixTreeNodeServiceImpl extends ServiceImpl<MatrixTreeNodeMapper, MatrixTreeNode> implements IMatrixTreeNodeService {
+
+    private final DappMemberDao mallMemberMapper;
+    private final MatrixTreeNodeMapper matrixTreeNodeMapper;
+
+    @Override
+    public MemberNode addTreeNode(Long memberId) {
+        DappMemberEntity mallMember = mallMemberMapper.selectById(memberId);
+        if (mallMember == null) {
+            return null;
+        }
+
+        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);
+            } else {
+                notWholeNode = instance.findNotWholeNode();
+            }
+
+            MatrixTreeNode treeNode = new MatrixTreeNode();
+            treeNode.setTreeNode(mallMember.getId());
+            treeNode.setParentNode(notWholeNode.getMemberId());
+            matrixTreeNodeMapper.insert(treeNode);
+        } else {
+            MatrixTreeNode treeNode = new MatrixTreeNode();
+            treeNode.setTreeNode(mallMember.getId());
+            matrixTreeNodeMapper.insert(treeNode);
+        }
+
+        node = new MemberNode();
+        node.setMemberId(memberId);
+        node.setInviteId(mallMember.getInviteId());
+        node.setRefererId(mallMember.getRefererId());
+        return instance.addNode(node);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
index dbf2bd2..e88262e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
@@ -16,6 +16,9 @@
     @ApiModelProperty(value = "代理身份")
     private String accountType;
 
+    @ApiModelProperty(value = "是否激活 1:已激活 2:未激活  已激活,有推广链接")
+    private Integer activeStatus;
+
     @ApiModelProperty(value = "资产余额")
     private BigDecimal propertyAmount;
 
@@ -51,9 +54,6 @@
 
     @ApiModelProperty(value = "我的贡献值")
     private BigDecimal nftDevote;
-
-    @ApiModelProperty(value = "是否激活 1:已激活 2:未激活  已激活,有推广链接")
-    private Integer activeStatus;
 
     @ApiModelProperty(value = "是否是超级节点 1:是 2:否")
     private Integer nodeType;
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/MallGoodsListVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/MallGoodsListVo.java
new file mode 100644
index 0000000..3905087
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/MallGoodsListVo.java
@@ -0,0 +1,49 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "MallGoodsListVo", description = "节点信息")
+public class MallGoodsListVo {
+    private Long id;
+    //商品编号
+    @ApiModelProperty(value = "商品编号")
+    private String goodsNo;
+    //商品名称
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+    //商品介绍
+    @ApiModelProperty(value = "商品介绍")
+    private String goodsIntrodution;
+    //缩略图
+    @ApiModelProperty(value = "缩略图")
+    private String thumb;
+    //商品参数
+    @ApiModelProperty(value = "商品参数")
+    private String goodsParameter;
+    //商品详情
+    @ApiModelProperty(value = "商品详情")
+    private String goodsDetails;
+    //是否上架;1-上架 2-下架
+    @ApiModelProperty(value = "是否上架;1-上架 2-下架")
+    private Integer isSale;
+
+    //原价
+    @ApiModelProperty(value = "原价")
+    private String originalPrice;
+    //现价
+    @ApiModelProperty(value = "现价")
+    private String presentPrice;
+    /**
+     * 销量
+     */
+    @ApiModelProperty(value = "销量")
+    private Integer volume;
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer sortCnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/MallOrderItemVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/MallOrderItemVo.java
new file mode 100644
index 0000000..8cfd659
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/MallOrderItemVo.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+@Data
+@ApiModel(value = "MallOrderItemVo", description = "订单信息")
+public class MallOrderItemVo {
+    //商品ID
+    @ApiModelProperty(value = "商品ID")
+    private Long goodsId;
+    //商品名称
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+    //数量
+    @ApiModelProperty(value = "数量")
+    private Integer cnt;
+    //单价
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+    //金额
+    @ApiModelProperty(value = "金额")
+    private BigDecimal amount;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/MallOrderListVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/MallOrderListVo.java
new file mode 100644
index 0000000..41aad8a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/MallOrderListVo.java
@@ -0,0 +1,61 @@
+package cc.mrbird.febs.dapp.vo;
+
+import cc.mrbird.febs.dapp.entity.MallOrderItem;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel(value = "MallOrderListVo", description = "节点信息")
+public class MallOrderListVo {
+    private Long id;
+    //订单号
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    //下单时间
+    @ApiModelProperty(value = "下单时间")
+    private Date orderTime;
+    //支付时间
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+    //订单金额
+    @ApiModelProperty(value = "订单金额")
+    private BigDecimal amount;
+    //支付方式
+    @ApiModelProperty(value = "支付方式")
+    private String payMethod;
+    //支付订单号
+    @ApiModelProperty(value = "支付订单号")
+    private String payOrderNo;
+    //支付结果 1-成功2-未成功
+    @ApiModelProperty(value = "支付结果 1-成功2-未成功")
+    private String payResult;
+
+    /**
+     * 状态;1-待支付2-已支付3-已取消
+     */
+    @ApiModelProperty(value = "状态;1-待支付2-已支付3-已取消")
+    private Integer status;
+
+    /**
+     * 取消类型;1-超时未支付2-主动取消
+     */
+    @ApiModelProperty(value = "取消类型;1-超时未支付2-主动取消")
+    private Integer cancelType;
+
+    /**
+     * 订单类型 1-普通订单 2-积分订单
+     */
+    @ApiModelProperty(value = "订单类型 1-普通订单 2-积分订单")
+    private Integer orderType;
+
+    @ApiModelProperty(value = "订单详情")
+    private List<MallOrderItemVo> items;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
index a914878..0b17fa1 100644
--- a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
+++ b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
@@ -23,176 +23,7 @@
 @Component
 @ConditionalOnProperty(prefix = "system", name = "quartz-job", havingValue = "true")
 public class BnbTransferJob{
-    /**
-     * 搜索还未发生转账操作,但是记录已经更新没有产生HASH值的流水记录,并发起转账操作
-     */
-    @Autowired
-    private DappFundFlowDao dappFundFlowDao;
-    @Autowired
-    private ChainProducer chainProducer;
-    @Autowired
-    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
-    @Autowired
-    private DappSystemService dappSystemService;
 
-    @Scheduled(cron = "0/30 * * * * ? ")
-    public void BnbTransferAgain() {
-        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectByStateAndVersionAndFromHashLimitOne(2,2);
-        if(ObjectUtil.isNotEmpty(dappFundFlowEntity)){
-            Integer isReturn = dappFundFlowEntity.getIsReturn();
-            if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == isReturn){
-                chainProducer.sendBnbTransferTestMsg(dappFundFlowEntity.getId());
-            }
-        }
-    }
-
-    @Scheduled(cron = "0/30 * * * * ? ")
-    public void ABTransferAgain() {
-        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectByStateAndVersionAndFromHashTwoLimitOne(1,2);
-        if(ObjectUtil.isNotEmpty(dappFundFlowEntity)){
-            Integer isReturn = dappFundFlowEntity.getIsReturn();
-            if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == isReturn){
-                chainProducer.sendAntKLineABMsg(dappFundFlowEntity.getId());
-            }
-        }
-    }
-
-    /**
-     * 20%所有人平分的底池
-     */
-//    @Scheduled(cron = "0 0 1 * * ?")
-//    public void memberPool() {
-//        DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-//                PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(),
-//                PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode()
-//        );
-//        BigDecimal nodeThreePoolDicCnt = new BigDecimal(nodeThreePoolDic.getValue());
-//        if(BigDecimal.ZERO.compareTo(nodeThreePoolDicCnt) >= 0){
-//            return;
-//        }
-//        BigDecimal nodeThreePoolDicCntReal = dappSystemService.nodePoolPerk(nodeThreePoolDicCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
-//        BigDecimal nodeThreePoolDicCntAva = nodeThreePoolDicCnt.subtract(nodeThreePoolDicCntReal);
-//        nodeThreePoolDic.setValue(nodeThreePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeThreePoolDicCntAva.toString() : "0");
-//        dataDictionaryCustomMapper.updateById(nodeThreePoolDic);
-//    }
-    /**
-     * NODE_5_POOL
-     * NODE_4_POOL
-     * NODE_3_POOL
-     * 节点底池的每日分配
-     */
-//    @Scheduled(cron = "0 0 1 * * ?")
-//    public void NodeThreePool() {
-//        DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-//                PoolEnum.NODE_3_POOL.getType(),
-//                PoolEnum.NODE_3_POOL.getCode()
-//        );
-//        BigDecimal nodeThreePoolDicCnt = new BigDecimal(nodeThreePoolDic.getValue());
-//        if(BigDecimal.ZERO.compareTo(nodeThreePoolDicCnt) >= 0){
-//            return;
-//        }
-//        BigDecimal nodeThreePoolDicCntReal = dappSystemService.nodePoolPerk(nodeThreePoolDicCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode());
-//        BigDecimal nodeThreePoolDicCntAva = nodeThreePoolDicCnt.subtract(nodeThreePoolDicCntReal);
-//        nodeThreePoolDic.setValue(nodeThreePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeThreePoolDicCntAva.toString() : "0");
-//        dataDictionaryCustomMapper.updateById(nodeThreePoolDic);
-//    }
-
-    /**
-     * 节点四的每日分配
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-//    public void NodeFourFivePool() {
-//        DataDictionaryCustom nodeFourPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-//                PoolEnum.NODE_4_POOL.getType(),
-//                PoolEnum.NODE_4_POOL.getCode()
-//        );
-//        BigDecimal nodeFourPoolDicCnt = new BigDecimal(nodeFourPoolDic.getValue());
-//        if(BigDecimal.ZERO.compareTo(nodeFourPoolDicCnt) >= 0){
-//            return;
-//        }
-//        BigDecimal nodeFourPoolDicCntReal = dappSystemService.nodePoolPerk(nodeFourPoolDicCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode());
-//        BigDecimal nodeFourPoolDicCntAva = nodeFourPoolDicCnt.subtract(nodeFourPoolDicCntReal);
-//        nodeFourPoolDic.setValue(nodeFourPoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFourPoolDicCntAva.toString() : "0");
-//        dataDictionaryCustomMapper.updateById(nodeFourPoolDic);
-//    }
-
-    /**
-     * 节点五的每日分配
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-//    public void NodeFivePool() {
-//        DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-//                PoolEnum.NODE_5_POOL.getType(),
-//                PoolEnum.NODE_5_POOL.getCode()
-//        );
-//        BigDecimal nodeFivePoolDicCnt = new BigDecimal(nodeFivePoolDic.getValue());
-//        if(BigDecimal.ZERO.compareTo(nodeFivePoolDicCnt) >= 0){
-//            return;
-//        }
-//        BigDecimal nodeFivePoolDicCntReal = dappSystemService.nodePoolPerk(nodeFivePoolDicCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode());
-//        BigDecimal nodeFivePoolDicCntAva = nodeFivePoolDicCnt.subtract(nodeFivePoolDicCntReal);
-//        nodeFivePoolDic.setValue(nodeFivePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFivePoolDicCntAva.toString() : "0");
-//        dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
-//    }
-
-    /**
-     * 节点五的平级奖励每日分配
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-//    public void NodeFiveEqualsPool() {
-//        DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-//                PoolEnum.NODE_5_EQUALS_POOL.getType(),
-//                PoolEnum.NODE_5_EQUALS_POOL.getCode()
-//        );
-//        BigDecimal nodeFivePoolDicCnt = new BigDecimal(nodeFivePoolDic.getValue());
-//        if(BigDecimal.ZERO.compareTo(nodeFivePoolDicCnt) >= 0){
-//            return;
-//        }
-//        BigDecimal nodeFivePoolDicCntReal = dappSystemService.nodePoolEqualsPerk(nodeFivePoolDicCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
-//        BigDecimal nodeFivePoolDicCntAva = nodeFivePoolDicCnt.subtract(nodeFivePoolDicCntReal);
-//        nodeFivePoolDic.setValue(nodeFivePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFivePoolDicCntAva.toString() : "0");
-//        dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
-//    }
-
-    /**
-     * 超级节点奖励每日分配
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-//    public void NodeAPercentPool() {
-//        DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-//                PoolEnum.NODE_A_PERCENT_POOL.getType(),
-//                PoolEnum.NODE_A_PERCENT_POOL.getCode()
-//        );
-//        BigDecimal nodeFivePoolDicCnt = new BigDecimal(nodeFivePoolDic.getValue());
-//        if(BigDecimal.ZERO.compareTo(nodeFivePoolDicCnt) >= 0){
-//            return;
-//        }
-//        /**
-//         * todo 超级节点的分红
-//         */
-//        BigDecimal nodeFivePoolDicCntReal = dappSystemService.superNodePoolPerk(nodeFivePoolDicCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
-//        BigDecimal nodeFivePoolDicCntAva = nodeFivePoolDicCnt.subtract(nodeFivePoolDicCntReal);
-//        nodeFivePoolDic.setValue(nodeFivePoolDicCntAva.compareTo(BigDecimal.ZERO) > 0 ? nodeFivePoolDicCntAva.toString() : "0");
-//        dataDictionaryCustomMapper.updateById(nodeFivePoolDic);
-//    }
-    @Scheduled(cron = "0 0 * * * ?")
-    public void aKlineJobHour() {
-        /**
-         * A币全网每小时自动燃烧0.1%,燃烧按递减燃烧,按个人每小时0.1%每小时递减。
-         *
-         * A币技术做到资产钱包燃烧,闪兑钱包也要燃烧0.1%每小时
-         */
-        dappSystemService.aCoinFire();
-        /**
-         * A币内网要做K线图,K线效果做到与交易所效果接近。
-         * 小时
-         */
-        dappSystemService.aKlineJobHour();
-    }
-    /**
-     * A币内网要做K线图,K线效果做到与交易所效果接近。
-     * 日
-     */
     @Scheduled(cron = "0 0 0 * * ?")
     public void aKlineJobDay() {
         dappSystemService.aKlineJobDay();
diff --git a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
index 1b842c4..fe7456d 100644
--- a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
+++ b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
@@ -28,7 +28,6 @@
 
         MatrixTree instance = MatrixTree.getInstance();
         for (DappAchieveTreeEntity treeNode : tree) {
-
             MemberNode node = new MemberNode();
             node.setAddress(treeNode.getAddress());
             node.setInviteId(treeNode.getInviteId());
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
index 25108e1..436df92 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
@@ -6,64 +6,13 @@
  **/
 public class QueueConstants {
 
-    public static final String QUEUE_BNB_TRANSFER_TEST = "queue_bnb_agent_up_test_test";
-    public static final String QUEUE_BNB_AGENT_UP = "queue_bnb_agent_up_test";
-    public static final String QUEUE_BNB_TRANSFER = "queue_ant_transfer_test";
-    public static final String QUEUE_MEMBER_OUT = "queue_bnb_member_out_test";
-    public static final String QUEUE_LEVEL_PROFIT = "queue_bnb_level_profit_transfer_test";
+    /**
+     * speed 代理升级
+     */
+    public static final String QUEUE_SPEED_LEVEL_UP = "queue_speed_level_up";
 
-    public static final String ONLINE_TRANSFER = "queue_sdm_online_transfer_test";
-    public static final String DISTRIB_PROFIT = "queue_sdm_distrib_profit_test";
-    public static final String USER_BUY_REWARD = "queue_sdm_user_buy_reward_test";
-    public static final String NFT_BOX = "queue_sdm_nft_box_test";
-    public static final String ACHIEVE_TREE = "queue_sdm_achieve_tree_test";
-    public static final String TFC_NEW_PRICE = "queue_tfc_new_price_test";
     /**
-     * A 入金的消息 队列
+     * speed 支付订单
      */
-    public static final String QUEUE_ANT_A_CION_IN = "queue_ant_a_coin_in_test";
-    /**
-     * A 入金,转入A底池 队列
-     */
-    public static final String QUEUE_ANT_A_CION_IN_A_POOL = "queue_ant_a_coin_in_a_pool_test";
-    /**
-     * A 入金,转入B底池 队列
-     */
-    public static final String QUEUE_ANT_A_CION_IN_B_POOL = "queue_ant_a_coin_in_b_pool_test";
-    /**
-     * A 入金,5%节点 队列
-     */
-    public static final String QUEUE_ANT_A_CION_IN_NODE = "queue_ant_a_coin_in_node_test";
-    /**
-     * A 入金,极差奖 队列
-     */
-    public static final String QUEUE_ANT_A_CION_IN_LEVEL = "queue_ant_a_coin_in_level_test";
-    /**
-     * A 提现
-     */
-    public static final String QUEUE_ANT_A_CION_OUT = "queue_ant_a_coin_out_test";
-    /**
-     * A 会员升级
-     */
-    public static final String QUEUE_ANT_MEMBER_LEVEL = "queue_ant_member_level_test";
-    /**
-     * A k线数据
-     */
-    public static final String QUEUE_ANT_K_LINE = "queue_ant_k_line_test";
-    /**
-     * A k线数据
-     */
-    public static final String QUEUE_ANT_K_LINE_AB = "queue_ant_k_line_test_ab";
-    /**
-     * A k线数据
-     */
-    public static final String QUEUE_ALL_MEMBER_PERK_AVA = "queue_all_member_perk_ava";
-    /**
-     * A 合约铸造ANDAO
-     */
-    public static final String QUEUE_CONTRACT_AN_DAO = "queue_contract_an_dao";
-    /**
-     * A 入金的消息 队列
-     */
-    public static final String QUEUE_ANT_A_CION_IN_CONTRACT = "queue_ant_a_coin_in_contract";
+    public static final String QUEUE_SPEED_PAY_ORDER = "queue_speed_pay_order";
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
index ee2d913..c5d7a11 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
@@ -5,48 +5,14 @@
 
 @Getter
 public enum QueueEnum {
-    //A 合约铸造ANDAO
-    ANT_A_CION_IN_CONTRACT("exchange_ant_a_coin_in_contract", "route_key_ant_a_coin_in_contract", QueueConstants.QUEUE_ANT_A_CION_IN_CONTRACT),
-    //A 合约铸造ANDAO
-    CONTRACT_AN_DAO("exchange_contract_an_dao", "route_key_contract_an_dao", QueueConstants.QUEUE_CONTRACT_AN_DAO),
-    //A 每人平分
-    ALL_MEMBER_PERK_AVA("exchange_all_member_perk_ava", "route_key_all_member_perk_ava", QueueConstants.QUEUE_ALL_MEMBER_PERK_AVA),
-    //A k线数据
-    ANT_K_LINE_AB("exchange_ant_k_line_test_ab", "route_key_ant_k_line_test_ab", QueueConstants.QUEUE_ANT_K_LINE_AB),
-    //A k线数据
-    ANT_K_LINE("exchange_ant_k_line_test", "route_key_ant_k_line_test", QueueConstants.QUEUE_ANT_K_LINE),
-    //A 会员升级
-    ANT_MEMBER_LEVEL("exchange_ant_member_level_test", "route_key_ant_member_level_test", QueueConstants.QUEUE_ANT_MEMBER_LEVEL),
-    //A 入金的消息
-    ANT_A_CION_OUT("exchange_ant_a_coin_out_test", "route_key_ant_a_coin_out_test", QueueConstants.QUEUE_ANT_A_CION_OUT),
-    //A 入金的消息
-    ANT_A_CION_IN_LEVEL("exchange_ant_a_coin_in_level_test", "route_key_ant_a_coin_in_level_test", QueueConstants.QUEUE_ANT_A_CION_IN_LEVEL),
-    //A 入金的消息
-    ANT_A_CION_IN_NODE("exchange_ant_a_coin_in_node_test", "route_key_ant_a_coin_in_node_test", QueueConstants.QUEUE_ANT_A_CION_IN_NODE),
-    //A 入金的消息
-    ANT_A_CION_IN_B_POOL("exchange_ant_a_coin_in_b_pool_test", "route_key_ant_a_coin_in_b_pool_test", QueueConstants.QUEUE_ANT_A_CION_IN_B_POOL),
-    //A 入金的消息
-    ANT_A_CION_IN_A_POOL("exchange_ant_a_coin_in_a_pool_test", "route_key_ant_a_coin_in_a_pool_test", QueueConstants.QUEUE_ANT_A_CION_IN_A_POOL),
-    //A 入金的消息
-    ANT_A_CION_IN("exchange_ant_a_coin_in_test", "route_key_ant_a_coin_in_test", QueueConstants.QUEUE_ANT_A_CION_IN),
-    //代理升级
-    BNB_TRANSFER_TEST("exchange_bnb_agent_up_test_test", "route_key_bnb_agent_up_test_test", "queue_bnb_agent_up_test_test"),
-    //代理升级
-    BNB_AGENT_UP("exchange_bnb_agent_up_test", "route_key_bnb_agent_up_test", "queue_bnb_agent_up_test"),
-    //转账拨币
-    BNB_TRANSFER("exchange_ant_transfer_test", "route_key_ant_transfer_test", "queue_ant_transfer_test"),
-    //计算是否有人出局
-    MEMBER_OUT("exchange_bnb_member_out_test", "route_key_bnb_member_out_test", "queue_bnb_member_out_test"),
-    //层级奖励
-    LEVEL_PROFIT("exchange_bnb_level_profit_transfer_test", "route_key_bnb_level_profit_transfer_test", "queue_bnb_level_profit_transfer_test"),
-
-    ONLINE_TRANSFER("exchange_sdm_online_transfer_test", "route_key_sdm_online_transfer_test", "queue_sdm_online_transfer_test"),
-    DISTRIB_PROFIT("exchange_sdm_distrib_profit_test", "route_key_sdm_distrib_profit_test", "queue_sdm_distrib_profit_test"),
-    USER_BUY_REWARD("exchange_sdm_user_buy_reward_test", "route_key_sdm_user_buy_reward_test", "queue_sdm_user_buy_reward_test"),
-    NFT_BOX("exchange_sdm_nft_box_test", "route_key_sdm_nft_box_test", "queue_sdm_nft_box_test"),
-    ACHIEVE_TREE("exchange_sdm_achieve_tree_test", "route_key_sdm_achieve_tree_test", "queue_sdm_achieve_tree_test"),
-    WITHDRAW_FEE("exchange_withdraw_fee_test", "route_key_withdraw_fee_test", "queue_withdraw_fee_test"),
-    TFC_NEW_PRICE("exchange_tfc_new_price_test", "route_key_tfc_new_price_test", "queue_tfc_new_price_test");
+    /**
+     * speed 代理升级
+     */
+    SPEED_LEVEL_UP("exchange_speed_level_up", "route_key_speed_level_up", QueueConstants.QUEUE_SPEED_LEVEL_UP),
+    /**
+     * speed 支付订单
+     */
+    SPEED_PAY_ORDER("exchange_speed_pay_order", "route_key_speed_pay_order", QueueConstants.QUEUE_SPEED_PAY_ORDER);
 
     private String exchange;
 
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
index da4f966..2e3f645 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -29,387 +29,37 @@
         return new RabbitTemplate(connectionFactory);
     }
 
-    // === 业绩树 start ===
+    // === speed 支付订单  start ===
     @Bean
-    public DirectExchange achieveTreeExchange() {
-        return new DirectExchange(QueueEnum.ACHIEVE_TREE.getExchange());
+    public DirectExchange speedPayOrderExchange() {
+        return new DirectExchange(QueueEnum.SPEED_PAY_ORDER.getExchange());
     }
 
     @Bean
-    public Queue achieveTreeQueue() {
-        return new Queue(QueueEnum.ACHIEVE_TREE.getQueue());
+    public Queue speedPayOrderQueue() {
+        return new Queue(QueueEnum.SPEED_PAY_ORDER.getQueue());
     }
 
     @Bean
-    public Binding achieveTreeBind() {
-        return BindingBuilder.bind(achieveTreeQueue()).to(achieveTreeExchange()).with(QueueEnum.ACHIEVE_TREE.getRoute());
+    public Binding speedPayOrderBind() {
+        return BindingBuilder.bind(speedPayOrderQueue()).to(speedPayOrderExchange()).with(QueueEnum.SPEED_PAY_ORDER.getRoute());
     }
-    // === 业绩树 end ===
+    // === speed 支付订单  end ===
 
-
-    // === 提现手续费 start ===
+    // === speed 代理升级  start ===
     @Bean
-    public DirectExchange withdrawFeeExchange() {
-        return new DirectExchange(QueueEnum.WITHDRAW_FEE.getExchange());
+    public DirectExchange speedLevelUpExchange() {
+        return new DirectExchange(QueueEnum.SPEED_LEVEL_UP.getExchange());
     }
 
     @Bean
-    public Queue withdrawFeeQueue() {
-        return new Queue(QueueEnum.WITHDRAW_FEE.getQueue());
+    public Queue speedLevelUpQueue() {
+        return new Queue(QueueEnum.SPEED_LEVEL_UP.getQueue());
     }
 
     @Bean
-    public Binding withdrawFeeBind() {
-        return BindingBuilder.bind(withdrawFeeQueue()).to(withdrawFeeExchange()).with(QueueEnum.WITHDRAW_FEE.getRoute());
+    public Binding speedLevelUpBind() {
+        return BindingBuilder.bind(speedLevelUpQueue()).to(speedLevelUpExchange()).with(QueueEnum.SPEED_LEVEL_UP.getRoute());
     }
-    // === 提现手续费 end ===
-
-
-
-    // === tfc最新价 start ===
-    @Bean
-    public DirectExchange tfcNewPriceExchange() {
-        return new DirectExchange(QueueEnum.TFC_NEW_PRICE.getExchange());
-    }
-
-    @Bean
-    public Queue tfcNewPriceQueue() {
-        return new Queue(QueueEnum.TFC_NEW_PRICE.getQueue());
-    }
-
-    @Bean
-    public Binding tfcNewPriceBind() {
-        return BindingBuilder.bind(tfcNewPriceQueue()).to(tfcNewPriceExchange()).with(QueueEnum.TFC_NEW_PRICE.getRoute());
-    }
-    // === tfc最新价 end ===
-
-
-
-    // === 手续费分发 start ===
-    @Bean
-    public DirectExchange feeDistributeExchange() {
-        return new DirectExchange(QueueEnum.DISTRIB_PROFIT.getExchange());
-    }
-
-    @Bean
-    public Queue feeDistributeQueue() {
-        return new Queue(QueueEnum.DISTRIB_PROFIT.getQueue());
-    }
-
-    @Bean
-    public Binding feeDistributeBind() {
-        return BindingBuilder.bind(feeDistributeQueue()).to(feeDistributeExchange()).with(QueueEnum.DISTRIB_PROFIT.getRoute());
-    }
-    // === 手续费分发 end ===
-
-
-
-    // === 层级奖励分发 start ===
-    @Bean
-    public DirectExchange levelProfitExchange() {
-        return new DirectExchange(QueueEnum.LEVEL_PROFIT.getExchange());
-    }
-
-    @Bean
-    public Queue levelProfitQueue() {
-        return new Queue(QueueEnum.LEVEL_PROFIT.getQueue());
-    }
-
-    @Bean
-    public Binding levelProfitBind() {
-        return BindingBuilder.bind(levelProfitQueue()).to(levelProfitExchange()).with(QueueEnum.LEVEL_PROFIT.getRoute());
-    }
-    // === 层级奖励分发 end ===
-
-
-
-    // === 计算是否有人出局 start ===
-    @Bean
-    public DirectExchange memberOutExchange() {
-        return new DirectExchange(QueueEnum.MEMBER_OUT.getExchange());
-    }
-
-    @Bean
-    public Queue memberOutQueue() {
-        return new Queue(QueueEnum.MEMBER_OUT.getQueue());
-    }
-
-    @Bean
-    public Binding memberOutBind() {
-        return BindingBuilder.bind(memberOutQueue()).to(memberOutExchange()).with(QueueEnum.MEMBER_OUT.getRoute());
-    }
-    // === 计算是否有人出局 end ===
-
-
-
-    // === 转账拨币 start ===
-    @Bean
-    public DirectExchange bnbTransferExchange() {
-        return new DirectExchange(QueueEnum.BNB_TRANSFER.getExchange());
-    }
-
-    @Bean
-    public Queue bnbTransferQueue() {
-        return new Queue(QueueEnum.BNB_TRANSFER.getQueue());
-    }
-
-    @Bean
-    public Binding bnbTransferBind() {
-        return BindingBuilder.bind(bnbTransferQueue()).to(bnbTransferExchange()).with(QueueEnum.BNB_TRANSFER.getRoute());
-    }
-    // === 转账拨币 end ===
-
-
-
-    // === 代理升级 start ===
-    @Bean
-    public DirectExchange agentUpExchange() {
-        return new DirectExchange(QueueEnum.BNB_AGENT_UP.getExchange());
-    }
-
-    @Bean
-    public Queue agentUpQueue() {
-        return new Queue(QueueEnum.BNB_AGENT_UP.getQueue());
-    }
-
-    @Bean
-    public Binding agentUpBind() {
-        return BindingBuilder.bind(agentUpQueue()).to(agentUpExchange()).with(QueueEnum.BNB_AGENT_UP.getRoute());
-    }
-    // === 代理升级 end ===
-
-
-
-    // === 消息测试 start ===
-    @Bean
-    public DirectExchange bnbTransferTestExchange() {
-        return new DirectExchange(QueueEnum.BNB_TRANSFER_TEST.getExchange());
-    }
-
-    @Bean
-    public Queue bnbTransferTestQueue() {
-        return new Queue(QueueEnum.BNB_TRANSFER_TEST.getQueue());
-    }
-
-    @Bean
-    public Binding bnbTransferTestBind() {
-        return BindingBuilder.bind(bnbTransferTestQueue()).to(bnbTransferTestExchange()).with(QueueEnum.BNB_TRANSFER_TEST.getRoute());
-    }
-    // === 消息测试 end ===
-
-
-    // === A 入金的消息 start ===
-    @Bean
-    public DirectExchange antACoinInExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_IN.getExchange());
-    }
-
-    @Bean
-    public Queue antACoinInQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_IN.getQueue());
-    }
-
-    @Bean
-    public Binding antACoinInBind() {
-        return BindingBuilder.bind(antACoinInQueue()).to(antACoinInExchange()).with(QueueEnum.ANT_A_CION_IN.getRoute());
-    }
-    // === A 入金的消息 end ===
-
-
-    // === A 入金,转入A底池 start ===
-    @Bean
-    public DirectExchange antACoinInAPoolExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_IN_A_POOL.getExchange());
-    }
-
-    @Bean
-    public Queue antACoinInAPoolQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_IN_A_POOL.getQueue());
-    }
-
-    @Bean
-    public Binding antACoinInAPoolBind() {
-        return BindingBuilder.bind(antACoinInAPoolQueue()).to(antACoinInAPoolExchange()).with(QueueEnum.ANT_A_CION_IN_A_POOL.getRoute());
-    }
-    // === A 入金,转入A底池 end ===
-
-
-    // === A 入金,转入B底池 start ===
-    @Bean
-    public DirectExchange antACoinInBPoolExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_IN_B_POOL.getExchange());
-    }
-
-    @Bean
-    public Queue antACoinInBPoolQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_IN_B_POOL.getQueue());
-    }
-
-    @Bean
-    public Binding antACoinInBPoolBind() {
-        return BindingBuilder.bind(antACoinInBPoolQueue()).to(antACoinInBPoolExchange()).with(QueueEnum.ANT_A_CION_IN_B_POOL.getRoute());
-    }
-    // === A 入金,转入B底池 end ===
-
-
-    // === A 入金,5%节点 start ===
-    @Bean
-    public DirectExchange antACoinInNodeExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_IN_NODE.getExchange());
-    }
-
-    @Bean
-    public Queue antACoinInNodeQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_IN_NODE.getQueue());
-    }
-
-    @Bean
-    public Binding antACoinInNodeBind() {
-        return BindingBuilder.bind(antACoinInNodeQueue()).to(antACoinInNodeExchange()).with(QueueEnum.ANT_A_CION_IN_NODE.getRoute());
-    }
-    // === A 入金,5%节点 end ===
-
-
-    // === A 入金,极差奖  start ===
-    @Bean
-    public DirectExchange antACoinInLevelExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_IN_LEVEL.getExchange());
-    }
-
-    @Bean
-    public Queue antACoinInLevelQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_IN_LEVEL.getQueue());
-    }
-
-    @Bean
-    public Binding antACoinInLevelBind() {
-        return BindingBuilder.bind(antACoinInLevelQueue()).to(antACoinInLevelExchange()).with(QueueEnum.ANT_A_CION_IN_LEVEL.getRoute());
-    }
-    // === A 入金,极差奖  end ===
-
-
-    // === A 提现  start ===
-    @Bean
-    public DirectExchange antACoinOutExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_OUT.getExchange());
-    }
-
-    @Bean
-    public Queue antACoinOutQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_OUT.getQueue());
-    }
-
-    @Bean
-    public Binding antACoinOutBind() {
-        return BindingBuilder.bind(antACoinOutQueue()).to(antACoinOutExchange()).with(QueueEnum.ANT_A_CION_OUT.getRoute());
-    }
-    // === A 提现  end ===
-
-
-    // === A 会员升级  start ===
-    @Bean
-    public DirectExchange antMemberLevelExchange() {
-        return new DirectExchange(QueueEnum.ANT_MEMBER_LEVEL.getExchange());
-    }
-
-    @Bean
-    public Queue antMemberLevelQueue() {
-        return new Queue(QueueEnum.ANT_MEMBER_LEVEL.getQueue());
-    }
-
-    @Bean
-    public Binding antMemberLevelBind() {
-        return BindingBuilder.bind(antMemberLevelQueue()).to(antMemberLevelExchange()).with(QueueEnum.ANT_MEMBER_LEVEL.getRoute());
-    }
-    // === A 会员升级  end ===
-
-
-    // === A k线数据  start ===
-    @Bean
-    public DirectExchange antKLineExchange() {
-        return new DirectExchange(QueueEnum.ANT_K_LINE.getExchange());
-    }
-
-    @Bean
-    public Queue antKLineQueue() {
-        return new Queue(QueueEnum.ANT_K_LINE.getQueue());
-    }
-
-    @Bean
-    public Binding antKLineBind() {
-        return BindingBuilder.bind(antKLineQueue()).to(antKLineExchange()).with(QueueEnum.ANT_K_LINE.getRoute());
-    }
-    // === A k线数据  end ===
-
-
-    // === A k线数据  start ===
-    @Bean
-    public DirectExchange antKLineABExchange() {
-        return new DirectExchange(QueueEnum.ANT_K_LINE_AB.getExchange());
-    }
-
-    @Bean
-    public Queue antKLineABQueue() {
-        return new Queue(QueueEnum.ANT_K_LINE_AB.getQueue());
-    }
-
-    @Bean
-    public Binding antKLineABBind() {
-        return BindingBuilder.bind(antKLineABQueue()).to(antKLineABExchange()).with(QueueEnum.ANT_K_LINE_AB.getRoute());
-    }
-    // === A k线数据  end ===
-
-
-    // === A k线数据  start ===
-    @Bean
-    public DirectExchange allMemberPerkAvaExchange() {
-        return new DirectExchange(QueueEnum.ALL_MEMBER_PERK_AVA.getExchange());
-    }
-
-    @Bean
-    public Queue allMemberPerkAvaQueue() {
-        return new Queue(QueueEnum.ALL_MEMBER_PERK_AVA.getQueue());
-    }
-
-    @Bean
-    public Binding allMemberPerkAvaBind() {
-        return BindingBuilder.bind(allMemberPerkAvaQueue()).to(allMemberPerkAvaExchange()).with(QueueEnum.ALL_MEMBER_PERK_AVA.getRoute());
-    }
-    // === A k线数据  end ===
-
-
-    // === A 合约铸造ANDAO  start ===
-    @Bean
-    public DirectExchange contractAnDaoExchange() {
-        return new DirectExchange(QueueEnum.CONTRACT_AN_DAO.getExchange());
-    }
-
-    @Bean
-    public Queue contractAnDaoQueue() {
-        return new Queue(QueueEnum.CONTRACT_AN_DAO.getQueue());
-    }
-
-    @Bean
-    public Binding contractAnDaoBind() {
-        return BindingBuilder.bind(contractAnDaoQueue()).to(contractAnDaoExchange()).with(QueueEnum.CONTRACT_AN_DAO.getRoute());
-    }
-    // === A 合约铸造ANDAO  end ===
-
-
-    // === A 合约铸造ANDAO  start ===
-    @Bean
-    public DirectExchange contractAnDaoInExchange() {
-        return new DirectExchange(QueueEnum.ANT_A_CION_IN_CONTRACT.getExchange());
-    }
-
-    @Bean
-    public Queue contractAnDaoInQueue() {
-        return new Queue(QueueEnum.ANT_A_CION_IN_CONTRACT.getQueue());
-    }
-
-    @Bean
-    public Binding contractAnDaoInBind() {
-        return BindingBuilder.bind(contractAnDaoInQueue()).to(contractAnDaoInExchange()).with(QueueEnum.ANT_A_CION_IN_CONTRACT.getRoute());
-    }
-    // === A 合约铸造ANDAO  end ===
+    // === speed 代理升级  end ===
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
index 991d764..1063f6a 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -23,187 +23,29 @@
     @Autowired
     private DappSystemService dappSystemService;
 
-//    @RabbitListener(queues = QueueConstants.ACHIEVE_TREE)
-//    public void achieveTree(String id) {
-//        log.info("收到业绩树消息");
-//        dappSystemService.achieveTree(Long.parseLong(id));
-//    }
-//
-//    /**
-//     * 生产者在tfc应用
-//     * @param data
-//     */
-//    @RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
-//    public void tfcNewPrice(String data) {
-////        dappSystemService.tfcNewPrice(data);
-//    }
-//
-//    /**
-//     * @param data
-//     */
-//    @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
-//    public void feeDistribute(String data) {
-//        dappSystemService.feeDistribute(data);
-//    }
-
-    /**层级奖励分发消息
-     * @param id
-     */
-//    @RabbitListener(queues = QueueConstants.QUEUE_LEVEL_PROFIT)
-//    public void levelProfit(Long id) {
-//        log.info("消费层级奖励分发消息:{}", id);
-//        dappSystemService.levelProfit(id);
-//    }
-
-    /**计算是否有人出局分发消息
-     * @param id
-     */
-//    @RabbitListener(queues = QueueConstants.QUEUE_MEMBER_OUT)
-//    public void memberOut(Long id) {
-//        log.info("消费计算是否有人出局:{}", id);
-//        dappSystemService.memberOut(id);
-//    }
-
-    /**转账拨币
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_BNB_TRANSFER)
-    public void bnbTransfer(Long id) {
-        log.info("消费转账拨币第一步:{}", id);
-        dappSystemService.bnbTransfer(id);
-    }
-
-    /**转账拨币
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_BNB_TRANSFER_TEST)
-    public void bnbTransferTest(Long id) {
-        log.info("消费转账拨币第二步:{}", id);
-        dappSystemService.bnbTransferTest(id);
-    }
-//
-//    /**代理升级
-//     * @param id
-//     */
-//    @RabbitListener(queues = QueueConstants.QUEUE_BNB_AGENT_UP)
-//    public void agentUp(Long id) {
-//        log.info("代理升级:{}", id);
-//        dappSystemService.agentUp(id);
-//    }
-
     /**
-     * 消费---A 入金的消息
-     * @param id
+     * speed 支付订单
      */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN)
-    public void AntACoinInMsg(Long id) {
-        log.info("消费---A 入金的消息:{}", id);
-        dappSystemService.AntACoinInMsg(id);
+    @RabbitListener(queues = QueueConstants.QUEUE_SPEED_PAY_ORDER)
+    public void speedPayOrderMsg(Long orderId) {
+        log.info("speedPayOrderMsg:{}", orderId);
+        try {
+            dappSystemService.speedPayOrderMsg(orderId);
+        } catch (Exception e) {
+            log.error("speedPayOrderErr:", e);
+        }
     }
 
     /**
-     * 消费---A 入金,转入A底池
-     * @param id
+     * speed 代理升级
      */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_A_POOL)
-    public void AntACoinAPollInMsg(Long id) {
-        log.info("消费---A 入金,转入A底池:{}", id);
-        dappSystemService.AntACoinAPollInMsg(id);
-    }
-
-    /**
-     * 消费---A 入金,转入B底池
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_B_POOL)
-    public void AntACoinBPollInMsg(Long id) {
-        log.info("消费---A 入金,转入B底池:{}", id);
-        dappSystemService.AntACoinBPollInMsg(id);
-    }
-
-    /**
-     * 消费---A 入金,5%节点
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_NODE)
-    public void antACoinInNodeMsg(Long id) {
-        log.info("消费---A 入金,转入5%节点:{}", id);
-        dappSystemService.antACoinInNodeMsg(id);
-    }
-
-    /**
-     * 消费---A 入金,10%极差奖
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_LEVEL)
-    public void antACoinInLevelMsg(Long id) {
-        log.info("消费---A 入金,转入10%极差奖:{}", id);
-        dappSystemService.antACoinInLevelMsg(id);
-    }
-
-    /**
-     * 提现
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_OUT)
-    public void antACoinOutMsg(Long id) {
-        log.info("消费---A 提现:{}", id);
-        dappSystemService.antACoinOutMsg(id);
-    }
-
-    /**
-     *  A 代理升级
-     * @param memberId
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_MEMBER_LEVEL)
-    public void antMemberLevelMsg(Long memberId) {
-        log.info("消费---A 代理升级:{}", memberId);
-        dappSystemService.antMemberLevelMsg(memberId);
-    }
-
-    /**
-     *  A k线数据
-     * @param type
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_K_LINE)
-    public void antKLineMsg(int type) {
-        log.info("消费---A k线数据:{}", type);
-        dappSystemService.antKLineMsg(type);
-    }
-
-    /**转账拨币
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_K_LINE_AB)
-    public void antKLineABMsg(Long id) {
-        log.info("消费转账拨币第二步:{}", id);
-        dappSystemService.antKLineABMsg(id);
-    }
-
-    /**转账拨币
-     * @param id
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ALL_MEMBER_PERK_AVA)
-    public void allMemberPerkAvaMsg(Long id) {
-        log.info("全体平分:{}", id);
-        dappSystemService.allMemberPerkAvaMsg(id);
-    }
-
-    /**合约铸造ANDAO
-     * @param flowId
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_CONTRACT_AN_DAO)
-    public void contractAnDaoMsg(Long flowId) {
-        log.info("1-消费合约铸造ANDAO:{}", flowId);
-        dappSystemService.contractAnDaoMsg(flowId);
-    }
-
-    /**合约铸造ANDAO
-     * @param flowId
-     */
-    @RabbitListener(queues = QueueConstants.QUEUE_ANT_A_CION_IN_CONTRACT)
-    public void contractAnDaoInMsg(Long flowId) {
-        log.info("2-消费合约铸造ANDAO:{}", flowId);
-        dappSystemService.contractAnDaoInMsg(flowId);
+    @RabbitListener(queues = QueueConstants.QUEUE_SPEED_LEVEL_UP)
+    public void speedAutoLevelUpMsg(Long memberId) {
+        log.info("speedAutoLevelUpMsg:{}", memberId);
+        try {
+            dappSystemService.speedAutoLevelUpMsg(memberId);
+        } catch (Exception e) {
+            log.error("speedAutoLevelUpErr:", e);
+        }
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
index 5874e12..836558d 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -8,6 +8,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.validation.constraints.NotNull;
 import java.util.UUID;
 
 /**
@@ -34,197 +35,25 @@
 
     }
 
-    public void sendAchieveTreeMsg(Long id) {
-        log.info("发送业绩树消息:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ACHIEVE_TREE.getExchange(), QueueEnum.ACHIEVE_TREE.getRoute(), id, correlationData);
-    }
-
     /**
-     * 消费者在tfc应用
-     *
-     * @param data
+     *  speed 支付订单
+     * @param orderId 订单ID
      */
-    public void sendTfcFee(String data) {
-        log.info("发送提现手续费消息:{}", data);
+    public void sendSpeedPayOrderMsg(Long orderId) {
+        log.info("sendSpeedPayOrderMsg:{}", orderId);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.WITHDRAW_FEE.getExchange(), QueueEnum.WITHDRAW_FEE.getRoute(), data, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.SPEED_PAY_ORDER.getExchange(), QueueEnum.SPEED_PAY_ORDER.getRoute(), orderId, correlationData);
     }
 
-    /**
-     * 发送手续费分发消息
-     *
-     * @param id
-     */
-    public void sendFeeDistributeMsg(Long id) {
-        log.info("发送手续费分发消息:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.DISTRIB_PROFIT.getExchange(), QueueEnum.DISTRIB_PROFIT.getRoute(), id, correlationData);
-    }
 
     /**
-     * 层级奖励分发消息
-     *
-     * 会员ID
-     * @param id
-     */
-    public void sendLevelProfitMsg(Long id) {
-        log.info("层级奖励分发消息:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.LEVEL_PROFIT.getExchange(), QueueEnum.LEVEL_PROFIT.getRoute(), id, correlationData);
-    }
-
-    /**
-     * 计算是否有人出局分发消息
-     */
-    public void sendMemberOutMsg(Long id) {
-        log.info("计算是否有人出局:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.MEMBER_OUT.getExchange(), QueueEnum.MEMBER_OUT.getRoute(), id, correlationData);
-    }
-
-    /**
-     * 转账拨币
-     */
-    public void sendBnbTransferMsg(Long id) {
-        log.info("开始转账拨币第一步:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.BNB_TRANSFER.getExchange(), QueueEnum.BNB_TRANSFER.getRoute(), id, correlationData);
-    }
-
-    /**
-     * 转账拨币
-     */
-    public void sendBnbTransferTestMsg(Long id) {
-        log.info("开始转账拨币第二步:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.BNB_TRANSFER_TEST.getExchange(), QueueEnum.BNB_TRANSFER_TEST.getRoute(), id, correlationData);
-    }
-
-    /**
-     * 代理升级
-     */
-    public void sendAgentUpMsg(Long id) {
-        log.info("代理升级:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.BNB_AGENT_UP.getExchange(), QueueEnum.BNB_AGENT_UP.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 入金的消息
-     * @param id
-     */
-    public void sendAntACoinInMsg(Long id) {
-        log.info("开始---A 入金的消息:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN.getExchange(), QueueEnum.ANT_A_CION_IN.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 入金,转入A底池
-     * @param id
-     */
-    public void sendAntACoinInAPoolMsg(Long id) {
-        log.info("开始---A 入金,转入A底池:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_A_POOL.getExchange(), QueueEnum.ANT_A_CION_IN_A_POOL.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 入金,转入B底池
-     * @param id
-     */
-    public void sendAntACoinInBPoolMsg(Long id) {
-        log.info("开始---A 入金,转入B底池:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_B_POOL.getExchange(), QueueEnum.ANT_A_CION_IN_B_POOL.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 入金,5%节点
-     * @param id
-     */
-    public void sendAntACoinInNodeMsg(Long id) {
-        log.info("开始---A 入金,转入5%节点:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_NODE.getExchange(), QueueEnum.ANT_A_CION_IN_NODE.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 入金,10%极差奖
-     * @param id
-     */
-    public void sendAntACoinInLevelMsg(Long id) {
-        log.info("开始---A 入金,转入10%极差奖:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_LEVEL.getExchange(), QueueEnum.ANT_A_CION_IN_LEVEL.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 提现
-     * @param id
-     */
-    public void sendAntACoinOutMsg(Long id) {
-        log.info("开始---A 提现:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_OUT.getExchange(), QueueEnum.ANT_A_CION_OUT.getRoute(), id, correlationData);
-    }
-
-    /**
-     *  A 代理升级
+     * speed 代理升级
      * @param memberId
      */
-    public void sendAntMemberLevelMsg(Long memberId) {
-        log.info("开始---A 代理升级:{}", memberId);
+    public void sendAutoLevelUpMsg(@NotNull Long memberId) {
+        log.info("sendAutoLevelUpMsg:{}", memberId);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_MEMBER_LEVEL.getExchange(), QueueEnum.ANT_MEMBER_LEVEL.getRoute(), memberId, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.SPEED_LEVEL_UP.getExchange(), QueueEnum.SPEED_LEVEL_UP.getRoute(), memberId, correlationData);
     }
 
-    /**
-     *  A k线数据
-     * @param type
-     */
-    public void sendAntKLineMsg(int type) {
-        log.info("开始---A k线数据:{}", type);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_K_LINE.getExchange(), QueueEnum.ANT_K_LINE.getRoute(), type, correlationData);
-    }
-
-    /**
-     * 转账拨币
-     */
-    public void sendAntKLineABMsg(Long id) {
-        log.info("开始转账拨币第二步:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_K_LINE_AB.getExchange(), QueueEnum.ANT_K_LINE_AB.getRoute(), id, correlationData);
-    }
-
-    /**
-     * 转账拨币
-     */
-    public void sendAllMemberPerkAvaMsg(Long id) {
-        log.info("开始全体平分:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ALL_MEMBER_PERK_AVA.getExchange(), QueueEnum.ALL_MEMBER_PERK_AVA.getRoute(), id, correlationData);
-    }
-
-    /**
-     * 合约铸造ANDAO
-     */
-    public void sendContractAnDao(Long flowId) {
-        log.info("合约铸造ANDAO:{}", flowId);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.CONTRACT_AN_DAO.getExchange(), QueueEnum.CONTRACT_AN_DAO.getRoute(), flowId, correlationData);
-    }
-
-
-    /**
-     *  A 入金的消息
-     * @param id
-     */
-    public void sendAntACoinInContractMsg(Long id) {
-        log.info("开始---合约铸造ANDAO:{}", id);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.ANT_A_CION_IN_CONTRACT.getExchange(), QueueEnum.ANT_A_CION_IN_CONTRACT.getRoute(), id, correlationData);
-    }
 }
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index 3bfd934..2ecc2c5 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -258,4 +258,55 @@
             address
         from dapp_member where active_status  = 1
     </select>
+
+    <select id="selectMallGoodsListQueryInPage" resultType="cc.mrbird.febs.dapp.vo.MallGoodsListVo">
+        select
+        a.*
+        from mall_goods a
+        where a.is_sale = 1
+        group by a.id
+        order by a.sort_cnt asc
+    </select>
+
+    <select id="selectMallOrderListQueryInPage" resultType="cc.mrbird.febs.dapp.vo.MallOrderListVo">
+        select a.*
+        from mall_order_info a
+        <where>
+            a.member_id = #{record.memberId}
+            <if test="record != null">
+                <if test="record.status != null and record.status != ''">
+                    and a.status = #{record.status}
+                </if>
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+
+    <select id="selectMallOrderListVoById" resultType="cc.mrbird.febs.dapp.vo.MallOrderListVo">
+        select a.*
+        from mall_order_info a
+        where id = #{orderId}
+        order by a.create_time desc
+    </select>
+
+    <select id="selectMallOrderItemVoByOrderId" resultType="cc.mrbird.febs.dapp.vo.MallOrderItemVo">
+        select a.*
+        from mall_order_item a
+        where orderId = #{orderId}
+    </select>
+
+    <select id="selectMallGoodsListVoById" resultType="cc.mrbird.febs.dapp.vo.MallGoodsListVo">
+        select
+            a.*
+        from mall_goods a
+        where a.id = #{goodsId}
+    </select>
+
+    <select id="selectInviteLeft" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+        select * from dapp_member where invite_left = #{inviteId}
+    </select>
+
+    <select id="selectInviteRight" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+        select * from dapp_member where invite_right = #{inviteId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
index 87a7f49..c1fc310 100644
--- a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
+++ b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
@@ -141,6 +141,15 @@
             member_id = #{memberId}
     </update>
 
+    <update id="reduceTotalAndAvailableByMemberId">
+        update dapp_wallet_coin
+        set
+            total_amount = total_amount - #{balance},
+            available_amount = available_amount - #{balance}
+        where
+            member_id = #{memberId}
+    </update>
+
     <select id="selectAmountThanZero" resultType="cc.mrbird.febs.dapp.entity.DappWalletCoinEntity">
         select * from dapp_wallet_coin where available_amount > 0
     </select>
diff --git a/src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml b/src/main/resources/mapper/dapp/MallAchieveRecordMapper.xml
new file mode 100644
index 0000000..23f7942
--- /dev/null
+++ b/src/main/resources/mapper/dapp/MallAchieveRecordMapper.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.MallAchieveRecordMapper">
+
+    <select id="selectAchieveTotal" resultType="java.math.BigDecimal">
+        select IFNULL(sum(IFNULL(amount,0)),0) from mall_achieve_record
+        where 1=1
+        <if test='type == "D"'>
+            and date_format(achieve_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d');
+        </if>
+        <if test='type == "M"'>
+            and date_format(achieve_time, '%Y-%m') = date_format(#{date}, '%Y-%m');
+        </if>
+    </select>
+
+    <select id="selectSumAchieveByMemberIds" 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 >
+        and date_format(achieve_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d');
+    </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>
+
+</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
new file mode 100644
index 0000000..d7af182
--- /dev/null
+++ b/src/main/resources/mapper/dapp/MatrixTreeNodeMapper.xml
@@ -0,0 +1,14 @@
+<?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.MatrixTreeNodeMapper">
+
+    <select id="selectAllMatrixTreeNode" resultType="cc.mrbird.febs.dapp.entity.MatrixTreeNode">
+        select a.*, b.phone, b.name, b.invite_id, b.referrer_id from matrix_tree_node a
+          inner join mall_member b on a.tree_node=b.id
+        order by a.id
+    </select>
+
+    <select id="selectByTreeNode" resultType="cc.mrbird.febs.dapp.entity.MatrixTreeNode">
+        select * from matrix_tree_node where tree_node=#{treeNode}
+    </select>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.1