fix
Helius
2022-08-29 5264c0165e3dbdeec367081ea68e18bffc4bd060
src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -48,13 +48,13 @@
        redisUtils.set(AppContants.REDIS_KEY_BLOCK_USDT_NUM, e.log.getBlockNumber());
        // 判断对方打款地址是否为源池地址
        if (ChainEnum.BSC_TFC_SOURCE.getAddress().toLowerCase().equals(e.to)) {
        if (ChainEnum.BSC_USDT.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(5000);
                Thread.sleep(10000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
@@ -81,35 +81,25 @@
                    return;
                }
                boolean hasFlow = false;
                for (DappFundFlowEntity flow : flows) {
                    if (flow.getStatus() == 1) {
                        if (amount.compareTo(flow.getAmount().multiply(flow.getNewestPrice()).setScale(4, RoundingMode.HALF_UP)) == 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");
            if (fundFlow == null) {
                return;
            }
            fundFlow.setAmount(fundFlow.getAmount().negate());
            // 更改状态为已同步
            fundFlow.setStatus(2);
            dappFundFlowDao.updateById(fundFlow);
            synchronized (this) {
                DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(fundFlow.getMemberId());
                walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount));
                walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount));
                dappWalletCoinDao.updateById(walletCoin);
            }
            chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId());
        }