From db3cf6400845d34a41cc15e2a6e2a35831652e43 Mon Sep 17 00:00:00 2001 From: dorion <872354125@qq.com> Date: Mon, 22 Apr 2024 01:32:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=88=86=E5=B8=83=E5=BC=8F=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/handler/UsdtTransferHandler.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/UsdtTransferHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/UsdtTransferHandler.java index ca5cafc4e..c9b2e18c5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/handler/UsdtTransferHandler.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/UsdtTransferHandler.java @@ -19,6 +19,7 @@ import com.ruoyi.system.service.IAccountAddressInfoService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.util.AddressUtil; import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -93,10 +94,24 @@ public class UsdtTransferHandler { String dataTo = data.getTo(); String transactionId = data.getTransaction_id(); - doTransferUsdtAndStore(oneUsdtToTrx, apiKey, decryptPrivateKey, accountAddress, from, trxValue, dataTo, transactionId, transferValue); + RLock lock = redissonClient.getLock("lock_" + transactionId); + try { + boolean res = lock.tryLock(3, 50, TimeUnit.SECONDS); + if (!res) { + //有其他程序正在处理则不需要再处理 + return; + } - redisTemplate.opsForValue().set("transfer_USDT_" + transactionId, transactionId, 1, TimeUnit.DAYS); + doTransferUsdtAndStore(oneUsdtToTrx, apiKey, decryptPrivateKey, accountAddress, from, trxValue, dataTo, transactionId, transferValue); + redisTemplate.opsForValue().set("transfer_USDT_" + transactionId, transactionId, 1, TimeUnit.DAYS); + }finally { + if (lock.isLocked()) { + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } } public void doTransferUsdtAndStore(BigDecimal oneUsdtToTrx, String apiKey, String decryptPrivateKey, String accountAddress, String from, BigDecimal trxValue, String dataTo, String transactionId, BigDecimal transferValue) throws IllegalException {