From 43fa0ec4dc02c2bb1a2ac5e9eea81cae4d2cb11d Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 17 Dec 2021 16:08:18 +0800 Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/xc-video --- src/main/java/cc/mrbird/febs/blockchain/job/BlockCoinUpdateJob.java | 76 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 76 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/blockchain/job/BlockCoinUpdateJob.java b/src/main/java/cc/mrbird/febs/blockchain/job/BlockCoinUpdateJob.java new file mode 100644 index 0000000..5d39878 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/blockchain/job/BlockCoinUpdateJob.java @@ -0,0 +1,76 @@ +package cc.mrbird.febs.blockchain.job; + +import cc.mrbird.febs.blockchain.service.TrxUsdtUpdateService; +import cc.mrbird.febs.common.utils.RedisUtils; +import cc.mrbird.febs.rabbit.producer.UsdtUpdateProducer; +import org.springframework.beans.factory.annotation.Autowired; +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.concurrent.ConcurrentLinkedQueue; + +/** + * 链上币种同步任务 + * + * @author wzy + * @date 2020-07-02 + **/ +@Component +@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true") +public class BlockCoinUpdateJob { + + @Autowired + private RedisUtils redisUtils; + + @Autowired + private TrxUsdtUpdateService trxUsdtUpdateService; + + @Autowired + private UsdtUpdateProducer usdtUpdateProducer; + + + public static ConcurrentLinkedQueue<Long> TRC_BLOCK = new ConcurrentLinkedQueue<>(); + + /** + * TRC20_USDT 同步 + */ + @Scheduled(cron = "0/2 * * * * ? ") + public void usdtTc20Update() { + // 波场3秒出一个块 + Long blocnNum = TRC_BLOCK.poll(); + if (blocnNum == null) { + return; + } + usdtUpdateProducer.sendTrc20BlockMsg(blocnNum.toString()); + redisUtils.set("USDT_TRC20_CURRENT_BLOCK_NUM", blocnNum); + } + + @Scheduled(cron = "0 0/1 * * * ? ") + public void usdtTc20UpdateQueue() { + // 查询最新区块号 + long getnowblock = trxUsdtUpdateService.getnowblockFromTronScan() - 25; + // 拿到redis里最新区块 + Object trc20BlockNum = redisUtils.get("USDT_TRC20_BLOCK_NUM"); + if (trc20BlockNum == null) { + // 没有则取最新的块 + trc20BlockNum = getnowblock; + redisUtils.set("USDT_TRC20_BLOCK_NUM", getnowblock); + } + Long blockNum = Long.valueOf(trc20BlockNum.toString()); + if (getnowblock <= blockNum) { + // 如果当前区块比最新已确认区块还大,则不继续执行 + return; + } + // 得到最新区块和当前区块的差值 + Long diff = getnowblock-blockNum; + for(long i=1;i<=diff;i++){ + blockNum++; + TRC_BLOCK.add(blockNum); + } + // 将最新的最大区块放入redis + redisUtils.set("USDT_TRC20_BLOCK_NUM", blockNum); + } + +} -- Gitblit v1.9.1