refactor(ff-game): 重构游戏余额转移功能

- 移除冗余的平台和货币信息查询逻辑
- 使用 GameExchangeDTO封装余额转移数据
-引入 StepProcessorFactory 处理余额转移步骤
- 实现异步执行余额转移操作
-优化错误处理和日志记录
main-pgt
shi 2025-04-11 15:20:58 +08:00
parent 3236b4ab55
commit 88bdfc9c16
1 changed files with 27 additions and 36 deletions

View File

@ -1,11 +1,16 @@
package com.ff.quartz.task;
import com.ff.api.response.GameExchangeBalanceResponse;
import com.ff.base.constant.Constants;
import com.ff.base.enums.GamePlatforms;
import com.ff.base.enums.StatusType;
import com.ff.base.core.domain.AjaxResult;
import com.ff.base.enums.*;
import com.ff.base.manager.AsyncManager;
import com.ff.base.utils.DateUtils;
import com.ff.base.utils.StringUtils;
import com.ff.base.utils.bean.BeanUtils;
import com.ff.game.api.IGamesService;
import com.ff.game.api.exchange.StepProcessorFactory;
import com.ff.game.api.exchange.dto.GameExchangeDTO;
import com.ff.game.api.ng.client.NGClient;
import com.ff.game.api.request.BetRecordByTimeDTO;
import com.ff.game.api.request.ExchangeTransferStatusRequestDTO;
@ -52,6 +57,9 @@ public class GameTask {
@Resource
private IPlatformService platformService;
@Resource
private StepProcessorFactory stepProcessorFactory;
/**
*
*/
@ -207,42 +215,25 @@ public class GameTask {
List<GameExchangeMoney> gameExchangeMoneyList = gameExchangeMoneyService.selectGameExchangeMoneyList(GameExchangeMoney.builder().status(StatusType.IN_PROGRESS.getValue()).build());
for (GameExchangeMoney exchangeMoney : gameExchangeMoneyList) {
try {
Platform platform = platformService.get(exchangeMoney.getPlatformCode());
if (null == platform) {
log.error("平台不存在platformCode:{}", exchangeMoney.getPlatformCode());
continue;
}
List<KeyInfo> keyInfos = platform.getKeyInfo();
KeyInfo keyInfo = null;
for (KeyInfo keyData : keyInfos) {
if (keyData.getCurrency().equalsIgnoreCase(exchangeMoney.getCurrencyCode())) {
keyInfo = keyData;
break;
}
}
if (null == keyInfo) {
log.error("平台不存在currencyCode:{}", exchangeMoney.getCurrencyCode());
continue;
}
String targetCurrency = platform.getCurrencyInfo().get(exchangeMoney.getCurrencyCode());
if (StringUtils.isEmpty(targetCurrency)) {
log.error("平台不存在currencyCode:{}", exchangeMoney.getCurrencyCode());
continue;
}
Member member = memberService.selectMemberById(exchangeMoney.getMemberId());
ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO();
exchangeTransferStatusRequestDTO.setAccount(member.getGameAccount());
exchangeTransferStatusRequestDTO.setCurrency(targetCurrency);
exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId());
exchangeTransferStatusRequestDTO.setAgentId(keyInfo.getCode());
exchangeTransferStatusRequestDTO.setAgentKey(keyInfo.getKey());
exchangeTransferStatusRequestDTO.setGameExchangeMoneyId(exchangeMoney.getId());
exchangeTransferStatusRequestDTO.setVendor(platform);
exchangeTransferStatusRequestDTO.setKeyInfo(keyInfo);
exchangeTransferStatusRequestDTO.setSystemCurrency(exchangeMoney.getCurrencyCode());
gamesService.get(exchangeMoney.getPlatformCode() + Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO);
GameExchangeDTO gameExchangeDTO=new GameExchangeDTO();
BeanUtils.copyProperties(exchangeMoney,gameExchangeDTO);
gameExchangeDTO.setTriggerType(TriggerType.TIMER.getCode());
gameExchangeDTO.setGameAccount(member.getGameAccount());
gameExchangeDTO.setMemberAccount(member.getMemberAccount());
AsyncManager.me().executeOrdered(
exchangeMoney.getOrderId(),
() -> {
try {
stepProcessorFactory.getStepProcessor(GameExchangeStep.CREATE_ORDER).process(gameExchangeDTO);
} catch (Exception e) {
log.error("GameTask [updateGameExchangeMoney] 余额转移失败 gameExchangeMoneyId {}", gameExchangeDTO.getId(),e);
stepProcessorFactory.getStepProcessor(GameExchangeStep.getByCode(exchangeMoney.getStep())).rollBack(gameExchangeDTO);
}
}
);
} catch (Exception e) {
log.error("查询 更新交易记录失败,错误信息 {}", e);
}