fix(game): 修复游戏余额扣除和订单回滚相关问题
- 在扣除余额时增加检查,避免重复回滚增加余额 -调整订单状态更新的定时任务执行频率,从每30分钟改为每5分钟 -优化平台交易状态查询逻辑,避免不必要的错误提示main-pgt
parent
724d5f8f06
commit
39dcd026c0
|
@ -145,7 +145,21 @@ public class DeductBalanceServiceImpl extends AbstractStepProcessor {
|
|||
}
|
||||
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
|
||||
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
|
||||
//如果该订单已经回滚过增加余额
|
||||
List<TenantGameQuotaFlow> 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)
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -215,7 +215,7 @@ public class GameTask {
|
|||
public void updateGameExchangeMoney() {
|
||||
GameExchangeMoney gameExchangeMoney = GameExchangeMoney.builder().status(StatusType.IN_PROGRESS.getValue()).build();
|
||||
Map<String, Object> params=new HashMap<>();
|
||||
params.put("endTime",DateUtils.addOrSubtractMinutes( DateUtils.getNowDate(),-30));
|
||||
params.put("endTime",DateUtils.addOrSubtractMinutes( DateUtils.getNowDate(),-5));
|
||||
gameExchangeMoney.setParams(params);
|
||||
List<GameExchangeMoney> gameExchangeMoneyList = gameExchangeMoneyService.selectGameExchangeMoneyList(gameExchangeMoney);
|
||||
for (GameExchangeMoney exchangeMoney : gameExchangeMoneyList) {
|
||||
|
|
Loading…
Reference in New Issue