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