package com.ff.quartz.task; import com.ff.base.constant.Constants; import com.ff.base.enums.GamePlatforms; import com.ff.base.enums.StatusType; import com.ff.base.utils.DateUtils; import com.ff.base.utils.StringUtils; import com.ff.game.api.IGamesService; import com.ff.game.api.ng.client.NGClient; import com.ff.game.api.request.BetRecordByTimeDTO; import com.ff.game.api.request.ExchangeTransferStatusRequestDTO; import com.ff.game.api.request.GamesBaseRequestDTO; import com.ff.game.api.request.GetFreeSpinDashflowRequestDTO; import com.ff.game.domain.GameExchangeMoney; import com.ff.game.domain.KeyInfo; import com.ff.game.domain.Platform; import com.ff.game.service.IGameExchangeMoneyService; import com.ff.game.service.IPlatformService; import com.ff.member.domain.Member; import com.ff.member.service.IMemberService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; import java.util.Map; /** * 游戏任务 * * @author shi * @date 2024/10/22 */ @Slf4j @Component("gameTask") public class GameTask { @Autowired private Map gamesService; @Resource private NGClient ngClient; @Resource private IGameExchangeMoneyService gameExchangeMoneyService; @Resource private IMemberService memberService; @Resource private IPlatformService platformService; /** * 同步游戏列表 */ public void syncGameList() { for (GamePlatforms gamePlatform : GamePlatforms.values()) { String platformCode = gamePlatform.getCode(); try { syncGameList(platformCode); } catch (Exception e) { log.error("同步游戏列表失败platformCode:{}", platformCode, e); } } } public void syncGameList(String platformCode) { Platform platform = platformService.get(platformCode); if (null == platform) { return; } List keyData = platform.getKeyInfo(); for (KeyInfo keyInfo : keyData) { gamesService.get(platformCode + Constants.SERVICE) .getGameList(GamesBaseRequestDTO.builder() .agentId(keyInfo.getCode()) .agentKey(keyInfo.getKey()) .keyInfo(keyInfo) .vendor(platform) .build()); break; } } /** * 同步实时投注记录 * * @param platformCode * @param backTimeMin */ public void syncRealtimeBetRecord(String platformCode, Integer backTimeMin) { //捞取指定分钟前的数据 Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin); Long endTime = DateUtils.getNowDate(); Platform platform = platformService.get(platformCode); if (null == platform) { return; } List keyData = platform.getKeyInfo(); for (KeyInfo keyInfo : keyData) { try { BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); betRecordByTimeDTO.setStartTime(startTime); betRecordByTimeDTO.setEndTime(endTime); betRecordByTimeDTO.setPage(1); betRecordByTimeDTO.setPageLimit(1000); betRecordByTimeDTO.setAgentId(keyInfo.getCode()); betRecordByTimeDTO.setAgentKey(keyInfo.getKey()); betRecordByTimeDTO.setKeyInfo(keyInfo); betRecordByTimeDTO.setVendor(platform); betRecordByTimeDTO.setSystemCurrency(keyInfo.getCurrency()); betRecordByTimeDTO.setCurrency(platform.getCurrencyInfo().get(keyInfo.getCurrency())); gamesService.get(platformCode + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO); } catch (Exception e) { log.error("同步平台投注记录失败platformCode:{}", platformCode, e); } if (platform.isMultiAgent()) { break; } } } /** * 同步历史投注记录 * * @param platformCode * @param backTimeMin */ public void syncHistoryBetRecord(String platformCode, Integer backTimeMin) { //捞取指定分钟前的数据 Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin); Long endTime = DateUtils.getNowDate(); Platform platform = platformService.get(platformCode); if (null == platform) { return; } List keyData = platform.getKeyInfo(); for (KeyInfo keyInfo : keyData) { try { BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); betRecordByTimeDTO.setStartTime(startTime); betRecordByTimeDTO.setEndTime(endTime); betRecordByTimeDTO.setPage(1); betRecordByTimeDTO.setPageLimit(1000); betRecordByTimeDTO.setAgentId(keyInfo.getCode()); betRecordByTimeDTO.setAgentKey(keyInfo.getKey()); betRecordByTimeDTO.setKeyInfo(keyInfo); betRecordByTimeDTO.setVendor(platform); betRecordByTimeDTO.setSystemCurrency(keyInfo.getCurrency()); betRecordByTimeDTO.setCurrency(platform.getCurrencyInfo().get(keyInfo.getCurrency())); gamesService.get(platformCode + Constants.SERVICE).getBetRecordByHistoryTime(betRecordByTimeDTO); } catch (Exception e) { log.error("同步平台投注记录失败platformCode:{}", platformCode, e); } if (platform.isMultiAgent()) { break; } } } /** * 同步免费游玩记录 */ public void syncFreeBetRecord(String platformCode, Integer backTime) { // 捞取指定分钟前的数据 Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Platform platform = platformService.get(platformCode); if (null == platform) { return; } List keyData = platform.getKeyInfo(); for (KeyInfo keyInfo : keyData) { try { GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO = new GetFreeSpinDashflowRequestDTO(); getFreeSpinDashflowRequestDTO.setStartTime(startTime); getFreeSpinDashflowRequestDTO.setAgentId(keyInfo.getCode()); getFreeSpinDashflowRequestDTO.setAgentKey(keyInfo.getKey()); getFreeSpinDashflowRequestDTO.setVendor(platform); getFreeSpinDashflowRequestDTO.setKeyInfo(keyInfo); gamesService.get(platformCode + Constants.SERVICE).getFreeSpinDashflow(getFreeSpinDashflowRequestDTO); } catch (Exception e) { log.error("免费游戏投注记录失败platformCode:{}", platformCode, e); } if (platform.isMultiAgent()) { break; } } } public void updateGameExchangeMoney() { List gameExchangeMoneyList = gameExchangeMoneyService.selectGameExchangeMoneyList(GameExchangeMoney.builder().status(StatusType.IN_PROGRESS.getValue()).build()); for (GameExchangeMoney exchangeMoney : gameExchangeMoneyList) { try { // GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() // .platformCode(exchangeMoney.getPlatformCode()) // .systemCurrency(exchangeMoney.getCurrencyCode()).build()); Platform platform = platformService.get(exchangeMoney.getPlatformCode()); if (null == platform) { log.error("平台不存在platformCode:{}", exchangeMoney.getPlatformCode()); continue; } List 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(targetCurrency); gamesService.get(exchangeMoney.getPlatformCode() + Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO); } catch (Exception e) { log.error("查询 更新交易记录失败,错误信息 {}", e); } } } }