From e921be363d2f5c5b552c8a0f456dac0bf6e1c06c Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Fri, 10 May 2024 10:21:35 +0800
Subject: [PATCH] 合约监听

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |  131 ++++++++++++++++++++++---------------------
 1 files changed, 66 insertions(+), 65 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 7ffb5d3..f3bbf97 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
@@ -163,60 +163,61 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void tradeProfitDistribute(Long id) {
-        /**
-         * 获取滑点钱包的代币余额A和U余额B
-         * 获取最新一条的记录C,然后A-C.A,B-C.B,获得这段时间内的滑点新增D
-         * 用D来进行划定分配
-         * 并且生成一条新的记录dappHdRecord,用来下次分配参照
-         */
-
-        //当天实际当天滑点
-
-        BigDecimal gfaPrice = new BigDecimal(
-                redisUtils.getString(DataDicEnum.GFA_PRICE.getValue())
-        ).setScale(2,BigDecimal.ROUND_DOWN);
-        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);
-        if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){
-            return;
-        }
-        if(BigDecimal.ZERO.compareTo(coinAmount) > 0){
-            return;
-        }
-        BigDecimal usdtAmountReal = usdtAmount;
-        BigDecimal coinAmountReal = coinAmount;
-        //生成一条记录
-        DappHdRecord dappHdRecordAdd = new DappHdRecord();
-        dappHdRecordAdd.setPrice(gfaPrice);
-        dappHdRecordAdd.setUsdtEvery(usdtAmountReal);
-        dappHdRecordAdd.setUsdtAmount(usdtAmountReal);
-        dappHdRecordAdd.setCoinEvery(coinAmountReal);
-        dappHdRecordAdd.setCoinAmount(coinAmountReal);
-        dappHdRecordMapper.insert(dappHdRecordAdd);
-
-        /**
-         * 5%滑奖分配:
-         * 1%用自身质押
-         * 3%用于团队业绩计算
-         * 1%用于布道者奖励
-         */
-        int selfPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_SELF.getValue()));
-        int teamPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_TEAM.getValue()));
-        int workPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WORK.getValue()));
-        //平分份数
-        BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent);
-        //每一份有多少
-        BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
-        //每一份有多少
-        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
-        //1%用自身质押
-        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
-        //3%用于团队业绩计算
-        teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
+        asyncCjService.tradeProfitDistribute();
+//        /**
+//         * 获取滑点钱包的代币余额A和U余额B
+//         * 获取最新一条的记录C,然后A-C.A,B-C.B,获得这段时间内的滑点新增D
+//         * 用D来进行划定分配
+//         * 并且生成一条新的记录dappHdRecord,用来下次分配参照
+//         */
+//
+//        //当天实际当天滑点
+//
+//        BigDecimal gfaPrice = new BigDecimal(
+//                redisUtils.getString(DataDicEnum.GFA_PRICE.getValue())
+//        ).setScale(2,BigDecimal.ROUND_DOWN);
+//        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);
+//        if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){
+//            return;
+//        }
+//        if(BigDecimal.ZERO.compareTo(coinAmount) > 0){
+//            return;
+//        }
+//        BigDecimal usdtAmountReal = usdtAmount;
+//        BigDecimal coinAmountReal = coinAmount;
+//        //生成一条记录
+//        DappHdRecord dappHdRecordAdd = new DappHdRecord();
+//        dappHdRecordAdd.setPrice(gfaPrice);
+//        dappHdRecordAdd.setUsdtEvery(usdtAmountReal);
+//        dappHdRecordAdd.setUsdtAmount(usdtAmountReal);
+//        dappHdRecordAdd.setCoinEvery(coinAmountReal);
+//        dappHdRecordAdd.setCoinAmount(coinAmountReal);
+//        dappHdRecordMapper.insert(dappHdRecordAdd);
+//
+//        /**
+//         * 5%滑奖分配:
+//         * 1%用自身质押
+//         * 3%用于团队业绩计算
+//         * 1%用于布道者奖励
+//         */
+//        int selfPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_SELF.getValue()));
+//        int teamPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_TEAM.getValue()));
+//        int workPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WORK.getValue()));
+//        //平分份数
+//        BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent);
+//        //每一份有多少
+//        BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
+//        //每一份有多少
+//        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
+//        //1%用自身质押
+//        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
+//        //3%用于团队业绩计算
+//        teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
     }
 
     public void teamHdPerk(int teamPercent,BigDecimal divideEveryUsdt,BigDecimal divideEveryCoin){
@@ -271,9 +272,9 @@
             if(CollUtil.isEmpty(downMembersList)){
                 continue;
             }
-
+            Set<Long> collect = downMembersList.stream().map(DappMemberEntity::getId).collect(Collectors.toSet());
             QueryWrapper<DappAchieve> queryWrapper = new QueryWrapper<>();
-            queryWrapper.in("member_id",downMembersList);
+            queryWrapper.in("member_id",collect);
             queryWrapper.eq("state",DappAchieve.STATUS_ING);
             List<DappAchieve> dappAchieveSumList = dappAchieveMapper.selectList(queryWrapper);
             //个人团队总业绩
@@ -285,8 +286,8 @@
             memberPerkMap.put(memberId,teamAchieveMemberSum);
         }
 
-        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal);
-        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal);
+        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN);
+        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN);
         Set<Long> set = memberPerkMap.keySet(); // 得到所有key的集合
         for (Long memberId : set) {
             //当前生效中的团队业绩
@@ -299,8 +300,8 @@
             createFlow(
                     multiplyUsdt,
                     memberId,
-                    FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(),
-                    FlowTypeEnum.HUA_DIAN_TUANDUI.getDescrition(),
+                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(),
+                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(),
                     4,
                     1,
                     ChainEnum.BSC_TFC_REWARD.name(),
@@ -309,8 +310,8 @@
             createFlow(
                     multiplyCoin,
                     memberId,
-                    FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(),
-                    FlowTypeEnum.HUA_DIAN_TUANDUI.getDescrition(),
+                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
+                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(),
                     4,
                     1,
                     ChainEnum.BSC_TFC_REWARD.name(),
@@ -332,8 +333,8 @@
         BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(selfPercentMultiply);
         //当前生效中的质押总数
         BigDecimal amountMemberTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal);
-        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal);
+        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN);
+        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN);
 
         Map<Long, List<DappAchieve>> collect = dappAchieves.stream().collect(Collectors.groupingBy(DappAchieve::getMemberId));
         Set<Long> set = collect.keySet(); // 得到所有key的集合
@@ -656,7 +657,7 @@
             }
 
             //发送一个延时队列消息。24小时之后产生下一次的质押产出
-            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
+//            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
         }
 
     }

--
Gitblit v1.9.1