From 6750bad09a6c2f88bc48274efc84c082fde44a2b Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 20 May 2024 14:05:45 +0800
Subject: [PATCH] 滑点监控

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java |   85 +++++++++++++++++++++++++++++++-----------
 1 files changed, 63 insertions(+), 22 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
index 6f04777..5f0051c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -147,22 +147,22 @@
         for (Map.Entry<Integer, DappMemberEntity> entry : objectObjectHashMap.entrySet()) {
             Integer key = entry.getKey();
             DappMemberEntity refMember = entry.getValue();
-            BigDecimal perkPercent = BigDecimal.ZERO;
-            if(key == 0){
-                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
-            }
-            if(key == 1){
-                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
-            }
-            if(key == 2){
-                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
-            }
-            if(key == 3){
-                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
-            }
-            if(key == 4){
-                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_WU.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
-            }
+            BigDecimal perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+//            if(key == 0){
+//                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+//            }
+//            if(key == 1){
+//                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+//            }
+//            if(key == 2){
+//                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+//            }
+//            if(key == 3){
+//                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+//            }
+//            if(key == 4){
+//                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_WU.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+//            }
             BigDecimal realPerk = tuanDuiPerk.multiply(perkPercent).setScale(4, BigDecimal.ROUND_DOWN);
             if(BigDecimal.ZERO.compareTo(realPerk) >= 0){
                 continue;
@@ -247,9 +247,10 @@
         BigDecimal usdtAmount = new BigDecimal(
                 redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue())
         ).setScale(2,BigDecimal.ROUND_DOWN);
-        BigDecimal coinAmount = new BigDecimal(
-                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue())
-        ).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal coinAmount = BigDecimal.ZERO;
+//        BigDecimal coinAmount = new BigDecimal(
+//                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue())
+//        ).setScale(2,BigDecimal.ROUND_DOWN);
         if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){
             return;
         }
@@ -318,6 +319,19 @@
         }else if(FlowTypeEnum.DAI_BI_OUT.getValue() == type){
             //代币转账
             String transfer = ChainService.getInstance(ChainEnum.BSC_GFA.name()).transfer(dappMemberEntity.getAddress(), amount);
+            int retryTime = 0;//重试次数
+            while (StrUtil.isEmpty(transfer)) {
+                // 休眠2s
+                try {
+                    Thread.sleep(2000);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                if(retryTime < 3){
+                    transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
+                }
+                retryTime ++ ;
+            }
             if(StrUtil.isNotEmpty(transfer)){
                 dappFundFlowEntity.setFromHash(transfer);
                 dappFundFlowEntity.setStatus(2);
@@ -358,6 +372,29 @@
         }else{
             return;
         }
+    }
+
+    @Override
+    public void calculateAchieve(DappAchieve achieve) {
+        Long id = achieve.getId();
+        DappAchieve dappAchieve = dappAchieveMapper.selectById(id);
+        if(ObjectUtil.isEmpty(dappAchieve)){
+            return;
+        }
+        /**
+         * 计算金本位和币本位
+         *  金本位:数量*价格*70*产矿百分比
+         *  币本位:数量*30*产矿百分比
+         */
+        BigDecimal achieveOut = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_ACHIEVE_OUT.getValue())).setScale(2,BigDecimal.ROUND_DOWN);
+
+        BigDecimal amount = dappAchieve.getAmount();
+        BigDecimal price = dappAchieve.getPrice();
+        BigDecimal goldAmount = amount.multiply(price).multiply(new BigDecimal("0.7")).multiply(achieveOut).setScale(8, BigDecimal.ROUND_DOWN);
+        BigDecimal coinAmount = amount.multiply(new BigDecimal("0.3")).multiply(achieveOut).setScale(8, BigDecimal.ROUND_DOWN);
+        dappAchieve.setGoldAmount(goldAmount);
+        dappAchieve.setCoinAmount(coinAmount);
+        dappAchieveMapper.updateById(dappAchieve);
     }
 
     public static void main(String[] args) {
@@ -428,7 +465,7 @@
             queryWrapper.eq("state",DappAchieve.STATUS_ING);
             List<DappAchieve> dappAchieveSumList = dappAchieveMapper.selectList(queryWrapper);
             //个人团队总业绩
-            BigDecimal teamAchieveMemberSum = dappAchieveSumList.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal teamAchieveMemberSum = dappAchieveSumList.stream().map(item-> item.getAmount().multiply(item.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
             if(BigDecimal.ZERO.compareTo(teamAchieveMemberSum) >= 0){
                 continue;
             }
@@ -503,10 +540,13 @@
         BigDecimal multiplyDivideEveryUsdt = divideEveryUsdt.multiply(selfPercentMultiply);
         BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(selfPercentMultiply);
         //当前生效中的质押总数
-        BigDecimal amountMemberTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal amountMemberTotal = dappAchieves.stream().map(item-> item.getAmount().multiply(item.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
         if(BigDecimal.ZERO.compareTo(amountMemberTotal) >= 0){
             return;
         }
+
+
+
         BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,8,BigDecimal.ROUND_DOWN);
         BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,8,BigDecimal.ROUND_DOWN);
 
@@ -514,7 +554,8 @@
         Set<Long> set = collect.keySet(); // 得到所有key的集合
         for (Long memberId : set) {
             //当前每个人生效中的质押总数
-            BigDecimal amountMember = collect.get(memberId).stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+//            BigDecimal amountMember = collect.get(memberId).stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal amountMember = collect.get(memberId).stream().map(item-> item.getAmount().multiply(item.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
             //这个人实际可以分到的数量USDT
             BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(8, BigDecimal.ROUND_DOWN);
             if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){

--
Gitblit v1.9.1