feat(game): 添加 PGT 游戏平台支持
- 新增 PGT 游戏平台的 API接口和实现类 - 添加 PGT 游戏平台的会员账户生成逻辑 - 实现 PGT 游戏平台的余额查询、转账等功能 - 添加 PGT 游戏平台的错误响应和数据模型类main-meitian
parent
3ce8dba98f
commit
2013a12aee
|
@ -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);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 支付状态(LOSE、WIN、DRAW、UNKNOWN)
|
||||
*/
|
||||
@JsonProperty("payoutStatus")
|
||||
private String payoutStatus;
|
||||
|
||||
/**
|
||||
* 佣金
|
||||
*/
|
||||
@JsonProperty("commission")
|
||||
private double commission;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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()))
|
||||
|
|
Loading…
Reference in New Issue