From adf9145657843833baeb35d84e3833d8126b5b9d Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 04 Jan 2023 20:36:54 +0800
Subject: [PATCH] 修改监听链上及归集逻辑

---
 src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java       |    4 
 src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java  |    4 +
 src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java       |   83 +++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java     |    4 +
 src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java         |    2 
 src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java |   27 ++++-----
 6 files changed, 105 insertions(+), 19 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java b/src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java
index 19ddfdf..850fc70 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java
@@ -2,6 +2,8 @@
 
 public interface ChainConstants {
 
-    public static final String REDIS_KEY_POOL_ADDRESS = "TRC20_POOL";
+    String REDIS_KEY_POOL_ADDRESS = "TRC20_POOL";
     String REDIS_KEY_ADDRESS_LIST = "TRC20_ADDRESS_LIST";
+
+    String REDIS_KEY_SYSTEM_ADDRESS = "SYSTEM_ADDRESS_LIST";
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java b/src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java
index b485d9b..de7f04e 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java
@@ -20,8 +20,8 @@
  * @date 2020-07-02
  **/
 @Slf4j
-@Component
-@ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true")
+//@Component
+//@ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true")
 public class BlockCoinUpdateJob {
 
     @Resource
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java b/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java
new file mode 100644
index 0000000..82f62ec
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java
@@ -0,0 +1,83 @@
+package cc.mrbird.febs.mall.chain.job;
+
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.chain.constants.ChainConstants;
+import cc.mrbird.febs.mall.chain.service.TrxUsdtUpdateService;
+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.util.Set;
+
+/**
+ * 归集定时任务
+ *
+ * @author wzy
+ * @date 2020-07-02
+ **/
+
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true")
+public class NotionalPoolingJob {
+
+    @Resource
+    private RedisUtils redisUtils;
+
+    @Resource
+    private TrxUsdtUpdateService trxUsdtUpdateService;
+
+//    /**
+//     * usdt 归集
+//     */
+//    @Scheduled(cron = "0 5/30 * * * ? ")
+//    public void poolUsdtEth() {
+//        try {
+//            log.info("USDT归集开始");
+//            usdtEthService.pool();
+//            log.info("USDT归集结束");
+//        } catch (ExecutionException | InterruptedException e) {
+//            log.error("#usdt归集错误#", e);
+//        }
+//    }
+//
+//    /**
+//     * 使用扫块 不需要这个
+//     */
+//    //@Scheduled(cron = "0 2/8 * * * ? ")
+//    @Deprecated
+//    public void usdtEthPoolCheck() {
+//        log.info("USDTETH归集结果扫描开始");
+//        usdtEthService.usdtEthPoolCheck();
+//    }
+//
+//    @Scheduled(cron = "0 2/30 * * * ? ")
+//    public void poolEth() {
+//        try {
+//            usdtEthService.ethPool();
+//        } catch (ExecutionException | InterruptedException e) {
+//            log.info("#ETH归集错误#", e);
+//        }
+//    }
+
+    /**
+     * 归集TRC20
+     */
+    @Scheduled(cron = "0 0/30 * * * ? ")
+    public void poolUsdtTrc20() {
+        // TODO 执行BSC归集逻辑
+        log.info("归集TRC20执行");
+//        Set<Object> poolAddress = redisUtils.sGet(ChainConstants.REDIS_KEY_POOL_ADDRESS);
+//        if (poolAddress == null || poolAddress.isEmpty()) {
+//            return;
+//        }
+//
+//        for (Object address : poolAddress) {
+//            String next = (String) address;
+//            log.info("归集地址:{}", next);
+//            trxUsdtUpdateService.poolByAddress(next);
+//        }
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java b/src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java
index 2c64958..9d4f41e 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java
@@ -39,7 +39,11 @@
         }
 
         addressList.forEach(item -> {
+            // 待归集的地址
             redisUtils.sSet(ChainConstants.REDIS_KEY_POOL_ADDRESS, item.getAddress());
+
+            // 系统所有用户地址
+            redisUtils.sSet(ChainConstants.REDIS_KEY_SYSTEM_ADDRESS, item.getAddress());
         });
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java b/src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java
index 719722d..83b3bd0 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java
@@ -23,7 +23,7 @@
     @Resource
     private UsdtErc20UpdateService usdtErc20UpdateService;
 
-    @PostConstruct
+//    @PostConstruct
     public void initCoinTrade() {
         System.out.println("开启USDT同步");
         usdtErc20UpdateService.updateUsdt();
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java
index fcffcac..75b2a47 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java
@@ -4,6 +4,7 @@
 import cc.mrbird.febs.common.enumerates.MallMoneyFlowTypeEnum;
 import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.chain.constants.ChainConstants;
 import cc.mrbird.febs.mall.chain.enums.ChainEnum;
 import cc.mrbird.febs.mall.chain.enums.CoinTypeEnum;
 import cc.mrbird.febs.mall.entity.MallMemberWallet;
@@ -14,6 +15,7 @@
 import cc.mrbird.febs.mall.mapper.MemberCoinAddressDao;
 import cc.mrbird.febs.mall.mapper.MemberCoinChargeDao;
 import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -26,6 +28,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 @Slf4j
 @Service
@@ -52,13 +55,10 @@
 
         String address = e.to;
         String hash =  e.log.getTransactionHash();
-        MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
-        if (coinAddressEntity == null) {
-            return;
-        }
+
+        Set<Object> addressList = redisUtils.sGet(ChainConstants.REDIS_KEY_SYSTEM_ADDRESS);
         // 判断对方打款地址是否为源池地址
-        if(ObjectUtil.isNotEmpty(coinAddressEntity)){
-//        if (ChainEnum.BSC_USDT.getAddress().toLowerCase().equals(e.to)) {
+        if(CollUtil.isNotEmpty(addressList) && addressList.contains(address)){
             log.info("触发USDT合约监听事件");
             redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, e.log.getBlockNumber());
             // hash没有用过
@@ -70,10 +70,10 @@
                 return;
             }
 
-//            MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
-//            if (coinAddressEntity == null) {
-//                return;
-//            }
+            MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
+            if (coinAddressEntity == null) {
+                return;
+            }
             Long memberId = coinAddressEntity.getMemberId();
             ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name());
             int decimals = sourceUsdtInstance.decimals();
@@ -105,14 +105,11 @@
                         FlowTypeEnum.BALANCE.getValue(),
                         MallMoneyFlowTypeEnum.CHARGE.getName()
                 );
-                // 同步
-//                BigDecimal bigDecimal = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(e.to);
-
             }
-
-
         }
     }
+
+
     public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount, String hash) {
         MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity();
         memberCoinChargeEntity.setAddress(address);

--
Gitblit v1.9.1