Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
|
ddf141c4c2 | |
|
8f7b618b97 | |
|
26e8e1986d | |
|
f229c9ca4f | |
|
529bd5f1d0 |
|
@ -19,7 +19,9 @@ public enum GamePlatforms {
|
||||||
PGT("PGT", "PGT"),
|
PGT("PGT", "PGT"),
|
||||||
FBSports("FBSports", "FB体育"),
|
FBSports("FBSports", "FB体育"),
|
||||||
SV388("SV388", "SV388真人"),
|
SV388("SV388", "SV388真人"),
|
||||||
DBSports("DBSports", "DB体育");
|
DBSports("DBSports", "DB体育"),
|
||||||
|
PT("PT", "PT"),
|
||||||
|
;
|
||||||
|
|
||||||
private final String code;
|
private final String code;
|
||||||
private final String info;
|
private final String info;
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
package com.ff.game.api.pt.client;
|
||||||
|
|
||||||
|
import com.ff.base.exception.base.BaseException;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
|
import javax.net.ssl.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.security.KeyStore;
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
|
||||||
|
public class PTClient {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 POST 请求,带有 SSL 客户端证书和请求参数
|
||||||
|
*
|
||||||
|
* @param url 请求的 URL
|
||||||
|
* @param entityKey 请求头中的 X_ENTITY_KEY
|
||||||
|
* @param params 表单参数,使用 URL 编码
|
||||||
|
* @return 响应内容
|
||||||
|
* @throws Exception 异常
|
||||||
|
*/
|
||||||
|
public static String sendPostRequest(String url, String entityKey,String pwd, String params) {
|
||||||
|
try {
|
||||||
|
// 加载证书
|
||||||
|
KeyStore ks = KeyStore.getInstance("PKCS12");
|
||||||
|
Path path = Paths.get(System.getProperty("user.dir"), "pp_p12");
|
||||||
|
URL fileURL = new File(path.resolve("AGDRA_UAT.p12").toAbsolutePath().toString()).toURI().toURL();
|
||||||
|
File file = new File(fileURL.getFile());
|
||||||
|
try (FileInputStream fis = new FileInputStream(file)) {
|
||||||
|
ks.load(fis, pwd.toCharArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 KeyManagerFactory
|
||||||
|
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
|
||||||
|
kmf.init(ks, pwd.toCharArray());
|
||||||
|
KeyManager[] kms = kmf.getKeyManagers();
|
||||||
|
|
||||||
|
// 创建 TrustManager 来绕过证书验证
|
||||||
|
TrustManager[] trustAllCerts = new TrustManager[]{
|
||||||
|
new X509TrustManager() {
|
||||||
|
@Override
|
||||||
|
public X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkClientTrusted(X509Certificate[] certs, String authType) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void checkServerTrusted(X509Certificate[] certs, String authType) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 创建 SSLContext
|
||||||
|
SSLContext sslContext = SSLContext.getInstance("TLS");
|
||||||
|
sslContext.init(kms, trustAllCerts, new SecureRandom());
|
||||||
|
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
|
||||||
|
|
||||||
|
// 设置 HostnameVerifier 跳过主机名验证
|
||||||
|
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
|
||||||
|
|
||||||
|
// 创建请求连接
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
connection.setRequestProperty("X_ENTITY_KEY", entityKey);
|
||||||
|
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
|
||||||
|
// 启用输入输出流
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
|
||||||
|
// 写入请求体
|
||||||
|
try (OutputStream os = connection.getOutputStream()) {
|
||||||
|
byte[] input = params.getBytes(StandardCharsets.UTF_8);
|
||||||
|
os.write(input, 0, input.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取响应
|
||||||
|
try (InputStream response = connection.getInputStream()) {
|
||||||
|
return IOUtils.toString(response, StandardCharsets.UTF_8);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// 处理错误响应
|
||||||
|
try (InputStream errorStream = connection.getErrorStream()) {
|
||||||
|
return IOUtils.toString(errorStream, StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
connection.disconnect();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new BaseException("请求失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.ff.game.api.pt.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ptcreate播放器响应
|
||||||
|
*
|
||||||
|
* @author shi
|
||||||
|
* @date 2025/03/29
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PTCreatePlayerResponse {
|
||||||
|
private Result result;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Result {
|
||||||
|
private String result;
|
||||||
|
private String playername;
|
||||||
|
private String password;
|
||||||
|
private ExecutionTime executiontime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class ExecutionTime {
|
||||||
|
private String webapi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.ff.game.api.pt.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ptlogin响应dto
|
||||||
|
*
|
||||||
|
* @author shi
|
||||||
|
* @date 2025/03/29
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PTMemberInfoResponse {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应结果,包含玩家的详细信息
|
||||||
|
*/
|
||||||
|
@JsonProperty("result")
|
||||||
|
private Result result;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Result {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家名称
|
||||||
|
*/
|
||||||
|
@JsonProperty("playername")
|
||||||
|
private String playerName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家奖金余额
|
||||||
|
*/
|
||||||
|
@JsonProperty("bonusbalance")
|
||||||
|
private BigDecimal bonusBalance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家余额
|
||||||
|
*/
|
||||||
|
@JsonProperty("rc_balance")
|
||||||
|
private BigDecimal balance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ISO 货币代码
|
||||||
|
*/
|
||||||
|
@JsonProperty("currencycode")
|
||||||
|
private String currencyCode;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.ff.game.api.pt.dto;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pt会员在线回复
|
||||||
|
*
|
||||||
|
* @author shi
|
||||||
|
* @date 2025/03/29
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PTMemberOnlineResponse {
|
||||||
|
/**
|
||||||
|
* 响应结果,表示操作是否成功,1 为成功,0 为失败
|
||||||
|
*/
|
||||||
|
@JsonProperty("result")
|
||||||
|
private Integer result;
|
||||||
|
}
|
|
@ -0,0 +1,391 @@
|
||||||
|
package com.ff.game.api.pt.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.ff.base.constant.CacheConstants;
|
||||||
|
import com.ff.base.constant.Constants;
|
||||||
|
import com.ff.base.core.redis.RedisCache;
|
||||||
|
import com.ff.base.enums.*;
|
||||||
|
import com.ff.base.exception.base.ApiException;
|
||||||
|
import com.ff.base.exception.base.BaseException;
|
||||||
|
import com.ff.base.system.service.ISysConfigService;
|
||||||
|
import com.ff.base.utils.DateUtils;
|
||||||
|
import com.ff.base.utils.JsonUtil;
|
||||||
|
import com.ff.base.utils.uuid.IdUtils;
|
||||||
|
import com.ff.config.KeyConfig;
|
||||||
|
import com.ff.game.api.IGamesService;
|
||||||
|
import com.ff.game.api.pt.client.PTClient;
|
||||||
|
import com.ff.game.api.pt.dto.*;
|
||||||
|
import com.ff.game.api.request.*;
|
||||||
|
import com.ff.game.api.xk.dto.*;
|
||||||
|
import com.ff.game.domain.*;
|
||||||
|
import com.ff.game.service.*;
|
||||||
|
import com.ff.member.domain.Member;
|
||||||
|
import com.ff.member.service.IMemberService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PT 游戏 impl
|
||||||
|
*
|
||||||
|
* @author shi
|
||||||
|
* @date 2024/11/12
|
||||||
|
*/
|
||||||
|
@Service("PTService")
|
||||||
|
@Slf4j
|
||||||
|
public class GamesPTServiceImpl implements IGamesService {
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ISysConfigService configService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisCache redisCache;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IGameExchangeMoneyService gameExchangeMoneyService;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IGameService gameService;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IMemberService memberService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IGameFreeRecordService gameFreeRecordService;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private KeyConfig keyConfig;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IGameBettingDetailsService gameBettingDetailsService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得就是成功
|
||||||
|
*
|
||||||
|
* @param errorCode 错误代码
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
private Boolean getIsSuccess(Integer errorCode) {
|
||||||
|
return 0 == errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送
|
||||||
|
*
|
||||||
|
* @param url 网址
|
||||||
|
* @param params 参数
|
||||||
|
* @param gamesBaseRequestDTO 游戏基础请求dto
|
||||||
|
* @return {@link String }
|
||||||
|
*/
|
||||||
|
private String send(String url, Map<String, Object> params, GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||||
|
return PTClient.sendPostRequest(gamesBaseRequestDTO.getVendor().getUrlInfo().getUrl() + url, gamesBaseRequestDTO.getAgentKey(), gamesBaseRequestDTO.getAgentId(), JsonUtil.mapToQueryString(params));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建成员
|
||||||
|
*
|
||||||
|
* @param createMemberRequestDTO 创建成员请求dto
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean createMember(CreateMemberRequestDTO createMemberRequestDTO) {
|
||||||
|
log.info("GamesPTServiceImpl [createMember] 请求参数 {}", createMemberRequestDTO);
|
||||||
|
Map<String, Object> params = new LinkedHashMap<>();
|
||||||
|
params.put("playername", createMemberRequestDTO.getAccount());
|
||||||
|
params.put("currency", createMemberRequestDTO.getCurrency());
|
||||||
|
params.put("password", createMemberRequestDTO.getKeyInfo().getPassword());
|
||||||
|
String result = this.send("/player/create/", params, createMemberRequestDTO);
|
||||||
|
PTCreatePlayerResponse ptCreatePlayerResponse = JSON.parseObject(result, PTCreatePlayerResponse.class);
|
||||||
|
if (ObjectUtils.isEmpty(ptCreatePlayerResponse.getResult())) {
|
||||||
|
return Boolean.FALSE;
|
||||||
|
}
|
||||||
|
//判断是否获取成功
|
||||||
|
return Boolean.TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取会员信息
|
||||||
|
*
|
||||||
|
* @param memberInfoRequestDTO 会员信息请求dto
|
||||||
|
* @return {@link MemberInfoResponseDTO }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) {
|
||||||
|
log.info("GamesPTServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO);
|
||||||
|
Map<String, Object> params = new LinkedHashMap<>();
|
||||||
|
params.put("playername", memberInfoRequestDTO.getAccounts());
|
||||||
|
String result = this.send("/player/balance/", params, memberInfoRequestDTO);
|
||||||
|
PTMemberInfoResponse memberInfoResponse = JSON.parseObject(result, PTMemberInfoResponse.class);
|
||||||
|
if (ObjectUtils.isEmpty(memberInfoResponse.getResult())) {
|
||||||
|
throw new ApiException(ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
||||||
|
}
|
||||||
|
PTMemberInfoResponse.Result results = memberInfoResponse.getResult();
|
||||||
|
//查询在线状态
|
||||||
|
params = new LinkedHashMap<>();
|
||||||
|
params.put("playername", memberInfoRequestDTO.getAccounts());
|
||||||
|
result = this.send("/player/online/", params, memberInfoRequestDTO);
|
||||||
|
PTMemberOnlineResponse ptMemberOnlineResponse = JSON.parseObject(result, PTMemberOnlineResponse.class);
|
||||||
|
|
||||||
|
|
||||||
|
//判断是否获取成功
|
||||||
|
return MemberInfoResponseDTO.builder().balance(results.getBalance()).status(ptMemberOnlineResponse.getResult() == 1 ? GameMemberStatus.ONLINE.getCode() : GameMemberStatus.OFFLINE.getCode()).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 无重定向登录
|
||||||
|
*
|
||||||
|
* @param gamesLogin 游戏登录
|
||||||
|
* @return {@link String }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String loginWithoutRedirect(GamesLogin gamesLogin) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取游戏列表
|
||||||
|
*
|
||||||
|
* @param gamesBaseRequestDTO 游戏请求dto
|
||||||
|
* @return {@link String }
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTransactionId(TransactionIdRequestDTO transactionIdRequestDTO) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按代理id进行交换转账
|
||||||
|
*
|
||||||
|
* @param exchangeTransferMoneyRequestDTO 外汇转账moeny dto
|
||||||
|
* @return {@link Long }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 汇兑转移状态
|
||||||
|
*
|
||||||
|
* @param exchangeTransferMoneyRequestDTO 兑换转账请求dto
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按时间获取投注记录
|
||||||
|
*
|
||||||
|
* @param betRecordByTimeDTO 按时间dto投注记录
|
||||||
|
* @return {@link List }<{@link GameBettingDetails }>
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按历史时间获取投注记录
|
||||||
|
*
|
||||||
|
* @param betRecordByTimeDTO 按时间dto投注记录
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 赠送免费局数
|
||||||
|
*
|
||||||
|
* @param createFreeSpinRequest 创建自由旋转请求
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean createFreeSpin(CreateFreeSpinRequestDTO createFreeSpinRequest) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取游戏详细信息
|
||||||
|
*
|
||||||
|
* @param getGameDetailRequestDTO 获取游戏详细信息请求dto
|
||||||
|
* @return {@link GetGameDetailResponseDTO }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public GetGameDetailResponseDTO getGameDetail(GetGameDetailRequestDTO getGameDetailRequestDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 强制会员从游戏注销
|
||||||
|
*
|
||||||
|
* @param kickMemberRequestDTO 踢会员请求dto
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean kickMember(KickMemberRequestDTO kickMemberRequestDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 踢成员全部
|
||||||
|
*
|
||||||
|
* @param kickMemberAllDTO 踢成员全部dto
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean kickMemberAll(KickMemberAllDTO kickMemberAllDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 免费游戏玩家使用的纪录
|
||||||
|
*
|
||||||
|
* @param getFreeSpinDashflowRequestDTO 获取自由旋转dashflow请求dto
|
||||||
|
* @return {@link List }<{@link GameFreeRecord }>
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<GameFreeRecord> getFreeSpinDashflow(GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消赠送免费局数
|
||||||
|
*
|
||||||
|
* @param cancelFreeSpinRequestDTO 取消免费旋转请求
|
||||||
|
* @return {@link Boolean }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean cancelFreeSpin(CancelFreeSpinRequestDTO cancelFreeSpinRequestDTO) {
|
||||||
|
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GameDemoLoginResponseDTO gameDemoLogin(GameDemoLoginRequestDTO gameDemoLoginRequestDTO) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量插入
|
||||||
|
*
|
||||||
|
* @param xkBetRecordResponseDTO xk下注记录响应dto
|
||||||
|
*/
|
||||||
|
private void batchInsert(XKBetRecordResponseDTO xkBetRecordResponseDTO) {
|
||||||
|
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||||
|
List<String> wagersIds = new ArrayList<>();
|
||||||
|
//数据组装
|
||||||
|
XKBetRecordResponseDTO.DataBean dataBean = xkBetRecordResponseDTO.getData();
|
||||||
|
//数据转化
|
||||||
|
for (XKBetRecordResponseDTO.DataBean.ResultBean bean : dataBean.getResult()) {
|
||||||
|
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).build());
|
||||||
|
if (!ObjectUtils.isEmpty(bettingDetails)) {
|
||||||
|
bettingDetails.setId(IdUtil.getSnowflakeNextId());
|
||||||
|
gameBettingDetails.add(bettingDetails);
|
||||||
|
}
|
||||||
|
wagersIds.add(String.valueOf(bean.getWagersId()));
|
||||||
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||||
|
//查询重复数据id
|
||||||
|
List<String> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.PT.getCode());
|
||||||
|
//用steam流清除list中与wagersIds集合相同的数据
|
||||||
|
gameBettingDetails = gameBettingDetails.stream()
|
||||||
|
.filter(detail -> !removeWagersIds.contains(detail.getWagersId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||||
|
gameBettingDetailsService.batchInsert(gameBettingDetails);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据构建
|
||||||
|
*
|
||||||
|
* @param gamesDataBuildDTO 数据
|
||||||
|
* @return {@link GameBettingDetails }
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO) {
|
||||||
|
//转化类
|
||||||
|
XKBetRecordResponseDTO.DataBean.ResultBean resultBean = (XKBetRecordResponseDTO.DataBean.ResultBean) gamesDataBuildDTO.getData();
|
||||||
|
|
||||||
|
|
||||||
|
Member member = memberService.selectMemberByGameAccount(resultBean.getAccount());
|
||||||
|
if (ObjectUtils.isEmpty(member)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
List<XKGamesDTO.DataBean> gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES);
|
||||||
|
Map<String, XKGamesDTO.DataBean> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(XKGamesDTO.DataBean::getGameId, e -> e));
|
||||||
|
XKGamesDTO.DataBean gamesDataDTO = dataDTOMap.get(resultBean.getGameId());
|
||||||
|
BigDecimal payoffAmount = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
if (GameStatus.WIN.getCode().equals(resultBean.getStatus())) {
|
||||||
|
payoffAmount = NumberUtil.sub(resultBean.getPayoffAmount(), resultBean.getTurnover());
|
||||||
|
} else if (GameStatus.FAIL.getCode().equals(resultBean.getStatus())) {
|
||||||
|
payoffAmount = NumberUtil.sub(resultBean.getPayoffAmount(), resultBean.getTurnover()).negate();
|
||||||
|
}
|
||||||
|
//数据构造
|
||||||
|
GameBettingDetails gameBettingDetails = GameBettingDetails.builder()
|
||||||
|
.tenantKey(member.getTenantKey())
|
||||||
|
//保存我们的币种id
|
||||||
|
.currencyCode(gamesDataBuildDTO.getSystemCurrencyCode())
|
||||||
|
.memberId(member.getId())
|
||||||
|
.gameCode(resultBean.getGameId())
|
||||||
|
.gameType(XKGameType.findSystemByCode(resultBean.getGameCategoryId()))
|
||||||
|
.platformCode(GamePlatforms.XK.getCode())
|
||||||
|
.gameId(gamesDataDTO.getSystemGameId())
|
||||||
|
.gameName(gamesDataDTO.getName())
|
||||||
|
.gameStatus(resultBean.getStatus())
|
||||||
|
.gameStatusType(resultBean.getType())
|
||||||
|
.gameCurrencyCode(resultBean.getAgentId())
|
||||||
|
.account(String.valueOf(resultBean.getAccount()))
|
||||||
|
.wagersId(String.valueOf(resultBean.getWagersId()))
|
||||||
|
.wagersTime(resultBean.getWagersTime())
|
||||||
|
.betAmount(resultBean.getBetAmount().abs())
|
||||||
|
.payoffTime(resultBean.getPayoffTime())
|
||||||
|
.payoffAmount(payoffAmount)
|
||||||
|
.settlementTime(resultBean.getSettlementTime())
|
||||||
|
.turnover(resultBean.getTurnover())
|
||||||
|
.orderNo(String.valueOf(resultBean.getRoundIndex()))
|
||||||
|
.settlementStatus(SettlementStatusEnum.COMPLETED.getCode())
|
||||||
|
.build();
|
||||||
|
gameBettingDetails.setCreateBy(Constants.SYSTEM);
|
||||||
|
gameBettingDetails.setCreateTime(DateUtils.getNowDate());
|
||||||
|
return gameBettingDetails;
|
||||||
|
}
|
||||||
|
}
|
|
@ -55,7 +55,7 @@ public class MemberServiceImpl implements IMemberService {
|
||||||
@Override
|
@Override
|
||||||
public synchronized String getMemberGameAccount(String platformCode,String tenantSn) {
|
public synchronized String getMemberGameAccount(String platformCode,String tenantSn) {
|
||||||
String gameAccount = null;
|
String gameAccount = null;
|
||||||
if (GamePlatforms.DG.getInfo().equals(platformCode) || GamePlatforms.KM.getInfo().equals(platformCode)) {
|
if (GamePlatforms.DG.getInfo().equals(platformCode) || GamePlatforms.KM.getInfo().equals(platformCode)||GamePlatforms.PT.getInfo().equals(platformCode)) {
|
||||||
tenantSn=tenantSn.toUpperCase();
|
tenantSn=tenantSn.toUpperCase();
|
||||||
do {
|
do {
|
||||||
gameAccount = RandomGeneratorUtils.generateRandomAccountUpper()+tenantSn;
|
gameAccount = RandomGeneratorUtils.generateRandomAccountUpper()+tenantSn;
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
Bag Attributes
|
||||||
|
localKeyID: A1 EA B4 FE 75 13 56 C4 8D 9A 45 97 9A 09 52 C5 3A 80 52 AF
|
||||||
|
Key Attributes: <No Attributes>
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEpQIBAAKCAQEAyX3zP0OnqujQYoCnXMr18fNnigqPNfW5o3UeafPlbk9+2iNW
|
||||||
|
vrdjIbvOxnHA7kca6PfUtWcws3HrFmt0KsfBRbhKh7Kf1z6c0+U2TtpMl923nhzf
|
||||||
|
FLTrB239joAwsBnkRjEhcqWqYWZXEnhLohH4x1eCYuWFQB2dWMJxaGRawa+llJ9e
|
||||||
|
rkyYWKzyCIkSBAtA/fxND4SqB7WftXzrPFf9z1P92nm8iKiEJm5xOM14b8bsAeyr
|
||||||
|
sTcXLfgH4NHBzOSghWeGlDLDF/Cpra1cB5zL6JjS8dEGHJ1XKZxJgwIlTOL6Q5O5
|
||||||
|
ElhCT4QnBhLxFHBC+2kmtgaRHZRyrcnXliU/6QIDAQABAoIBAQCL5qe+hXslcAFA
|
||||||
|
Y5PRGhsqo5aAglRtYvBCTk+PwYjLzuaFD4RrZ2mtQnmPz+vlhflpSKqoSb3G2pIg
|
||||||
|
PvupuIi5n/wfvCa/jPnXJo9OsMP9rjSP0/wQpI2L2xLyno8vtsqI8hQHRn/GoQhU
|
||||||
|
CrJ5FYFm55vgjvy2R9m4h0m28fcSA2YfQWZspsWf0VjzxNfYWJAu1PcR1oyzscMA
|
||||||
|
ts8fc/4+GIeSQlfl4B2wb0ZJk+z3Z/Cn+9Dzi3uCZrlm65qBAvQFuhPZzdr3odwE
|
||||||
|
9GLHAkFBU47XKDsBZNEesowstci57A5EL8EBrHiXX1hDc4bVhGbdq/nnrUcIV2T5
|
||||||
|
4/6sS7MBAoGBAPvl0GAgr73VG8N6a2dgH3tbeJk9qDHxc76he0+lvWi6mWYW56eN
|
||||||
|
MMTUYK8PJHKIio/im8vD2HMDKNKcIH0JYWfm8uGd1ZgsrCOwYuC/o9hiEim583e7
|
||||||
|
TuoibhB0oUqWiJrOlc5QS1AgZjUi0ZL/fDfFgYfZ1/Zb/l0sKq4F385fAoGBAMzF
|
||||||
|
/Wje6UNA09U7ftEAiwyGOJj1EfIWoEQrcdsxaRZrX9OnEgZakUqRtfT4i404faoq
|
||||||
|
OjsddQ9iyRxZAenHTrbzK2i4mszp2GVdsZgcjrAswUJcpDR97ov5HiOjEg+7dPiR
|
||||||
|
zrhunylAQ9fElZAUK4NHFNrhAJ1Vwh2wvRa/vYa3AoGAeq0Qj1A75nqb+9Zp6j2A
|
||||||
|
94WztQW3HSOXF/by4/Y2yYNe474x8YKshp9busXoHTNsL+jPsSvfBRw7zF4m4F4q
|
||||||
|
Jvztun0wodzXtMXZUdVjCSWx7MpXzS7WnuZHrhHu3zFys9n6UTD/jLVKsYQUhr+Q
|
||||||
|
EmVI0Q2BxMRGm7+/xWKs/YcCgYEAnc4iqNPIPXzTAquT4mshvSgeq7mI9+B55673
|
||||||
|
Ui00yAM9WPWSjXT0LNw3ti5oFQ+owB9EutPLp2zAgWkScV+YCKNDG7PQEARSMGPQ
|
||||||
|
/eFcEOaclJCiNpWp5RK5KEt+GsOitABhp34QiBCvd7NWcy8oDUYVC0yEVbuGGa1f
|
||||||
|
Ow3Od+cCgYEA9G7ZGzkA5pNKE0fKzdmN4+oPYB8BCnSPKf6z2Xvu8hDR4CuSlbXN
|
||||||
|
Nps4zrhs8v4u+2J+IXOgRgKJd+Culg4AdY5hcSrdbWOmebxWVEC+VzaXvTQTUF62
|
||||||
|
hSmlSD/hyKIxKMGbx6h74gQ86d7NgPHVefZPrYiAXPXHAj79WKA23LA=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
Bag Attributes
|
||||||
|
localKeyID: A1 EA B4 FE 75 13 56 C4 8D 9A 45 97 9A 09 52 C5 3A 80 52 AF
|
||||||
|
subject=/CN=KioskAPI ASIA-SHARED-PROD-UMS CRXUATTLE (CHG0110705)/O=Playtech Estonia/OU=Infra Operations/C=EE/ST=Tartumaa/L=Tartu/DC=2228591
|
||||||
|
issuer=/CN=Playtech Production API Auth CA - G1/OU=Security/O=Playtech PLC/C=IM
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFjDCCBHSgAwIBAgIINW/4hQUOxmkwDQYJKoZIhvcNAQELBQAwZjEtMCsGA1UE
|
||||||
|
AwwkUGxheXRlY2ggUHJvZHVjdGlvbiBBUEkgQXV0aCBDQSAtIEcxMREwDwYDVQQL
|
||||||
|
DAhTZWN1cml0eTEVMBMGA1UECgwMUGxheXRlY2ggUExDMQswCQYDVQQGEwJJTTAe
|
||||||
|
Fw0yNDA0MzAwMDAwMDBaFw0yNjAxMDUxMDAwMDBaMIG+MT0wOwYDVQQDDDRLaW9z
|
||||||
|
a0FQSSBBU0lBLVNIQVJFRC1QUk9ELVVNUyBDUlhVQVRUTEUgKENIRzAxMTA3MDUp
|
||||||
|
MRkwFwYDVQQKDBBQbGF5dGVjaCBFc3RvbmlhMRkwFwYDVQQLDBBJbmZyYSBPcGVy
|
||||||
|
YXRpb25zMQswCQYDVQQGEwJFRTERMA8GA1UECAwIVGFydHVtYWExDjAMBgNVBAcM
|
||||||
|
BVRhcnR1MRcwFQYKCZImiZPyLGQBGRYHMjIyODU5MTCCASIwDQYJKoZIhvcNAQEB
|
||||||
|
BQADggEPADCCAQoCggEBAMl98z9Dp6ro0GKAp1zK9fHzZ4oKjzX1uaN1Hmnz5W5P
|
||||||
|
ftojVr63YyG7zsZxwO5HGuj31LVnMLNx6xZrdCrHwUW4Soeyn9c+nNPlNk7aTJfd
|
||||||
|
t54c3xS06wdt/Y6AMLAZ5EYxIXKlqmFmVxJ4S6IR+MdXgmLlhUAdnVjCcWhkWsGv
|
||||||
|
pZSfXq5MmFis8giJEgQLQP38TQ+Eqge1n7V86zxX/c9T/dp5vIiohCZucTjNeG/G
|
||||||
|
7AHsq7E3Fy34B+DRwczkoIVnhpQywxfwqa2tXAecy+iY0vHRBhydVymcSYMCJUzi
|
||||||
|
+kOTuRJYQk+EJwYS8RRwQvtpJrYGkR2Ucq3J15YlP+kCAwEAAaOCAeMwggHfMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUxW8U
|
||||||
|
91f9h5D0CJ89mAQ7STEigjQwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQbE05j
|
||||||
|
cuUE9DORnQEwzjPKZ8dAoDCCAWgGA1UdHwSCAV8wggFbMIG4oEqgSIZGaHR0cDov
|
||||||
|
L3BraS5pbmZyYS5wdGVjL2NybC9QbGF5dGVjaF9Qcm9kdWN0aW9uX0FQSV9BdXRo
|
||||||
|
X0NBXy1fRzEuY3JsLmRlcqJqpGgwZjEtMCsGA1UEAwwkUGxheXRlY2ggUHJvZHVj
|
||||||
|
dGlvbiBBUEkgQXV0aCBDQSAtIEcxMREwDwYDVQQLDAhTZWN1cml0eTEVMBMGA1UE
|
||||||
|
CgwMUGxheXRlY2ggUExDMQswCQYDVQQGEwJJTTCBnaCBmqCBl4aBlGxkYXA6Ly9w
|
||||||
|
cm9kbGRhcC5pbmZyYS5wdGVjOjM4OS9jbj1QbGF5dGVjaCUyMFByb2R1Y3Rpb24l
|
||||||
|
MjBBUEklMjBBdXRoJTIwQ0ElMjAtJTIwRzEsb3U9Q1JMLG91PVBLSSxkYz1wbGF5
|
||||||
|
dGVjaCxkYz1jb20/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5hcnkwDQYJ
|
||||||
|
KoZIhvcNAQELBQADggEBABozAUwJAIKNrjh/ZMjyq52u346zDjLP4imY+1ZGRPJG
|
||||||
|
8SY2GYosPOIpfYdFJ3UatC/EsNwr9XsKUsJ5MD0SjNgx3MgyPjCBWw6xunn1E9WX
|
||||||
|
OquLn74t49NP+He/oDTWGImWeaHIJcMwgU6TD6/ZPUuUhdeZCjDMYmJUuxmrZkL1
|
||||||
|
iNSu1jMqcIHCtuiKDbluuaUQtk+5eUFilJnJIQUVqqBr/XXG7GfQ6fq/c1GjJNqM
|
||||||
|
mgfEJEwPWdjeS5ynBSCE0AnocziyKpJg4RXPiXKgDVDfAscgF93JmnEIYYDtm+oU
|
||||||
|
0XhJZg1dKZtpOAM2IfCndP8VKHY0RTD2QZDg56p+9Kc=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1 @@
|
||||||
|
A6ZCfYoycq5tDa5p
|
Loading…
Reference in New Issue