260 lines
9.9 KiB
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|