From 029831451b29a13fe9c42164d5a7b7f9032b6188 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 24 Mar 2023 11:45:22 +0800
Subject: [PATCH] 后台修改

---
 src/main/java/cc/mrbird/febs/mall/chain/enums/ChainEnum.java        |    4 
 src/main/java/cc/mrbird/febs/mall/chain/job/ChainListenerJob.java   |    1 
 src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java   |   41 +++++++++----
 src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java |   44 +++++++-------
 src/test/java/cc/mrbird/febs/ProfitTest.java                        |   62 ++++++++++----------
 5 files changed, 85 insertions(+), 67 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/chain/enums/ChainEnum.java b/src/main/java/cc/mrbird/febs/mall/chain/enums/ChainEnum.java
index c1353cb..dee6366 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/enums/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/enums/ChainEnum.java
@@ -13,8 +13,8 @@
      * 0x55d398326f99059fF775485246999027B3197955
      * 测试链 0x337610d27c682E347C9cD60BD4b3b107C9d34dDd
      */
-    BSC_USDT("BSC", "0x7FC948E091C4b71fC063cE59B8Dad1062B1c5065",
-            "0xbf6f11f5689961d5351375bebbae751de0d0d5c2e2095c1017368485dc909ff8",
+    BSC_USDT("BSC", "0xA60AaC0da34C76F3f60207ee09e9F75043319ab4",
+            "221be67f85375a5af6dd0f4b77fbe877ad2e57e05db201de1b1383fb76494d18",
             "https://bsc-dataseed1.ninicoin.io",
             "0x55d398326f99059fF775485246999027B3197955",
             "");
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/job/ChainListenerJob.java b/src/main/java/cc/mrbird/febs/mall/chain/job/ChainListenerJob.java
index d328b04..513205f 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/job/ChainListenerJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/job/ChainListenerJob.java
@@ -82,6 +82,7 @@
 //        ChainService.wssBaseCoinEventListener(block, baseCoinService);
 //        ChainService.wssBaseCoinEventListener(block, bscUsdtContractEvent);
 //        ChainService.wssContractEventListener(block, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+        ChainService.wssContractEventListener2(block, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
         long end = System.currentTimeMillis();
         log.info("区块链监听启动完成, 消耗时间{}", end - start);
     }
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java b/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java
index 23aa1ab..1ff98ef 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java
@@ -95,28 +95,28 @@
                     memberCoinAddressEntity.getAddress(),
                     AppContants.ERC20_POOL_ADDRESS,
                     balanceOf.toString());
-            if(StrUtil.isNotEmpty(transfer)){
-                Long memberId = memberCoinAddressEntity.getMemberId();
-                // 查询钱包 并更新
-                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
-                if (mallMemberWallet == null) {
-                    return;
-                }
-                mallMemberWalletMapper.updateBlockBalanceById(mallMemberWallet.getId(), balanceOf.setScale(4, BigDecimal.ROUND_DOWN));
-
-                String orderNo = insertCoinCharge(next, memberId, balanceOf.setScale(4, BigDecimal.ROUND_DOWN), CoinTypeEnum.USDT.name(), "ERC20", BigDecimal.ZERO);
-                Long chargeFlowId = mallMoneyFlowService.addMoneyFlow(
-                        memberId,
-                        orderNo,
-                        balanceOf.setScale(4, BigDecimal.ROUND_DOWN),
-                        MallMoneyFlowTypeEnum.CHARGE.getCode(),
-                        MallMoneyFlow.STATUS_SUCCESS,
-                        MallMoneyFlow.IS_RETURN_Y,
-                        memberId,
-                        FlowTypeEnum.BALANCE.getValue(),
-                        MallMoneyFlowTypeEnum.CHARGE.getName()
-                );
-            }
+//            if(StrUtil.isNotEmpty(transfer)){
+//                Long memberId = memberCoinAddressEntity.getMemberId();
+//                // 查询钱包 并更新
+//                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+//                if (mallMemberWallet == null) {
+//                    return;
+//                }
+//                mallMemberWalletMapper.updateBlockBalanceById(mallMemberWallet.getId(), balanceOf.setScale(4, BigDecimal.ROUND_DOWN));
+//
+//                String orderNo = insertCoinCharge(next, memberId, balanceOf.setScale(4, BigDecimal.ROUND_DOWN), CoinTypeEnum.USDT.name(), "ERC20", BigDecimal.ZERO);
+//                Long chargeFlowId = mallMoneyFlowService.addMoneyFlow(
+//                        memberId,
+//                        orderNo,
+//                        balanceOf.setScale(4, BigDecimal.ROUND_DOWN),
+//                        MallMoneyFlowTypeEnum.CHARGE.getCode(),
+//                        MallMoneyFlow.STATUS_SUCCESS,
+//                        MallMoneyFlow.IS_RETURN_Y,
+//                        memberId,
+//                        FlowTypeEnum.BALANCE.getValue(),
+//                        MallMoneyFlowTypeEnum.CHARGE.getName()
+//                );
+//            }
         }
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java b/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
index 62faeb7..295e271 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/service/ChainService.java
@@ -158,7 +158,7 @@
         ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
         WebSocketService ws = null;
         try{
-            WebSocketClient webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
+            WebSocketClient webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/fcb1ae31845147dcabb183db57336218"));
             ws = new WebSocketService(webSocketClient, true);
             ws.connect();
             Web3j web3j = Web3j.build(ws);
@@ -171,16 +171,22 @@
             Disposable subscribe = eventFlowable.observeOn(Schedulers.from(executor))
                     .subscribe(event::compile, error -> {
                         log.error("币安监听异常", error);
-                        // 异常情况下,递归重试连接和订阅
-                        int retries = 3;
-                        while (retries-- > 0) {
-                            try {
-                                Thread.sleep(1000);
-                                wssContractEventListener(startBlock, event, type);
-                                return;
-                            } catch (Exception ex) {
-                                log.error("币安监听异常", ex);
+                        error = error.getCause();
+                        if (error instanceof WebsocketNotConnectedException) {
+                            log.error("WebSocket连接已断开,正在尝试重新连接...");
+                            // 异常情况下,递归重试连接和订阅
+                            int retries = 3;
+                            while (retries-- > 0) {
+                                try {
+                                    Thread.sleep(1000);
+                                    wssContractEventListener2(startBlock, event, type);
+                                    return;
+                                } catch (Exception ex) {
+                                    log.error("币安监听异常", ex);
+                                }
                             }
+                        } else {
+                            log.error("币安监听异常", error);
                         }
                     });
 
@@ -192,6 +198,17 @@
                 subscribe.dispose();
             } catch (InterruptedException e) {
                 e.printStackTrace();
+                // 将递归重试连接和订阅改为有限次数的重试,避免出现无限递归的情况
+                int retries = 3;
+                while (retries-- > 0) {
+                    try {
+                        Thread.sleep(1000);
+                        wssContractEventListener2(startBlock, event, type);
+                        return;
+                    } catch (Exception ex) {
+                        log.error("币安监听异常", ex);
+                    }
+                }
             }
         } catch (Exception e) {
             log.error("币安监听异常", e);
@@ -201,7 +218,7 @@
             while (retries-- > 0) {
                 try {
                     Thread.sleep(1000);
-                    wssContractEventListener(startBlock, event, type);
+                    wssContractEventListener2(startBlock, event, type);
                     return;
                 } catch (Exception ex) {
                     log.error("币安监听异常", ex);
@@ -220,7 +237,7 @@
         Web3j web3j = null;
 
         try {
-            webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"));
+            webSocketClient = new WebSocketClient(new URI("wss://bsc-mainnet.nodereal.io/ws/v1/fcb1ae31845147dcabb183db57336218"));
             ws = new WebSocketService(webSocketClient, true);
             ws.connect();
             web3j = Web3j.build(ws);
diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java
index b81747b..882ede7 100644
--- a/src/test/java/cc/mrbird/febs/ProfitTest.java
+++ b/src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -479,38 +479,38 @@
     @Test
     public void scorePool(){
 
-        String next = "0xc1be17a02127e5cc1e6b2298436e8b467531f798";
-        MemberCoinAddressEntity memberCoinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbolTag(next, "USDT", "ERC20");
-        if(ObjectUtil.isEmpty(memberCoinAddressEntity)){
-            return;
-        }
-        BigDecimal balanceOf = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(next);
-        if (balanceOf == null || balanceOf.compareTo(new BigDecimal("0.05")) < 1) {
-            return;
-        }
-        //查询手续费
-        BigDecimal balanceOfBaseToken = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOfBaseToken(next);
-
-        String gas = "5";
-        if(balanceOfBaseToken.compareTo(new BigDecimal(gas)) < 0){
-            //转手续费
-            ChainService.getInstance(ChainEnum.BSC_USDT.name()).transferBaseToken(next, new BigDecimal(gas));
-        }
-        ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(memberCoinAddressEntity.getPrivateKey(),
-                    memberCoinAddressEntity.getAddress(),
-                    AppContants.ERC20_POOL_ADDRESS,
-                    balanceOf.toString());
-//        long start = System.currentTimeMillis();
-//        Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
-//        BigInteger newest = ChainService.getInstance(ChainEnum.BSC_USDT.name()).blockNumber();
-//        BigInteger block;
-//        if (incrementObj == null) {
-//            block = newest;
-//        } else {
-//            block = (BigInteger) incrementObj;
+//        String next = "0xc1be17a02127e5cc1e6b2298436e8b467531f798";
+//        MemberCoinAddressEntity memberCoinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbolTag(next, "USDT", "ERC20");
+//        if(ObjectUtil.isEmpty(memberCoinAddressEntity)){
+//            return;
 //        }
-////        ChainService.wssBaseCoinEventListener(BigInteger.valueOf(24317595), baseCoinService);
-//        ChainService.wssContractEventListener(BigInteger.valueOf(24317595), bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+//        BigDecimal balanceOf = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(next);
+//        if (balanceOf == null || balanceOf.compareTo(new BigDecimal("0.05")) < 1) {
+//            return;
+//        }
+//        //查询手续费
+//        BigDecimal balanceOfBaseToken = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOfBaseToken(next);
+//
+//        String gas = "5";
+//        if(balanceOfBaseToken.compareTo(new BigDecimal(gas)) < 0){
+//            //转手续费
+//            ChainService.getInstance(ChainEnum.BSC_USDT.name()).transferBaseToken(next, new BigDecimal(gas));
+//        }
+//        ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(memberCoinAddressEntity.getPrivateKey(),
+//                    memberCoinAddressEntity.getAddress(),
+//                    AppContants.ERC20_POOL_ADDRESS,
+//                    balanceOf.toString());
+        long start = System.currentTimeMillis();
+        Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
+        BigInteger newest = ChainService.getInstance(ChainEnum.BSC_USDT.name()).blockNumber();
+        BigInteger block;
+        if (incrementObj == null) {
+            block = newest;
+        } else {
+            block = newest;
+        }
+        ChainService.wssBaseCoinEventListener(block, baseCoinService);
+//        ChainService.wssContractEventListener2(block, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
     }
 //
 //    @Test

--
Gitblit v1.9.1