refactor(ff-game): 优化游戏结果状态处理逻辑

- 新增游戏状态判断逻辑,根据结算金额确定游戏结果
- 修改 gameStatus 字段赋值方式,提高代码可读性和维护性
main-p
shi 2025-03-17 17:00:44 +08:00
parent ee49e83c79
commit 98e1e8731a
5 changed files with 84 additions and 54 deletions

View File

@ -6,6 +6,7 @@ import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.io.Serializable; import java.io.Serializable;
/** /**
@ -21,6 +22,7 @@ public class MemberCreateApiRequest implements Serializable{
@NotBlank(message = "account不能为空") @NotBlank(message = "account不能为空")
@Length(max = 64, message = "account长度不能超过64个字符") @Length(max = 64, message = "account长度不能超过64个字符")
@Pattern(regexp = "^[a-z0-9]+$", message = "account只能包含小写字母和数字")
private String account; private String account;
/** 平台编码 */ /** 平台编码 */

View File

@ -94,6 +94,6 @@ public interface NGClient {
* @param headerMap * @param headerMap
* @return {@link ApiNGResponseDTO }<{@link ApiGameBetRecordPageResponseDTO }> * @return {@link ApiNGResponseDTO }<{@link ApiGameBetRecordPageResponseDTO }>
*/ */
@Post(url = "server/recordAll") @Post(url = "server/recordHistory")
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> getBetRecordByTime(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap); ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> getBetRecordByTime(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
} }

View File

@ -43,6 +43,10 @@ import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -499,6 +503,16 @@ public class GamesPGServiceImpl implements IGamesService {
.build()); .build());
String startTime = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss")
.withZone(ZoneId.of("Asia/Shanghai"))
.format(Instant.ofEpochMilli(betRecordByTimeDTO.getStartTime()));
String endTime = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss")
.withZone(ZoneId.of("Asia/Shanghai"))
.format(Instant.ofEpochMilli(betRecordByTimeDTO.getEndTime()));
betRecordByTimeDTO.setAgentId(currencyDTO.getCode()); betRecordByTimeDTO.setAgentId(currencyDTO.getCode());
@ -509,9 +523,11 @@ public class GamesPGServiceImpl implements IGamesService {
paramsMap.put("currency", currencyDTO.getCurrency()); paramsMap.put("currency", currencyDTO.getCurrency());
paramsMap.put("pageNo", pageNo); paramsMap.put("pageNo", pageNo);
paramsMap.put("pageSize", pageSize); paramsMap.put("pageSize", pageSize);
paramsMap.put("startTime", startTime);
paramsMap.put("endTime",endTime);
Map<String, String> key = this.getKey(betRecordByTimeDTO); Map<String, String> key = this.getKey(betRecordByTimeDTO);
SleepUtil.sleep(6000);
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> betRecordByTime = ngClient.getBetRecordByTime(paramsMap, key); ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> betRecordByTime = ngClient.getBetRecordByTime(paramsMap, key);
if (this.getIsSuccess(betRecordByTime.getCode())) { if (this.getIsSuccess(betRecordByTime.getCode())) {
@ -539,6 +555,9 @@ public class GamesPGServiceImpl implements IGamesService {
paramMap.put("currency", currencyDTO.getCurrency()); paramMap.put("currency", currencyDTO.getCurrency());
paramMap.put("pageNo", pageNoAtomic.get()); paramMap.put("pageNo", pageNoAtomic.get());
paramMap.put("pageSize", pageSize); paramMap.put("pageSize", pageSize);
paramMap.put("startTime", startTime);
paramMap.put("endTime", endTime);
SleepUtil.sleep(10000);
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> betRecordByTimePage = ngClient.getBetRecordByTime(paramMap, key); ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> betRecordByTimePage = ngClient.getBetRecordByTime(paramMap, key);
data = betRecordByTimePage.getData(); data = betRecordByTimePage.getData();
//数据组装 //数据组装

View File

@ -107,6 +107,6 @@ public class MemberServiceImpl implements IMemberService
*/ */
@Override @Override
public Member selectMemberByGameAccount(String gameAccount) { public Member selectMemberByGameAccount(String gameAccount) {
return memberMapper.selectMemberByGameAccount(gameAccount); return memberMapper.selectMemberByGameAccount(gameAccount.toLowerCase());
} }
} }

View File

@ -1,6 +1,7 @@
package com.ff.quartz.task; package com.ff.quartz.task;
import com.ff.base.constant.Constants; import com.ff.base.constant.Constants;
import com.ff.base.core.redis.RedisCache;
import com.ff.base.datasource.DynamicDataSourceContextHolder; import com.ff.base.datasource.DynamicDataSourceContextHolder;
import com.ff.base.enums.GamePlatforms; import com.ff.base.enums.GamePlatforms;
import com.ff.base.enums.NGPlatforms; import com.ff.base.enums.NGPlatforms;
@ -32,6 +33,7 @@ import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.sql.DataSource; import javax.sql.DataSource;
@ -72,6 +74,10 @@ public class GameTask {
@Resource @Resource
private IMemberService memberService; private IMemberService memberService;
@Resource
private RedisCache redisCache;
/** /**
* *
*/ */
@ -116,14 +122,17 @@ public class GameTask {
/** /**
* ngbetting * ngbetting
*
*/ */
public void insertGameNGBettingDetails() { public void insertGameNGBettingDetails(Integer backTime) {
try { try {
//捞取指定分钟前的数据
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime);
Long endTime = DateUtils.getNowDate();
BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO();
betRecordByTimeDTO.setStartTime(startTime);
betRecordByTimeDTO.setEndTime(endTime);
gamesService.get(NGPlatforms.PG.getPlatform() + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO); gamesService.get(NGPlatforms.PG.getPlatform() + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO);
} catch (Exception e) { } catch (Exception e) {
log.error("查询 NG 投注记录失败,错误信息 {}", e); log.error("查询 NG 投注记录失败,错误信息 {}", e);
@ -172,7 +181,7 @@ public class GameTask {
exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId()); exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId());
exchangeTransferStatusRequestDTO.setAgentId(gameSecretKey.getCode()); exchangeTransferStatusRequestDTO.setAgentId(gameSecretKey.getCode());
exchangeTransferStatusRequestDTO.setAgentKey(gameSecretKey.getKey()); exchangeTransferStatusRequestDTO.setAgentKey(gameSecretKey.getKey());
gamesService.get(exchangeMoney.getPlatformCode()+Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO); gamesService.get(exchangeMoney.getPlatformCode() + Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO);
} catch (Exception e) { } catch (Exception e) {
log.error("查询 更新交易记录失败,错误信息 {}", e); log.error("查询 更新交易记录失败,错误信息 {}", e);
} }