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