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