From d641cc8c336537f61f0436b86cb3cb3d9fbdac32 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Sun, 04 Sep 2022 18:26:11 +0800
Subject: [PATCH] finish new need

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |  128 ++++++++++++++++++++++++++++++------------
 1 files changed, 90 insertions(+), 38 deletions(-)

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 1d60942..d5c7446 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
@@ -3,45 +3,27 @@
 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.common.utils.SpringContextUtil;
 import cc.mrbird.febs.dapp.chain.ChainEnum;
 import cc.mrbird.febs.dapp.chain.ChainService;
-import cc.mrbird.febs.dapp.chain.ContractChainService;
 import cc.mrbird.febs.dapp.dto.SystemDto;
 import cc.mrbird.febs.dapp.entity.*;
-import cc.mrbird.febs.dapp.enumerate.CardPeriod;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.dapp.service.DappWalletService;
-import cc.mrbird.febs.dapp.utils.OnlineTransferUtil;
-import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo;
-import cc.mrbird.febs.dapp.vo.SlipSettingVo;
-import cc.mrbird.febs.job.SystemTradeJob;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
 import cc.mrbird.febs.tree.MatrixTree;
 import cc.mrbird.febs.tree.MemberNode;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.select.Elements;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.IOException;
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.math.RoundingMode;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.*;
 
 /**
@@ -54,16 +36,9 @@
 public class DappSystemServiceImpl implements DappSystemService {
 
     private final DappSystemDao dappSystemDao;
-    private final DappReturnRatioDao dappReturnRatioDao;
     private final RedisUtils redisUtils;
     private final DappFundFlowDao dappFundFlowDao;
     private final DappMemberDao dappMemberDao;
-    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
-    private final DappOnlineTransferDao dappOnlineTransferDao;
-    private final ChainProducer chainProducer;
-    private final DappSymbolDailyPriceMapper dappSymbolDailyPriceMapper;
-    private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper;
-    private final DappWalletCoinDao dappWalletCoinDao;
 
     private final DappAchieveTreeDao dappAchieveTreeDao;
     private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
@@ -79,25 +54,37 @@
         return system;
     }
 
-    // 最低容量(百分比)
-    private final BigDecimal volProp = new BigDecimal("2");
-    // 每日增/减百分比
-    private final BigDecimal changeProp = new BigDecimal("1");
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public synchronized void achieveTree(Long memberId) {
         DappMemberEntity member = dappMemberDao.selectById(memberId);
 
+        int batchNo = 0;
+        DappAchieveTreeEntity newestTreeNode = dappAchieveTreeDao.selectNewestTreeNode();
+        if (newestTreeNode != null) {
+            if (newestTreeNode.getValidState() == 2) {
+                batchNo = newestTreeNode.getBatchNo() + 1;
+            } else {
+                batchNo = newestTreeNode.getBatchNo();
+            }
+        }
+
         // 在大树中,插入当前节点
         DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity();
         achieveTree.setMidNode(memberId);
         achieveTree.setValidState(1);
+        achieveTree.setBatchNo(batchNo);
         dappAchieveTreeDao.insert(achieveTree);
 
         // 在内存树(大树)中插入当前节点,并返回父节点
         MemberNode node = new MemberNode(member.getId(), member.getAddress(), member.getInviteId(), member.getRefererId());
+
         MatrixTree tree = MatrixTree.getInstance();
+        MemberNode exist = tree.getNode(member.getId());
+        if (exist != null) {
+            return;
+        }
+
         MemberNode parentNode = tree.addNode(node);
 
         // 创建该节点的矩阵
@@ -177,12 +164,9 @@
         DappMemberEntity member = dappMemberDao.selectById(memberId);
         DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
 
-        member.setOutCnt(member.getOutCnt() + 1);
-        dappMemberDao.updateById(member);
-
         if (parent != null) {
             BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15"));
-            dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId());
+            dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId(), 1);
 
             DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null);
             dappFundFlowDao.insert(fundFlow);
@@ -190,10 +174,46 @@
 
         // 如果是复投的,则需奖励
         if (isReIn == 1) {
-            dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId());
+            List<DappMemberEntity> directCnt = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, 1);
 
-            DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null);
-            dappFundFlowDao.insert(matrixProfitFlow);
+            /**
+             * 复投后,推一个拿一轮,推两个拿两轮,推三个后终身有效。
+             * 按规则每轮未能提取的奖金分配:
+             * 50%直接进入TFC底池
+             * 20%给到推荐人
+             * 30%留下待提。
+             */
+            if (directCnt.size() < 3 && member.getOutCnt() != 0 && member.getOutCnt() - 1 == directCnt.size()) {
+                BigDecimal amount = new BigDecimal("190");
+
+                BigDecimal sourcePool = amount.multiply(new BigDecimal("0.5"));
+                BigDecimal directAmount = amount.multiply(new BigDecimal("0.2"));
+
+                BigDecimal remain = amount.subtract(sourcePool).subtract(directAmount);
+
+                new Thread(() -> {
+                    ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("0xb06cc3dAF362a1670F12eBD0242022b538Ca72ef", sourcePool);
+                }).start();
+
+                if (parent != null) {
+                    dappWalletService.updateWalletCoinWithLock(directAmount, parent.getId(), 1);
+
+                    DappFundFlowEntity direct = new DappFundFlowEntity(parent.getId(), directAmount, 3, 2, null, null);
+                    dappFundFlowDao.insert(direct);
+                }
+
+                dappWalletService.addFrozenAmountWithLock(remain, memberId);
+            } else {
+                dappWalletService.releaseFrozenAmountWithLock(memberId);
+
+                member.setOutCnt(member.getOutCnt() + 1);
+                dappMemberDao.updateById(member);
+
+                dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId(), 1);
+
+                DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null);
+                dappFundFlowDao.insert(matrixProfitFlow);
+            }
 
             DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, new BigDecimal("100").negate(), 1, 2, null, null);
             dappFundFlowDao.insert(rePutInFlow);
@@ -211,4 +231,36 @@
     public void tfcNewPrice(String data) {
         redisUtils.set(AppContants.REDIS_KEY_TFC_NEW_PRICE, new BigDecimal(data));
     }
+
+    @Override
+    public void resetMatrix() {
+        DappAchieveTreeEntity node = dappAchieveTreeDao.selectNewestTreeNode();
+        if (node.getValidState() == 2) {
+            return;
+        }
+
+        long days = DateUtil.between(node.getCreateTime(), new Date(), DateUnit.DAY);
+        if (days < 7) {
+            return;
+        }
+        DappMineDataEntity mineDataEntity = dappSystemDao.selectMineDataForOne();
+
+        List<DappAchieveTreeEntity> list = dappAchieveTreeDao.selectLastCountTreeNode(500);
+        if (CollUtil.isNotEmpty(list)) {
+            BigDecimal preAmount = mineDataEntity.getSafePool().divide(new BigDecimal(list.size()), 2, RoundingMode.HALF_UP);
+
+            list.forEach(item -> {
+                dappWalletService.updateWalletCoinWithLock(preAmount, item.getMidNode(), 1);
+                DappFundFlowEntity flow = new DappFundFlowEntity(item.getMidNode(), preAmount, 8, 2, null, null);
+                dappFundFlowDao.insert(flow);
+            });
+        }
+
+        mineDataEntity.setSafePool(BigDecimal.ZERO);
+        dappSystemDao.updateMineData(mineDataEntity);
+
+        dappAchieveTreeDao.updateNodeValidState();
+        dappAchieveMemberTreeDao.emptyTable();
+        dappMemberDao.updateMemberActive();
+    }
 }

--
Gitblit v1.9.1