From 7f7a1b01527843ffb178d015a044380acbde4fe2 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Tue, 02 Jul 2024 16:23:25 +0800
Subject: [PATCH] 逻辑

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java     |  402 +++++++-
 src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java                     |   35 
 src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java                  |   33 
 src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java               |  137 +-
 src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java               |   19 
 src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java     |   95 -
 src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java                |   35 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java     |  103 ++
 src/main/resources/application-prod.yml                                       |    4 
 src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java               |   96 +
 src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java                  |  156 --
 src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java                        |   13 
 src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java                |   11 
 src/main/java/cc/mrbird/febs/dapp/enumerate/InviteRule.java                   |   40 
 src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java              |    8 
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java      |  325 +-----
 src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java              |   10 
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java      |  127 ++
 src/main/resources/application-dev.yml                                        |    8 
 src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java             |    6 
 src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java                            |   24 
 src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java                          |  384 +++++++-
 src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java              |   40 
 src/main/resources/mapper/dapp/DappFundFlowDao.xml                            |    1 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java     |  126 --
 src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java                       |   19 
 src/main/resources/application-chain.yml                                      |    6 
 /dev/null                                                                     |   62 -
 src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java                     |   22 
 src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java |    8 
 src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java         |   12 
 src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java           |    4 
 src/main/java/cc/mrbird/febs/common/contants/AppContants.java                 |    5 
 src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java                        |   46 
 src/main/java/cc/mrbird/febs/dapp/vo/TeamDownVo.java                          |   26 
 src/main/java/cc/mrbird/febs/dapp/vo/TeamUpVo.java                            |   35 
 src/test/java/cc/mrbird/febs/TreeTest.java                                    |    6 
 src/main/java/cc/mrbird/febs/job/ChainSDMChargeRunner.java                    |    8 
 src/main/resources/application.yml                                            |    2 
 src/main/resources/mapper/dapp/DappStorageMapper.xml                          |   53 +
 40 files changed, 1,556 insertions(+), 996 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
index 14e9f05..835908f 100644
--- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -4,6 +4,11 @@
 import java.util.LinkedList;
 
 public class AppContants {
+    public static final String DAO_TEAM_PERK_PERCENT = "0.05";
+    public static final String DAO_BU_CHANG_PERCENT = "0.02";
+    public static final String DAO_JI_LI_PERCENT = "0.06";
+    public static final String DAO_NODE_PERCENT = "0.05";
+    public static final String DIRECT_PERCENT = "0.08";
 
     /**
      * 系统用户
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
index 740d354..54041f9 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
@@ -25,10 +25,15 @@
      * 正式 0xb27e44f98543e480dbd071b6605005e3d99b3dd4 https://bsc-dataseed1.ninicoin.io
      *
      */
-    BSC_TFC("BSC", "0x0F22E63D2FB18963C57A5Cb3C43403d156D140c2",
-            "0x5bd9f75f53693076e19a8f20d66a147bf0a438275463d2b8d85be8ab11780836",
-            "https://bsc-dataseed1.ninicoin.io",
-            "0x5dc091e47EDcd24709C7922370806d39e6Ad8be9",
+//    BSC_TFC("BSC", "0x0F22E63D2FB18963C57A5Cb3C43403d156D140c2",
+//            "0x5bd9f75f53693076e19a8f20d66a147bf0a438275463d2b8d85be8ab11780836",
+//            "https://bsc-dataseed1.ninicoin.io",
+//            "0x5dc091e47EDcd24709C7922370806d39e6Ad8be9",
+//            ""),
+    BSC_TFC("BSC", "0xCEBfd36e03BD80c7015Cbad17eFfBc33d2923FF3",
+            "592cd2f7e57f94cad7eddc6019a9ed8a36ff05cf37037f74cebe1ffacfaabe77",
+            "https://data-seed-prebsc-1-s1.bnbchain.org:8545",
+            "0x840857BFE8135eab9B4C2E7e140139DEe2E2a479",
             ""),
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
index f21a835..0ba0c6d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
@@ -114,6 +114,41 @@
 
     }
 
+    public static void receivePeopleEventListener(BigInteger startBlock, BigInteger endBlock, ContractEventService event, String type) {
+        ChainEnum chain = ChainEnum.getValueByName(type);
+        assert chain != null;
+
+        EthUsdtContract contract = contract(chain.getPrivateKey(), chain.getContractAddress(), chain.getUrl());
+        EthFilter filter = getFilter(startBlock, endBlock, chain.getContractAddress());
+
+        Flowable<EthUsdtContract.ReceivePeopleEventResponse> eventFlowable = contract.receivePeopleEventFlowable(filter)
+                .doOnError(throwable ->
+                        log.error("合约事件监听发生错误: " + throwable.getMessage(), throwable)) // 更具体的错误日志记录
+                .retryWhen(errors -> {
+                    AtomicInteger counter = new AtomicInteger();
+                    return errors.takeWhile(e -> counter.getAndIncrement() != 3)
+                            .flatMap(e -> {
+                                System.out.println("delay retry by " + counter.get() + " second(s)");
+                                return Flowable.timer(counter.get(), TimeUnit.SECONDS);
+                            });
+                })
+                .subscribeOn(Schedulers.io()); // 指定subscribe操作在IO线程中执行,避免阻塞主线程
+
+        eventFlowable.subscribe(
+                e -> {
+                    try {
+                        event.receivePeopleEvent(e); // 处理事件
+                    } catch (Exception ex) {
+                        // 处理事件时可能出现的异常
+                        log.error("处理合约事件时出错", ex);
+                    }
+                },
+                Throwable::printStackTrace, // 打印错误堆栈,或者可以替换为更具体的错误处理逻辑
+                () -> log.info("合约事件监听已完成") // 在Flowable完成时执行的逻辑,如记录日志等
+        );
+
+    }
+
 
     public static void sdmChargeEventListener(BigInteger startBlock, BigInteger endBlock, ContractEventService event, String type) {
         ChainEnum chain = ChainEnum.getValueByName(type);
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
index aaa6509..dfcea6c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
@@ -14,4 +14,10 @@
      * @param e
      */
     void sdmUSDT(EthUsdtContract.TransferEventResponse e);
+
+    /**
+     * 用户存储PEOPLE
+     * @param e
+     */
+    void receivePeopleEvent(EthUsdtContract.ReceivePeopleEventResponse e);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
index 955f75d..d0e23d4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
@@ -127,6 +127,8 @@
 
     public static final String FUNC_TOUZHU = "touzhu";
 
+    public static final String FUNC_CUNCHU = "received";
+
     public static final String FUNC_TRANSFER = "transfer";
 
     public static final String FUNC_TRANSFERFROM = "transferFrom";
@@ -146,6 +148,10 @@
 
     public static final Event TRANSFER_EVENT = new Event("Transfer",
             Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint256>() {}));
+    ;
+
+    public static final Event CUNCHU_EVENT = new Event("received",
+            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
     ;
 
     @Deprecated
@@ -308,6 +314,25 @@
                     typedResponse.tokens = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                 }
 
+                return typedResponse;
+            }
+        });
+    }
+
+
+
+    public Flowable<ReceivePeopleEventResponse> receivePeopleEventFlowable(EthFilter filter) {
+        return web3j.ethLogFlowable(filter).map(new Function<Log, ReceivePeopleEventResponse>() {
+            @Override
+            public ReceivePeopleEventResponse apply(Log log) {
+                EventValuesWithLog eventValues = extractEventParametersWithLog(CUNCHU_EVENT, log);
+                ReceivePeopleEventResponse typedResponse = new ReceivePeopleEventResponse();
+                if(eventValues!=null){
+                    typedResponse.log = log;
+                    typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue();
+                    typedResponse.tokens = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
+                    typedResponse.regFlow = (String) eventValues.getNonIndexedValues().get(1).getValue();
+                }
                 return typedResponse;
             }
         });
@@ -735,4 +760,12 @@
 
         public BigInteger tokens;
     }
+
+    public static class ReceivePeopleEventResponse extends BaseEventResponse {
+        public String from;
+
+        public BigInteger tokens;
+
+        public String regFlow;
+    }
 }
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 5def91a..e95221b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiCommonController.java
@@ -2,19 +2,12 @@
 
 import cc.mrbird.febs.common.annotation.EncryptEnable;
 import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.dapp.dto.ApproveDto;
 import cc.mrbird.febs.dapp.dto.ConnectDto;
-import cc.mrbird.febs.dapp.dto.EncryptDto;
-import cc.mrbird.febs.dapp.dto.SystemDto;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
 import cc.mrbird.febs.dapp.service.DappMemberService;
-import cc.mrbird.febs.dapp.service.DappSimulateDataService;
 import cc.mrbird.febs.dapp.service.DappSystemService;
-import cc.mrbird.febs.dapp.vo.SimulateDataVo;
 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.*;
@@ -51,9 +44,4 @@
         return new FebsResponse().success();
     }
 
-//    @ApiOperation(value = "头部数据", notes = "头部数据")
-//    @GetMapping(value = "/totalIncome")
-//    public FebsResponse totalIncome() {
-//        return new FebsResponse().success().data(dappSystemService.findTotalInComeAndList());
-//    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
index 8149b65..ee3110c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -5,14 +5,14 @@
 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.dto.BuyNodeDto;
+import cc.mrbird.febs.dapp.dto.RecordInPageDto;
+import cc.mrbird.febs.dapp.dto.WithdrawDto;
 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.MemberNodeVo;
-import cc.mrbird.febs.dapp.vo.NodeTypeVo;
-import cc.mrbird.febs.dapp.vo.TeamListVo;
+import cc.mrbird.febs.dapp.vo.TeamDownVo;
+import cc.mrbird.febs.dapp.vo.TeamUpVo;
 import cc.mrbird.febs.dapp.vo.WalletInfoVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -38,7 +38,6 @@
 public class ApiDappMemberController {
 
     private final DappWalletService dappWalletService;
-    private final DappSystemService dappSystemService;
     private final DappMemberService dappMemberService;
     private final RedisUtils redisUtils;
 
@@ -52,58 +51,34 @@
         return new FebsResponse().success().data(walletInfoVo);
     }
 
-    @ApiOperation(value = "购买节点", notes = "购买节点")
-    @PostMapping(value = "/buyNode")
-    public FebsResponse buyNode(@RequestBody BuyNodeDto buyNodeDto) {
-        return new FebsResponse().success().data(dappWalletService.buyNode(buyNodeDto));
-    }
-
-    @ApiOperation(value = "获取星团集合", notes = "获取星团集合")
-    @ApiResponses({
-            @ApiResponse(code = 200, message = "success", response = NodeTypeVo.class)
-    })
-    @PostMapping(value = "/nodeList")
-    public FebsResponse nodeList() {
-        return dappWalletService.nodeList();
-    }
-
-    @ApiOperation(value = "购买星团", notes = "购买星团")
-    @PostMapping(value = "/buyStar")
-    public FebsResponse buyStar(@RequestBody BuyStarDto buyStarDto) {
-        return new FebsResponse().success().data(dappWalletService.buyStar(buyStarDto));
-    }
-
-    @ApiOperation(value = "星团矩阵", notes = "星团矩阵")
-    @ApiResponses({
-            @ApiResponse(code = 200, message = "success", response = MemberNodeVo.class)
-    })
-    @PostMapping(value = "/memberNode")
-    public FebsResponse memberNode(@RequestBody MemberNodeDto memberNodeDto) {
-        return new FebsResponse().success().data(dappWalletService.memberNode(memberNodeDto));
-    }
-
-    @ApiOperation(value = "转账", notes = "转账")
-    @PostMapping(value = "/transfer")
-    public FebsResponse transfer(@RequestBody TransferDto transferDto) {
-        return new FebsResponse().success().data(dappWalletService.transfer(transferDto));
-    }
-
-    @ApiOperation(value = "手续费充值", notes = "手续费充值")
-    @PostMapping(value = "/chargeFee")
-    public FebsResponse chargeFee(@RequestBody ChargeFeeDto chargeFeeDto) {
-        return new FebsResponse().success().data(dappWalletService.chargeFee(chargeFeeDto));
-    }
-
-    @ApiOperation(value = "手续费计算", notes = "手续费计算")
-    @PostMapping(value = "/calPrice")
-    public FebsResponse calPrice(@RequestBody PriceDto priceDto) {
-        return new FebsResponse().success().data(dappWalletService.calPrice(priceDto));
-    }
-
-    @ApiOperation(value = "记录列表", notes = "记录列表")
+    @ApiOperation(value = "资金流水", notes = "资金流水")
     @PostMapping(value = "/recordInPage")
     public FebsResponse recordInPage(@RequestBody RecordInPageDto recordInPageDto) {
         return new FebsResponse().success().data(dappWalletService.recordInPage(recordInPageDto));
+    }
+
+    @ApiOperation(value = "我的团队-上半部分", notes = "我的团队-上半部分")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = TeamUpVo.class)
+    })
+    @PostMapping(value = "/teamUp")
+    public FebsResponse teamUp() {
+        return new FebsResponse().success().data(dappMemberService.teamUp());
+    }
+
+    @ApiOperation(value = "我的团队-列表", notes = "我的团队-列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = TeamDownVo.class)
+    })
+    @PostMapping(value = "/teamDown")
+    public FebsResponse teamDown() {
+        return new FebsResponse().success().data(dappMemberService.teamDown());
+    }
+
+    @ApiOperation(value = "存储", notes = "存储")
+    @PostMapping(value = "/buyNode")
+    public FebsResponse buyNode(@RequestBody BuyNodeDto buyNodeDto) {
+        return new FebsResponse().success().data(dappWalletService.buyNode(buyNodeDto));
     }
 
     @ApiOperation(value = "提现", notes = "提现")
@@ -113,15 +88,7 @@
         return new FebsResponse().success().message("success");
     }
 
-    @ApiOperation(value = "我的团队", notes = "我的团队")
-    @ApiResponses({
-            @ApiResponse(code = 200, message = "success", response = TeamListVo.class)
-    })
-    @PostMapping(value = "/team")
-    public FebsResponse team() {
-        return new FebsResponse().success().data(dappMemberService.findTeamList());
-    }
-
+    @ApiOperation(value = "退出", notes = "退出")
     @PostMapping(value = "/logout")
     public FebsResponse logout() {
         DappMemberEntity member = LoginUserUtil.getAppUser();
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 a50d043..a547565 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -58,13 +58,22 @@
      * 账号类型 admin normal
      */
     private String accountType;
-
+    //出局总额度
+    /**
+     * 存储people的时候增加
+     * 受到任何收益的时候减少
+     * 小于等于0时,用户的激活状态【activeStatus】改成未激活,得不到任何奖励
+     */
     private BigDecimal usdtBalance;
 
     /**
      * 激活状态 1-已激活 2-未激活
      */
     private Integer activeStatus;
+    /**
+     * 会员层级
+     */
+    private Integer level;
     //是否购买节点 0 - 否  1 - 是
     private Integer buyNode;
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java
new file mode 100644
index 0000000..aea7eca
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappStorage.java
@@ -0,0 +1,22 @@
+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;
+
+@Data
+@TableName("dapp_storage")
+public class DappStorage  extends BaseEntity {
+
+    private Long memberId;
+
+    private Integer state;//1-释放中 2-已结束
+
+    private BigDecimal amount;
+
+    private BigDecimal releasePercent;
+
+    private BigDecimal releaseAmount;
+}
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 23b1aa6..78321c4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
@@ -4,6 +4,10 @@
 
 @Getter
 public enum DataDictionaryEnum {
+    WITHDRAW_PERCENT("WITHDRAW_PERCENT","WITHDRAW_PERCENT"),
+    RELEASE_PERCENT("RELEASE_PERCENT","RELEASE_PERCENT"),
+    JILI_CHI("JILI_CHI","JILI_CHI"),
+    BUCAHNG_CHI("BUCAHNG_CHI","BUCAHNG_CHI"),
     //每日节点购买最大值
     BUY_NODE_NUM("BUY_NODE_NUM","BUY_NODE_NUM"),
     //提现手续费率
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/InviteRule.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/InviteRule.java
index 79bfa13..8b646d5 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/InviteRule.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/InviteRule.java
@@ -7,16 +7,36 @@
     /**
      *  层级 直推人数 奖励百分比
      */
-    LEVEL_10(10,3,1),
-    LEVEL_9(9,3,1),
-    LEVEL_8(8,3,1),
-    LEVEL_7(7,3,1),
-    LEVEL_6(6,3,1),
-    LEVEL_5(5,3,1),
-    LEVEL_4(4,3,1),
-    LEVEL_3(3,2,1),
-    LEVEL_2(2,2,1),
-    LEVEL_1(1,2,1);
+    LEVEL_30(30,15,7),
+    LEVEL_29(29,15,7),
+    LEVEL_28(28,14,7),
+    LEVEL_27(27,14,7),
+    LEVEL_26(26,13,7),
+    LEVEL_25(25,13,4),
+    LEVEL_24(24,12,4),
+    LEVEL_23(23,12,4),
+    LEVEL_22(22,11,4),
+    LEVEL_21(21,11,4),
+    LEVEL_20(20,10,4),
+    LEVEL_19(19,10,4),
+    LEVEL_18(18,9,4),
+    LEVEL_17(17,9,4),
+    LEVEL_16(16,8,4),
+    LEVEL_15(15,8,5),
+    LEVEL_14(14,7,5),
+    LEVEL_13(13,7,5),
+    LEVEL_12(12,6,5),
+    LEVEL_11(11,6,5),
+    LEVEL_10(10,5,6),
+    LEVEL_9(9,5,6),
+    LEVEL_8(8,4,6),
+    LEVEL_7(7,4,6),
+    LEVEL_6(6,3,6),
+    LEVEL_5(5,3,7),
+    LEVEL_4(4,2,7),
+    LEVEL_3(3,2,7),
+    LEVEL_2(2,1,7),
+    LEVEL_1(1,1,7);
 
     private int level;
     private int InviteNum;
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
new file mode 100644
index 0000000..2d5da8f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/MemberLevelEnum.java
@@ -0,0 +1,40 @@
+package cc.mrbird.febs.dapp.enumerate;
+
+import lombok.Getter;
+
+@Getter
+public enum MemberLevelEnum {
+    DAO_3("DAO_3",3,5000000,2),
+    DAO_2("DAO_2",2,1000000,2),
+    DAO_1("DAO_1",1,300000,2),
+    DAO_0("DAO_0",0,0,2);
+
+
+    private String type;
+
+    private Integer code;
+
+    private Integer levelAchieve;//业绩需求
+
+    private Integer directNum;//直推需求
+
+    MemberLevelEnum(String type, Integer code,Integer levelAchieve,Integer directNum) {
+        this.type = type;
+        this.code = code;
+        this.levelAchieve = levelAchieve;
+        this.directNum = directNum;
+    }
+
+
+
+    public String getLevelType(Integer code){
+        String type = null;
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            if(value.code.equals(code)){
+                type = value.type;
+            }
+        }
+        return type;
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java
new file mode 100644
index 0000000..ded92dc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/MoneyFlowEnum.java
@@ -0,0 +1,35 @@
+package cc.mrbird.febs.dapp.enumerate;
+
+import lombok.Getter;
+
+/**
+ *
+ * 1-静态收益 2-直推奖 3-代理收益 4-排名收益 5-总监收益 6-社区点补 7-一代收益 8-提现 9-转增 10-支付 11-退款
+ * @author wzy
+ * @date 2021-09-24
+ **/
+@Getter
+public enum MoneyFlowEnum {
+
+    STATIC_PERK(11,"静态释放:{}"),
+    TEAM_THREE_PERK(10,"DAO3团队激励:激励:{}"),
+    TEAM_TWO_PERK(9,"DAO2团队激励:激励:{}"),
+    TEAM_ONE_PERK(8,"DAO1团队激励:激励:{}"),
+
+    ZHI_TUI_JI_LI_PERK(7,"直推激励:业绩:{},排名:{},激励:{}"),
+    DA_DAN_JI_LI_PERK(6,"大单激励:{}。激励:{}"),
+    BU_CHANG_PERK(5,"补偿池:{}。补偿:{}"),
+    NODE_PERK(4,"存储:{}。人数:{},节点奖励:{}"),
+    DIRECT_PERK(3,"存储:{}。直推奖励:{}"),
+    DYNAMIC_PERK(2,"存储:{}。动态奖励,直推:{},层级:{}"),
+    CUN_CHU(1,"存储PEOPLE:{}")
+    ;
+
+    private int value;
+    private String descrition;
+
+    MoneyFlowEnum(int value, String descrition) {
+        this.value = value;
+        this.descrition = descrition;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java
new file mode 100644
index 0000000..9eb1ae5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappStorageMapper.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappStorage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+public interface DappStorageMapper extends BaseMapper<DappStorage> {
+
+    DappStorage selectOneByDateDesc( @Param("date") Date date);
+
+    List<DappStorage> selectListByDateDesc( @Param("date") Date date);
+
+    List<DappStorage> selectListByDate( @Param("date") Date date);
+
+    DappStorage selectAmountByDesc(@Param("date") Date date,int offset,int count);
+}
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 5a33ebb..f7a1314 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -8,9 +8,13 @@
 import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
 import cc.mrbird.febs.dapp.entity.DbMemberNode;
 import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo;
+import cc.mrbird.febs.dapp.vo.TeamDownVo;
 import cc.mrbird.febs.dapp.vo.TeamListVo;
+import cc.mrbird.febs.dapp.vo.TeamUpVo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
 
 public interface DappMemberService extends IService<DappMemberEntity> {
 
@@ -45,4 +49,8 @@
     void setSystemFee(AdminSystemFeeVo adminSystemFeeVo);
 
     IPage<DbMemberNode> memberNodeList(DbMemberNode dbMemberNode, QueryRequest request);
+
+    TeamUpVo teamUp();
+
+    List<TeamDownVo> teamDown();
 }
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 110264d..dbbcda3 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -3,6 +3,8 @@
 import cc.mrbird.febs.dapp.dto.SystemDto;
 import cc.mrbird.febs.dapp.entity.DbMemberNode;
 
+import java.math.BigDecimal;
+
 public interface DappSystemService {
 
     SystemDto system();
@@ -29,4 +31,12 @@
     void invitePerkMsg(Long id);
 
     void nodePerkMsg(Long id);
+
+    void directPerkMsg(Long id);
+
+    void updateBalanceInsertFlow(BigDecimal daoNodeAmount, Long memberId, Integer type, String description);
+
+    void teamPerk(Long id);
+
+    void MemberLevel(Long id);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
index 02b6c7a..d4d0d28 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
@@ -3,7 +3,9 @@
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.MemberCoinWithdrawEntity;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.AdminOperationService;
 import cc.mrbird.febs.dapp.service.DappWalletService;
@@ -16,8 +18,6 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
 
 @Service
 @RequiredArgsConstructor
@@ -56,7 +56,7 @@
         dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
         dappFundFlowDao.updateById(dappFundFlowEntity);
 
-        chainProducer.sendFeeDistributeMsg(dappFundFlowEntity.getId());
+//        chainProducer.sendFeeDistributeMsg(dappFundFlowEntity.getId());
         return new FebsResponse().success();
     }
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
index 3ad2cf6..19f6af0 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
@@ -1,15 +1,17 @@
 package cc.mrbird.febs.dapp.service.impl;
 
-import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.dapp.chain.ChainEnum;
-import cc.mrbird.febs.dapp.chain.ChainService;
 import cc.mrbird.febs.dapp.chain.ContractEventService;
 import cc.mrbird.febs.dapp.chain.EthUsdtContract;
 import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.DappStorage;
+import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
 import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
+import cc.mrbird.febs.dapp.mapper.DappStorageMapper;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
 import cc.mrbird.febs.dapp.service.DappMemberService;
-import cc.mrbird.febs.dapp.service.DappWalletService;
+import cc.mrbird.febs.rabbit.producer.ChainProducer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -26,15 +28,14 @@
 
     @Resource
     private DappMemberService dappMemberService;
-
     @Resource
     private DappFundFlowDao dappFundFlowDao;
-
     @Resource
-    private RedisUtils redisUtils;
-
+    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
     @Resource
-    private DappWalletService dappWalletService;
+    private DappStorageMapper dappStorageMapper;
+    @Resource
+    private ChainProducer chainProducer;
 
     public static void main(String[] args) {
         System.out.println(Numeric.toBigInt("0x12e4e85"));
@@ -43,39 +44,89 @@
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void compile(EthUsdtContract.TransferEventResponse e) {
-        if (e.to == null) {
-            return;
-        }
-
-        if ("0x0Ba249b2FAC0061dd9c388Bd607418E16490A3fd".toLowerCase().equals(e.to)) {
-            log.info("触发GE手续费监听");
-
-            int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
-            // 账户是否已经注册
-            DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null);
-            if (fromMember == null) {
-                return;
-            }
-
-            BigInteger tokens = e.tokens;
-            BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
-
-            // 充值手续费
-            DappFundFlowEntity fundFlow = dappFundFlowDao.selectByFromHash(e.log.getTransactionHash(), null);
-            if (fundFlow != null && fundFlow.getStatus() != 1) {
-                return;
-            }
-
-            // 更改状态为已同步
-            fundFlow.setStatus(2);
-            dappFundFlowDao.updateById(fundFlow);
-
-            dappWalletService.updateWalletMineWithLock(amount, fromMember.getId(), 1);
-        }
+        return;
     }
 
     @Override
     public void sdmUSDT(EthUsdtContract.TransferEventResponse e) {
         return;
     }
+
+    @Override
+    public void receivePeopleEvent(EthUsdtContract.ReceivePeopleEventResponse e) {
+
+        if (e.from == null) {
+            return;
+        }
+
+        if (e.regFlow == null) {
+            return;
+        }
+
+        Long flowId = Long.parseLong(e.regFlow);
+
+//        int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
+        int decimals = 18;
+        BigInteger tokens = e.tokens;
+        BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
+        log.info("触发用户存储:{},金额:{},流水ID:{}",e.from,amount,flowId);
+        // 账户是否已经注册
+        DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null);
+        if (fromMember == null) {
+            return;
+        }
+        // 判断是否已经同步过了
+        DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(flowId);
+        if (fundFlow != null && fundFlow.getStatus() != 1) {
+            return;
+        }
+        // 更改状态为已同步
+        fundFlow.setStatus(2);
+        dappFundFlowDao.updateById(fundFlow);
+
+        log.info("触发用户存储:{},金额:{},流水ID:{}",e.from,amount,flowId);
+
+        /**
+         * 新增一条记录
+         */
+        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.RELEASE_PERCENT.getType(),
+                DataDictionaryEnum.RELEASE_PERCENT.getCode()
+        );
+        BigDecimal releasePercent = new BigDecimal(dataDictionaryCustom.getValue());
+        DappStorage dappStorage = new DappStorage();
+        dappStorage.setState(1);
+        dappStorage.setAmount(amount);
+        dappStorage.setReleasePercent(releasePercent);
+        BigDecimal releaseAmount = amount.multiply(releasePercent).setScale(2, BigDecimal.ROUND_DOWN);
+        dappStorage.setReleaseAmount(releaseAmount);
+        dappStorageMapper.insert(dappStorage);
+
+        Long id = fundFlow.getId();
+        Long memberId = fromMember.getId();
+        /**
+         * 发送直推8%
+         */
+        chainProducer.sendDirectPerkMsg(id);
+        /**
+         * DAO成员动态:
+         *      * 1.直推1个拿2代,直推10个拿20代,直推15个拿30代,最高30代
+         */
+        chainProducer.sendMemberDynamicPerkMsg(id);
+        /**
+         *
+         *      * 六、永动补偿池2%
+         *      * 五、DAO永动激励池:6%
+         *      * 四、DAO联盟委员会 :   5%  (50名全球DAO委员)
+         */
+        chainProducer.sendNodePerkMsg(id);
+        /**
+         *3.  成员升级
+         *      *       DAO1:小区业绩30万/币  加权分红50%
+         *      *       DAO2:小区业绩100万/币 加权分红30%
+         *      *       DAO3:小区业绩500万/币加权分红20%
+         */
+        chainProducer.sendMemberLevel(memberId);
+
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
index 1f0f35f..508c04b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -1,22 +1,19 @@
 package cc.mrbird.febs.dapp.service.impl;
 
-import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.dapp.chain.*;
+import cc.mrbird.febs.dapp.chain.ChainEnum;
+import cc.mrbird.febs.dapp.chain.ChainService;
+import cc.mrbird.febs.dapp.chain.ContractEventService;
+import cc.mrbird.febs.dapp.chain.EthUsdtContract;
 import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
+import cc.mrbird.febs.dapp.entity.DappStorage;
 import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
 import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
 import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
-import cc.mrbird.febs.dapp.mapper.DappMemberDao;
-import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao;
+import cc.mrbird.febs.dapp.mapper.DappStorageMapper;
 import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
-import cc.mrbird.febs.dapp.service.DappWalletService;
-import cc.mrbird.febs.dapp.utils.OnlineTransferUtil;
+import cc.mrbird.febs.dapp.service.DappMemberService;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -24,273 +21,105 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
-import java.util.List;
 
 @Slf4j
 @Service
 public class BscUsdtContractEvent implements ContractEventService {
 
     @Resource
-    private RedisUtils redisUtils;
+    private DappMemberService dappMemberService;
     @Resource
     private DappFundFlowDao dappFundFlowDao;
     @Resource
-    private DappMemberDao dappMemberDao;
-    @Resource
     private DataDictionaryCustomMapper dataDictionaryCustomMapper;
     @Resource
-    private DappWalletService dappWalletService;
-    @Resource
-    private DappWalletCoinDao dappWalletCoinDao;
+    private DappStorageMapper dappStorageMapper;
     @Resource
     private ChainProducer chainProducer;
-
 
     @Override
     public void compile(EthUsdtContract.TransferEventResponse e) {
         return;
-//        if (e.to == null) {
-//            return;
-//        }
-//
-//        redisUtils.set(AppContants.REDIS_KEY_BLOCK_USDT_NUM, e.log.getBlockNumber());
-//        // 判断对方打款地址是否为源池地址
-//        if (ChainEnum.BSC_USDT.getAddress().toLowerCase().equals(e.to)) {
-//
-//            redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, e.log.getBlockNumber());
-//
-//            // 如果得到触发,则休眠10秒。 因为此处监听器触发可能优先于前端调用transfer接口
-////            try {
-////                Thread.sleep(10000);
-////            } catch (InterruptedException ex) {
-////                ex.printStackTrace();
-////            }
-//
-//            ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name());
-//            int decimals = sourceUsdtInstance.decimals();
-//            if (e.from.equals("0xaa25aa7a19f9c426e07dee59b12f944f4d9f1dd3")) {
-//                return;
-//            }
-//
-//            BigInteger tokens = e.tokens;
-//            BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
-//
-//            DappFundFlowEntity fundFlow = dappFundFlowDao.selectByFromHash(e.log.getTransactionHash(), null);
-//            if(ObjectUtil.isNotEmpty(fundFlow) && 1 == fundFlow.getStatus()){
-//                log.info("触发USDT合约监听事件-买入贡献值,金额:{}",amount);
-//                if(1 == fundFlow.getType()){//认购贡献值 1
-//                    if (fundFlow == null) {
-//                        List<DappFundFlowEntity> flows = dappFundFlowDao.selectFundFlowListByAddress(e.from, 1);
-//                        if (CollUtil.isEmpty(flows)) {
-//                            OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_ONLINE, "USDT");
-//                            log.info("本地无交易:{}", e.log.getTransactionHash());
-//                            return;
-//                        }
-//
-//                        for (DappFundFlowEntity flow : flows) {
-//                            if (flow.getStatus() == 1) {
-//                                if (amount.compareTo(flow.getAmount().multiply(flow.getNewestPrice()).setScale(4, RoundingMode.HALF_UP)) == 0) {
-//                                    fundFlow = flow;
-//                                    fundFlow.setFromHash(e.log.getTransactionHash());
-//                                    break;
-//                                }
-//                            }
-//                        }
-//                    }
-//
-//                    if (fundFlow == null) {
-//                        return;
-//                    }
-//
-//                    fundFlow.setAmount(fundFlow.getAmount().negate());
-//                    // 更改状态为已同步
-//                    fundFlow.setStatus(2);
-//                    dappFundFlowDao.updateById(fundFlow);
-//                    //生成业绩数
-//                    chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId());
-//                    //分发手续费给节点
-//                    buyNodePerk(amount);
-//
-//                }else if(13 == fundFlow.getType()){//认购节点 13
-//
-//                    log.info("触发USDT合约监听事件-认购节点,金额:{}",amount);
-//                    fundFlow.setAmount(fundFlow.getAmount().negate());
-//                    // 更改状态为已同步
-//                    fundFlow.setStatus(2);
-//                    dappFundFlowDao.updateById(fundFlow);
-//
-//                    Long memberId = fundFlow.getMemberId();
-//                    DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
-//                    dappMemberEntity.setBuyNode(1);
-//                    dappMemberDao.updateById(dappMemberEntity);
-//                }
-//            }else{
-//                return;
-//            }
-//        }
     }
 
     @Override
     public void sdmUSDT(EthUsdtContract.TransferEventResponse e) {
-        if (e.to == null) {
+        return;
+    }
+
+    @Override
+    public void receivePeopleEvent(EthUsdtContract.ReceivePeopleEventResponse e) {
+        if (e.from == null) {
             return;
         }
 
-//        redisUtils.set(AppContants.REDIS_KEY_BLOCK_USDT_NUM, e.log.getBlockNumber());
-        // 判断对方打款地址是否为源池地址
-        if ("0x0Ba249b2FAC0061dd9c388Bd607418E16490A3fd".toLowerCase().equals(e.to)) {
-
-//            redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, e.log.getBlockNumber());
-
-            // 如果得到触发,则休眠10秒。 因为此处监听器触发可能优先于前端调用transfer接口
-//            try {
-//                Thread.sleep(10000);
-//            } catch (InterruptedException ex) {
-//                ex.printStackTrace();
-//            }
-
-            ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name());
-            int decimals = sourceUsdtInstance.decimals();
-            if (e.from.equals("0x0Ba249b2FAC0061dd9c388Bd607418E16490A3fd")) {
-                return;
-            }
-            String fromAddress = e.from;
-            DappMemberEntity fromMember = dappMemberDao.selectByAddress(fromAddress, null);
-            if(ObjectUtil.isEmpty(fromMember)){
-                return;
-            }
-
-            BigInteger tokens = e.tokens;
-            BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
-
-            DappFundFlowEntity fundFlow = dappFundFlowDao.selectByFromHashAndAndMemberId(e.log.getTransactionHash(), null,fromMember.getId());
-            if(ObjectUtil.isNotEmpty(fundFlow) && 1 == fundFlow.getStatus()){
-                if(18 == fundFlow.getType()){//认购贡献值 18
-                    log.info("买入贡献值,{},金额:{}",fromAddress,amount);
-                    if (fundFlow == null) {
-                        List<DappFundFlowEntity> flows = dappFundFlowDao.selectFundFlowListByAddress(e.from, 1);
-                        if (CollUtil.isEmpty(flows)) {
-                            OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_ONLINE, "USDT");
-                            log.info("本地无交易:{}", e.log.getTransactionHash());
-                            return;
-                        }
-
-                        for (DappFundFlowEntity flow : flows) {
-                            if (flow.getStatus() == 1) {
-                                if (amount.compareTo(flow.getAmount().multiply(flow.getNewestPrice()).setScale(4, RoundingMode.HALF_UP)) == 0) {
-                                    fundFlow = flow;
-                                    fundFlow.setFromHash(e.log.getTransactionHash());
-                                    break;
-                                }
-                            }
-                        }
-                    }
-
-                    if (fundFlow == null) {
-                        return;
-                    }
-
-//                    fundFlow.setAmount(fundFlow.getAmount().negate());
-                    // 更改状态为已同步
-                    fundFlow.setStatus(2);
-                    dappFundFlowDao.updateById(fundFlow);
-                    //激活用户
-                    fromMember.setActiveStatus(1);
-                    dappMemberDao.updateById(fromMember);
-                    //给上级直推奖励
-//                    DappMemberEntity member = dappMemberDao.selectById(fromMember.getId());
-//                    DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
-//
-//                    if (ObjectUtil.isNotEmpty(parent)) {
-//                        BigDecimal directProfit = TreeConstants.PUT_IN_AMOUNT.multiply(new BigDecimal("0.1"));
-//                        dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId(), 1);
-//
-//                        DappFundFlowEntity fundFlowPerk = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null);
-//                        dappFundFlowDao.insert(fundFlowPerk);
-//                    }
-                    //复投
-//                    chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId());
-//                    if(ObjectUtil.isNotEmpty(fromMember.getRefererId())){
-//                        DappMemberEntity dappMemberEntity = dappMemberDao.selectMemberInfoByInviteId(fromMember.getRefererId());
-//                        if(ObjectUtil.isNotEmpty(dappMemberEntity)){
-//                            chainProducer.sendNodeMsgLong(dappMemberEntity.getId());
-//                        }
-//                    }
-                    chainProducer.sendNodeMsg(fundFlow.getId());
-                    //发送推荐规则奖励
-                    chainProducer.sendInvitePerkMsg(fundFlow.getId());
-                    //发送节点投资
-                    chainProducer.sendNodePerkMsg(fundFlow.getId());
-//                    buyNodePerk(amount);
-
-                }else if(13 == fundFlow.getType()){//认购节点 13
-
-                    log.info("认购节点,{},金额:{}",fromAddress,amount);
-//                    fundFlow.setAmount(fundFlow.getAmount().negate());
-                    // 更改状态为已同步
-                    fundFlow.setStatus(2);
-                    dappFundFlowDao.updateById(fundFlow);
-
-                    Long memberId = fundFlow.getMemberId();
-                    DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
-                    Integer buyNode = dappMemberEntity.getBuyNode();
-                    buyNode = buyNode + 1;
-                    dappMemberEntity.setBuyNode(buyNode);
-                    dappMemberDao.updateById(dappMemberEntity);
-                }
-            }else{
-                return;
-            }
+        if (e.regFlow == null) {
+            return;
         }
-    }
 
-    public void buyNodePerk(BigDecimal amount){
-        log.info("买入贡献值-平分总金额-{}",amount);
+        Long flowId = Long.parseLong(e.regFlow);
+
+        int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
+        BigInteger tokens = e.tokens;
+        BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
+        log.info("触发用户存储:{},金额:{},流水ID:{}",e.from,amount,flowId);
+        // 账户是否已经注册
+        DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null);
+        if (fromMember == null) {
+            return;
+        }
+        // 判断是否已经同步过了
+        DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(flowId);
+        if (fundFlow != null && fundFlow.getStatus() != 1) {
+            return;
+        }
+        // 更改状态为已同步
+        fundFlow.setStatus(2);
+        dappFundFlowDao.updateById(fundFlow);
+
+        log.info("触发用户存储:{},金额:{},流水ID:{}",e.from,amount,flowId);
+
         /**
-         * 获取节点平分百分比 perkPercent
-         * 获取平分的份数 perKNum
-         * 获取每一份的金额 perkAmount
-         * 获取节点总数 buyNodeNum
-         * 如果perKNum大于buyNodeNum,则每个人获得(amount * perkPercent)/ perKNum = perkAmount
-         * 如果超出,再超出的人没有奖励
+         * 新增一条记录
          */
-        DataDictionaryCustom perkPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.PERK_PERCENT.getType(),
-                DataDictionaryEnum.PERK_PERCENT.getCode()
+        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.RELEASE_PERCENT.getType(),
+                DataDictionaryEnum.RELEASE_PERCENT.getCode()
         );
-        BigDecimal perkPercent = new BigDecimal(ObjectUtil.isEmpty(perkPercentDic) ? "10" : perkPercentDic.getValue()).multiply(new BigDecimal("0.01"));
+        BigDecimal releasePercent = new BigDecimal(dataDictionaryCustom.getValue());
+        DappStorage dappStorage = new DappStorage();
+        dappStorage.setState(1);
+        dappStorage.setAmount(amount);
+        dappStorage.setReleasePercent(releasePercent);
+        BigDecimal releaseAmount = amount.multiply(releasePercent).setScale(2, BigDecimal.ROUND_DOWN);
+        dappStorage.setReleaseAmount(releaseAmount);
+        dappStorageMapper.insert(dappStorage);
 
-        DataDictionaryCustom perKNumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.PERK_NUM.getType(),
-                DataDictionaryEnum.PERK_NUM.getCode()
-        );
-        BigDecimal perKNum = new BigDecimal(ObjectUtil.isEmpty(perkPercentDic) ? "1000" : perKNumDic.getValue());
-
-        BigDecimal perkAmount = amount.multiply(perkPercent).divide(perKNum, 8, BigDecimal.ROUND_DOWN);
-        if(BigDecimal.ZERO.compareTo(perkAmount) >= 0){
-            return;
-        }
-
-        QueryWrapper<DappMemberEntity> objectQueryWrapper = new QueryWrapper<>();
-        objectQueryWrapper.eq("buy_node",1);
-        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectList(objectQueryWrapper);
-        if(CollUtil.isEmpty(dappMemberEntities)){
-            return;
-        }
-
-        for(DappMemberEntity dappMemberEntity : dappMemberEntities){
-            dappWalletService.updateWalletCoinWithLock(perkAmount, dappMemberEntity.getId(), 1);
-
-            DappFundFlowEntity fundFlow = new DappFundFlowEntity(
-                    dappMemberEntity.getId(),
-                    perkAmount,
-                    14,
-                    2,
-                    BigDecimal.ZERO,
-                    null);
-            dappFundFlowDao.insert(fundFlow);
-        }
-
-        log.info("买入贡献值-总人数{},-每人金额{}",dappMemberEntities.size(),perkAmount);
+        Long id = fundFlow.getId();
+        Long memberId = fromMember.getId();
+        /**
+         * 发送直推8%
+         */
+        chainProducer.sendDirectPerkMsg(id);
+        /**
+         * DAO成员动态:
+         *      * 1.直推1个拿2代,直推10个拿20代,直推15个拿30代,最高30代
+         */
+        chainProducer.sendMemberDynamicPerkMsg(id);
+        /**
+         *
+         *      * 六、永动补偿池2%
+         *      * 五、DAO永动激励池:6%
+         *      * 四、DAO联盟委员会 :   5%  (50名全球DAO委员)
+         */
+        chainProducer.sendNodePerkMsg(id);
+        /**
+         *3.  成员升级
+         *      *       DAO1:小区业绩30万/币  加权分红50%
+         *      *       DAO2:小区业绩100万/币 加权分红30%
+         *      *       DAO3:小区业绩500万/币加权分红20%
+         */
+        chainProducer.sendMemberLevel(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 732eece..6a0e5bd 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
@@ -14,10 +14,13 @@
 import cc.mrbird.febs.dapp.dto.PriceSettingDto;
 import cc.mrbird.febs.dapp.entity.*;
 import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.enumerate.MemberLevelEnum;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappMemberService;
 import cc.mrbird.febs.dapp.vo.AdminSystemFeeVo;
+import cc.mrbird.febs.dapp.vo.TeamDownVo;
 import cc.mrbird.febs.dapp.vo.TeamListVo;
+import cc.mrbird.febs.dapp.vo.TeamUpVo;
 import cc.mrbird.febs.system.entity.User;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -36,6 +39,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author
@@ -55,6 +59,7 @@
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final DappFundFlowDao dappFundFlowDao;
     private final DbMemberNodeMapper dbMemberNodeMapper;
+    private final DappStorageMapper dappStorageMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -136,11 +141,6 @@
                 if (parent == null) {
                     throw new FebsException("recommender is not exist");
                 }
-
-//                List<DappMemberEntity> child = dappMemberDao.selectChildMemberDirectOrNot(connectDto.getInviteId(), 1, null);
-//                if (child.size() == 6) {
-//                    throw new FebsException("Invite Code is Invalid");
-//                }
             } else {
                 connectDto.setInviteId(null);
             }
@@ -288,16 +288,14 @@
         member.setChainType(chainType);
         member.setAccountType(accountType);
         member.setActiveStatus(2);
+        member.setNodeType(2);
+        member.setLevel(MemberLevelEnum.DAO_0.getCode());
 
         dappMemberDao.insert(member);
 
         DappWalletCoinEntity walletCoin = new DappWalletCoinEntity();
         walletCoin.setMemberId(member.getId());
         dappWalletCoinDao.insert(walletCoin);
-
-        DappWalletMineEntity walletMine = new DappWalletMineEntity();
-        walletMine.setMemberId(member.getId());
-        dappWalletMineDao.insert(walletMine);
 
         if (StrUtil.isEmpty(refererId)) {
             refererId = "0";
@@ -390,6 +388,93 @@
         return dbMemberNodeMapper.selectListInPage(dbMemberNode, page);
     }
 
+    @Override
+    public TeamUpVo teamUp() {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        TeamUpVo teamUpVo = new TeamUpVo();
+
+        DappMemberEntity memberEntity = dappMemberDao.selectById(memberId);
+        List<DappMemberEntity> directMembers = dappMemberDao.selectChildMemberDirectOrNot(memberEntity.getInviteId(), 1, null);
+        if(CollUtil.isEmpty(directMembers)){
+            teamUpVo.setTeamCnt(0);
+            teamUpVo.setTeamCntAva(0);
+            teamUpVo.setTeamAchieve(BigDecimal.ZERO);
+            teamUpVo.setDirectCnt(0);
+            teamUpVo.setDirectCntAva(0);
+            teamUpVo.setDirectAchieve(BigDecimal.ZERO);
+        }else{
+            teamUpVo.setDirectCnt(CollUtil.isNotEmpty(directMembers) ? 0 : directMembers.size());
+            List<DappMemberEntity> directCntAva = directMembers.stream().filter(dappMemberEntity -> dappMemberEntity.getActiveStatus() == 1).collect(Collectors.toList());
+            teamUpVo.setDirectCntAva(CollUtil.isNotEmpty(directCntAva) ? 0 : directCntAva.size());
+
+            List<Long> collectDirect = directCntAva.stream().map(DappMemberEntity::getId).collect(Collectors.toList());
+            QueryWrapper<DappStorage> storageQueryWrapper = new QueryWrapper<>();
+            storageQueryWrapper.in("member_id",collectDirect);
+            storageQueryWrapper.eq("state",1);
+            List<DappStorage> dappStoragesDirect = dappStorageMapper.selectList(storageQueryWrapper);
+            BigDecimal directAchieve = dappStoragesDirect.stream()
+                    .map(DappStorage::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            teamUpVo.setDirectAchieve(directAchieve);
+
+            List<DappMemberEntity> teamMembers = dappMemberDao.selectChildMemberDirectOrNot(memberEntity.getInviteId(), 2, null);
+            teamUpVo.setTeamCnt(CollUtil.isNotEmpty(teamMembers) ? 0 : teamMembers.size());
+            List<DappMemberEntity> teamCntAva = teamMembers.stream().filter(dappMemberEntity -> dappMemberEntity.getActiveStatus() == 1).collect(Collectors.toList());
+            teamUpVo.setTeamCntAva(CollUtil.isNotEmpty(teamCntAva) ? 0 : teamCntAva.size());
+
+            List<Long> collectTeam = teamCntAva.stream().map(DappMemberEntity::getId).collect(Collectors.toList());
+            QueryWrapper<DappStorage> collectTeamWrapper = new QueryWrapper<>();
+            collectTeamWrapper.in("member_id",collectTeam);
+            collectTeamWrapper.eq("state",1);
+            List<DappStorage> dappStoragesTeam = dappStorageMapper.selectList(collectTeamWrapper);
+            BigDecimal teamAchieve = dappStoragesTeam.stream()
+                    .map(DappStorage::getAmount) // 映射amount到流中
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            teamUpVo.setTeamAchieve(teamAchieve);
+        }
+        return teamUpVo;
+    }
+
+    @Override
+    public List<TeamDownVo> teamDown() {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        List<TeamDownVo> objects = new ArrayList<>();
+
+        DappMemberEntity memberEntity = dappMemberDao.selectById(memberId);
+        List<DappMemberEntity> directMembers = dappMemberDao.selectChildMemberDirectOrNot(memberEntity.getInviteId(), 1, null);
+
+        if(CollUtil.isNotEmpty(directMembers)){
+
+            for(DappMemberEntity directMember : directMembers){
+                TeamDownVo teamDownVo = new TeamDownVo();
+
+                List<DappMemberEntity> teamMembers = dappMemberDao.selectChildMemberDirectOrNot(directMember.getInviteId(), 2, null);
+                if(CollUtil.isEmpty(teamMembers)){
+                    teamDownVo.setAddress(directMember.getAddress());
+                    teamDownVo.setActiveCnt(0);
+                    teamDownVo.setActiveAchieve(BigDecimal.ZERO);
+                }else{
+                    List<DappMemberEntity> teamCntAva = teamMembers.stream().filter(dappMemberEntity -> dappMemberEntity.getActiveStatus() == 1).collect(Collectors.toList());
+                    List<Long> collectTeam = teamCntAva.stream().map(DappMemberEntity::getId).collect(Collectors.toList());
+                    QueryWrapper<DappStorage> collectTeamWrapper = new QueryWrapper<>();
+                    collectTeamWrapper.in("member_id",collectTeam);
+                    collectTeamWrapper.eq("state",1);
+                    List<DappStorage> dappStoragesTeam = dappStorageMapper.selectList(collectTeamWrapper);
+                    BigDecimal teamAchieve = dappStoragesTeam.stream()
+                            .map(DappStorage::getAmount) // 映射amount到流中
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    teamDownVo.setAddress(directMember.getAddress());
+                    teamDownVo.setActiveCnt(teamCntAva.size());
+                    teamDownVo.setActiveAchieve(teamAchieve);
+                }
+
+                objects.add(teamDownVo);
+            }
+        }
+        return objects;
+    }
+
     public TeamListVo buildTeamMatrix(DappAchieveMemberTreeEntity node) {
         List<DappAchieveMemberTreeEntity> childNodes = dappAchieveMemberTreeDao.selectMatrixChildNode(node.getTopNode(), node.getTreeNode());
 
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 6a484ee..fb26134 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
@@ -1,12 +1,11 @@
 package cc.mrbird.febs.dapp.service.impl;
 
+import cc.mrbird.febs.common.contants.AppContants;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.dapp.dto.SystemDto;
 import cc.mrbird.febs.dapp.entity.*;
-import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
-import cc.mrbird.febs.dapp.enumerate.InviteRule;
-import cc.mrbird.febs.dapp.enumerate.NodeType;
+import cc.mrbird.febs.dapp.enumerate.*;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.dapp.service.DappWalletService;
@@ -27,8 +26,7 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -44,6 +42,7 @@
     private final RedisUtils redisUtils;
     private final DappFundFlowDao dappFundFlowDao;
     private final DappMemberDao dappMemberDao;
+    private final DappStorageMapper dappStorageMapper;
 
     private final DappAchieveTreeDao dappAchieveTreeDao;
     private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
@@ -225,7 +224,7 @@
         DappMemberEntity dappMemberEntityDirect = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
         if(ObjectUtil.isNotEmpty(dappMemberEntityDirect)){
             Long id = dappMemberEntityDirect.getId();
-            chainProducer.sendNodeMsgLong(id);
+//            chainProducer.sendNodeMsgLong(id);
         }
 
         //如果添加的为右节点,那么进入判断
@@ -598,19 +597,28 @@
     @Override
     public void invitePerkMsg(Long id) {
         /**
-         * 推荐规则:
-         * 无直推奖励,推2个3层,3个6层,4个10层。1%见点奖(有效层级内,每个每1%),共10层,共%10。
+         *     * 二、DAO成员动态:
+         *      * 1.直推1个拿2代,直推10个拿20代,直推15个拿30代,最高30代
+         *      * 2.   1-5代奖励7%
+         *      *      6-10代奖励6%
+         *      *      11-15代奖励5%
+         *      *      15-20代奖励4%
+         *      *      21-25代奖励4%
+         *      *      26-30代奖励7%
          */
         DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
         if(ObjectUtil.isEmpty(dappFundFlowEntity)){
             return;
         }
+        if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE != dappFundFlowEntity.getStatus()){
+            return;
+        }
         BigDecimal amount = dappFundFlowEntity.getAmount().abs();
         /**
-         * 往上循环十层,判断每一层是否有见点奖
+         * 往上循环30层,判断每一层是否有见点奖
          */
         Long memberId = dappFundFlowEntity.getMemberId();
-        for(int i = 1;i <= 10;i++){
+        for(int i = 1;i <= 30;i++){
             DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
             String refererId = dappMemberEntity.getRefererId();
             //上级不存在,则停止循环。
@@ -666,73 +674,347 @@
     @Override
     public void nodePerkMsg(Long id) {
         DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
-        if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+
+        if(MoneyFlowEnum.CUN_CHU.getValue() != dappFundFlowEntity.getType()){
             return;
         }
-        BigDecimal amount = dappFundFlowEntity.getAmount().abs();
-        log.info("买入贡献值-平分总金额-{}",amount);
+        if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE != dappFundFlowEntity.getStatus()){
+            return;
+        }
+
+        BigDecimal amount = dappFundFlowEntity.getAmount();
+
         /**
-         * 获取节点平分百分比 perkPercent
-         * 获取平分的份数 perKNum
-         * 获取每一份的金额 perkAmount
-         * 获取节点总数 buyNodeNum
-         * 如果perKNum大于buyNodeNum,则每个人获得(amount * perkPercent)/ perKNum = perkAmount
-         * 如果超出,再超出的人没有奖励
+         * 激励池 6%
          */
-        DataDictionaryCustom perkPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.PERK_PERCENT.getType(),
-                DataDictionaryEnum.PERK_PERCENT.getCode()
+        BigDecimal jiliAmount = new BigDecimal(AppContants.DAO_JI_LI_PERCENT).multiply(amount);
+
+        DataDictionaryCustom jiliChiDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.JILI_CHI.getType(),
+                DataDictionaryEnum.JILI_CHI.getCode()
         );
-        BigDecimal perkPercent = new BigDecimal(ObjectUtil.isEmpty(perkPercentDic) ? "10" : perkPercentDic.getValue()).multiply(new BigDecimal("0.01"));
+        BigDecimal addJili = new BigDecimal(jiliChiDic.getValue()).add(jiliAmount).setScale(2,BigDecimal.ROUND_DOWN);
+        jiliChiDic.setValue(addJili.toString());
+        dataDictionaryCustomMapper.updateById(jiliChiDic);
 
-        DataDictionaryCustom perKNumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.PERK_NUM.getType(),
-                DataDictionaryEnum.PERK_NUM.getCode()
+        /**
+         * 补偿池 2%
+         */
+        BigDecimal buchangAmount = new BigDecimal(AppContants.DAO_BU_CHANG_PERCENT).multiply(amount);
+        DataDictionaryCustom buchangChiDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BUCAHNG_CHI.getType(),
+                DataDictionaryEnum.BUCAHNG_CHI.getCode()
         );
-        BigDecimal perKNum = new BigDecimal(ObjectUtil.isEmpty(perKNumDic) ? "200" : perKNumDic.getValue());
+        BigDecimal addBuchang = new BigDecimal(buchangChiDic.getValue()).add(buchangAmount).setScale(2,BigDecimal.ROUND_DOWN);
+        buchangChiDic.setValue(addBuchang.toString());
+        dataDictionaryCustomMapper.updateById(buchangChiDic);
 
-        BigDecimal perkAmount = amount.multiply(perkPercent).divide(perKNum, 8, BigDecimal.ROUND_DOWN);
-        if(BigDecimal.ZERO.compareTo(perkAmount) >= 0){
-            return;
-        }
-
+        /**
+         * DAO联盟委员会 :   5%
+         */
+        BigDecimal daoNodeAmountTotal = new BigDecimal(AppContants.DAO_NODE_PERCENT).multiply(amount);
         QueryWrapper<DappMemberEntity> objectQueryWrapper = new QueryWrapper<>();
-        objectQueryWrapper.ge("buy_node",0);
+        objectQueryWrapper.eq("node_type",1);
         List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectList(objectQueryWrapper);
         if(CollUtil.isEmpty(dappMemberEntities)){
             return;
         }
+        BigDecimal daoNodeAmount = daoNodeAmountTotal.divide(new BigDecimal(dappMemberEntities.size()),2,BigDecimal.ROUND_DOWN);
+        for(DappMemberEntity nodeMember : dappMemberEntities){
+            this.updateBalanceInsertFlow(
+                    daoNodeAmount,
+                    nodeMember.getId(),
+                    MoneyFlowEnum.NODE_PERK.getValue(),
+                    StrUtil.format(MoneyFlowEnum.NODE_PERK.getDescrition(),amount,dappMemberEntities.size(),daoNodeAmount));
+        }
+    }
 
-        //奖励总份数
-        BigDecimal totalPerkNum = BigDecimal.ZERO;
-        for(DappMemberEntity dappMemberEntity : dappMemberEntities){
-            //如果账号未激活,则无法领取收益
-            if(1 != dappMemberEntity.getActiveStatus()){
-                continue;
-            }
-            BigDecimal buyNode = new BigDecimal(dappMemberEntity.getBuyNode());
-            totalPerkNum = totalPerkNum.add(buyNode);
-            if(perKNum.compareTo(totalPerkNum) < 0){
-                return;
-            }
-            //奖励金额
-            BigDecimal memberPerk = perkAmount.multiply(buyNode);
-            if(BigDecimal.ZERO.compareTo(memberPerk) >= 0){
-                continue;
-            }
-            dappWalletService.updateWalletCoinWithLock(memberPerk, dappMemberEntity.getId(), 1);
+    @Override
+    public void directPerkMsg(Long id) {
+        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
 
-            DappFundFlowEntity fundFlow = new DappFundFlowEntity(
-                    dappMemberEntity.getId(),
-                    memberPerk,
-                    14,
-                    2,
-                    BigDecimal.ZERO,
-                    null);
-            dappFundFlowDao.insert(fundFlow);
+        if(MoneyFlowEnum.CUN_CHU.getValue() != dappFundFlowEntity.getType()){
+            return;
+        }
+        if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE != dappFundFlowEntity.getStatus()){
+            return;
         }
 
-        log.info("买入贡献值-总人数{},-每人金额{}",dappMemberEntities.size(),perkAmount);
+        Long memberId = dappFundFlowEntity.getMemberId();
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        if(ObjectUtil.isEmpty(dappMemberEntity)){
+            return;
+        }
+        if(ObjectUtil.isEmpty(dappMemberEntity.getRefererId())){
+            return;
+        }
+        DappMemberEntity directMember = dappMemberDao.selectMemberInfoByInviteId(dappMemberEntity.getRefererId());
+        if(ObjectUtil.isEmpty(directMember)){
+            return;
+        }
+
+        BigDecimal amount = dappFundFlowEntity.getAmount();
+        /*
+            直推 8%
+         */
+        BigDecimal directAmount = new BigDecimal(AppContants.DIRECT_PERCENT).multiply(amount);
+        if(BigDecimal.ZERO.compareTo(directAmount) >= 0){
+            return;
+        }
+
+        this.updateBalanceInsertFlow(
+                directAmount,
+                directMember.getId(),
+                MoneyFlowEnum.DIRECT_PERK.getValue(),
+                StrUtil.format(MoneyFlowEnum.DIRECT_PERK.getDescrition(),amount,directAmount));
+    }
+
+    @Override
+    public void updateBalanceInsertFlow (BigDecimal daoNodeAmount,Long memberId,Integer type,String description){
+        if(BigDecimal.ZERO.compareTo(daoNodeAmount) > 0){
+            return;
+        }
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        if(ObjectUtil.isEmpty(dappMemberEntity)){
+            return;
+        }
+        if(1 != dappMemberEntity.getActiveStatus()){
+            return;
+        }
+
+        //减少用户的总额度
+        BigDecimal usdtBalance = dappMemberEntity.getUsdtBalance();
+        if(BigDecimal.ZERO.compareTo(usdtBalance) >= 0){
+            return;
+        }
+        if(daoNodeAmount.compareTo(usdtBalance) >= 0){
+            daoNodeAmount = usdtBalance;
+            usdtBalance = BigDecimal.ZERO;
+        }else{
+            usdtBalance = usdtBalance.subtract(daoNodeAmount);
+        }
+
+        //总额度为0,用户变成未激活
+        if(BigDecimal.ZERO.compareTo(usdtBalance) >= 0){
+            dappMemberEntity.setActiveStatus(2);
+            //更新用户所有的业绩为已失效
+            QueryWrapper<DappStorage> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("member_id",memberId);
+            objectQueryWrapper.eq("state",1);
+            List<DappStorage> dappStorages = dappStorageMapper.selectList(objectQueryWrapper);
+            if(CollUtil.isNotEmpty(dappStorages)){
+                for(DappStorage dappStorage : dappStorages){
+                    dappStorage.setState(2);
+                    dappStorageMapper.updateById(dappStorage);
+                }
+            }
+        }
+        dappMemberEntity.setUsdtBalance(usdtBalance);
+        dappMemberDao.updateById(dappMemberEntity);
+
+        dappWalletService.updateWalletCoinWithLock(daoNodeAmount, memberId, 1);
+        DappFundFlowEntity nodeFlow = new DappFundFlowEntity(
+                memberId,
+                daoNodeAmount,
+                type,
+                2,
+                BigDecimal.ZERO,
+                description);
+        dappFundFlowDao.insert(nodeFlow);
+    }
+
+
+    /**
+     *
+     *   3.  DAO成员团队奖:5%加权分红(people数量)
+     *       DAO1:小区业绩30万/币  加权分红50%
+     *       DAO2:小区业绩100万/币 加权分红30%
+     *       DAO3:小区业绩500万/币加权分红20%
+     */
+    @Override
+    public void teamPerk(Long id) {
+        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
+
+        if(MoneyFlowEnum.CUN_CHU.getValue() != dappFundFlowEntity.getType()){
+            return;
+        }
+        if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE != dappFundFlowEntity.getStatus()){
+            return;
+        }
+        BigDecimal amount = dappFundFlowEntity.getAmount();
+        //5%加权分红(people数量)
+        BigDecimal totalAmount = amount.multiply(new BigDecimal(AppContants.DAO_TEAM_PERK_PERCENT)).setScale(2, BigDecimal.ROUND_DOWN);
+
+        QueryWrapper<DappMemberEntity> daoOneQuery = new QueryWrapper<>();
+        daoOneQuery.eq("level", MemberLevelEnum.DAO_1.getCode());
+        List<DappMemberEntity> daoOnes = dappMemberDao.selectList(daoOneQuery);
+        if(CollUtil.isNotEmpty(daoOnes)){
+            BigDecimal bigDecimal = totalAmount.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
+            //每人平分数量
+            BigDecimal divide = bigDecimal.divide(new BigDecimal(daoOnes.size()), 2, BigDecimal.ROUND_DOWN);
+            for(DappMemberEntity memberEntity : daoOnes){
+                this.updateBalanceInsertFlow(
+                        divide,
+                        memberEntity.getId(),
+                        MoneyFlowEnum.TEAM_ONE_PERK.getValue(),
+                        StrUtil.format(MoneyFlowEnum.TEAM_ONE_PERK.getDescrition(),divide));
+            }
+        }
+
+        QueryWrapper<DappMemberEntity> daoTwoQuery = new QueryWrapper<>();
+        daoTwoQuery.eq("level", MemberLevelEnum.DAO_2.getCode());
+        List<DappMemberEntity> daoTwos = dappMemberDao.selectList(daoTwoQuery);
+        if(CollUtil.isNotEmpty(daoTwos)){
+            BigDecimal bigDecimal = totalAmount.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN);
+            //每人平分数量
+            BigDecimal divide = bigDecimal.divide(new BigDecimal(daoTwos.size()), 2, BigDecimal.ROUND_DOWN);
+            for(DappMemberEntity memberEntity : daoTwos){
+                this.updateBalanceInsertFlow(
+                        divide,
+                        memberEntity.getId(),
+                        MoneyFlowEnum.TEAM_TWO_PERK.getValue(),
+                        StrUtil.format(MoneyFlowEnum.TEAM_TWO_PERK.getDescrition(),divide));
+            }
+        }
+
+        QueryWrapper<DappMemberEntity> daoThreeQuery = new QueryWrapper<>();
+        daoThreeQuery.eq("level", MemberLevelEnum.DAO_2.getCode());
+        List<DappMemberEntity> daoThrees = dappMemberDao.selectList(daoThreeQuery);
+        if(CollUtil.isNotEmpty(daoThrees)){
+            BigDecimal bigDecimal = totalAmount.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN);
+            //每人平分数量
+            BigDecimal divide = bigDecimal.divide(new BigDecimal(daoThrees.size()), 2, BigDecimal.ROUND_DOWN);
+            for(DappMemberEntity memberEntity : daoThrees){
+                this.updateBalanceInsertFlow(
+                        divide,
+                        memberEntity.getId(),
+                        MoneyFlowEnum.TEAM_THREE_PERK.getValue(),
+                        StrUtil.format(MoneyFlowEnum.TEAM_THREE_PERK.getDescrition(),divide));
+            }
+        }
+
+    }
+
+    @Override
+    public void MemberLevel(Long id) {
+
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(id);
+        if(StrUtil.isEmpty(dappMemberEntity.getRefererIds())){
+            return;
+        }
+        //获取全部上级
+        ArrayList<DappMemberEntity> activeMembers = new ArrayList<>();
+        List<String> refererIds = Arrays.asList(StrUtil.split(",", dappMemberEntity.getRefererIds()));
+        for(String inviteId : refererIds){
+            DappMemberEntity memberEntity = dappMemberDao.selectMemberInfoByInviteId(inviteId);
+            if(ObjectUtil.isNotEmpty(memberEntity)){
+                activeMembers.add(memberEntity);
+            }
+        }
+        if(CollUtil.isEmpty(activeMembers)){
+            return;
+        }
+
+        for(DappMemberEntity activeMember : activeMembers){
+            //获取每一个上级的所有直推,分辨大小区是否满足业绩需求
+            List<DappMemberEntity> directMembers = dappMemberDao.selectChildMemberDirectOrNot(activeMember.getInviteId(), 1, null);
+            if(CollUtil.isEmpty(directMembers)){
+                continue;
+            }
+            if(directMembers.size() < 2){
+                continue;
+            }
+            //获取activeMember的每一个直推的团队有效业绩
+            HashMap<Long, BigDecimal> daXiaoQu = new HashMap<>();
+            for(DappMemberEntity directMember : directMembers){
+                //每一个直推的团队
+                List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(directMember.getInviteId(), 2, null);
+                if(CollUtil.isEmpty(direct)){
+                    continue;
+                }
+                //获取直推的团队的全部有效业绩
+                List<Long> collect = direct.stream().map(DappMemberEntity::getId).collect(Collectors.toList());
+                QueryWrapper<DappStorage> storageQueryWrapper = new QueryWrapper<>();
+                storageQueryWrapper.in("member_id",collect);
+                storageQueryWrapper.eq("state",1);
+                List<DappStorage> dappStorages = dappStorageMapper.selectList(storageQueryWrapper);
+                if(CollUtil.isEmpty(dappStorages)){
+                    continue;
+                }
+
+                BigDecimal directAchieve = dappStorages.stream()
+                        .map(DappStorage::getAmount) // 映射amount到流中
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+                daXiaoQu.put(directMember.getId(),directAchieve);
+            }
+            if(daXiaoQu.isEmpty()){
+                continue;
+            }
+            //输出小区的总业绩
+            BigDecimal sum = sumExcludingMax(daXiaoQu);
+            BigDecimal dao_1_levelAchieve = new BigDecimal(MemberLevelEnum.DAO_1.getLevelAchieve());
+            BigDecimal dao_2_levelAchieve = new BigDecimal(MemberLevelEnum.DAO_2.getLevelAchieve());
+            BigDecimal dao_3_levelAchieve = new BigDecimal(MemberLevelEnum.DAO_3.getLevelAchieve());
+            if(sum.compareTo(dao_3_levelAchieve) >= 0){
+                activeMember.setLevel(MemberLevelEnum.DAO_3.getCode());
+                dappMemberDao.updateById(activeMember);
+            }else if(sum.compareTo(dao_2_levelAchieve) >= 0 && sum.compareTo(dao_3_levelAchieve) < 0){
+                activeMember.setLevel(MemberLevelEnum.DAO_2.getCode());
+                dappMemberDao.updateById(activeMember);
+            }else if(sum.compareTo(dao_1_levelAchieve) >= 0 && sum.compareTo(dao_2_levelAchieve) < 0){
+                activeMember.setLevel(MemberLevelEnum.DAO_1.getCode());
+                dappMemberDao.updateById(activeMember);
+            }else{
+                activeMember.setLevel(MemberLevelEnum.DAO_0.getCode());
+                dappMemberDao.updateById(activeMember);
+            }
+        }
+    }
+
+    /**
+     * 计算HashMap中除最大值以外的数据的累计和
+     *
+     * @param map 包含Long作为key和BigDecimal作为value的HashMap
+     * @return 除最大值以外的数据的累计和
+     * @throws NullPointerException 如果HashMap为空,则抛出此异常
+     */
+    public static BigDecimal sumExcludingMax(HashMap<Long, BigDecimal> map) {
+        if (map == null) {
+            throw new NullPointerException("HashMap cannot be null");
+        }
+
+        // 使用Stream API找到最大的BigDecimal值及其对应的key
+        Optional<Map.Entry<Long, BigDecimal>> maxEntry = map.entrySet().stream()
+                .max((e1, e2) -> e1.getValue().compareTo(e2.getValue()));
+
+        // 检查是否找到了最大值
+        if (maxEntry.isPresent()) {
+            // 移除最大值对应的键值对
+            map.remove(maxEntry.get().getKey());
+
+            // 计算剩余数据的累计和
+            BigDecimal sumOfRemaining = map.entrySet().stream()
+                    .map(Map.Entry::getValue)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 返回累计和
+            return sumOfRemaining;
+        } else {
+            // 如果没有找到最大值(即HashMap为空),则返回BigDecimal.ZERO
+            return BigDecimal.ZERO;
+        }
+    }
+
+    // 主函数,用于测试
+    public static void main(String[] args) {
+        HashMap<Long, BigDecimal> map = new HashMap<>();
+        map.put(1L, new BigDecimal("100.00"));
+        map.put(2L, new BigDecimal("200.00"));
+        map.put(4L, new BigDecimal("200.00"));
+        map.put(3L, new BigDecimal("50.00"));
+
+        BigDecimal sum = sumExcludingMax(map);
+        System.out.println("Sum of remaining values excluding the maximum: " + sum);
     }
 
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index 321bbe5..250985f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -8,6 +8,8 @@
 import cc.mrbird.febs.dapp.dto.*;
 import cc.mrbird.febs.dapp.entity.*;
 import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.enumerate.MemberLevelEnum;
+import cc.mrbird.febs.dapp.enumerate.MoneyFlowEnum;
 import cc.mrbird.febs.dapp.enumerate.NodeType;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappWalletService;
@@ -30,7 +32,6 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author
@@ -61,70 +62,20 @@
 
         DappMemberEntity memberInfo = dappMemberDao.selectById(member.getId());
         WalletInfoVo walletInfo = new WalletInfoVo();
-        List<DappMemberEntity> inviteList = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, null);
-        List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 2, null);
         DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
-        DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId());
 
-        DappMineDataEntity mineData = dappSystemDao.selectMineDataForOne();
-        walletInfo.setDirectCnt(CollUtil.isEmpty(direct) ? 0 : direct.size());
-        walletInfo.setInviteCnt(CollUtil.isEmpty(inviteList) ? 0 : inviteList.size());
-
-        List<DappMemberEntity> collect = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, 1);
-        walletInfo.setActiveDirect(CollUtil.isEmpty(collect) ? 0 : collect.size());
-        List<DappMemberEntity> collectTeam = direct.stream().filter(dappMemberEntity -> dappMemberEntity.getActiveStatus() == 1).collect(Collectors.toList());
-        walletInfo.setActiveCnt(CollUtil.isEmpty(collectTeam) ? 0 : collectTeam.size());
-//        walletInfo.setInviteId(member.getActiveStatus() == 1 ? member.getInviteId() : "-");
         walletInfo.setInviteId(member.getInviteId());
         walletInfo.setBalance(walletCoin.getAvailableAmount());
-        walletInfo.setHasBuy(memberInfo.getActiveStatus());
-        QueryWrapper<DbMemberNode> nodeQueryWrapper = new QueryWrapper<>();
-        nodeQueryWrapper.eq("member_id",member.getId());
-        nodeQueryWrapper.eq("work_state", DbMemberNode.STATE_TWO);
-        List<DbMemberNode> dbMemberNodes = dbMemberNodeMapper.selectList(nodeQueryWrapper);
-        walletInfo.setOutCnt(CollUtil.isEmpty(dbMemberNodes) ? 0 : dbMemberNodes.size());
-//        walletInfo.setOutCnt(memberInfo.getOutCnt());
-        walletInfo.setProfit(dappFundFlowDao.selectProfitAmountByMemberId(member.getId()));
-        walletInfo.setTfcBalance(walletMine.getAvailableAmount());
-        walletInfo.setSafePool(mineData.getSafePool());
-
-        DataDictionaryCustom buyNodeAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.BUY_NODE_AMOUNT.getType(),
-                DataDictionaryEnum.BUY_NODE_AMOUNT.getCode()
+        walletInfo.setLevelName(MemberLevelEnum.DAO_0.getLevelType(member.getLevel()));
+        walletInfo.setNodeType(member.getNodeType());
+        walletInfo.setActiveStatus(member.getActiveStatus());
+        walletInfo.setUsdtBalance(member.getUsdtBalance());
+        DataDictionaryCustom withdrawPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.WITHDRAW_PERCENT.getType(),
+                DataDictionaryEnum.WITHDRAW_PERCENT.getCode()
         );
-        BigDecimal buyNodeAmount = new BigDecimal(StrUtil.isEmpty(buyNodeAmountDic.getValue()) ? "100" : buyNodeAmountDic.getValue());
-        walletInfo.setBuyNodeAmount(buyNodeAmount);
-
-        DataDictionaryCustom buyNodeCodeCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.BUY_NODE_CNT.getType(),
-                DataDictionaryEnum.BUY_NODE_CNT.getCode()
-        );
-        BigDecimal buyNodeCodeCnt = new BigDecimal(StrUtil.isEmpty(buyNodeCodeCntDic.getValue()) ? "3" : buyNodeCodeCntDic.getValue());
-        walletInfo.setBuyNodeCnt(buyNodeCodeCnt);
-        walletInfo.setBuyNode(ObjectUtil.isEmpty(memberInfo.getBuyNode()) ? 0 : memberInfo.getBuyNode());
-
-        BigDecimal bigDecimal = dappFundFlowDao.selectSumAmountByMemberIdAndType(member.getId(), 14);
-        walletInfo.setBuyNodePerk(bigDecimal);
-
-        int i = memberInfo.getBuyNode() * 2000;
-        int teamCnt = CollUtil.isEmpty(direct) ? 0 : direct.size();
-        int i1 = teamCnt * 15;
-        QueryWrapper<DbMemberNode> objectQueryWrapper = new QueryWrapper<>();
-        objectQueryWrapper.eq("member_id",member.getId());
-        List<DbMemberNode> dbMemberNodes1 = dbMemberNodeMapper.selectList(objectQueryWrapper);
-        walletInfo.setScoreCnt(i+i1+(CollUtil.isEmpty(dbMemberNodes1) ? 0 : dbMemberNodes1.size())*300);
-//        Integer activeStatus = ObjectUtil.isEmpty(member.getActiveStatus()) ? 2 : member.getActiveStatus();
-//        if(1 == activeStatus){
-//            int i = memberInfo.getBuyNode() * 2000;
-//            int teamCnt = CollUtil.isEmpty(direct) ? 0 : direct.size();
-//            int i1 = teamCnt * 15;
-//            QueryWrapper<DbMemberNode> objectQueryWrapper = new QueryWrapper<>();
-//            objectQueryWrapper.eq("member_id",member.getId());
-//            List<DbMemberNode> dbMemberNodes1 = dbMemberNodeMapper.selectList(objectQueryWrapper);
-//            walletInfo.setScoreCnt(i+i1+(CollUtil.isEmpty(dbMemberNodes1) ? 0 : dbMemberNodes1.size())*300);
-//        }else{
-//            walletInfo.setScoreCnt(0);
-//        }
+        BigDecimal withdrawPercent = new BigDecimal(withdrawPercentDic.getValue());
+        walletInfo.setWithdrawPercent(withdrawPercent);
 
         return walletInfo;
     }
@@ -139,8 +90,6 @@
             dappFundFlowEntity.setType(recordInPageDto.getType());
         }
         dappFundFlowEntity.setMemberId(member.getId());
-//        dappFundFlowEntity.setStatus(2);
-
         IPage<DappFundFlowEntity> records = dappFundFlowDao.selectInPage(page, dappFundFlowEntity);
         return records.getRecords();
     }
@@ -267,15 +216,15 @@
             throw new FebsException("Balance Not Enough");
         }
 
-//        DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId());
-//        if (walletMine.getAvailableAmount().compareTo(withdrawDto.getFee()) < 0) {
-//            throw new FebsException("Fee Not Enough");
-//        }
-
         updateWalletCoinWithLock(withdrawDto.getAmount(), member.getId(), 2);
-//        updateWalletMineWithLock(withdrawDto.getFee(), member.getId(), 2);
 
-        DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getAmount().negate(), 21, 1, withdrawDto.getFee(), null);
+        DappFundFlowEntity fundFlow = new DappFundFlowEntity(
+                member.getId(),
+                withdrawDto.getAmount().negate(),
+                21,
+                1,
+                withdrawDto.getFee(),
+                null);
         dappFundFlowDao.insert(fundFlow);
 
         MemberCoinWithdrawEntity memberCoinWithdraw = new MemberCoinWithdrawEntity();
@@ -400,42 +349,28 @@
             throw new FebsException("功能升级中");
         }
 
-        member = dappMemberDao.selectById(member.getId());
-//        int buyNode = ObjectUtil.isEmpty(member.getBuyNode()) ? 0 : 1;
-        int buyNode = member.getBuyNode();
-        DataDictionaryCustom buyNodeCodeCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.BUY_NODE_CNT.getType(),
-                DataDictionaryEnum.BUY_NODE_CNT.getCode()
-        );
-        if (buyNode >= Integer.parseInt(buyNodeCodeCntDic.getValue())) {
-            throw new FebsException("Do not repeat purchase");
+        BigDecimal amount = transferDto.getAmount();
+        if(BigDecimal.ZERO.compareTo(amount) >= 0){
+            throw new FebsException("请输入正确的存储数量");
         }
         /**
-         * 限购总数200
+         * 检查一个BigDecimal是否能被500整除
          */
-
-        DataDictionaryCustom perKNumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                DataDictionaryEnum.PERK_NUM.getType(),
-                DataDictionaryEnum.PERK_NUM.getCode()
-        );
-        int perKNum = Integer.parseInt(ObjectUtil.isEmpty(perKNumDic) ? "200" : perKNumDic.getValue());
-
-        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectList(null);
-        if(CollUtil.isNotEmpty(dappMemberEntities)){
-            int sum1 = dappMemberEntities.stream().mapToInt(DappMemberEntity::getBuyNode).sum();
-            if(perKNum < sum1 + 1){
-                throw new FebsException("节点已售完");
-            }
+        BigDecimal bigDecimal = new BigDecimal("500");
+        BigDecimal remainder = amount.remainder(bigDecimal);
+        if(remainder.compareTo(BigDecimal.ZERO) != 0){
+            throw new FebsException("存储数量必须是"+bigDecimal+"的整数倍");
         }
 
         if (ObjectUtil.isEmpty(transferDto.getId())) {
+
             DappFundFlowEntity fundFlow = new DappFundFlowEntity(
                     member.getId(),
-                    transferDto.getAmount().negate(),
-                    13,
+                    transferDto.getAmount().abs(),
+                    MoneyFlowEnum.CUN_CHU.getValue(),
                     1,
                     BigDecimal.ZERO,
-                    transferDto.getTxHash());
+                    StrUtil.format(MoneyFlowEnum.CUN_CHU.getDescrition(),amount));
             dappFundFlowDao.insert(fundFlow);
             return fundFlow.getId();
         } else {
@@ -446,7 +381,6 @@
             if ("success".equals(transferDto.getFlag())) {
                 flow.setFromHash(transferDto.getTxHash());
                 dappFundFlowDao.updateById(flow);
-
             } else {
                 if (flow.getStatus() == 1) {
                     dappFundFlowDao.deleteById(transferDto.getId());
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/TeamDownVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/TeamDownVo.java
new file mode 100644
index 0000000..4f64883
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/TeamDownVo.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;
+
+/**
+ * @author wzy
+ * @date 2022-06-06
+ **/
+@Data
+@ApiModel(value = "TeamDownVo", description = "团队列表接口返回参数类")
+public class TeamDownVo {
+
+    @ApiModelProperty(value = "直推地址")
+    private String address;
+
+    @ApiModelProperty(value = "有效人数")
+    private int activeCnt;
+
+    @ApiModelProperty(value = "有效业绩")
+    private BigDecimal activeAchieve;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/TeamUpVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/TeamUpVo.java
new file mode 100644
index 0000000..c09f58a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/TeamUpVo.java
@@ -0,0 +1,35 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author wzy
+ * @date 2022-06-06
+ **/
+@Data
+@ApiModel(value = "TeamUpVo", description = "团队列表接口返回参数类")
+public class TeamUpVo {
+
+    @ApiModelProperty(value = "团队人数")
+    private int teamCnt;
+
+    @ApiModelProperty(value = "直推人数")
+    private int directCnt;
+
+    @ApiModelProperty(value = "有效团队人数")
+    private int teamCntAva;
+
+    @ApiModelProperty(value = "有效直推人数")
+    private int directCntAva;
+
+    @ApiModelProperty(value = "团队总业绩")
+    private BigDecimal teamAchieve;
+
+    @ApiModelProperty(value = "直推总业绩")
+    private BigDecimal directAchieve;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
index 2747d78..2c9b0f8 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
@@ -17,48 +17,22 @@
     @ApiModelProperty(value = "邀请码")
     private String inviteId;
 
-    @ApiModelProperty(value = "粉丝")
-    private Integer directCnt;
-
     @ApiModelProperty(value = "余额")
     private BigDecimal balance;
 
-    @ApiModelProperty(value = "出局次数")
-    private int outCnt;
+    @ApiModelProperty(value = "会员层级")
+    private String levelName;
 
-    @ApiModelProperty(value = "收益")
-    private BigDecimal profit;
+    @ApiModelProperty(value = "是否节点 1-是 2-否")
+    private Integer nodeType;
 
-    @ApiModelProperty(value = "是否购买")
-    private Integer hasBuy;
+    @ApiModelProperty(value = "激活状态 1-已激活 2-未激活")
+    private Integer activeStatus;
 
-    @ApiModelProperty(value = "手续费")
-    private BigDecimal tfcBalance;
+    @ApiModelProperty(value = "提现费率")
+    private BigDecimal withdrawPercent;
 
-    @ApiModelProperty(value = "保险池")
-    private BigDecimal safePool;
+    @ApiModelProperty(value = "提现费率")
+    private BigDecimal usdtBalance;
 
-    @ApiModelProperty(value = "购买节点的金额")
-    private BigDecimal buyNodeAmount;
-
-    @ApiModelProperty(value = "购买节点的最大次数")
-    private BigDecimal buyNodeCnt;
-
-    @ApiModelProperty(value = "节点收益")
-    private BigDecimal buyNodePerk;
-
-    @ApiModelProperty(value = "是否是节点 1-是 0-否")
-    private Integer buyNode;
-
-    @ApiModelProperty(value = "直推数量")
-    private Integer inviteCnt;
-
-    @ApiModelProperty(value = "有效人数")
-    private Integer activeCnt;
-
-    @ApiModelProperty(value = "贡献值")
-    private Integer scoreCnt;
-
-    @ApiModelProperty(value = "有效直推")
-    private Integer activeDirect;
 }
diff --git a/src/main/java/cc/mrbird/febs/job/ChainSDMChargeRunner.java b/src/main/java/cc/mrbird/febs/job/ChainSDMChargeRunner.java
index ad62b86..e40568c 100644
--- a/src/main/java/cc/mrbird/febs/job/ChainSDMChargeRunner.java
+++ b/src/main/java/cc/mrbird/febs/job/ChainSDMChargeRunner.java
@@ -27,7 +27,7 @@
     @Override
     public void run(ApplicationArguments args) throws Exception {
         long start = System.currentTimeMillis();
-        log.info("区块链充值开始启动");
+        log.info("区块链存储开始启动");
 
         Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM_CHARGE);
         BigInteger newest = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
@@ -43,7 +43,7 @@
         while (newest.subtract(block).compareTo(section) > -1) {
             BigInteger end = block.add(section);
             log.info("监听:[{} - {}]", block, end);
-            ChainService.sdmChargeEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+            ChainService.receivePeopleEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
 
             block = block.add(section);
             if (block.compareTo(newest) > 0) {
@@ -51,9 +51,9 @@
             }
         }
 
-        ChainService.sdmChargeEventListener(block, null, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+        ChainService.receivePeopleEventListener(block, null, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
 
         long end = System.currentTimeMillis();
-        log.info("区块链滑点启动完成, 消耗时间{}", end - start);
+        log.info("区块链存储启动完成, 消耗时间{}", end - start);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/job/ChainSDMListenerJob.java b/src/main/java/cc/mrbird/febs/job/ChainSDMListenerJob.java
deleted file mode 100644
index ea2012a..0000000
--- a/src/main/java/cc/mrbird/febs/job/ChainSDMListenerJob.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package cc.mrbird.febs.job;
-
-import cc.mrbird.febs.common.contants.AppContants;
-import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.dapp.chain.ChainEnum;
-import cc.mrbird.febs.dapp.chain.ChainService;
-import cc.mrbird.febs.dapp.chain.ContractEventService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.math.BigInteger;
-
-@Slf4j
-@Component
-@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
-public class ChainSDMListenerJob{
-
-    @Autowired
-    private ContractEventService bscUsdtContractEvent;
-    @Autowired
-    private ContractEventService bscCoinContractEvent;
-
-    @Autowired
-    private RedisUtils redisUtils;
-
-    @Scheduled(cron = "0 0/5 * * * ? ")
-    public void chainBlockUpdate() {
-        BigInteger blockNumber = ChainService.getInstance(ChainEnum.BSC_USDT.name()).blockNumber();
-
-        redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_NEWEST_NUM, blockNumber);
-    }
-
-    @Scheduled(cron = "0/2 * * * * ? ")
-    public void chainIncrementBlock() {
-        Object newestBlockObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_NEWEST_NUM);
-        BigInteger newestBlock;
-        if (newestBlockObj == null) {
-            newestBlock = ChainService.getInstance(ChainEnum.BSC_USDT.name()).blockNumber();
-        } else {
-            newestBlock = (BigInteger) newestBlockObj;
-        }
-
-        Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
-        BigInteger toIncrement;
-        if (incrementObj == null) {
-            toIncrement = newestBlock;
-        } else {
-            BigInteger incrementBlock = (BigInteger) incrementObj;
-
-            // 最新区块小于增加区块
-            if (newestBlock.compareTo(incrementBlock) <= 0) {
-                return;
-            }
-            toIncrement = incrementBlock.add(BigInteger.ONE);
-        }
-
-        redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, toIncrement);
-    }
-
-//    @Override
-//    public void run(ApplicationArguments args) throws Exception {
-//        long start = System.currentTimeMillis();
-//        log.info("区块链监听开始启动");
-//        Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
-//        BigInteger newest = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
-//        BigInteger block;
-//        if (incrementObj == null) {
-//            block = newest;
-//        } else {
-//            block = (BigInteger) incrementObj;
-//        }
-//
-//        ChainService.wssContractEventListener(block, bscUsdtContractEvent, ChainEnum.BSC_USDT_LISTENER.name());
-//        ChainService.wssContractEventListener(block, bscCoinContractEvent, ChainEnum.BSC_TFC_LISTENER.name());
-//
-////        BigInteger section = BigInteger.valueOf(5000);
-////        while (newest.subtract(block).compareTo(section) > -1) {
-////            BigInteger end = block.add(section);
-////
-////            BigInteger finalBlock = block;
-////            new Thread(() -> {
-////                log.info("监听:[{} - {}]", finalBlock, end);
-////                ChainService.contractEventListener(finalBlock, end, bscUsdtContractEvent, ChainEnum.BSC_USDT_LISTENER.name());
-////                ChainService.contractEventListener(finalBlock, end, bscCoinContractEvent, ChainEnum.BSC_TFC_LISTENER.name());
-////            }).start();
-////
-////            block = block.add(section);
-////            if (block.compareTo(newest) > 0) {
-////                block = newest;
-////            }
-////        }
-////        ChainService.contractEventListener(block, bscUsdtContractEvent, ChainEnum.BSC_USDT_LISTENER.name());
-////        ChainService.contractEventListener(block, bscCoinContractEvent, ChainEnum.BSC_TFC_LISTENER.name());
-//
-//        long end = System.currentTimeMillis();
-//        log.info("区块链监听启动完成, 消耗时间{}", end - start);
-//    }
-}
diff --git a/src/main/java/cc/mrbird/febs/job/ChainSDMRunner.java b/src/main/java/cc/mrbird/febs/job/ChainSDMRunner.java
deleted file mode 100644
index 8e4c9d3..0000000
--- a/src/main/java/cc/mrbird/febs/job/ChainSDMRunner.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cc.mrbird.febs.job;
-
-import cc.mrbird.febs.common.contants.AppContants;
-import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.dapp.chain.ChainEnum;
-import cc.mrbird.febs.dapp.chain.ChainService;
-import cc.mrbird.febs.dapp.chain.ContractEventService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-import java.math.BigInteger;
-
-@Slf4j
-@Component
-@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
-public class ChainSDMRunner  implements ApplicationRunner {
-    @Autowired
-    private ContractEventService bscUsdtContractEvent;
-
-    @Autowired
-    private RedisUtils redisUtils;
-
-    @Override
-    public void run(ApplicationArguments args) throws Exception {
-        long start = System.currentTimeMillis();
-        log.info("区块链USDT开始启动");
-
-        Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
-        BigInteger newest = ChainService.getInstance(ChainEnum.BSC_USDT.name()).blockNumber();
-        BigInteger block;
-        if (incrementObj == null) {
-            block = newest;
-        } else {
-            block = (BigInteger) incrementObj;
-        }
-
-        BigInteger section = BigInteger.valueOf(5000);
-        log.info("监听:[{} - {} - {}]", newest,block,newest.subtract(block).compareTo(section) > -1);
-        while (newest.subtract(block).compareTo(section) > -1) {
-            BigInteger end = block.add(section);
-            log.info("监听:[{} - {}]", block, end);
-            ChainService.sdmUSDTEventListener(block, end, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
-
-            block = block.add(section);
-            if (block.compareTo(newest) > 0) {
-                block = newest;
-            }
-        }
-
-        ChainService.sdmUSDTEventListener(block, null, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
-
-        long end = System.currentTimeMillis();
-        log.info("区块链滑点启动完成, 消耗时间{}", end - start);
-    }
-}
diff --git a/src/main/java/cc/mrbird/febs/job/MatrixResetJob.java b/src/main/java/cc/mrbird/febs/job/MatrixResetJob.java
deleted file mode 100644
index 1b7cfeb..0000000
--- a/src/main/java/cc/mrbird/febs/job/MatrixResetJob.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package cc.mrbird.febs.job;
-
-import cc.mrbird.febs.dapp.mapper.DbMemberNodeMapper;
-import cc.mrbird.febs.dapp.service.DappSystemService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-/**
- * @author wzy
- * @date 2022-05-30
- **/
-@Slf4j
-@Component
-@ConditionalOnProperty(prefix = "system", name = "reset-job", havingValue = "true")
-public class MatrixResetJob {
-
-    @Autowired
-    private DappSystemService dappSystemService;
-    @Autowired
-    private DbMemberNodeMapper dbMemberNodeMapper;
-
-//    @Scheduled(cron = "0 0 0 * * ?")
-//    public void resetMatrix() {
-//        /**
-//         * 获取所有左右节点都有值,轮数为 1,未复投work_state = 1 的节点
-//         *      判断右节点有值
-//         *          有继续向判断右节点
-//         *              有,原纪录复投逻辑
-//         */
-//        QueryWrapper<DbMemberNode> objectQueryWrapper = new QueryWrapper<>();
-//        objectQueryWrapper.eq("count_fund", 1);
-//        objectQueryWrapper.eq("work_state", 1);
-//        List<DbMemberNode> dbMemberNodes = dbMemberNodeMapper.selectList(objectQueryWrapper);
-//        if(CollUtil.isEmpty(dbMemberNodes)){
-//            return;
-//        }
-//        for(DbMemberNode dbMemberNode : dbMemberNodes){
-//            if(ObjectUtil.isEmpty(dbMemberNode.getRightNode())){
-//                continue;
-//            }
-//            //子节点
-//            Long rightNode = dbMemberNode.getRightNode();
-//            DbMemberNode dbMemberNode1 = dbMemberNodeMapper.selectById(rightNode);
-//            if(ObjectUtil.isEmpty(dbMemberNode1)){
-//                continue;
-//            }
-//
-//            if(ObjectUtil.isEmpty(dbMemberNode1.getRightNode())){
-//                continue;
-//            }
-//
-//            //有,则上级节点出局复投,轮数加1,复投逻辑
-//            dappSystemService.memberNodeNext(dbMemberNode);
-//        }
-//    }
-}
diff --git a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
deleted file mode 100644
index 86b436c..0000000
--- a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cc.mrbird.febs.job;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-/**
- * @author wzy
- * @date 2022-08-26
- **/
-@Slf4j
-@Component
-@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
-public class MatrixTreeInit {
-
-//    @Autowired
-//    private DappAchieveTreeDao dappAchieveTreeDao;
-//
-//    @Autowired
-//    private DappMemberDao dappMemberDao;
-//
-//    @PostConstruct
-//    public void init() {
-////        List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeList();
-//        List<DappAchieveTreeEntity> tree = dappAchieveTreeDao.selectTreeListV2();
-//
-//        MatrixTree instance = MatrixTree.getInstance();
-//        for (DappAchieveTreeEntity treeNode : tree) {
-//            Long memberId = treeNode.getMemberId();
-//            DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
-//
-//
-//            MemberNode node = new MemberNode();
-//            node.setAddress(dappMemberEntity.getAddress());
-//            node.setInviteId(dappMemberEntity.getInviteId());
-//            node.setRefererId(dappMemberEntity.getRefererId());
-//            node.setMemberId(treeNode.getMemberId());
-//            node.setFundId(treeNode.getFundId());
-//            instance.addNode(node);
-//        }
-//    }
-}
diff --git a/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java b/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java
index 750f64e..b612a14 100644
--- a/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java
+++ b/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java
@@ -1,77 +1,331 @@
 package cc.mrbird.febs.job;
 
 
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.DappStorage;
+import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.enumerate.MoneyFlowEnum;
+import cc.mrbird.febs.dapp.mapper.DappMemberDao;
+import cc.mrbird.febs.dapp.mapper.DappStorageMapper;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.dapp.service.DappSystemService;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Component
-@ConditionalOnProperty(prefix = "system", name = "quartz-job", havingValue = "true")
+@ConditionalOnProperty(prefix = "system", name = "charge-transfer", havingValue = "true")
 public class ProfitDailyJob {
 
-//    @Autowired
-//    private DappMemberDao dappMemberDao;
-//    @Autowired
-//    private DappFundFlowDao dappFundFlowDao;
-//    @Autowired
-//    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
-//    @Autowired
-//    private DappWalletService dappWalletService;
-//
-//    @Scheduled(cron = "0 0 0 * * ?")
-//    public void profitDailyJob() {
-//        log.info("每日产矿任务执行");
-//        DataDictionaryCustom symbolPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
-//        if (symbolPriceDic == null) {
-//            log.info("未设置币种价格");
-//            return;
-//        }
-//
-//        DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode());
-//        if (rebateDic == null) {
-//            log.info("未设置每日产矿比例");
-//            return;
-//        }
-//
-//        BigDecimal symbolPrice = new BigDecimal(symbolPriceDic.getValue());
-//        BigDecimal rebateRatio = new BigDecimal(rebateDic.getValue());
-//
-//        QueryWrapper<DappMemberEntity> query = new QueryWrapper<>();
-//        query.eq("active_status", 1);
-//        List<DappMemberEntity> members = dappMemberDao.selectList(query);
-//        if (CollUtil.isEmpty(members)) {
-//            return;
-//        }
-//
-//        members.forEach(item -> {
-//            QueryWrapper<DappFundFlowEntity> fundFlowQuery = new QueryWrapper<>();
-//            fundFlowQuery.eq("member_id", item.getId());
-//            fundFlowQuery.eq("type", 11);
-//            List<DappFundFlowEntity> flows = dappFundFlowDao.selectList(fundFlowQuery);
-//
-//            BigDecimal sum = BigDecimal.ZERO;
-//            if (CollUtil.isNotEmpty(flows)) {
-//                double symbolSum = flows.stream().mapToDouble(flow -> flow.getAmount().doubleValue()).sum();
-//                sum = symbolPrice.multiply(new BigDecimal(symbolSum));
-//            }
-//
-//            if (CollUtil.isEmpty(flows) || TreeConstants.PUT_IN_AMOUNT.compareTo(sum) > 0) {
-//                BigDecimal profitU = TreeConstants.PUT_IN_AMOUNT.multiply(rebateRatio.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN));
-//
-//                BigDecimal remain = TreeConstants.PUT_IN_AMOUNT.subtract(sum);
-//                if (remain.compareTo(profitU) < 0) {
-//                    profitU = remain;
-//                }
-//
-//                BigDecimal profitSymbol = profitU.divide(symbolPrice, 8, RoundingMode.HALF_DOWN);
-//
-//                dappWalletService.updateWalletMineWithLock(profitSymbol, item.getId(), 1);
-//                DappFundFlowEntity fundFlow = new DappFundFlowEntity(item.getId(), profitSymbol, 11, 2, null, null);
-//                dappFundFlowDao.insert(fundFlow);
-//            }
-//        });
-//
-//
-//    }
+    @Resource
+    private DappSystemService dappSystemService;
+    @Resource
+    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+    @Resource
+    private DappStorageMapper dappStorageMapper;
+    @Resource
+    private DappMemberDao dappMemberDao;
+
+    /**
+     * 每天释放1%的静态释放
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void profitDailyJobThree() {
+        QueryWrapper<DappStorage> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("state",1);
+        List<DappStorage> dappStorages = dappStorageMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isEmpty(dappStorages)){
+            return;
+        }
+
+        for(DappStorage storage : dappStorages){
+            Long memberId = storage.getMemberId();
+            BigDecimal releaseAmount = storage.getReleaseAmount();
+            dappSystemService.updateBalanceInsertFlow(
+                    releaseAmount,
+                    memberId,
+                    MoneyFlowEnum.STATIC_PERK.getValue(),
+                    StrUtil.format(MoneyFlowEnum.STATIC_PERK.getDescrition(),releaseAmount));
+        }
+    }
+
+    /**
+     * 六、永动补偿池2%
+     * 24小时内最后一名拿走池子50%
+     * 倒数2-100名拿走池子50%平分(根据时间)
+     *
+     *
+     * 五、DAO永动激励池:6%
+     *  循环激励50%(每天下午17:00结算)
+     * (其中50%给予当天大单排名激励前4名,40%、30%、20、10%;
+     * 另外50% 给予当天直推总业绩排名激励前10名,第1名40%,2-4名30%,5-10名30%)
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void profitDailyJobOne() {
+        DataDictionaryCustom buChangChiDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BUCAHNG_CHI.getType(),
+                DataDictionaryEnum.BUCAHNG_CHI.getCode()
+        );
+        //永动补偿池2%
+        BigDecimal buChangAmountTotal = new BigDecimal(buChangChiDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        if(BigDecimal.ZERO.compareTo(buChangAmountTotal) >= 0){
+            return;
+        }
+        //剩余金额
+        BigDecimal surplusAmount = BigDecimal.ZERO;
+        /**
+         * 最后一名拿走池子50%
+         */
+        BigDecimal oneAmount = buChangAmountTotal.multiply(new BigDecimal("0.5")).setScale(2,BigDecimal.ROUND_DOWN);
+
+        DateTime dateTime = DateUtil.offsetHour(new Date(), -24);
+        DappStorage dappStorage = dappStorageMapper.selectOneByDateDesc(dateTime);
+        if(ObjectUtil.isNotEmpty(dappStorage)){
+            Long memberId = dappStorage.getMemberId();
+            dappSystemService.updateBalanceInsertFlow(
+                    oneAmount,
+                    memberId,
+                    MoneyFlowEnum.BU_CHANG_PERK.getValue(),
+                    StrUtil.format(MoneyFlowEnum.BU_CHANG_PERK.getDescrition(),buChangAmountTotal,oneAmount));
+
+            surplusAmount = surplusAmount.add(oneAmount);
+        }
+        /**
+         * 倒数2-100名拿走池子50%平分(根据时间)
+         */
+        BigDecimal otherAmount = buChangAmountTotal.subtract(oneAmount);
+        List<DappStorage> dappStorages = dappStorageMapper.selectListByDateDesc(dateTime);
+        if(CollUtil.isNotEmpty(dappStorages)){
+
+            BigDecimal otherAmountReal = otherAmount.divide(new BigDecimal(dappStorages.size())).setScale(2, BigDecimal.ROUND_DOWN);
+            surplusAmount = surplusAmount.add(otherAmount);
+            for(DappStorage storage : dappStorages){
+                Long memberId = storage.getMemberId();
+                dappSystemService.updateBalanceInsertFlow(
+                        otherAmountReal,
+                        memberId,
+                        MoneyFlowEnum.BU_CHANG_PERK.getValue(),
+                        StrUtil.format(MoneyFlowEnum.BU_CHANG_PERK.getDescrition(),buChangAmountTotal,oneAmount));
+            }
+        }
+        buChangChiDic.setValue(buChangAmountTotal.subtract(surplusAmount).setScale(2,BigDecimal.ROUND_DOWN).toString());
+        dataDictionaryCustomMapper.updateById(buChangChiDic);
+    }
+
+    /**
+     * 五、DAO永动激励池:6%
+     *  循环激励50%(每天下午17:00结算)
+     * (其中50%给予当天大单排名激励前4名,40%、30%、20、10%;
+     * 另外50% 给予当天直推总业绩排名激励前10名,第1名40%,2-4名30%,5-10名30%)
+     */
+    @Scheduled(cron = "0 0 17 * * ?")
+    public void profitDailyJobTwo() {
+
+        DataDictionaryCustom jiliChiDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.JILI_CHI.getType(),
+                DataDictionaryEnum.JILI_CHI.getCode()
+        );
+
+        BigDecimal realAmount = BigDecimal.ZERO;
+        //DAO永动激励池50%
+        BigDecimal jiLiTotal = new BigDecimal(jiliChiDic.getValue()).multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
+        if(BigDecimal.ZERO.compareTo(jiLiTotal) >= 0){
+            return;
+        }
+
+
+        /**
+         * 其中50%给予当天大单排名激励前4名,40%、30%、20、10%
+         */
+        BigDecimal daDanTotal = jiLiTotal.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
+        if(daDanTotal.compareTo(BigDecimal.ZERO) > 0){
+
+            int oneCount = 4;
+            int twoCount = 3;
+            int threeCount = 2;
+            int fourCount = 1;
+            int count = oneCount + twoCount + threeCount + fourCount;
+            //每一份的奖励数量
+            BigDecimal everyAmount = daDanTotal.divide(new BigDecimal(count));
+
+            if(everyAmount.compareTo(BigDecimal.ZERO) > 0){
+                DappStorage dappStorageOne = dappStorageMapper.selectAmountByDesc(new Date(),0,1);
+                if(ObjectUtil.isNotEmpty(dappStorageOne)){
+                    BigDecimal multiply = everyAmount.multiply(new BigDecimal(oneCount));
+                    dappSystemService.updateBalanceInsertFlow(
+                            multiply,
+                            dappStorageOne.getMemberId(),
+                            MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
+
+                    realAmount = realAmount.add(multiply);
+                }
+                DappStorage dappStorageTwo = dappStorageMapper.selectAmountByDesc(new Date(),1,1);
+                if(ObjectUtil.isNotEmpty(dappStorageTwo)){
+                    BigDecimal multiply = everyAmount.multiply(new BigDecimal(twoCount));
+                    dappSystemService.updateBalanceInsertFlow(
+                            multiply,
+                            dappStorageTwo.getMemberId(),
+                            MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
+
+                    realAmount = realAmount.add(multiply);
+                }
+                DappStorage dappStorageThree = dappStorageMapper.selectAmountByDesc(new Date(),2,1);
+                if(ObjectUtil.isNotEmpty(dappStorageThree)){
+                    BigDecimal multiply = everyAmount.multiply(new BigDecimal(threeCount));
+                    dappSystemService.updateBalanceInsertFlow(
+                            multiply,
+                            dappStorageThree.getMemberId(),
+                            MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
+
+                    realAmount = realAmount.add(multiply);
+                }
+                DappStorage dappStorageFour = dappStorageMapper.selectAmountByDesc(new Date(),3,1);
+                if(ObjectUtil.isNotEmpty(dappStorageFour)){
+                    BigDecimal multiply = everyAmount.multiply(new BigDecimal(fourCount));
+                    dappSystemService.updateBalanceInsertFlow(
+                            multiply,
+                            dappStorageFour.getMemberId(),
+                            MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
+
+                    realAmount = realAmount.add(multiply);
+                }
+            }
+        }
+
+        /**
+         * 另外50% 给予当天直推总业绩排名激励前10名,第1名40%,2-4名30%,5-10名30%
+         */
+        BigDecimal directTotal = jiLiTotal.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
+        /**
+         * 存放直推业绩<上级的memberId,直推总业绩>
+         */
+        HashMap<Long, BigDecimal> map = new HashMap<>();
+
+        List<DappStorage> dappStorages = dappStorageMapper.selectListByDate(new Date());
+        if(CollUtil.isNotEmpty(dappStorages)){
+            for(DappStorage dappStorage : dappStorages){
+                DappMemberEntity member = dappMemberDao.selectById(dappStorage.getMemberId());
+                if(StrUtil.isEmpty(member.getRefererId())){
+                    continue;
+                }
+                DappMemberEntity memberRef = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
+                if(ObjectUtil.isEmpty(memberRef)){
+                    continue;
+                }
+                Long id = memberRef.getId();
+                if(map.containsKey(id)){
+                    BigDecimal bigDecimal = map.get(id);
+                    BigDecimal add = bigDecimal.add(dappStorage.getAmount());
+                    map.put(id,add);
+                }else{
+                    map.put(id,dappStorage.getAmount());
+                }
+            }
+        }
+        /**
+         * 获取这个map的直推总业绩前十,分发奖励
+         */
+        if(!map.isEmpty()){
+            // 使用Stream API按照BigDecimal从大到小排序
+            List<Map.Entry<Long, BigDecimal>> topTenEntries = map.entrySet().stream()
+                    .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
+                    .limit(10)
+                    .collect(Collectors.toList());
+
+            int startNum = 1;
+            for (Map.Entry<Long, BigDecimal> entry : topTenEntries) {
+
+                Long memberId = entry.getKey();
+                BigDecimal directAchieve = entry.getValue();
+                //第一名
+                if(startNum == 1){
+                    BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.4")).setScale(2, BigDecimal.ROUND_DOWN);
+                    dappSystemService.updateBalanceInsertFlow(
+                            bigDecimal,
+                            memberId,
+                            MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,bigDecimal));
+
+                    realAmount = realAmount.add(bigDecimal);
+                }else if(startNum > 1 && startNum <=4){
+                    BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN);
+                    BigDecimal divide = bigDecimal.divide(new BigDecimal("3"), 2, BigDecimal.ROUND_DOWN);
+
+                    dappSystemService.updateBalanceInsertFlow(
+                            divide,
+                            memberId,
+                            MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,divide));
+
+                    realAmount = realAmount.add(divide);
+                }else{
+                    BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN);
+                    BigDecimal divide = bigDecimal.divide(new BigDecimal("6"), 2, BigDecimal.ROUND_DOWN);
+
+                    dappSystemService.updateBalanceInsertFlow(
+                            divide,
+                            memberId,
+                            MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(),
+                            StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,divide));
+
+                    realAmount = realAmount.add(divide);
+                }
+                startNum = startNum + 1;
+            }
+        }
+
+        BigDecimal subtract = new BigDecimal(jiliChiDic.getValue()).subtract(realAmount);
+        jiliChiDic.setValue(subtract.toString());
+        dataDictionaryCustomMapper.updateById(jiliChiDic);
+    }
+
+    public static void main(String[] args) {
+        DateTime dateTime = DateUtil.offsetHour(new Date(), -24);
+        System.out.println(dateTime);
+
+
+        // 创建一个HashMap示例
+        HashMap<Long, BigDecimal> map = new HashMap<>();
+        map.put(1L, new BigDecimal("100.00"));
+        map.put(2L, new BigDecimal("200.00"));
+        map.put(3L, new BigDecimal("50.00"));
+        map.put(4L, new BigDecimal("300.00"));
+        map.put(5L, new BigDecimal("150.00"));
+        map.put(6L, new BigDecimal("150.00"));
+        map.put(7L, new BigDecimal("150.00"));
+        map.put(8L, new BigDecimal("150.00"));
+        map.put(9L, new BigDecimal("150.00"));
+        map.put(10L, new BigDecimal("150.00"));
+        map.put(11L, new BigDecimal("150.00"));
+        // ... 可以继续添加元素
+
+        // 使用Stream API按照BigDecimal从大到小排序,并获取前十个元素
+        List<Map.Entry<Long, BigDecimal>> topTenEntries = map.entrySet().stream()
+                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
+                .limit(10)
+                .collect(Collectors.toList());
+
+        // 打印结果
+        for (Map.Entry<Long, BigDecimal> entry : topTenEntries) {
+            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
index 93a155b..f1fa964 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
@@ -5,19 +5,10 @@
  * @date 2022-05-31
  **/
 public class QueueConstants {
-    //发送推荐规则奖励
-    public static final String TFC_NODE_AGAIN_LONG = "queue_tfc_node_again_long";
-    //发送推荐规则奖励
-    public static final String TFC_NODE_AGAIN = "queue_tfc_node_again";
-    //发送推荐规则奖励
-    public static final String TFC_NODE_PERK_QUEEN = "queue_tfc_node_perk";
-    //发送推荐规则奖励
-    public static final String TFC_INVITE_PERK_QUEEN = "queue_tfc_invite_perk";
 
-    public static final String ONLINE_TRANSFER = "queue_sdm_online_transfer";
-    public static final String DISTRIB_PROFIT = "queue_sdm_distrib_profit";
-    public static final String USER_BUY_REWARD = "queue_sdm_user_buy_reward";
-    public static final String NFT_BOX = "queue_sdm_nft_box";
-    public static final String ACHIEVE_TREE = "queue_sdm_achieve_tree";
-    public static final String TFC_NEW_PRICE = "queue_tfc_new_price";
+    public static final String FPD_MEMBER_LEVEL = "queue_fpd_member_level";
+    public static final String FPD_TEAM_PERK = "queue_fpd_team_perk";
+    public static final String FPD_NODE_JILI_BUCHANG_PERK = "queue_fpd_node_jili_buchang_perk";
+    public static final String FPD_MEMBER_DIRECT_PERK = "queue_fpd_member_direct_perk";
+    public static final String FPD_MEMBER_DYNAMIC_PERK = "queue_fpd_member_dynamic_perk";
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
index 689caef..b426ebb 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
@@ -5,23 +5,15 @@
 @Getter
 public enum QueueEnum {
 
-    //发送推荐规则奖励
-    TFC_NODE_AGAIN_LONG("exchange_tfc_node_again_long", "route_key_tfc_node_again_long", QueueConstants.TFC_NODE_AGAIN_LONG),
-    //发送推荐规则奖励
-    TFC_NODE_AGAIN("exchange_tfc_node_again", "route_key_tfc_node_again", QueueConstants.TFC_NODE_AGAIN),
-    //发送推荐规则奖励
-    TFC_NODE_PERK("exchange_tfc_node_perk", "route_key_tfc_node_perk", QueueConstants.TFC_NODE_PERK_QUEEN),
-    //发送推荐规则奖励
-    TFC_INVITE_PERK("exchange_tfc_invite_perk", "route_key_tfc_invite_perk", QueueConstants.TFC_INVITE_PERK_QUEEN),
+    FPD_MEMBER_LEVEL("exchange_fpd_member_level", "route_key_fpd_member_level", QueueConstants.FPD_MEMBER_LEVEL),
 
-    ONLINE_TRANSFER("exchange_sdm_online_transfer", "route_key_sdm_online_transfer", "queue_sdm_online_transfer"),
-    DISTRIB_PROFIT("exchange_sdm_distrib_profit", "route_key_sdm_distrib_profit", "queue_sdm_distrib_profit"),
-    USER_BUY_REWARD("exchange_sdm_user_buy_reward", "route_key_sdm_user_buy_reward", "queue_sdm_user_buy_reward"),
-    NFT_BOX("exchange_sdm_nft_box", "route_key_sdm_nft_box", "queue_sdm_nft_box"),
-    ACHIEVE_TREE("exchange_sdm_achieve_tree", "route_key_sdm_achieve_tree", QueueConstants.ACHIEVE_TREE),
-//    ACHIEVE_TREE("exchange_sdm_achieve_tree", "route_key_sdm_achieve_tree", "queue_sdm_achieve_tree"),
-    WITHDRAW_FEE("exchange_withdraw_fee", "route_key_withdraw_fee", "queue_withdraw_fee"),
-    TFC_NEW_PRICE("exchange_tfc_new_price", "route_key_tfc_new_price", "queue_tfc_new_price");
+    FPD_TEAM_PERK("exchange_fpd_team_perk", "route_key_fpd_team_perk", QueueConstants.FPD_TEAM_PERK),
+
+    FPD_NODE_JILI_BUCHANG_PERK("exchange_fpd_node_jili_buchang_perk", "route_key_fpd_node_jili_buchang_perk", QueueConstants.FPD_NODE_JILI_BUCHANG_PERK),
+
+    FPD_MEMBER_DIRECT_PERK("exchange_fpd_member_direct_perk", "route_key_fpd_member_direct_perk", QueueConstants.FPD_MEMBER_DIRECT_PERK),
+
+    FPD_MEMBER_DYNAMIC_PERK("exchange_fpd_member_dynamic_perk", "route_key_fpd_member_dynamic_perk", QueueConstants.FPD_MEMBER_DYNAMIC_PERK);
 
     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 7cdc0cc..4bf0d10 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -29,154 +29,78 @@
         return new RabbitTemplate(connectionFactory);
     }
 
-    // === 业绩树 start ===
+    // ===  start ===
     @Bean
-    public DirectExchange achieveTreeExchange() {
-        return new DirectExchange(QueueEnum.ACHIEVE_TREE.getExchange());
+    public DirectExchange memberDynamicExchange() {
+        return new DirectExchange(QueueEnum.FPD_MEMBER_DYNAMIC_PERK.getExchange());
     }
-
     @Bean
-    public Queue achieveTreeQueue() {
-        return new Queue(QueueEnum.ACHIEVE_TREE.getQueue());
+    public Queue memberDynamicQueue() {
+        return new Queue(QueueEnum.FPD_MEMBER_DYNAMIC_PERK.getQueue());
     }
-
     @Bean
-    public Binding achieveTreeBind() {
-        return BindingBuilder.bind(achieveTreeQueue()).to(achieveTreeExchange()).with(QueueEnum.ACHIEVE_TREE.getRoute());
+    public Binding memberDynamicBind() {
+        return BindingBuilder.bind(memberDynamicQueue()).to(memberDynamicExchange()).with(QueueEnum.FPD_MEMBER_DYNAMIC_PERK.getRoute());
     }
-    // === 业绩树 end ===
+    // ===  end ===
 
-
-    // === 提现手续费 start ===
+    // ===  start ===
     @Bean
-    public DirectExchange withdrawFeeExchange() {
-        return new DirectExchange(QueueEnum.WITHDRAW_FEE.getExchange());
+    public DirectExchange memberDirectExchange() {
+        return new DirectExchange(QueueEnum.FPD_MEMBER_DIRECT_PERK.getExchange());
     }
-
     @Bean
-    public Queue withdrawFeeQueue() {
-        return new Queue(QueueEnum.WITHDRAW_FEE.getQueue());
+    public Queue memberDirectQueue() {
+        return new Queue(QueueEnum.FPD_MEMBER_DIRECT_PERK.getQueue());
     }
-
     @Bean
-    public Binding withdrawFeeBind() {
-        return BindingBuilder.bind(withdrawFeeQueue()).to(withdrawFeeExchange()).with(QueueEnum.WITHDRAW_FEE.getRoute());
+    public Binding memberDirectBind() {
+        return BindingBuilder.bind(memberDirectQueue()).to(memberDirectExchange()).with(QueueEnum.FPD_MEMBER_DIRECT_PERK.getRoute());
     }
-    // === 提现手续费 end ===
+    // ===  end ===
 
-
-
-    // === tfc最新价 start ===
+    // ===  start ===
     @Bean
-    public DirectExchange tfcNewPriceExchange() {
-        return new DirectExchange(QueueEnum.TFC_NEW_PRICE.getExchange());
+    public DirectExchange nodeJiliBuchangExchange() {
+        return new DirectExchange(QueueEnum.FPD_NODE_JILI_BUCHANG_PERK.getExchange());
     }
-
     @Bean
-    public Queue tfcNewPriceQueue() {
-        return new Queue(QueueEnum.TFC_NEW_PRICE.getQueue());
+    public Queue nodeJiliBuchangQueue() {
+        return new Queue(QueueEnum.FPD_NODE_JILI_BUCHANG_PERK.getQueue());
     }
-
     @Bean
-    public Binding tfcNewPriceBind() {
-        return BindingBuilder.bind(tfcNewPriceQueue()).to(tfcNewPriceExchange()).with(QueueEnum.TFC_NEW_PRICE.getRoute());
+    public Binding nodeJiliBuchangBind() {
+        return BindingBuilder.bind(nodeJiliBuchangQueue()).to(nodeJiliBuchangExchange()).with(QueueEnum.FPD_NODE_JILI_BUCHANG_PERK.getRoute());
     }
-    // === tfc最新价 end ===
+    // ===  end ===
 
-
-
-    // === 手续费分发 start ===
+    // ===  start ===
     @Bean
-    public DirectExchange feeDistributeExchange() {
-        return new DirectExchange(QueueEnum.DISTRIB_PROFIT.getExchange());
+    public DirectExchange teamPerkExchange() {
+        return new DirectExchange(QueueEnum.FPD_TEAM_PERK.getExchange());
     }
-
     @Bean
-    public Queue feeDistributeQueue() {
-        return new Queue(QueueEnum.DISTRIB_PROFIT.getQueue());
+    public Queue teamPerkQueue() {
+        return new Queue(QueueEnum.FPD_TEAM_PERK.getQueue());
     }
-
     @Bean
-    public Binding feeDistributeBind() {
-        return BindingBuilder.bind(feeDistributeQueue()).to(feeDistributeExchange()).with(QueueEnum.DISTRIB_PROFIT.getRoute());
+    public Binding teamPerkBind() {
+        return BindingBuilder.bind(teamPerkQueue()).to(teamPerkExchange()).with(QueueEnum.FPD_TEAM_PERK.getRoute());
     }
-    // === 手续费分发 end ===
+    // ===  end ===
 
-
-
-    // === 发送推荐规则奖励 start ===
+    // ===  start ===
     @Bean
-    public DirectExchange invitePerkExchange() {
-        return new DirectExchange(QueueEnum.TFC_INVITE_PERK.getExchange());
+    public DirectExchange memberLevelExchange() {
+        return new DirectExchange(QueueEnum.FPD_MEMBER_LEVEL.getExchange());
     }
-
     @Bean
-    public Queue invitePerkQueue() {
-        return new Queue(QueueEnum.TFC_INVITE_PERK.getQueue());
+    public Queue memberLevelQueue() {
+        return new Queue(QueueEnum.FPD_MEMBER_LEVEL.getQueue());
     }
-
     @Bean
-    public Binding invitePerkBind() {
-        return BindingBuilder.bind(invitePerkQueue()).to(invitePerkExchange()).with(QueueEnum.TFC_INVITE_PERK.getRoute());
+    public Binding memberLevelBind() {
+        return BindingBuilder.bind(memberLevelQueue()).to(memberLevelExchange()).with(QueueEnum.FPD_MEMBER_LEVEL.getRoute());
     }
-    // === 发送推荐规则奖励 end ===
-
-
-
-    // === 发送节点奖励 start ===
-    @Bean
-    public DirectExchange nodePerkExchange() {
-        return new DirectExchange(QueueEnum.TFC_NODE_PERK.getExchange());
-    }
-
-    @Bean
-    public Queue nodePerkQueue() {
-        return new Queue(QueueEnum.TFC_NODE_PERK.getQueue());
-    }
-
-    @Bean
-    public Binding nodePerkBind() {
-        return BindingBuilder.bind(nodePerkQueue()).to(nodePerkExchange()).with(QueueEnum.TFC_NODE_PERK.getRoute());
-    }
-    // === 发送节点奖励 end ===
-
-
-
-    // === 发送复投 start ===
-    @Bean
-    public DirectExchange nodeAgainExchange() {
-        return new DirectExchange(QueueEnum.TFC_NODE_AGAIN.getExchange());
-    }
-
-    @Bean
-    public Queue nodeAgainQueue() {
-        return new Queue(QueueEnum.TFC_NODE_AGAIN.getQueue());
-    }
-
-    @Bean
-    public Binding nodeAgainBind() {
-        return BindingBuilder.bind(nodeAgainQueue()).to(nodeAgainExchange()).with(QueueEnum.TFC_NODE_AGAIN.getRoute());
-    }
-    // === 发送复投 end ===
-
-
-
-
-
-    // === 发送复投 start ===
-    @Bean
-    public DirectExchange nodeAgainExchangeLong() {
-        return new DirectExchange(QueueEnum.TFC_NODE_AGAIN_LONG.getExchange());
-    }
-
-    @Bean
-    public Queue nodeAgainQueueLong() {
-        return new Queue(QueueEnum.TFC_NODE_AGAIN_LONG.getQueue());
-    }
-
-    @Bean
-    public Binding nodeAgainBindLong() {
-        return BindingBuilder.bind(nodeAgainQueueLong()).to(nodeAgainExchangeLong()).with(QueueEnum.TFC_NODE_AGAIN_LONG.getRoute());
-    }
-    // === 发送复投 end ===
+    // ===  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 a0521a2..56d715a 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -1,19 +1,13 @@
 package cc.mrbird.febs.rabbit.consumer;
 
-import cc.mrbird.febs.dapp.entity.DbMemberNode;
-import cc.mrbird.febs.dapp.mapper.DbMemberNodeMapper;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.rabbit.QueueConstants;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
+import javax.annotation.Resource;
 
 /**
  * @author wzy
@@ -21,93 +15,84 @@
  **/
 @Slf4j
 @Component
-@ConditionalOnProperty(prefix = "system", name = "online-transfer", havingValue = "true")
+@ConditionalOnProperty(prefix = "system", name = "charge-transfer", havingValue = "true")
 public class ChainConsumer {
 
-    @Autowired
+    @Resource
     private DappSystemService dappSystemService;
-    @Autowired
-    private DbMemberNodeMapper dbMemberNodeMapper;
-
-    @RabbitListener(queues = QueueConstants.ACHIEVE_TREE)
-    public void achieveTree(String id) {
-        log.info("收到业绩树消息");
-        dappSystemService.achieveTree(Long.parseLong(id));
-    }
 
     /**
-     * 生产者在tfc应用
-     * @param data
+     * 一、DAO成员静态:
+     *  质押PEOPLE(500枚起)静态每天1%。
+     *  直推8%
+     * 六、永动补偿池2%
+     * 五、DAO永动激励池:6%
+     * 四、DAO联盟委员会 :   5%  (50名全球DAO委员)
+     * @param id 流水ID
      */
-    @RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
-    public void tfcNewPrice(String data) {
-//        dappSystemService.tfcNewPrice(data);
+    @RabbitListener(queues = QueueConstants.FPD_MEMBER_DIRECT_PERK)
+    public void directPerkMsg(Long id) {
+        log.info("消费直推,流水ID:{}", id);
+        dappSystemService.directPerkMsg(id);
     }
+
 
     /**
-     * @param data
+     * 二、DAO成员动态:
+     * 1.直推1个拿2代,直推10个拿20代,直推15个拿30代,最高30代
+     * 2.   1-5代奖励7%
+     *      6-10代奖励6%
+     *      11-15代奖励5%
+     *      15-20代奖励4%
+     *      21-25代奖励4%
+     *      26-30代奖励7%
+     * @param id 流水ID
      */
-    @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
-    public void feeDistribute(String data) {
-        dappSystemService.feeDistribute(data);
-    }
-
-
-
-    @RabbitListener(queues = QueueConstants.TFC_INVITE_PERK_QUEEN)
-    public void invitePerkMsg(Long id) {
-        log.info("消费推荐规则奖励,流水ID:{}", id);
+    @RabbitListener(queues = QueueConstants.FPD_MEMBER_DYNAMIC_PERK)
+    public void memberDynamicPerkMsg(Long id) {
+        log.info("消费DAO成员动态,流水ID:{}", id);
         dappSystemService.invitePerkMsg(id);
     }
 
-    @RabbitListener(queues = QueueConstants.TFC_NODE_PERK_QUEEN)
+
+    /**
+     * 六、永动补偿池2%
+     * 五、DAO永动激励池:6%
+     * 四、DAO联盟委员会 :   5%  (50名全球DAO委员)
+     * @param id 流水ID
+     */
+    @RabbitListener(queues = QueueConstants.FPD_NODE_JILI_BUCHANG_PERK)
     public void nodePerkMsg(Long id) {
-        log.info("消费节点投资,流水ID:{}", id);
+        log.info("消费DAO节点,激励,补偿,流水ID:{}", id);
         dappSystemService.nodePerkMsg(id);
     }
 
-    @RabbitListener(queues = QueueConstants.TFC_NODE_AGAIN)
-    public void nodeMsg(Long id) {
-        log.info("复投:{}", id);
-        dappSystemService.achieveTreeV2(id);
+    /**
+     *
+     *   3.  DAO成员团队奖:5%加权分红(people数量)
+     *       DAO1:小区业绩30万/币  加权分红50%
+     *       DAO2:小区业绩100万/币 加权分红30%
+     *       DAO3:小区业绩500万/币加权分红20%
+     */
+    @RabbitListener(queues = QueueConstants.FPD_TEAM_PERK)
+    public void teamPerk(Long id) {
+        log.info("消费成员团队奖5%,流水ID:{}", id);
+        dappSystemService.teamPerk(id);
     }
 
-    @RabbitListener(queues = QueueConstants.TFC_NODE_AGAIN_LONG)
-    public void nodeMsgLong(Long id) {
-        log.info("复投:{}", id);
-
-        /**
-         * 获取所有左右节点都有值,轮数为 1,未复投work_state = 1 的节点
-         *      判断右节点有值
-         *          有继续向判断右节点
-         *              有,原纪录复投逻辑
-         */
-        QueryWrapper<DbMemberNode> objectQueryWrapper = new QueryWrapper<>();
-        objectQueryWrapper.eq("count_fund", 1);
-        objectQueryWrapper.eq("work_state", 1);
-        objectQueryWrapper.eq("type", 1);
-        objectQueryWrapper.eq("member_id", id);
-        List<DbMemberNode> dbMemberNodes = dbMemberNodeMapper.selectList(objectQueryWrapper);
-        if(CollUtil.isEmpty(dbMemberNodes)){
-            return;
-        }
-        for(DbMemberNode dbMemberNode : dbMemberNodes){
-            if(ObjectUtil.isEmpty(dbMemberNode.getRightNode())){
-                continue;
-            }
-            //子节点
-            Long rightNode = dbMemberNode.getRightNode();
-            DbMemberNode dbMemberNode1 = dbMemberNodeMapper.selectById(rightNode);
-            if(ObjectUtil.isEmpty(dbMemberNode1)){
-                continue;
-            }
-
-            if(ObjectUtil.isEmpty(dbMemberNode1.getRightNode())){
-                continue;
-            }
-
-            //有,则上级节点出局复投,轮数加1,复投逻辑
-            dappSystemService.memberNodeNext(dbMemberNode);
-        }
+    /**
+     *
+     *   3.  成员升级或者降级
+     *       DAO1:小区业绩30万/币
+     *       DAO2:小区业绩100万/币
+     *       DAO3:小区业绩500万/币
+     */
+    @RabbitListener(queues = QueueConstants.FPD_MEMBER_LEVEL)
+    public void MemberLevel(Long id) {
+        log.info("消费发送成员升级,会员ID:{}", id);
+        dappSystemService.MemberLevel(id);
     }
+
+
+
 }
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 2801643..b13b9e6 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -33,57 +33,71 @@
 
     }
 
-    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
-     */
-    public void sendTfcFee(String data) {
-        log.info("发送提现手续费消息:{}", data);
-        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.WITHDRAW_FEE.getExchange(), QueueEnum.WITHDRAW_FEE.getRoute(), data, 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);
-    }
-
-    /**
-     * 推荐规则:
-     * 无直推奖励,推2个3层,3个6层,4个10层。1%见点奖(有效层级内,每个每1%),共10层,共%10。
+     * 一、DAO成员静态:
+     *  质押PEOPLE(500枚起)静态每天1%。
+     *  直推8%
      * @param id 流水ID
      */
-    public void sendInvitePerkMsg(Long id) {
-        log.info("发送推荐规则奖励,流水ID:{}", id);
+    public void sendDirectPerkMsg(Long id) {
+        log.info("发送直推:{}", id);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.TFC_INVITE_PERK.getExchange(), QueueEnum.TFC_INVITE_PERK.getRoute(), id, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.FPD_MEMBER_DIRECT_PERK.getExchange(), QueueEnum.FPD_MEMBER_DIRECT_PERK.getRoute(), id, correlationData);
     }
+
+    /**
+     * 二、DAO成员动态:
+     * 1.直推1个拿2代,直推10个拿20代,直推15个拿30代,最高30代
+     * 2.   1-5代奖励7%
+     *      6-10代奖励6%
+     *      11-15代奖励5%
+     *      15-20代奖励4%
+     *      21-25代奖励4%
+     *      26-30代奖励7%
+     * @param id 流水ID
+     */
+    public void sendMemberDynamicPerkMsg(Long id) {
+        log.info("发送DAO成员动态,流水ID:{}", id);
+        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+        rabbitTemplate.convertAndSend(QueueEnum.FPD_MEMBER_DYNAMIC_PERK.getExchange(), QueueEnum.FPD_MEMBER_DYNAMIC_PERK.getRoute(), id, correlationData);
+    }
+
+    /**
+     * 六、永动补偿池2%
+     * 五、DAO永动激励池:6%
+     * 四、DAO联盟委员会 :   5%  (50名全球DAO委员)
+     * @param id 流水ID
+     */
     public void sendNodePerkMsg(Long id) {
-        log.info("发送节点投资,流水ID:{}", id);
+        log.info("发送DAO节点,激励,补偿,流水ID:{}", id);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.TFC_NODE_PERK.getExchange(), QueueEnum.TFC_NODE_PERK.getRoute(), id, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.FPD_NODE_JILI_BUCHANG_PERK.getExchange(), QueueEnum.FPD_NODE_JILI_BUCHANG_PERK.getRoute(), id, correlationData);
     }
-    public void sendNodeMsg(Long id) {
-        log.info("发送复投:{}", id);
+
+    /**
+     *
+     *   3.  DAO成员团队奖:5%加权分红(people数量)
+     *       DAO1:小区业绩30万/币  加权分红50%
+     *       DAO2:小区业绩100万/币 加权分红30%
+     *       DAO3:小区业绩500万/币加权分红20%
+     */
+    public void sendTeamPerk(Long id) {
+        log.info("发送成员团队奖5%,流水ID:{}", id);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.TFC_NODE_AGAIN.getExchange(), QueueEnum.TFC_NODE_AGAIN.getRoute(), id, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.FPD_TEAM_PERK.getExchange(), QueueEnum.FPD_TEAM_PERK.getRoute(), id, correlationData);
     }
-    public void sendNodeMsgLong(Long id) {
-        log.info("发送复投原本数据:{}", id);
+
+    /**
+     *
+     *   3.  成员升级
+     *       DAO1:小区业绩30万/币  加权分红50%
+     *       DAO2:小区业绩100万/币 加权分红30%
+     *       DAO3:小区业绩500万/币加权分红20%
+     */
+    public void sendMemberLevel(Long id) {
+        log.info("发送成员升级,会员ID:{}", id);
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
-        rabbitTemplate.convertAndSend(QueueEnum.TFC_NODE_AGAIN_LONG.getExchange(), QueueEnum.TFC_NODE_AGAIN_LONG.getRoute(), id, correlationData);
+        rabbitTemplate.convertAndSend(QueueEnum.FPD_TEAM_PERK.getExchange(), QueueEnum.FPD_TEAM_PERK.getRoute(), id, correlationData);
     }
+
 }
diff --git a/src/main/resources/application-chain.yml b/src/main/resources/application-chain.yml
index 12c04b0..90ba829 100644
--- a/src/main/resources/application-chain.yml
+++ b/src/main/resources/application-chain.yml
@@ -54,9 +54,5 @@
     time-zone: GMT+8
 
 system:
-  charge-transfer: false
-  online-transfer: true
-  chain-listener: true
-  reset-job: true
-  quartz-job: true
+  charge-transfer: true
   debug: false
\ No newline at end of file
diff --git a/src/main/resources/application-charge.yml b/src/main/resources/application-charge.yml
deleted file mode 100644
index a630dae..0000000
--- a/src/main/resources/application-charge.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-spring:
-  datasource:
-    dynamic:
-      # 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗
-      p6spy: false
-      hikari:
-        connection-timeout: 30000
-        max-lifetime: 1800000
-        max-pool-size: 15
-        min-idle: 5
-        connection-test-query: select 1
-        pool-name: FebsHikariCP
-      # 配置默认数据源
-      primary: base
-      datasource:
-        # 数据源-1,名称为 base
-        base:
-          username: db_sdm
-          password: sdm123!@#
-          # 8.210.56.119
-          driver-class-name: com.mysql.cj.jdbc.Driver
-          url: jdbc:mysql://127.0.0.1:3306/db_sdm?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
-
-  redis:
-    # Redis数据库索引(默认为 0)
-    database: 15
-    # Redis服务器地址
-    host: 127.0.0.1
-    # Redis服务器连接端口
-    port: 6379
-    # Redis 密码
-    password: 1234!@#$!QAZ
-    lettuce:
-      pool:
-        # 连接池中的最小空闲连接
-        min-idle: 8
-        # 连接池中的最大空闲连接
-        max-idle: 500
-        # 连接池最大连接数(使用负值表示没有限制)
-        max-active: 2000
-        # 连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: 10000
-    # 连接超时时间(毫秒)
-    timeout: 5000
-  rabbitmq:
-    host: 127.0.0.1
-    port: 5672
-    username: xc_rabbit
-    password: xuncong123
-    publisher-confirm-type: correlated
-
-  jackson:
-    date-format: yyyy-MM-dd HH:mm:ss
-    time-zone: GMT+8
-
-system:
-  charge-transfer: true
-  online-transfer: false
-  chain-listener: false
-  reset-job: false
-  quartz-job: false
-  debug: false
\ No newline at end of file
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index e2656cd..6337456 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -32,7 +32,7 @@
     # Redis服务器连接端口
     port: 6479
     # Redis 密码
-    password: xcong123
+    password: d3y6dsdl;f.327
     lettuce:
       pool:
         # 连接池中的最小空闲连接
@@ -58,9 +58,5 @@
     publisher-confirm-type: correlated
 
 system:
-  charge-transfer: false
-  online-transfer: false
-  chain-listener: false
-  reset-job: false
-  quartz-job: false
+  charge-transfer: true
   debug: false
\ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index ee361ed..d4ce82e 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -55,8 +55,4 @@
 
 system:
   charge-transfer: false
-  online-transfer: false
-  chain-listener: false
-  reset-job: false
-  quartz-job: false
   debug: false
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3e3e1be..4896087 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 8081
+  port: 8082
   tomcat:
     uri-encoding: utf-8
 
diff --git a/src/main/resources/mapper/dapp/DappFundFlowDao.xml b/src/main/resources/mapper/dapp/DappFundFlowDao.xml
index 4e69c8b..3724422 100644
--- a/src/main/resources/mapper/dapp/DappFundFlowDao.xml
+++ b/src/main/resources/mapper/dapp/DappFundFlowDao.xml
@@ -4,7 +4,6 @@
 
     <select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappFundFlowEntity">
         select a.*,
-                (a.amount + a.fee) AS amountReal,
                b.address address
         from dapp_fund_flow a
         inner join dapp_member b on a.member_id=b.id
diff --git a/src/main/resources/mapper/dapp/DappStorageMapper.xml b/src/main/resources/mapper/dapp/DappStorageMapper.xml
new file mode 100644
index 0000000..cdb9b6a
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappStorageMapper.xml
@@ -0,0 +1,53 @@
+<?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.DappStorageMapper">
+
+
+    <select id="selectOneByDateDesc" resultType="cc.mrbird.febs.dapp.entity.DappStorage">
+        select
+               *
+        from
+            dapp_storage
+        where
+            date_format(create_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+        order by create_time desc
+        limit 1
+    </select>
+
+
+    <select id="selectListByDateDesc" resultType="cc.mrbird.febs.dapp.entity.DappStorage">
+        select
+               *
+        from
+            dapp_storage
+        where
+            date_format(create_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+        order by create_time desc
+        limit 1,99
+    </select>
+
+
+    <select id="selectListByDate" resultType="cc.mrbird.febs.dapp.entity.DappStorage">
+        select
+               *
+        from
+            dapp_storage
+        where
+            date_format(create_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+        order by create_time desc
+    </select>
+
+
+    <select id="selectAmountByDesc" resultType="cc.mrbird.febs.dapp.entity.DappStorage">
+        select
+            *
+        from
+            dapp_storage
+        where
+                date_format(create_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+        order by amount desc
+            limit {offset},{count}
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/TreeTest.java b/src/test/java/cc/mrbird/febs/TreeTest.java
index 7ea9ddd..0a6305d 100644
--- a/src/test/java/cc/mrbird/febs/TreeTest.java
+++ b/src/test/java/cc/mrbird/febs/TreeTest.java
@@ -87,9 +87,9 @@
         fromMember.setActiveStatus(1);
         dappMemberDao.updateById(fromMember);
 
-        chainProducer.sendNodeMsg(fundFlow.getId());
-        //发送推荐规则奖励
-        chainProducer.sendInvitePerkMsg(fundFlow.getId());
+//        chainProducer.sendNodeMsg(fundFlow.getId());
+//        发送推荐规则奖励
+//        chainProducer.sendInvitePerkMsg(fundFlow.getId());
         //发送节点投资
         chainProducer.sendNodePerkMsg(fundFlow.getId());
 

--
Gitblit v1.9.1