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