game-api/ff-game/src/main/java/com/ff/quartz/task/GameTask.java

260 lines
9.9 KiB
Java

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<String, IGamesService> 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<KeyInfo> 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) {
this.syncGameList(platformCode);
//捞取指定分钟前的数据
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin);
Long endTime = DateUtils.getNowDate();
Platform platform = platformService.get(platformCode);
if (null == platform) {
return;
}
List<KeyInfo> 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) {
this.syncGameList(platformCode);
//捞取指定分钟前的数据
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin);
Long endTime = DateUtils.getNowDate();
Platform platform = platformService.get(platformCode);
if (null == platform) {
return;
}
List<KeyInfo> 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<KeyInfo> 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<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);
} catch (Exception e) {
log.error("查询 更新交易记录失败,错误信息 {}", e);
}
}
}
}