From 39dcd026c004f6df227677cdb41365f0f8a04fa0 Mon Sep 17 00:00:00 2001 From: shi Date: Fri, 11 Apr 2025 16:13:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(game):=20=E4=BF=AE=E5=A4=8D=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E4=BD=99=E9=A2=9D=E6=89=A3=E9=99=A4=E5=92=8C=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=9B=9E=E6=BB=9A=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在扣除余额时增加检查,避免重复回滚增加余额 -调整订单状态更新的定时任务执行频率,从每30分钟改为每5分钟 -优化平台交易状态查询逻辑,避免不必要的错误提示 --- .../impl/DeductBalanceServiceImpl.java | 14 ++++++++++ .../impl/PlatformTransactionServiceImpl.java | 26 ++++++------------- .../java/com/ff/quartz/task/GameTask.java | 2 +- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/ff-game/src/main/java/com/ff/game/api/exchange/impl/DeductBalanceServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/exchange/impl/DeductBalanceServiceImpl.java index 984a9a9..a400b1c 100644 --- a/ff-game/src/main/java/com/ff/game/api/exchange/impl/DeductBalanceServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/exchange/impl/DeductBalanceServiceImpl.java @@ -145,7 +145,21 @@ public class DeductBalanceServiceImpl extends AbstractStepProcessor { } TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + + //如果该订单已经回滚过增加余额 List tenantGameQuotaFlows = tenantGameQuotaFlowService.selectTenantGameQuotaFlowList( + TenantGameQuotaFlow.builder() + .sourceId(String.valueOf(gameExchangeMoney.getId())) + .isOut(Boolean.TRUE) + .build()); + if (!CollectionUtils.isEmpty(tenantGameQuotaFlows)){ + return Boolean.TRUE; + } + + + + + tenantGameQuotaFlows = tenantGameQuotaFlowService.selectTenantGameQuotaFlowList( TenantGameQuotaFlow.builder() .sourceId(String.valueOf(gameExchangeMoney.getId())) .isOut(Boolean.FALSE) diff --git a/ff-game/src/main/java/com/ff/game/api/exchange/impl/PlatformTransactionServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/exchange/impl/PlatformTransactionServiceImpl.java index d0e5a2e..f0c5798 100644 --- a/ff-game/src/main/java/com/ff/game/api/exchange/impl/PlatformTransactionServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/exchange/impl/PlatformTransactionServiceImpl.java @@ -74,8 +74,11 @@ public class PlatformTransactionServiceImpl extends AbstractStepProcessor { */ @Override public boolean doProcess(GameExchangeDTO gameExchangeMoney) { - //如果不是之前的步骤代码执行过了 - if (!gameExchangeMoney.getStep().equals(this.backStepProcessor().getCode())) { + //如果不是之前的步骤代码执行过了 或者当前步骤成功的 + if (!gameExchangeMoney.getStep().equals(this.backStepProcessor().getCode())&& + (GameExchangeStep.PLATFORM_TRANSACTION.getCode().equals(gameExchangeMoney.getStep())&& + gameExchangeMoney.getStepStatus().equals(GameExchangeStepStatus.SUCCESS.getCode())) + ) { return Boolean.TRUE; } @@ -99,22 +102,9 @@ public class PlatformTransactionServiceImpl extends AbstractStepProcessor { //查询订单详情 if (TriggerType.TIMER.getCode() == gameExchangeMoney.getTriggerType()) { - ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO(); - exchangeTransferStatusRequestDTO.setAccount(member.getGameAccount()); - exchangeTransferStatusRequestDTO.setCurrency(targetCurrency); - exchangeTransferStatusRequestDTO.setOrderId(gameExchangeMoney.getTransactionId()); - exchangeTransferStatusRequestDTO.setAgentId(keyInfo.getCode()); - exchangeTransferStatusRequestDTO.setAgentKey(keyInfo.getKey()); - exchangeTransferStatusRequestDTO.setGameExchangeMoneyId(gameExchangeMoney.getId()); - exchangeTransferStatusRequestDTO.setVendor(platform); - exchangeTransferStatusRequestDTO.setKeyInfo(keyInfo); - exchangeTransferStatusRequestDTO.setSystemCurrency(gameExchangeMoney.getCurrencyCode()); - ExchangeTransferStatusResponseDTO statusResponseDTO = iGamesService.exchangeTransferStatus(exchangeTransferStatusRequestDTO); - //订单已成功 - if (StatusType.SUCCESS.getValue().equals(statusResponseDTO.getStatusType())) { - return Boolean.TRUE; - }else { - //定时任务失败直接回滚 + //做二次确认调订单详情接口 + this.doRollBack(gameExchangeMoney); + if (GameExchangeStepStatus.FAILURE.getCode() == gameExchangeMoney.getStepStatus()){ throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode()); } } diff --git a/ff-game/src/main/java/com/ff/quartz/task/GameTask.java b/ff-game/src/main/java/com/ff/quartz/task/GameTask.java index 50e40be..0a7ec13 100644 --- a/ff-game/src/main/java/com/ff/quartz/task/GameTask.java +++ b/ff-game/src/main/java/com/ff/quartz/task/GameTask.java @@ -215,7 +215,7 @@ public class GameTask { public void updateGameExchangeMoney() { GameExchangeMoney gameExchangeMoney = GameExchangeMoney.builder().status(StatusType.IN_PROGRESS.getValue()).build(); Map params=new HashMap<>(); - params.put("endTime",DateUtils.addOrSubtractMinutes( DateUtils.getNowDate(),-30)); + params.put("endTime",DateUtils.addOrSubtractMinutes( DateUtils.getNowDate(),-5)); gameExchangeMoney.setParams(params); List gameExchangeMoneyList = gameExchangeMoneyService.selectGameExchangeMoneyList(gameExchangeMoney); for (GameExchangeMoney exchangeMoney : gameExchangeMoneyList) {