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) {