From 8b854ff5dfae5bb3066380a461b6e972b9fa502d Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 13 Jun 2022 19:40:47 +0800
Subject: [PATCH] fix maker distrib

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |   82 ++++++++++++++++++++++++++++++++++++++--
 1 files changed, 77 insertions(+), 5 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 0b8503c..adaa965 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
@@ -13,6 +13,7 @@
 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 cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
@@ -23,6 +24,7 @@
 import com.alibaba.fastjson.JSONObject;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -149,11 +151,13 @@
         BigDecimal fee = fundflow.getFee();
         DappMemberEntity member = dappMemberDao.selectById(fundflow.getMemberId());
 
+        List<DappMemberEntity> parents;
         if (StrUtil.isBlank(member.getRefererId()) || "0".equals(member.getRefererId())) {
-            return;
+            parents = new ArrayList<>();
+        } else {
+            List<String> inviteIds = StrUtil.split(member.getRefererId(), ',');
+            parents = dappMemberDao.selectParentsList(inviteIds, 6);;
         }
-        List<String> inviteIds = StrUtil.split(member.getRefererId(), ',');
-        List<DappMemberEntity> parents = dappMemberDao.selectParentsList(inviteIds, 6);
 
         DataDictionaryCustom miniHoldCoin = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_MINI_HOLD_COIN_LIMIT);
         DataDictionaryCustom slipPointSetting = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SLIP_POINT_SETTING, AppContants.DIC_TYPE_SLIP_POINT_SETTING);
@@ -192,7 +196,6 @@
                 }
 
                 BigDecimal total = distrbAmount.multiply(new BigDecimal(distribDic.getValue()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
-
                 OnlineTransferUtil.addTransfer(parent.getAddress(), total, fundflow.getType(), 1, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
 
                 DappFundFlowEntity distribFlow = new DappFundFlowEntity(parent.getId(), total, 4, 2, BigDecimal.ZERO);
@@ -203,9 +206,38 @@
             }
         }
 
+        // 铸池滑点金额
+        BigDecimal makerAmount = distrbAmount.multiply(slipSetting.getMakeProp().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
+        log.info("铸池滑点金额:{}", makerAmount);
+        if (makerAmount.compareTo(BigDecimal.ZERO) > 0) {
+            List<DappMemberEntity> makerAddress = dappMemberDao.selectMakerAddress();
+            if (CollUtil.isNotEmpty(makerAddress)) {
+                BigDecimal totalMaker = BigDecimal.ZERO;
+                Map<String, BigDecimal> map = new HashMap<>();
+                Map<String, Long> addressAndId = new HashMap<>();
+                for (DappMemberEntity maker : makerAddress) {
+                    BigDecimal balance = instance.balanceOf(maker.getAddress());
+                    map.put(maker.getAddress(), balance);
+                    addressAndId.put(maker.getAddress(), maker.getId());
+
+                    totalMaker = totalMaker.add(balance);
+                }
+
+                for (Map.Entry<String, BigDecimal> entry : map.entrySet()) {
+                    BigDecimal target = makerAmount.multiply(entry.getValue().divide(totalMaker, 2, RoundingMode.HALF_UP));
+
+                    OnlineTransferUtil.addTransfer(entry.getKey(), target, fundflow.getType(), 1, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
+
+                    DappFundFlowEntity distribFlow = new DappFundFlowEntity(addressAndId.get(entry.getKey()), target, 4, 2, BigDecimal.ZERO);
+                    dappFundFlowDao.insert(distribFlow);
+                }
+            }
+        }
+
+
         // 若节点金额还有剩余,则进入技术金额
         techAmount = techAmount.add(nodeAmount);
-        OnlineTransferUtil.addTransfer(ChainEnum.BSC_TFC_TECH.getAddress(), techAmount, fundflow.getType(), 2, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
+        OnlineTransferUtil.addTransfer(ChainEnum.BSC_TFC_TECH.getAddress(), techAmount, fundflow.getType(), 3, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
 
         Map<String, String> map = new HashMap<>();
         map.put("batchNo", batchNo);
@@ -311,10 +343,32 @@
                 dappFundFlowDao.updateById(fundFlow);
             }
         }
+
+        // 判断系统是否启动,如满足条件则启动系统
+        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
+        if (!"start".equals(hasStart)) {
+            DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_START_TARGET);
+            BigDecimal target = new BigDecimal(dic.getValue());
+
+            // 若源池中的USDT达到或超过8万U,则启动整个系统
+            BigDecimal balance = ChainService.getInstance(ChainEnum.BSC_USDT_SOURCE.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
+            if (target.compareTo(balance) < 1) {
+                redisUtils.set(AppContants.SYSTEM_START_FLAG, "start");
+
+                // 启动系统
+                startSystem();
+            }
+        }
     }
 
     @Override
     public void userBuyReward(Long id) {
+        // 系统未启动不参与
+        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
+        if (!"start".equals(hasStart)) {
+            return;
+        }
+
         DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(id);
 
         DappMemberEntity member = dappMemberDao.selectById(fundFlow.getMemberId());
@@ -342,4 +396,22 @@
         map.put("type", "batch");
         chainProducer.sendOnlineTransfer(JSONObject.toJSONString(map));
     }
+
+    @Autowired
+    private SystemTradeJob systemTradeJob;
+
+    @Override
+    public void startSystem() {
+        log.info("启动系统");
+
+        Thread thread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                systemTradeJob.transferPoolVol();
+                systemTradeJob.sourcePoolUsdtOutLimit();
+            }
+        });
+
+        thread.start();
+    }
 }

--
Gitblit v1.9.1