From 99a4103e5b0312b9e7bfec4c97c473930dedf5c2 Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Wed, 28 Apr 2021 18:43:54 +0800
Subject: [PATCH] 优化波场同步问题

---
 src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java |   15 +++++--
 src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java                   |   52 ++++++++++---------------
 2 files changed, 32 insertions(+), 35 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java
index 78c4c3d..7393792 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java
@@ -14,6 +14,7 @@
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.*;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import org.tron.common.utils.ByteArray;
@@ -194,7 +195,10 @@
      * @return
      */
     private static ResponseEntity<String> postForEntity(String url, String param) {
-        RestTemplate restTemplate = new RestTemplate();
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setConnectTimeout(20000);
+        factory.setReadTimeout(20000);
+        RestTemplate restTemplate = new RestTemplate(factory);
         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(MediaType.APPLICATION_JSON);
         headers.set("TRON-PRO-API-KEY", Trc20Service.API_KEY);
@@ -255,13 +259,13 @@
         }
         for (String address : addressList) {
             if (address.equals(to_address)) {
-                System.out.println("存在本地的地址:" + address);
+                log.info("存在本地的地址:" + address);
                 // 金额
                 // 发送消息队列
                 EthUsdtChargeDto dto = new EthUsdtChargeDto(address, txId, amount);
                 dto.setSymbol(EthUsdtChargeDto.Symbol.USDT_TRC20);
                 usdtUpdateProducer.sendMsg(JSONObject.toJSONString(dto));
-                System.out.println("===to_address:" + to_address + "===amount:" + amount);
+                log.info("===to_address:" + to_address + "===amount:" + amount);
             }
         }
 
@@ -352,7 +356,10 @@
     public  Long getnowblockFromTronScan() {
         String roundNum = Math.random() + "";
         String url = "https://apiasia.tronscan.io:5566/api/block/statistic?randomNum=" + roundNum;
-        RestTemplate restTemplate = new RestTemplate();
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setConnectTimeout(20000);
+        factory.setReadTimeout(20000);
+        RestTemplate restTemplate = new RestTemplate(factory);
         String forObject = restTemplate.getForObject(url, String.class);
         String wholeBlockCount = JSON.parseObject(forObject).getString("whole_block_count");
         return Long.valueOf(wholeBlockCount);
diff --git a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
index dd131a3..4b2514f 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
@@ -1,21 +1,16 @@
 package com.xcong.excoin.quartz.job;
 
-import com.xcong.excoin.common.enumerates.CoinTypeEnum;
 import com.xcong.excoin.modules.blackchain.service.TrxUsdtUpdateService;
 import com.xcong.excoin.modules.coin.service.BlockCoinService;
-import com.xcong.excoin.modules.member.dao.MemberCoinAddressDao;
-import com.xcong.excoin.modules.member.entity.MemberCoinAddressEntity;
 import com.xcong.excoin.utils.RedisUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestClientException;
 
 import javax.annotation.Resource;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 /**
@@ -38,8 +33,6 @@
     @Resource
     RedisUtils redisUtils;
 
-    // 创世区块时间 ,每三秒出一个块
-    private final static Long TRX_CSQK=1530442002L;
 
     public static ConcurrentLinkedQueue<Long> TRC_BLOCK = new ConcurrentLinkedQueue<>();
 
@@ -51,36 +44,43 @@
     public void usdtTc20Update() {
         // 波场3秒出一个块
         Long blocnNum = TRC_BLOCK.poll();
-        if(blocnNum==null){
+        if (blocnNum == null) {
             return;
         }
-        System.out.println(TRC_BLOCK);
-        redisUtils.set("USDT_TRC20_CURRENT_BLOCK_NUM",blocnNum);
-        System.out.println("扫块:"+blocnNum);
-        trxUsdtUpdateService.monitorCoinListener(blocnNum);
+        redisUtils.set("USDT_TRC20_CURRENT_BLOCK_NUM", blocnNum);
+        try {
+            trxUsdtUpdateService.monitorCoinListener(blocnNum);
+        } catch (RestClientException e) {
+            //  此时是连接问题 这个块需要重新扫描
+            log.info("查询区块超时:" + blocnNum);
+            TRC_BLOCK.add(blocnNum);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
     }
 
     @Scheduled(cron = "0/2 * * * * ? ")
     public void usdtTc20UpdateQueue() {
         // 查询最新区块号
-        long getnowblock =trxUsdtUpdateService.getnowblockFromTronScan()-25;
-        System.out.println("getnowblock:"+getnowblock);
+        long getnowblock = trxUsdtUpdateService.getnowblockFromTronScan() - 25;
         // 生成块到队列
         Object trc20BlockNum = redisUtils.get("USDT_TRC20_BLOCK_NUM");
-        if(trc20BlockNum==null){
+        if (trc20BlockNum == null) {
             // 没有则取最新的块
-            trc20BlockNum =getnowblock;
-            redisUtils.set("USDT_TRC20_BLOCK_NUM",getnowblock);
+            trc20BlockNum = getnowblock;
+            redisUtils.set("USDT_TRC20_BLOCK_NUM", getnowblock);
         }
         Long blockNum = Long.valueOf(trc20BlockNum.toString());
-        if(getnowblock<blockNum){
+        if (getnowblock < blockNum) {
             // 如果当前区块比最新已确认区块还大,则不继续执行
             return;
         }
         // 将得到的区块+1 放入队列
-        TRC_BLOCK.add(blockNum+1L);
-        redisUtils.incr("USDT_TRC20_BLOCK_NUM",1);
+        TRC_BLOCK.add(blockNum + 1L);
+        redisUtils.incr("USDT_TRC20_BLOCK_NUM", 1);
     }
+
     /**
      * ETH_USDT 同步 使用扫块 废弃这个定时任务
      */
@@ -121,14 +121,4 @@
         blockCoinService.updateXrp();
     }
 
-    public static void main(String[] args) {
-        // 当前时间戳
-        long currentTimeMillis = System.currentTimeMillis()/1000;
-        // 计算当前最新区块
-        // 波场3秒出一个块 根据创世区块的时间可以计算出当前最新区块号
-        Long count = (currentTimeMillis-TRX_CSQK)/3;
-        // 减去未确认的区块
-        long getnowblock =count-25;
-        System.out.println(count);
-    }
 }

--
Gitblit v1.9.1