feat(game): 添加 PGT 游戏平台支持

- 新增 PGT 游戏平台的 API接口和实现类
- 添加 PGT 游戏平台的会员账户生成逻辑
- 实现 PGT 游戏平台的余额查询、转账等功能
- 添加 PGT 游戏平台的错误响应和数据模型类
main-meitian
shi 2025-04-07 10:53:56 +08:00
parent 3ce8dba98f
commit 2013a12aee
6 changed files with 471 additions and 98 deletions

View File

@ -56,53 +56,53 @@ public interface PGTClient {
*
*
* @param parameters
* @return {@link PGXGameLoginResponse }
* @return {@link PGTLoginResponse }
*/
@Post("/logIn")
PGXGameLoginResponse loginWithoutRedirect(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
PGTLoginResponse loginWithoutRedirect(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
/**
* id
*
*
* @param parameters
* @return {@link PGXErrorResponse }
* @param parameters
* @param headerMap
* @return {@link PGTExchangeTransferResponse }
*/
@Post(url = "/makeTransfer.aspx?{parameters}")
PGXErrorResponse exchangeTransferByAgentId(@Var("parameters") String parameters);
@Post(url = "/deposit")
PGTExchangeTransferResponse deposit(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
/**
*
*
*
* @return {@link DGResponse }
* @param parameters
* @param headerMap
* @return {@link PGTExchangeTransferResponse }
*/
@Post(url = "markbyjson.aspx")
DGResponse markReport(@JSONBody Map<String, Object> params);
@Post(url = "/withdraw")
PGTExchangeTransferResponse withdraw(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
/**
*
*
* @param parameters
* @param headerMap
* @return {@link ApiNGResponseDTO }<{@link ApiExchangeTransferStatusResponseDTO }>
*/
@Post(url = "/checkTransaction.ashx?{parameters}")
PGXExchangeTransferStatusResponse exchangeTransferStatus(@Var("parameters") String parameters);
@Post(url = "/verifyDepositWithdraw")
PGTTransactionResponse exchangeTransferStatus(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
/**
*
*
* @return {@link PGXBetHistoryResponse }
* @param parameters
* @param headerMap
* @return {@link PGTTransactionDetailsResponse }
*/
@Get(url = "/fetchbykey.aspx?{parameters}")
PGXBetHistoryResponse getBetRecordByTime(@Var("parameters") String parameters);
@Get(url = "/betTransactionsV2")
PGTTransactionDetailsResponse getBetRecordByTime(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);

View File

@ -0,0 +1,80 @@
package com.ff.game.api.pgt.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* pgtexchange
*
* @author shi
* @date 2025/04/03
*/
@Data
public class PGTExchangeTransferResponse {
/**
*
*/
@JsonProperty("reqId")
private String reqId;
/**
* 0
*/
@JsonProperty("code")
private int code;
/**
*
*/
@JsonProperty("message")
private String message;
/**
*
*/
@JsonProperty("data")
private BalanceData data;
@Data
public static class BalanceData {
/**
* /
*/
@JsonProperty("status")
private String status;
/**
* 2
*/
@JsonProperty("amount")
private BigDecimal amount;
/**
* productId 2
*/
@JsonProperty("balance")
private BigDecimal balance;
/**
* ID
*/
@JsonProperty("txId")
private String txId;
/**
*
*/
@JsonProperty("username")
private String username;
/**
* productId 2
*/
@JsonProperty("beforeBalance")
private BigDecimal beforeBalance;
}
}

View File

@ -0,0 +1,54 @@
package com.ff.game.api.pgt.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* pgtlogin
*
* @author shi
* @date 2025/04/03
*/
@Data
public class PGTLoginResponse {
/**
*
*/
@JsonProperty("reqId")
private String reqId;
/**
* 0
*/
@JsonProperty("code")
private int code;
/**
*
*/
@JsonProperty("message")
private String message;
/**
*
*/
@JsonProperty("data")
private LoginData data;
@Data
public static class LoginData {
/**
* URL
*/
@JsonProperty("url")
private String url;
/**
*
*/
@JsonProperty("username")
private String username;
}
}

View File

@ -0,0 +1,150 @@
package com.ff.game.api.pgt.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
/**
* pgtt
*
* @author shi
* @date 2025/04/07
*/
@Data
public class PGTTransactionDetailsResponse {
/**
*
*/
@JsonProperty("reqId")
private String reqId;
/**
* 0
*/
@JsonProperty("code")
private int code;
/**
*
*/
@JsonProperty("message")
private String message;
/**
*
*/
@JsonProperty("data")
private TransactionData data;
@Data
public static class TransactionData {
/**
* ID
*/
@JsonProperty("nextId")
private String nextId;
/**
*
*/
@JsonProperty("txns")
private List<Transaction> txns;
}
@Data
public static class Transaction {
/**
* ID
*/
@JsonProperty("id")
private String id;
/**
* ID
*/
@JsonProperty("betId")
private String betId;
/**
*
*/
@JsonProperty("username")
private String username;
/**
* ISO 4217
*/
@JsonProperty("currency")
private String currency;
/**
*
*/
@JsonProperty("accountingDate")
private String accountingDate;
/**
*
*/
@JsonProperty("updatedDate")
private String updatedDate;
/**
*
*/
@JsonProperty("stake")
private double stake;
/**
*
*/
@JsonProperty("payout")
private double payout;
/**
* ID
*/
@JsonProperty("productId")
private String productId;
/**
*
*/
@JsonProperty("gameCode")
private String gameCode;
/**
*
*/
@JsonProperty("gameName")
private String gameName;
/**
* ID
*/
@JsonProperty("roundId")
private String roundId;
/**
*
*/
@JsonProperty("betStatus")
private String betStatus;
/**
* LOSEWINDRAWUNKNOWN
*/
@JsonProperty("payoutStatus")
private String payoutStatus;
/**
*
*/
@JsonProperty("commission")
private double commission;
}
}

View File

@ -0,0 +1,90 @@
package com.ff.game.api.pgt.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* pgtt
*
* @author shi
* @date 2025/04/07
*/
@Data
public class PGTTransactionResponse {
/**
*
*/
@JsonProperty("reqId")
private String reqId;
/**
* 0
*/
@JsonProperty("code")
private int code;
/**
*
*/
@JsonProperty("message")
private String message;
/**
*
*/
@JsonProperty("data")
private TransactionData data;
@Data
public static class TransactionData {
/**
*
*/
@JsonProperty("success")
private boolean success;
/**
*
*/
@JsonProperty("username")
private String username;
/**
* ID "SEXY"
*/
@JsonProperty("productId")
private String productId;
/**
* "THB"
*/
@JsonProperty("currency")
private String currency;
/**
*
*/
@JsonProperty("transactionRef")
private String transactionRef;
/**
*
*/
@JsonProperty("amount")
private String amount;
/**
*
*/
@JsonProperty("beforeBalance")
private String beforeBalance;
/**
*
*/
@JsonProperty("afterBalance")
private String afterBalance;
}
}

View File

@ -110,15 +110,16 @@ public class GamesPGTServiceImpl implements IGamesService {
*
* @return {@link String }
*/
private Map<String, String> getKey( GamesBaseRequestDTO gamesBaseRequestDTO) {
Map<String, String> headerMap=new LinkedHashMap<>();
private Map<String, String> getKey(GamesBaseRequestDTO gamesBaseRequestDTO) {
Map<String, String> headerMap = new LinkedHashMap<>();
String auth = gamesBaseRequestDTO.getAgentId() + ":" + gamesBaseRequestDTO.getAgentKey();
String encodedAuth = Base64Utils.encodeToString(auth.getBytes());
headerMap.put("Authorization","Basic "+encodedAuth);
headerMap.put("Authorization", "Basic " + encodedAuth);
return headerMap;
}
String productId = "PGSOFT";
/**
*
@ -132,7 +133,7 @@ public class GamesPGTServiceImpl implements IGamesService {
Map<String, String> headerMap = this.getKey(createMemberRequestDTO);
Map<String, Object> params = new LinkedHashMap<>();
params.put("username", createMemberRequestDTO.getAccount());
params.put("productId","PGSOFT");
params.put("productId", productId);
PGTCreateMemberResponse member = pgtClient.createMember(params, headerMap);
if (this.getIsSuccess(member.getCode())) {
@ -154,9 +155,9 @@ public class GamesPGTServiceImpl implements IGamesService {
log.info("GamesPGTServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO);
Map<String, Object> params = new LinkedHashMap<>();
params.put("username", memberInfoRequestDTO.getAccounts());
params.put("productId", "PGSOFT");
params.put("productId", productId);
Map<String, String> headerMap = this.getKey(memberInfoRequestDTO);
PGTBalanceResponse memberInfo = pgtClient.getMemberInfo(JsonUtil.mapToQueryString(params),headerMap);
PGTBalanceResponse memberInfo = pgtClient.getMemberInfo(JsonUtil.mapToQueryString(params), headerMap);
//判断是否获取成功
if (this.getIsSuccess(memberInfo.getCode())) {
MemberInfoResponseDTO memberInfoResponseDTO = MemberInfoResponseDTO.builder()
@ -179,24 +180,19 @@ public class GamesPGTServiceImpl implements IGamesService {
@Override
public String loginWithoutRedirect(GamesLogin gamesLogin) {
log.info("GamesPGTServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin);
GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyByCode(gamesLogin.getAgentId());
Map<String, Object> params = new LinkedHashMap<>();
params.put("operatorcode", gamesLogin.getAgentId());
params.put("password", gameSecretKey.getPassword());
params.put("providercode", gameSecretKey.getProviderCode());
params.put("type", gamesLogin.getGameType());
params.put("username", gamesLogin.getAccount());
params.put("productId", productId);
params.put("gameCode", gamesLogin.getGameId());
params.put("isMobileLogin", PlatformHomeType.APP.getValue().equals(gamesLogin.getPlatform()));
params.put("language", gamesLogin.getLang());
Map<String, String> key = this.getKey(gamesLogin);
params.put("gameid", gamesLogin.getGameId());
params.put("lang", gamesLogin.getLang());
params.put("html5", 1);
params.put("signature", key);
PGXGameLoginResponse PGXGameLoginResponse = pgtClient.loginWithoutRedirect(params,key);
PGTLoginResponse pgtLoginResponse = pgtClient.loginWithoutRedirect(params, key);
//判断是否获取成功
if (this.getIsSuccess(PGXGameLoginResponse.getErrCode())) {
return PGXGameLoginResponse.getGameUrl();
if (this.getIsSuccess(pgtLoginResponse.getCode())) {
return pgtLoginResponse.getData().getUrl();
} else {
throw new BaseException(PGXGameLoginResponse.getErrMsg());
throw new BaseException(pgtLoginResponse.getMessage());
}
}
@ -224,13 +220,10 @@ public class GamesPGTServiceImpl implements IGamesService {
@Override
@Transactional
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
log.info("GamesPGXServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
log.info("GamesPGTServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
String currency = exchangeTransferMoneyRequestDTO.getCurrency();
GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(GamePlatforms.PGX.getInfo())
.code(exchangeTransferMoneyRequestDTO.getAgentId())
.currency(exchangeTransferMoneyRequestDTO.getCurrency())
.build());
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.PGX.getInfo(), 17);
@ -242,7 +235,6 @@ public class GamesPGTServiceImpl implements IGamesService {
);
Assert.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), "订单号重复");
GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyByCode(exchangeTransferMoneyRequestDTO.getAgentId());
//获取下一个自增id
GameExchangeMoney exchangeMoney = GameExchangeMoney
@ -252,15 +244,13 @@ public class GamesPGTServiceImpl implements IGamesService {
.quota(exchangeTransferMoneyRequestDTO.getQuota())
.balance(exchangeTransferMoneyRequestDTO.getAmount())
.exchangeType(exchangeTransferMoneyRequestDTO.getTransferType())
.currencyCode(currencyDTO.getSystemCurrency())
.currencyCode(currency)
.memberId(member.getId())
.transactionId(transactionId)
.platformCode(GamePlatforms.PGX.getInfo())
.platformCode(GamePlatforms.PGT.getInfo())
.build();
exchangeMoney.setCreateBy(Constants.SYSTEM);
//获取余额
String type = TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType()) ? PGXTransferType.WITHDRAW.getCode() : PGXTransferType.DEPOSIT.getCode();
BigDecimal amount = exchangeTransferMoneyRequestDTO.getAmount();
BigDecimal amountBefore = BigDecimal.ZERO;
@ -272,49 +262,48 @@ public class GamesPGTServiceImpl implements IGamesService {
.agentKey(exchangeTransferMoneyRequestDTO.getAgentKey())
.build();
//判断是不是提出
if (TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) {
amountBefore = this.getMemberInfo(gamesBaseRequestDTO).getBalance();
amount = amountBefore;
}
Map<String, Object> paramsMap = new LinkedHashMap<>();
paramsMap.put("amount", amount);
paramsMap.put("operatorcode", exchangeTransferMoneyRequestDTO.getAgentId());
paramsMap.put("password", gameSecretKey.getPassword());
paramsMap.put("providercode", gameSecretKey.getProviderCode());
paramsMap.put("referenceid", transactionId);
paramsMap.put("type", type);
paramsMap.put("username", exchangeTransferMoneyRequestDTO.getAccount());
paramsMap.put("amount", amount);
paramsMap.put("transactionRef", transactionId);
paramsMap.put("productId", productId);
Map<String, String> key = this.getKey(exchangeTransferMoneyRequestDTO);
PGTExchangeTransferResponse errorResponse;
//判断是不是提出
if (TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) {
errorResponse = pgtClient.withdraw(paramsMap, key);
} else {
errorResponse = pgtClient.deposit(paramsMap, key);
}
PGXErrorResponse errorResponse = pgtClient.exchangeTransferByAgentId(JsonUtil.mapToQueryString(paramsMap));
if (this.getIsSuccess(errorResponse.getErrCode())) {
if (this.getIsSuccess(errorResponse.getCode())) {
PGTExchangeTransferResponse.BalanceData data = errorResponse.getData();
//更新数据
exchangeMoney.setBalance(amount);
exchangeMoney.setCoinBefore(amountBefore);
//转后的余额
BigDecimal coinAfter = this.getMemberInfo(gamesBaseRequestDTO).getBalance();
exchangeMoney.setCoinAfter(coinAfter);
exchangeMoney.setBalance(data.getAmount());
exchangeMoney.setCoinBefore(data.getBeforeBalance());
exchangeMoney.setCoinAfter(data.getBalance());
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
//确认状态
//查询交易状态
ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO();
exchangeTransferStatusRequestDTO.setAccount(member.getGameAccount());
exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId());
exchangeTransferStatusRequestDTO.setAgentId(gameSecretKey.getCode());
exchangeTransferStatusRequestDTO.setAgentKey(gameSecretKey.getKey());
exchangeTransferStatusRequestDTO.setAccount(exchangeTransferMoneyRequestDTO.getAccount());
exchangeTransferStatusRequestDTO.setCurrency(currency);
exchangeTransferStatusRequestDTO.setOrderId(transactionId);
exchangeTransferStatusRequestDTO.setAgentId(exchangeTransferMoneyRequestDTO.getAgentId());
exchangeTransferStatusRequestDTO.setAgentKey(exchangeTransferMoneyRequestDTO.getAgentKey());
this.exchangeTransferStatus(exchangeTransferStatusRequestDTO);
} else {
log.error("GamesFCServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", errorResponse.getErrCode());
log.error("GamesPGTServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", errorResponse.getCode());
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
}
return exchangeMoney.getId();
@ -328,29 +317,35 @@ public class GamesPGTServiceImpl implements IGamesService {
*/
@Override
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
log.info("GamesPGXServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
log.info("GamesPGTServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(exchangeTransferMoneyRequestDTO.getGameExchangeMoneyId());
Map<String, Object> paramsMap = new LinkedHashMap<>();
paramsMap.put("operatorcode", exchangeTransferMoneyRequestDTO.getAgentId());
paramsMap.put("referenceid", exchangeTransferMoneyRequestDTO.getOrderId());
PGXExchangeTransferStatusResponse exchangeTransferStatusResponse = pgtClient.exchangeTransferStatus(JsonUtil.mapToQueryString(paramsMap));
if (this.getIsSuccess(exchangeTransferStatusResponse.getErrCode())) {
paramsMap.put("username", exchangeTransferMoneyRequestDTO.getAccount());
paramsMap.put("transactionRef", exchangeTransferMoneyRequestDTO.getOrderId());
paramsMap.put("productId", productId);
if (TransferType.ALL.getCode().equals(gameExchangeMoney.getExchangeType())) {
paramsMap.put("type", "WITHDRAW");
} else {
paramsMap.put("type", "DEPOSIT");
}
Map<String, String> key = this.getKey(exchangeTransferMoneyRequestDTO);
PGTTransactionResponse transactionResponse = pgtClient.exchangeTransferStatus(paramsMap, key);
if (this.getIsSuccess(transactionResponse.getCode())) {
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
GameExchangeMoney.builder()
.platformCode(GamePlatforms.PGX.getInfo())
.platformCode(GamePlatforms.PGT.getCode())
.transactionId(exchangeTransferMoneyRequestDTO.getOrderId())
.build()
);
for (GameExchangeMoney exchangeMoney : gameExchangeMonies) {
//更新数据
exchangeMoney.setStatus(PGXTransactionStatus.findValueByCode(exchangeTransferStatusResponse.getStatus()));
exchangeMoney.setStatus(transactionResponse.getData().isSuccess() ? StatusType.SUCCESS.getValue() : StatusType.FAILURE.getValue());
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
}
return Boolean.TRUE;
} else {
log.error("GamesPGXServiceImpl [exchangeTransferStatus]错误代码{},错误信息{}", exchangeTransferStatusResponse.getErrCode(), exchangeTransferStatusResponse.getErrMsg());
log.error("GamesPGTServiceImpl [exchangeTransferStatus]错误代码{},错误信息{}", transactionResponse.getCode(), transactionResponse.getMessage());
return Boolean.FALSE;
}
}
@ -365,16 +360,20 @@ public class GamesPGTServiceImpl implements IGamesService {
@Override
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
//请求参数
log.info("GamesPGXServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO);
log.info("GamesPGTServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO);
Map<String, Object> paramsMap = new LinkedHashMap<>();
paramsMap.put("operatorcode", betRecordByTimeDTO.getAgentId());
paramsMap.put("productId", productId);
paramsMap.put("date", productId);
paramsMap.put("startTime", productId);
paramsMap.put("endTime", productId);
paramsMap.put("nextId", productId);
Map<String, String> key = this.getKey(betRecordByTimeDTO);
paramsMap.put("versionkey", 0);
PGXBetHistoryResponse betRecordByTime = pgtClient.getBetRecordByTime(JsonUtil.mapToQueryString(paramsMap));
PGTTransactionDetailsResponse betRecordByTime = pgtClient.getBetRecordByTime(paramsMap, key);
if (this.getIsSuccess(betRecordByTime.getErrCode())) {
List<PGXBetHistoryResponse.Result> results = JSON.parseArray(betRecordByTime.getResult(), PGXBetHistoryResponse.Result.class);
this.batchInsert(results, betRecordByTimeDTO);
if (this.getIsSuccess(betRecordByTime.getCode())) {
List<PGTTransactionDetailsResponse.Transaction> txns = betRecordByTime.getData().getTxns();
this.batchInsert(txns, betRecordByTimeDTO);
return Boolean.TRUE;
} else {
log.error("GamesPGXServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordByTime.getErrCode(), betRecordByTime.getErrMsg());
@ -490,12 +489,12 @@ public class GamesPGTServiceImpl implements IGamesService {
*
* @param dataBean bean
*/
private void batchInsert(List<PGXBetHistoryResponse.Result> dataBean, GamesBaseRequestDTO gamesBaseRequestDTO) {
private void batchInsert(List<PGTTransactionDetailsResponse.Transaction> dataBean, GamesBaseRequestDTO gamesBaseRequestDTO) {
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
List<String> wagersIds = new ArrayList<>();
//数据转化
for (PGXBetHistoryResponse.Result bean : dataBean) {
for (PGTTransactionDetailsResponse.Transaction bean : dataBean) {
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().agentId(gamesBaseRequestDTO.getAgentId()).data(bean).build());
if (!ObjectUtils.isEmpty(bettingDetails)) {
bettingDetails.setId(IdUtil.getSnowflakeNextId());
@ -505,7 +504,7 @@ public class GamesPGTServiceImpl implements IGamesService {
}
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
//查询重复数据id
List<String> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.PGX.getInfo());
List<String> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds, GamePlatforms.PGX.getInfo());
//用steam流清除list中与wagersIds集合相同的数据
gameBettingDetails = gameBettingDetails.stream()
.filter(detail -> !removeWagersIds.contains(detail.getWagersId()))