package com.ff.quartz.task; import com.ff.base.constant.Constants; import com.ff.base.core.redis.RedisCache; import com.ff.base.datasource.DynamicDataSourceContextHolder; import com.ff.base.enums.GamePlatforms; import com.ff.base.enums.NGPlatforms; import com.ff.base.enums.PlatformType; import com.ff.base.enums.StatusType; import com.ff.base.utils.DateUtils; import com.ff.game.api.IGamesService; import com.ff.game.api.ng.client.NGClient; import com.ff.game.api.ng.dto.ApiExchangeTransferStatusResponseDTO; import com.ff.game.api.ng.dto.ApiNGResponseDTO; 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.GameSecretKey; import com.ff.game.dto.GameSecretKeyCurrencyDTO; import com.ff.game.dto.GameSecretKeyDTO; import com.ff.game.service.*; 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.context.ApplicationEventPublisher; import org.springframework.scheduling.annotation.AsyncConfigurationSelector; import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.sql.DataSource; import javax.xml.crypto.dsig.keyinfo.PGPData; import java.util.*; import java.util.stream.Collectors; /** * 游戏任务 * * @author shi * @date 2024/10/22 */ @Slf4j @Component("gameTask") public class GameTask { @Autowired private Map gamesService; @Resource private IGameSecretKeyService gameSecretKeyService; @Resource private IGamePlatformService gamePlatformService; @Resource private NGClient ngClient; @Resource private IGameExchangeMoneyService gameExchangeMoneyService; @Resource private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; @Resource private IMemberService memberService; @Resource private RedisCache redisCache; @Resource private IGameService gameService; /** * 插入游戏投注详细信息 */ public void insertGameBettingDetails(Integer backTime) { //捞取指定分钟前的数据 Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); for (String gameKey : gamesService.keySet()) { String platformCode = gameKey.replace(Constants.SERVICE, ""); //特殊的平台跳过 if (NGPlatforms.exists(platformCode) || GamePlatforms.FC.getInfo().equals(platformCode)) { continue; } List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(platformCode).build()); for (GameSecretKey gameSecretKey : gameSecretKeys) { try { gamesService.get(gameKey).getGameList(GamesBaseRequestDTO.builder() .agentId(gameSecretKey.getCode()) .agentKey(gameSecretKey.getKey()) .build()); BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); betRecordByTimeDTO.setGamePlatform(gameSecretKey.getPlatform()); betRecordByTimeDTO.setStartTime(startTime); betRecordByTimeDTO.setEndTime(endTime); betRecordByTimeDTO.setPage(1); betRecordByTimeDTO.setPageLimit(1000); betRecordByTimeDTO.setAgentId(gameSecretKey.getCode()); betRecordByTimeDTO.setAgentKey(gameSecretKey.getKey()); gamesService.get(gameKey).getBetRecordByTime(betRecordByTimeDTO); } catch (Exception e) { log.error("查询 币种 {} 投注记录失败,错误信息 {}", gameSecretKey.getCode(), e); } } } } /** * 插入游戏cfbetting详细信息 */ public void insertGameCFBettingDetails(Integer backTime) { try { //捞取指定分钟前的数据 Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); for (String gameKey : gamesService.keySet()) { String platformCode = gameKey.replace(Constants.SERVICE, ""); //不是特殊的平台跳过 if (!GamePlatforms.FC.getInfo().equals(platformCode)) { continue; } List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(platformCode).build()); for (GameSecretKey gameSecretKey : gameSecretKeys) { try { gamesService.get(gameKey).getGameList(GamesBaseRequestDTO.builder() .agentId(gameSecretKey.getCode()) .agentKey(gameSecretKey.getKey()) .build()); BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); betRecordByTimeDTO.setGamePlatform(gameSecretKey.getPlatform()); betRecordByTimeDTO.setStartTime(startTime); betRecordByTimeDTO.setEndTime(endTime); betRecordByTimeDTO.setPage(1); betRecordByTimeDTO.setPageLimit(1000); betRecordByTimeDTO.setAgentId(gameSecretKey.getCode()); betRecordByTimeDTO.setAgentKey(gameSecretKey.getKey()); gamesService.get(gameKey).getBetRecordByTime(betRecordByTimeDTO); } catch (Exception e) { log.error("查询 平台 {} 投注记录失败,错误信息 {}", gameSecretKey.getCode(), e); } } } } catch (Exception e) { log.error("查询 FC 投注记录失败,错误信息 {}", e); } } /** * 插入FC游戏投注详细信息 * * @param backTime 返回时间 */ public void insertFCHistoryGameBettingDetails(Integer backTime) { Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); //捞取指定分钟前的数据 gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.FC.getInfo()); } /** * 插入AE游戏投注详细信息 * * @param backTime 返回时间 */ public void insertAEHistoryGameBettingDetails(Integer backTime) { Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); //捞取指定分钟前的数据 gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.AE.getInfo()); } /** * 插入PGX游戏投注详细信息 * * @param backTime 返回时间 */ public void insertPGXHistoryGameBettingDetails(Integer backTime) { Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); //捞取指定分钟前的数据 gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.PGX.getInfo()); } /** * 插入MT游戏投注详细信息 * * @param backTime 返回时间 */ public void insertMTHistoryGameBettingDetails(Integer backTime) { Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); //捞取指定分钟前的数据 gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.MT.getCode()); } /** * 插入游戏ngbetting详细信息 */ public void insertGameNGBettingDetails(Integer backTime) { try { //捞取指定分钟前的数据 Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); Long endTime = DateUtils.getNowDate(); BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); betRecordByTimeDTO.setStartTime(startTime); betRecordByTimeDTO.setEndTime(endTime); gamesService.get(NGPlatforms.PG.getPlatform() + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO); } catch (Exception e) { log.error("查询 NG 投注记录失败,错误信息 {}", e); } } /** * 插入免费游戏局数情况 */ public void insertFreeSpinDashflow() { Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), -70); for (String gameKey : gamesService.keySet()) { List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(gameKey.replace(Constants.SERVICE, "")).build()); for (GameSecretKey gameSecretKey : gameSecretKeys) { try { GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO = new GetFreeSpinDashflowRequestDTO(); getFreeSpinDashflowRequestDTO.setStartTime(startTime); getFreeSpinDashflowRequestDTO.setAgentId(gameSecretKey.getCode()); getFreeSpinDashflowRequestDTO.setAgentKey(gameSecretKey.getKey()); gamesService.get(gameKey).getFreeSpinDashflow(getFreeSpinDashflowRequestDTO); } catch (Exception e) { log.error("查询 币种 {} 免费游戏投注记录失败,错误信息 {}", gameSecretKey.getCode(), e.getMessage()); } } } } 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()); Member member = memberService.selectMemberById(exchangeMoney.getMemberId()); ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO(); exchangeTransferStatusRequestDTO.setAccount(member.getGameAccount()); exchangeTransferStatusRequestDTO.setCurrency(gameSecretKey.getCurrency()); exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId()); exchangeTransferStatusRequestDTO.setAgentId(gameSecretKey.getCode()); exchangeTransferStatusRequestDTO.setAgentKey(gameSecretKey.getKey()); exchangeTransferStatusRequestDTO.setGameExchangeMoneyId(exchangeMoney.getId()); gamesService.get(exchangeMoney.getPlatformCode() + Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO); } catch (Exception e) { log.error("查询 更新交易记录失败,错误信息 {}", e); } } } }