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