From 21c4edde92e2c7bade302db52329422821f0a8d5 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 08 Jun 2022 19:23:45 +0800
Subject: [PATCH] fix some problem

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java |   49 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
index e4a5c7d..365e962 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -4,10 +4,7 @@
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.common.utils.ShareCodeUtil;
 import cc.mrbird.febs.dapp.chain.*;
-import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
-import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.entity.DappOnlineTransferEntity;
-import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.entity.*;
 import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
 import cc.mrbird.febs.dapp.mapper.DappMemberDao;
 import cc.mrbird.febs.dapp.mapper.DappOnlineTransferDao;
@@ -15,6 +12,7 @@
 import cc.mrbird.febs.dapp.service.DappMemberService;
 import cc.mrbird.febs.dapp.utils.OnlineTransferUtil;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
@@ -27,6 +25,7 @@
 import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Slf4j
@@ -61,10 +60,11 @@
         // 判断对方打款地址是否为源池地址
         if (ChainEnum.BSC_TFC_SOURCE.getAddress().toLowerCase().equals(e.to)) {
             log.info("触发USDT合约监听事件");
+            redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, e.log.getBlockNumber());
 
             // 如果得到触发,则休眠10秒。 因为此处监听器触发可能优先于前端调用transfer接口
             try {
-                Thread.sleep(10000);
+                Thread.sleep(5000);
             } catch (InterruptedException ex) {
                 ex.printStackTrace();
             }
@@ -88,25 +88,48 @@
 
             BigInteger tokens = e.tokens;
             BigDecimal amount = new BigDecimal(tokens.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
-            DappFundFlowEntity fundFlow = dappFundFlowDao.selectByFromHash(e.log.getTransactionHash(), 1);
 
-            if (fundFlow == null) {
-                log.info("本地无交易:{}", e.log.getTransactionHash());
+            DappFundFlowEntity fundFlow = dappFundFlowDao.selectByFromHash(e.log.getTransactionHash(), null);
+            if (fundFlow != null && fundFlow.getStatus() != 1) {
                 return;
             }
 
-            BigDecimal newPrice = fundFlow.getNewestPrice();
-            BigDecimal transferAmount = amount.divide(newPrice, tfcDecimals, RoundingMode.HALF_DOWN);
+            if (fundFlow == null) {
+                List<DappFundFlowEntity> flows = dappFundFlowDao.selectFundFlowListByAddress(e.from, 1);
+                if (CollUtil.isEmpty(flows)) {
+                    OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_ONLINE, "USDT");
+                    log.info("本地无交易:{}", e.log.getTransactionHash());
+                    return;
+                }
 
+                boolean hasFlow = false;
+                for (DappFundFlowEntity flow : flows) {
+                    if (flow.getStatus() == 1) {
+                        if (amount.compareTo(flow.getTargetAmount()) == 0) {
+                            hasFlow = true;
+                            fundFlow = flow;
+                            fundFlow.setFromHash(e.log.getTransactionHash());
+                            break;
+                        }
+                    }
+                }
+
+                if (!hasFlow) {
+                    OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_ONLINE, "USDT");
+                    return;
+                }
+            }
+
+            OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_APPLICATION, "USDT");
 
             // 更改状态为已同步
             fundFlow.setStatus(2);
-            fundFlow.setTargetAmount(transferAmount);
+            fundFlow.setTargetAmount(amount);
             dappFundFlowDao.updateById(fundFlow);
 
             // 如果系统会开启,则使用自动打款
             if (!"start".equals(hasStart)) {
-                OnlineTransferUtil.addTransfer(e.from, transferAmount, 1, 1, ChainEnum.BSC_TFC_MAKE.name(), "BSC", fundFlow.getId().toString());
+                OnlineTransferUtil.addTransfer(e.from, fundFlow.getAmount(), 1, 1, ChainEnum.BSC_TFC_MAKE.name(), "BSC", fundFlow.getId().toString());
 
                 Map<String, String> map = new HashMap<>();
                 map.put("batchNo", fundFlow.getId().toString());
@@ -124,7 +147,7 @@
                     redisUtils.set(AppContants.SYSTEM_START_FLAG, "start");
                 }
             } else {
-                OnlineTransferUtil.addTransfer(e.from, transferAmount, 1, 1, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, fundFlow.getId().toString());
+                OnlineTransferUtil.addTransfer(e.from, fundFlow.getAmount(), 1, 1, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, fundFlow.getId().toString());
 
                 Map<String, String> map = new HashMap<>();
                 map.put("batchNo", fundFlow.getId().toString());

--
Gitblit v1.9.1