Merge remote-tracking branch 'origin/main-pgt' into main-meitian
# Conflicts: # ff-base/src/main/java/com/ff/base/enums/GamePlatforms.java # ff-game/src/main/java/com/ff/game/api/meitian/impl/MeiTianGameServiceImpl.java # ff-game/src/main/resources/mapper/game/GameMapper.xmlmain-meitian
commit
59dc248c3e
|
|
@ -51,7 +51,10 @@ public class CacheConstants {
|
|||
*/
|
||||
public static final String XK_GAMES = "xk_games:";
|
||||
|
||||
|
||||
/**
|
||||
* ae游戏
|
||||
*/
|
||||
public static final String AE_GAMES = "ae_games:";
|
||||
/**
|
||||
* km游戏
|
||||
*/
|
||||
|
|
@ -68,6 +71,11 @@ public class CacheConstants {
|
|||
*/
|
||||
public static final String PG_GAMES = "pg_games:";
|
||||
|
||||
/**
|
||||
* pgt游戏
|
||||
*/
|
||||
public static final String PGT_GAMES = "pgt_games:";
|
||||
|
||||
|
||||
/**
|
||||
* fc游戏
|
||||
|
|
@ -93,6 +101,12 @@ public class CacheConstants {
|
|||
*/
|
||||
public static final String PG_GAMES_BET_CURRENCY = "pg_games:bet:currency";
|
||||
|
||||
|
||||
/**
|
||||
* pgt下一个id
|
||||
*/
|
||||
public static final String PGT_NEXT_ID = "pgt_next:id:";
|
||||
|
||||
/**
|
||||
* ae时间从
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package com.ff.base.enums;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 游戏交换步骤
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum GameExchangeStep {
|
||||
CREATE_ORDER(1, "创建订单"),
|
||||
PLATFORM_TRANSACTION(2, "平台交易成功"),
|
||||
PLATFORM_TRANSACTION_CONFIRM(3, "平台交易状态确认"),
|
||||
TENANT_QUOTA_DEDUCTED(4, "租户额度扣减成功");
|
||||
|
||||
private final int code;
|
||||
private final String description;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.ff.base.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 游戏交换步骤状态
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum GameExchangeStepStatus {
|
||||
IN_PROGRESS(0, "进行中"),
|
||||
SUCCESS(1, "成功"),
|
||||
FAILURE(2, "失败");
|
||||
|
||||
private final int code;
|
||||
private final String description;
|
||||
}
|
||||
|
|
@ -14,8 +14,8 @@ public enum GamePlatforms {
|
|||
MT("MT", "美天棋牌"),
|
||||
AE("AE", "AE"),
|
||||
KM("KM", "KM"),
|
||||
|
||||
FBSports("FBSports", "FB体育");
|
||||
PGT("PGT", "PGT"),
|
||||
;
|
||||
|
||||
private final String code;
|
||||
private final String info;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package com.ff.base.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 完成
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/07
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum PGTBetStatus {
|
||||
OPEN(1, "打开 或 未结算", "OPEN"),
|
||||
SETTLED(2, "已结算", "SETTLED"),
|
||||
UNSETTLED(1, "未结算", "UNSETTLED"),
|
||||
VOID(3, "作废 或 无效", "VOID");
|
||||
|
||||
private final int code;
|
||||
private final String description;
|
||||
private final String type;
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package com.ff.base.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* pgt名称类型
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/07
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum PGTGameType {
|
||||
EGAMES("EGAMES",1, "游戏老虎机"),
|
||||
LIVECASINO("LIVECASINO",2, "现场赌场"),
|
||||
SPORT("SPORT",8, "体育"),
|
||||
POKER("POKER",2, "扑克"),
|
||||
TRADING("TRADING",1, "贸易");
|
||||
|
||||
// 枚举字段
|
||||
private final String code;
|
||||
private final Integer systemCode;
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* 按代码查找系统
|
||||
*
|
||||
* @param code 代码
|
||||
* @return {@link Integer }
|
||||
*/
|
||||
public static Integer findSystemByCode(String code) {
|
||||
Optional<Integer> system = Stream.of(PGTGameType.values())
|
||||
.filter(gameType -> gameType.getCode().equals(code))
|
||||
.map(PGTGameType::getSystemCode)
|
||||
.findFirst();
|
||||
return system.orElse(null);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package com.ff.base.enums;
|
||||
|
||||
import com.dtflys.forest.annotation.Get;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* pgtplayout状态
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/07
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum PGTPayoutStatus {
|
||||
|
||||
LOSE("LOSE", 2, "输"),
|
||||
WIN("WIN",1, "赢"),
|
||||
DRAW("DRAW",3, "平"),
|
||||
UNKNOWN("UNKNOWN",4, "未知");
|
||||
|
||||
private final String code;
|
||||
private final Integer systemCode;
|
||||
private final String description;
|
||||
|
||||
public static PGTPayoutStatus getByCode(String code) {
|
||||
for (PGTPayoutStatus status : PGTPayoutStatus.values()) {
|
||||
if (status.getCode().equals(code)) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
|
@ -9,7 +9,8 @@ package com.ff.base.enums;
|
|||
*/
|
||||
public enum TransferType {
|
||||
ALL(1, "从游戏商转移额度到平台商(不看amount值,全部转出"),
|
||||
GAMES(2, "从平台商转移额度到游戏商");
|
||||
GAMES(2, "从平台商转移额度到游戏商"),
|
||||
;
|
||||
private final Integer code;
|
||||
private final String info;
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
|||
|
||||
public static final String ISO_8601_FORMAT= "yyyy-MM-dd'T'HH:mm:ss";
|
||||
|
||||
|
||||
|
||||
public static final String ISO_8601_FORMAT_Z= "yyyy-MM-dd'T'HH:mm:ss'Z'";
|
||||
|
||||
|
||||
/**
|
||||
* 获取当前Date型日期
|
||||
*
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||
public class NumberUtils {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 计算比例
|
||||
*
|
||||
|
|
@ -68,17 +67,13 @@ public class NumberUtils {
|
|||
Random random = new Random();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
// 每位字符可以是字母(A-Z, a-z)或数字(0-9)
|
||||
for (int i = 0; i <size ; i++) {
|
||||
int choice = random.nextInt(3);
|
||||
// 每位字符可以是大写字母(A-Z)或数字(0-9)
|
||||
for (int i = 0; i < size; i++) {
|
||||
int choice = random.nextInt(2);
|
||||
if (choice == 0) {
|
||||
// 随机字母(大写或小写)
|
||||
// 随机大写字母
|
||||
char letter = (char) ('A' + random.nextInt(26));
|
||||
sb.append(letter);
|
||||
} else if (choice == 1) {
|
||||
// 随机小写字母
|
||||
char letter = (char) ('a' + random.nextInt(26));
|
||||
sb.append(letter);
|
||||
} else {
|
||||
// 随机数字
|
||||
sb.append(random.nextInt(10));
|
||||
|
|
@ -88,4 +83,5 @@ public class NumberUtils {
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -585,12 +585,12 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||
/**
|
||||
* 加后缀
|
||||
*
|
||||
* @param account 账户
|
||||
* @param suffix 后缀
|
||||
* @param code 代码
|
||||
* @param suffix 后缀
|
||||
* @return {@link String }
|
||||
*/
|
||||
public static String addSuffix(String account, String suffix) {
|
||||
return account + suffix;
|
||||
public static String addSuffix(String code, Object suffix) {
|
||||
return code +"_"+ suffix;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.ff.base.core.controller.BaseController;
|
|||
import com.ff.base.core.domain.AjaxResult;
|
||||
import com.ff.base.core.page.TableDataInfo;
|
||||
import com.ff.base.enums.ErrorCode;
|
||||
import com.ff.base.enums.TransferType;
|
||||
import com.ff.base.exception.base.ApiException;
|
||||
import com.ff.base.system.domain.TenantSecretKey;
|
||||
import com.ff.base.utils.StringUtils;
|
||||
|
|
@ -103,15 +104,10 @@ public class ApiGameController extends BaseController {
|
|||
if (null == platform) {
|
||||
continue;
|
||||
}
|
||||
// List<GameSecretKeyCurrencyDTO> gameSecretKeyCurrencies =
|
||||
// gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(
|
||||
// GameSecretKeyCurrencyDTO.builder().platformCode(gameResponse.getPlatformCode())
|
||||
// .build()
|
||||
// );
|
||||
// List<String> currencyCode = gameSecretKeyCurrencies.stream().map(GameSecretKeyCurrencyDTO::getSystemCurrency).collect(Collectors.toList());
|
||||
|
||||
List<String> currencyCode = new ArrayList<>(platform.getCurrencyInfo().keySet());
|
||||
gameResponse.setCurrencyCode(currencyCode);
|
||||
|
||||
}
|
||||
return AjaxResult.success(gameResponses);
|
||||
}
|
||||
|
|
@ -126,7 +122,7 @@ public class ApiGameController extends BaseController {
|
|||
@PostMapping("/login")
|
||||
public AjaxResult login(@Validated @RequestBody GameLoginRequest loginRequest) {
|
||||
|
||||
Game game = gameService.selectGameById(loginRequest.getGameId());
|
||||
Game game = gameService.selectGameByGameId(loginRequest.getGameId());
|
||||
ApiException.notNull(game, ErrorCode.GAME_NOT_EXIST.getCode());
|
||||
|
||||
Platform platform = platformService.get(game.getPlatformCode());
|
||||
|
|
@ -151,18 +147,6 @@ public class ApiGameController extends BaseController {
|
|||
String targetLang = platform.getLangInfo().get(loginRequest.getLangCode());
|
||||
ApiException.notNull(targetLang, ErrorCode.LANG_NOT_EXIST.getCode());
|
||||
|
||||
// TenantSecretKey tenantSecretKey = keyConfig.get();
|
||||
// GameSecretKeyCurrencyDTO secretKeyCurrencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(gamePlatform.getPlatformCode())
|
||||
// .systemCurrency(memberCreateApiRequest.getCurrencyCode()).build());
|
||||
// ApiException.notNull(secretKeyCurrencyDTO, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
|
||||
// GameSecretKeyLangDTO gameSecretKeyLangDTO = gameSecretKeyLangService.findGameSecretKeyLangDTO(GameSecretKeyLangDTO.builder()
|
||||
// .platformCode(gamePlatform.getPlatformCode())
|
||||
// .systemLangCode(memberCreateApiRequest.getLangCode())
|
||||
// .build());
|
||||
// ApiException.notNull(gameSecretKeyLangDTO, ErrorCode.LANG_NOT_EXIST.getCode());
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByAccount(loginRequest.getAccount(), loginRequest.getCurrencyCode(), platform.getPlatformCode());
|
||||
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
||||
|
|
@ -206,11 +190,6 @@ public class ApiGameController extends BaseController {
|
|||
|
||||
TenantSecretKey tenantSecretKey = keyConfig.get();
|
||||
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(gameExchangeBalanceRequest.getPlatformCode())
|
||||
// .systemCurrency(gameExchangeBalanceRequest.getCurrencyCode()).build());
|
||||
//
|
||||
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
|
||||
Platform platform = platformService.get(gameExchangeBalanceRequest.getPlatformCode());
|
||||
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
||||
|
|
@ -228,21 +207,24 @@ public class ApiGameController extends BaseController {
|
|||
}
|
||||
}
|
||||
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
BigDecimal quota = BigDecimal.ZERO;
|
||||
//如果是扣钱提前扣
|
||||
if (TransferType.GAMES.getCode().equals(gameExchangeBalanceRequest.getTransferType())) {
|
||||
quota = tenantGameQuotaService.gameBalanceExchange(GameBalanceExchange.builder()
|
||||
.platformCode(gameExchangeBalanceRequest.getPlatformCode())
|
||||
.sourceId(gameExchangeBalanceRequest.getOrderId())
|
||||
.currencyCode(gameExchangeBalanceRequest.getCurrencyCode())
|
||||
.currency(targetCurrency)
|
||||
.transferType(gameExchangeBalanceRequest.getTransferType())
|
||||
.amount(gameExchangeBalanceRequest.getAmount())
|
||||
.account(gameExchangeBalanceRequest.getAccount())
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.systemCurrency(gameExchangeBalanceRequest.getCurrencyCode())
|
||||
.agentId(keyInfo.getCode())
|
||||
.agentKey(keyInfo.getKey())
|
||||
.build());
|
||||
}
|
||||
|
||||
BigDecimal quota = tenantGameQuotaService.gameBalanceExchange(GameBalanceExchange.builder()
|
||||
.platformCode(gameExchangeBalanceRequest.getPlatformCode())
|
||||
.sourceId(gameExchangeBalanceRequest.getOrderId())
|
||||
.currencyCode(gameExchangeBalanceRequest.getCurrencyCode())
|
||||
.currency(targetCurrency)
|
||||
.transferType(gameExchangeBalanceRequest.getTransferType())
|
||||
.amount(gameExchangeBalanceRequest.getAmount())
|
||||
.account(gameExchangeBalanceRequest.getAccount())
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.systemCurrency(gameExchangeBalanceRequest.getCurrencyCode())
|
||||
.agentId(keyInfo.getCode())
|
||||
.agentKey(keyInfo.getKey())
|
||||
|
||||
.build());
|
||||
|
||||
// 获取用户信息
|
||||
Member member = memberService.selectMemberByAccount(gameExchangeBalanceRequest.getAccount(), gameExchangeBalanceRequest.getCurrencyCode(), gameExchangeBalanceRequest.getPlatformCode());
|
||||
|
|
@ -255,7 +237,7 @@ public class ApiGameController extends BaseController {
|
|||
.agentKey(keyInfo.getKey())
|
||||
.orderId(gameExchangeBalanceRequest.getOrderId())
|
||||
.account(member.getGameAccount())
|
||||
.currency(/*gameSecretKey.getCurrency()*/targetCurrency)
|
||||
.currency(targetCurrency)
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.quota(quota)
|
||||
.amount(gameExchangeBalanceRequest.getAmount())
|
||||
|
|
|
|||
|
|
@ -108,13 +108,8 @@ public class ApiMemberController extends BaseController {
|
|||
}
|
||||
}
|
||||
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(memberCreateApiRequest.getPlatformCode())
|
||||
// .systemCurrency(memberCreateApiRequest.getCurrencyCode()).build());
|
||||
|
||||
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
|
||||
String gameAccount = StringUtils.addSuffix(memberService.getMemberGameAccount(memberCreateApiRequest.getPlatformCode()), tenantSecretKey.getTenantSn());
|
||||
String gameAccount =memberService.getMemberGameAccount(memberCreateApiRequest.getPlatformCode(), tenantSecretKey.getTenantSn());
|
||||
|
||||
|
||||
// 获取用户信息
|
||||
|
|
@ -149,6 +144,10 @@ public class ApiMemberController extends BaseController {
|
|||
.build();
|
||||
Boolean result = iGamesService.createMember(gamesBaseRequestDTO);
|
||||
Assert.isTrue(result, "建立游戏账号失败");
|
||||
|
||||
|
||||
|
||||
|
||||
return toAjax(Boolean.TRUE);
|
||||
|
||||
}
|
||||
|
|
@ -166,12 +165,6 @@ public class ApiMemberController extends BaseController {
|
|||
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
||||
|
||||
|
||||
TenantSecretKey tenantSecretKey = keyConfig.get();
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(memberInfoApiRequest.getPlatformCode())
|
||||
// .systemCurrency(memberInfoApiRequest.getCurrencyCode()).build());
|
||||
//
|
||||
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
Platform platform = platformService.get(request.getPlatformCode());
|
||||
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
||||
|
||||
|
|
|
|||
|
|
@ -44,8 +44,8 @@ public class GameLoginRequest implements Serializable {
|
|||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
@NotNull(message = "gameId不能为空")
|
||||
private Long gameId;
|
||||
@NotBlank(message = "gameId不能为空")
|
||||
private String gameId;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ff.api.response;
|
||||
|
||||
import com.ff.game.domain.NameInfo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
|
@ -27,7 +28,7 @@ public class GameResponse implements Serializable {
|
|||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
private Long id;
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 游戏名称
|
||||
|
|
@ -60,5 +61,8 @@ public class GameResponse implements Serializable {
|
|||
* 支持货币代码
|
||||
*/
|
||||
private List<String> currencyCode;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private List<NameInfo> nameInfo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,12 @@ public class GameBalanceExchange extends GamesBaseRequestDTO implements Serializ
|
|||
*/
|
||||
private BigDecimal amount;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private BigDecimal amountActual;
|
||||
|
||||
/**
|
||||
* 账户
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -269,13 +269,6 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService {
|
|||
*/
|
||||
@Override
|
||||
public BigDecimal gameBalanceExchange(GameBalanceExchange gameBalanceExchange) {
|
||||
// 获取平台接口密钥
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(gameBalanceExchange.getPlatformCode())
|
||||
// .systemCurrency(gameBalanceExchange.getCurrencyCode()).build());
|
||||
|
||||
// 检查平台密钥是否存在,否则抛出异常
|
||||
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
|
||||
TenantQuotaExchange tenantQuotaExchange = tenantQuotaExchangeService.getTenantQuotaExchange(Constants.USDT, gameBalanceExchange.getCurrencyCode());
|
||||
ApiException.notNull(tenantQuotaExchange, ErrorCode.CURRENCY_EXCHANGE.getCode());
|
||||
|
|
|
|||
|
|
@ -66,9 +66,9 @@ public interface IGamesService {
|
|||
* 汇兑转移状态确认
|
||||
*
|
||||
* @param exchangeTransferMoneyRequestDTO 兑换转账请求dto
|
||||
* @return {@link Boolean }
|
||||
* @return {@link ExchangeTransferStatusResponseDTO }
|
||||
*/
|
||||
Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO);
|
||||
ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO);
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.ff.game.api.ae.dto;
|
|||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
||||
/**
|
||||
* aeexchange传输状态响应
|
||||
|
|
@ -32,13 +34,13 @@ public class AEExchangeTransferStatusResponse {
|
|||
* 当前余额
|
||||
*/
|
||||
@JsonProperty("balance")
|
||||
private double balance;
|
||||
private BigDecimal balance;
|
||||
|
||||
/**
|
||||
* 转账金额
|
||||
*/
|
||||
@JsonProperty("transferAmount")
|
||||
private double transferAmount;
|
||||
private BigDecimal transferAmount;
|
||||
|
||||
/**
|
||||
* 转账类型(如:DEPOSIT 或 WITHDRAW)
|
||||
|
|
|
|||
|
|
@ -84,15 +84,6 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
*/
|
||||
private static final Long GAME_ID = 1904452832756013817L;
|
||||
|
||||
/**
|
||||
* 平台ID
|
||||
*/
|
||||
private static final Long PLATFORM_ID = 1904411420257108325L;
|
||||
|
||||
/**
|
||||
* 游戏名称id
|
||||
*/
|
||||
private static final Long GAME_NAME_ID = 1904452833756002317L;
|
||||
|
||||
/**
|
||||
* 获得就是成功
|
||||
|
|
@ -202,18 +193,6 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
@Override
|
||||
public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||
// GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID);
|
||||
//没有此平台就新增一个平台
|
||||
// if (ObjectUtils.isEmpty(gamePlatform)) {
|
||||
// gamePlatform = new GamePlatform();
|
||||
// gamePlatform.setId(PLATFORM_ID);
|
||||
// gamePlatform.setPlatformCode(GamePlatforms.AE.getInfo());
|
||||
// gamePlatform.setPlatformType(PlatformType.GAME_HALL.getCode());
|
||||
// gamePlatform.setPlatformName(GamePlatforms.AE.getInfo() + PlatformType.GAME_HALL.getName());
|
||||
// gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
// gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
// gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
// }
|
||||
Platform platform = gamesBaseRequestDTO.getVendor();
|
||||
Game game = gameService.selectGameById(GAME_ID);
|
||||
//不存在这个游戏
|
||||
|
|
@ -221,7 +200,6 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
game = new Game();
|
||||
game.setId(GAME_ID);
|
||||
game.setSortNo(gameService.selectMaxSortNo(PlatformType.GAME_HALL.getCode(), GamePlatforms.AE.getCode()) + 1);
|
||||
//game.setPlatformId(gamePlatform.getId());
|
||||
game.setPlatformCode(platform.getPlatformCode());
|
||||
game.setPlatformType(PlatformType.GAME_HALL.getCode());
|
||||
game.setGameCode("1");
|
||||
|
|
@ -232,20 +210,10 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
nameInfo.setLang("zh-CN");
|
||||
nameInfo.setName("AE大厅");
|
||||
game.setNameInfo(Collections.singletonList(nameInfo));
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.AE.getCode(), 1));
|
||||
gameService.insertGame(game);
|
||||
}
|
||||
/*GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID);
|
||||
if (ObjectUtils.isEmpty(gameName)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.id(GAME_NAME_ID)
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
|
||||
return CacheConstants.XK_GAMES;
|
||||
return CacheConstants.AE_GAMES;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -258,10 +226,7 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesAEServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.AE.getInfo())
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .build());
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.AE.getCode() + IdUtils.simpleUUID();
|
||||
|
|
@ -287,6 +252,12 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.AE.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
Map<String, Object> params = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
AETransactionResponse deposit = null;
|
||||
try {
|
||||
|
|
@ -303,27 +274,30 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
params.put("withdrawType", 1);
|
||||
deposit = AEClient.withdraw(params);
|
||||
}
|
||||
} finally {
|
||||
}finally {
|
||||
BigDecimal coinBefore;
|
||||
if (TransferType.GAMES.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) {
|
||||
coinBefore = NumberUtil.sub(deposit.getCurrentBalance(), deposit.getAmount());
|
||||
} else {
|
||||
coinBefore = NumberUtil.add(deposit.getCurrentBalance(), deposit.getAmount());
|
||||
}
|
||||
//判断是否转移成功
|
||||
if ("0000".equals(deposit.getStatus())) {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.IN_PROGRESS.getCode());
|
||||
}
|
||||
//更新数据
|
||||
exchangeMoney.setBalance(deposit.getAmount());
|
||||
exchangeMoney.setCoinBefore(coinBefore);
|
||||
exchangeMoney.setCoinAfter(deposit.getCurrentBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
//判断是否转移成功
|
||||
if ("0000".equals(deposit.getStatus())) {
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue());
|
||||
} else {
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
}
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -334,10 +308,10 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
* 汇兑转移状态
|
||||
*
|
||||
* @param exchangeTransferMoneyRequestDTO 兑换转账请求dto
|
||||
* @return {@link Boolean }
|
||||
* @return {@link ExchangeTransferStatusResponseDTO }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesAEServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
Map<String, Object> paramsMap = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
|
|
@ -353,30 +327,22 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
GameExchangeMoney exchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(exchangeTransferMoneyRequestDTO.getGameExchangeMoneyId());
|
||||
|
||||
//如果失败扣除租户之前被扣额度
|
||||
if (status.equals(StatusType.FAILURE.getValue())) {
|
||||
Member member = memberService.selectMemberById(exchangeMoney.getMemberId());
|
||||
tenantGameQuotaService.gameBalanceExchange(GameBalanceExchange.builder()
|
||||
.platformCode(exchangeMoney.getPlatformCode())
|
||||
.sourceId(exchangeMoney.getOrderId())
|
||||
.currencyCode(exchangeMoney.getCurrencyCode())
|
||||
.transferType(TransferType.ALL.getCode())
|
||||
.amount(exchangeMoney.getBalance())
|
||||
.account(member.getMemberAccount())
|
||||
.tenantKey(exchangeMoney.getTenantKey())
|
||||
.currency(exchangeTransferMoneyRequestDTO.getCurrency())
|
||||
.systemCurrency(exchangeTransferMoneyRequestDTO.getSystemCurrency())
|
||||
.agentKey(exchangeTransferMoneyRequestDTO.getAgentKey())
|
||||
.agentId(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
.build());
|
||||
//更新
|
||||
BigDecimal coinBefore;
|
||||
if (TransferType.GAMES.getCode().equals(exchangeMoney.getExchangeType())) {
|
||||
coinBefore = NumberUtil.sub(exchangeTransferStatusResponse.getBalance(), exchangeTransferStatusResponse.getTransferAmount());
|
||||
} else {
|
||||
coinBefore = NumberUtil.add(exchangeTransferStatusResponse.getBalance(), exchangeTransferStatusResponse.getTransferAmount());
|
||||
}
|
||||
exchangeMoney.setStatus(status);
|
||||
exchangeMoney.setUpdateBy(Constants.SYSTEM);
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
return Boolean.TRUE;
|
||||
|
||||
return ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.balance(exchangeTransferStatusResponse.getTransferAmount())
|
||||
.coinBefore(coinBefore)
|
||||
.coinAfter(exchangeTransferStatusResponse.getBalance())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -409,6 +375,7 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
this.batchInsert(aeBetRecordResponse, betRecordByTimeDTO);
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
redisCache.deleteObject(CacheConstants.AE_TIME_FROM);
|
||||
log.error("GamesAEServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", aeBetRecordResponse.getStatus(), aeBetRecordResponse.getDesc());
|
||||
throw new BaseException(aeBetRecordResponse.getDesc());
|
||||
}
|
||||
|
|
@ -425,9 +392,7 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
log.info("GamesAEServiceImpl [getBetRecordByHistoryTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
Map<String, Object> params = this.getKey(betRecordByTimeDTO);
|
||||
|
||||
long startTimeLong = DateUtils.addOrSubtractMinutes(betRecordByTimeDTO.getStartTime(), -40);
|
||||
String startTime = DateUtils.convertTimestampToFormattedDate(startTimeLong, DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00";
|
||||
String startTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getStartTime(), DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00";
|
||||
String endTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00";
|
||||
|
||||
|
||||
|
|
@ -539,7 +504,7 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
*
|
||||
* @param aeBetRecordResponse ae下注记录响应dto
|
||||
*/
|
||||
private void batchInsert(AEBetRecordResponse aeBetRecordResponse, BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
private synchronized void batchInsert(AEBetRecordResponse aeBetRecordResponse, BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
List<String> wagersIds = new ArrayList<>();
|
||||
//数据组装
|
||||
|
|
@ -586,10 +551,6 @@ public class GamesAEServiceImpl implements IGamesService {
|
|||
//转化类
|
||||
AEBetRecordResponse.Transaction resultBean = (AEBetRecordResponse.Transaction) gamesDataBuildDTO.getData();
|
||||
|
||||
/*GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
.platformCode(GamePlatforms.AE.getInfo())
|
||||
.currency(resultBean.getCurrency())
|
||||
.build());*/
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getUserId());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
|
|
|
|||
|
|
@ -55,6 +55,16 @@ public interface DGClient {
|
|||
@Post(url = "/v2/api/transfer")
|
||||
DGTransactionResponseDTO exchangeTransferByAgentId(@JSONBody Map<String, Object> params, @Header Map<String, Object> header);
|
||||
|
||||
|
||||
/**
|
||||
* 汇兑转移状态
|
||||
*
|
||||
* @param params 参数
|
||||
* @param header 头球
|
||||
* @return {@link DGTransactionResponseDTO }
|
||||
*/
|
||||
@Post(url = "/v2/api/checkTransfer")
|
||||
DGTransactionResponseDTO exchangeTransferStatus(@JSONBody Map<String, Object> params, @Header Map<String, Object> header);
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
|
|
|
|||
|
|
@ -8,11 +8,13 @@ import com.ff.base.enums.*;
|
|||
import com.ff.base.exception.base.ApiException;
|
||||
import com.ff.base.exception.base.BaseException;
|
||||
import com.ff.base.utils.DateUtils;
|
||||
import com.ff.base.utils.SleepUtil;
|
||||
import com.ff.base.utils.StringUtils;
|
||||
import com.ff.base.utils.sign.Md5Utils;
|
||||
import com.ff.base.utils.uuid.IdUtils;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.ae.dto.AEExchangeTransferStatusResponse;
|
||||
import com.ff.game.api.dg.client.DGClient;
|
||||
import com.ff.game.api.dg.dto.*;
|
||||
import com.ff.game.api.request.*;
|
||||
|
|
@ -69,15 +71,6 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
*/
|
||||
private static final Long GAME_ID = 1904452832756003817L;
|
||||
|
||||
/**
|
||||
* 平台ID
|
||||
*/
|
||||
private static final Long PLATFORM_ID = 1904411420157108325L;
|
||||
|
||||
/**
|
||||
* 游戏名称id
|
||||
*/
|
||||
private static final Long GAME_NAME_ID = 1904452832756002317L;
|
||||
|
||||
/**
|
||||
* 获得就是成功
|
||||
|
|
@ -195,25 +188,13 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
@Override
|
||||
public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||
//GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID);
|
||||
//没有此平台就新增一个平台
|
||||
/*if (ObjectUtils.isEmpty(gamePlatform)) {
|
||||
gamePlatform = new GamePlatform();
|
||||
gamePlatform.setId(PLATFORM_ID);
|
||||
gamePlatform.setPlatformCode(GamePlatforms.DG.getInfo());
|
||||
gamePlatform.setPlatformType(PlatformType.CARD_GAME.getCode());
|
||||
gamePlatform.setPlatformName(GamePlatforms.DG.getInfo() + PlatformType.CARD_GAME.getName());
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
}*/
|
||||
|
||||
Game game = gameService.selectGameById(GAME_ID);
|
||||
//不存在这个游戏
|
||||
if (ObjectUtils.isEmpty(game)) {
|
||||
game = new Game();
|
||||
game.setId(GAME_ID);
|
||||
game.setSortNo(1);
|
||||
//game.setPlatformId(gamePlatform.getId());
|
||||
game.setPlatformCode(GamePlatforms.DG.getCode());
|
||||
game.setPlatformType(PlatformType.GAME_HALL.getCode());
|
||||
game.setGameCode("1");
|
||||
|
|
@ -221,18 +202,9 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
game.setGameName("真人棋牌");
|
||||
game.setCreateBy(Constants.SYSTEM);
|
||||
game.setNameInfo(Collections.singletonList(new NameInfo("真人棋牌", "zh-CN")));
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.DG.getCode(), 1));
|
||||
gameService.insertGame(game);
|
||||
}
|
||||
/*GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID);
|
||||
if (ObjectUtils.isEmpty(gameName)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.id(GAME_NAME_ID)
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
return CacheConstants.DG_GAMES;
|
||||
}
|
||||
|
||||
|
|
@ -246,10 +218,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesDGServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.DG.getInfo())
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .build());
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.DG.getInfo() + IdUtils.simpleUUID();
|
||||
|
|
@ -275,7 +244,10 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.DG.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
BigDecimal amount = exchangeTransferMoneyRequestDTO.getAmount();
|
||||
if (TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) {
|
||||
// 获取第三方钱包余额
|
||||
|
|
@ -306,9 +278,13 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
exchangeMoney.setCoinAfter(dgTransactionResponseDTO.getBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesDGServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{},错误信息{}", dgTransactionResponseDTO.getCodeId(), dgTransactionResponseDTO.getMsg());
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
|
|
@ -320,11 +296,31 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
* 汇兑转移状态
|
||||
*
|
||||
* @param exchangeTransferMoneyRequestDTO 兑换转账请求dto
|
||||
* @return {@link Boolean }
|
||||
* @return {@link ExchangeTransferStatusResponseDTO }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
return Boolean.TRUE;
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesDGServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("serial", exchangeTransferMoneyRequestDTO.getOrderId());
|
||||
|
||||
Map<String, Object> headerMap = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
|
||||
DGTransactionResponseDTO dgTransactionResponseDTO = DGClient.exchangeTransferStatus(params, headerMap);
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.getIsSuccess(dgTransactionResponseDTO.getCodeId())) {
|
||||
status = StatusType.SUCCESS.getValue();
|
||||
} else {
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
|
||||
return ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.balance(dgTransactionResponseDTO.getAmount().abs())
|
||||
.coinBefore(NumberUtil.sub(dgTransactionResponseDTO.getBalance(), dgTransactionResponseDTO.getAmount().abs()).abs())
|
||||
.coinAfter(dgTransactionResponseDTO.getBalance())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -336,6 +332,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
SleepUtil.sleep(50000);
|
||||
//请求参数
|
||||
log.info("GamesDGServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
Map<String, Object> key = this.getKey(betRecordByTimeDTO);
|
||||
|
|
@ -360,7 +357,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
return null;
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -89,6 +89,11 @@ public interface FCClient {
|
|||
ApiCFBalanceTransferResponseDTO exchangeTransferByAgentId(@JSONBody Map<String, Object> parameters);
|
||||
|
||||
|
||||
@Post(url = "/GetSingleBill")
|
||||
ApiCFBalanceTransferStatusResponseDTO exchangeTransferStatus(@JSONBody Map<String, Object> parameters);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,96 @@
|
|||
package com.ff.game.api.fc.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* api cfbalance传输状态响应dto
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Data
|
||||
public class ApiCFBalanceTransferStatusResponseDTO {
|
||||
|
||||
/**
|
||||
* 请求结果代码
|
||||
* 0 表示成功
|
||||
*/
|
||||
@JsonProperty("Result")
|
||||
private int result;
|
||||
|
||||
/**
|
||||
* 银行 ID
|
||||
*/
|
||||
@JsonProperty("bankID")
|
||||
private int bankId;
|
||||
|
||||
/**
|
||||
* 交易 ID
|
||||
*/
|
||||
@JsonProperty("trsID")
|
||||
private String trsId;
|
||||
|
||||
/**
|
||||
* 操作类型(如存款、取款等)
|
||||
*/
|
||||
@JsonProperty("action")
|
||||
private String action;
|
||||
|
||||
/**
|
||||
* 交易的点数
|
||||
*/
|
||||
@JsonProperty("points")
|
||||
private BigDecimal points;
|
||||
|
||||
/**
|
||||
* 用户账号
|
||||
*/
|
||||
@JsonProperty("account")
|
||||
private String account;
|
||||
|
||||
/**
|
||||
* 交易状态
|
||||
* 1: 成功,其他值表示失败
|
||||
*/
|
||||
@JsonProperty("status")
|
||||
private int status;
|
||||
|
||||
/**
|
||||
* 交易前点数
|
||||
*/
|
||||
@JsonProperty("beforepoints")
|
||||
private BigDecimal beforePoints;
|
||||
|
||||
/**
|
||||
* 交易后点数
|
||||
*/
|
||||
@JsonProperty("afterpoints")
|
||||
private BigDecimal afterPoints;
|
||||
|
||||
/**
|
||||
* 创建日期
|
||||
*/
|
||||
@JsonProperty("cdate")
|
||||
private String createDate;
|
||||
|
||||
/**
|
||||
* 变更日期
|
||||
*/
|
||||
@JsonProperty("bdate")
|
||||
private String updateDate;
|
||||
|
||||
/**
|
||||
* 事件 ID
|
||||
*/
|
||||
@JsonProperty("eventID")
|
||||
private String eventId;
|
||||
|
||||
/**
|
||||
* 货币类型
|
||||
*/
|
||||
@JsonProperty("currency")
|
||||
private String currency;
|
||||
}
|
||||
|
|
@ -14,6 +14,7 @@ import com.ff.base.utils.StringUtils;
|
|||
import com.ff.base.utils.sign.Md5Utils;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.dg.dto.DGTransactionResponseDTO;
|
||||
import com.ff.game.api.fc.client.FCClient;
|
||||
import com.ff.game.api.fc.dto.*;
|
||||
import com.ff.game.api.request.*;
|
||||
|
|
@ -258,7 +259,6 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
|
||||
ApiFCGameListResponseDTO.GameDetails gameDetails = integerGameDetailsMap.get(gameIdKey);
|
||||
Game game = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
.platformCode(GamePlatforms.FC.getCode())
|
||||
.gameCode(gameIdKey)
|
||||
.build();
|
||||
|
|
@ -269,41 +269,23 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
game.setGameSourceType(String.valueOf(PlatformType.ELECTRONIC.getCode()));
|
||||
game.setFreespin(Boolean.FALSE);
|
||||
game.setDemoStatus(Boolean.TRUE);
|
||||
game.setPlatformCode(GamePlatforms.FC.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
|
||||
game.setSortNo(gameService.selectMaxSortNo(platformType, GamePlatforms.FC.getCode()) + 1);
|
||||
game.setGameName(gameDetails.getGameNameOfChinese());
|
||||
game.setCreateBy(Constants.SYSTEM);
|
||||
|
||||
game.setPlatformCode(GamePlatforms.FC.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(NameInfo.builder().lang("zh-CN").name(gameDetails.getGameNameOfChinese()).build());
|
||||
nameInfos.add(NameInfo.builder().lang("en-US").name(gameDetails.getGameNameOfEnglish()).build());
|
||||
game.setNameInfo(nameInfos);
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.FC.getCode(), gameIdKey));
|
||||
gameService.insertGame(game);
|
||||
} else {
|
||||
game = games.get(0);
|
||||
|
||||
}
|
||||
gameDetails.setSystemGameId(game.getId());
|
||||
|
||||
/*List<GameName> gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(gameDetails.getGameNameOfChinese()).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(gameDetails.getGameNameOfChinese())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}
|
||||
gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(gameDetails.getGameNameOfEnglish()).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(gameDetails.getGameNameOfEnglish())
|
||||
.langCode("en-US")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
|
||||
gameDetails.setGameId(gameIdKey);
|
||||
gameDetailsList.add(gameDetails);
|
||||
}
|
||||
|
|
@ -330,11 +312,6 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesFCServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.FC.getInfo())
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .currency(exchangeTransferMoneyRequestDTO.getCurrency())
|
||||
// .build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.FC.getInfo(), 30);
|
||||
|
|
@ -360,6 +337,11 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.FC.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
//获取余额
|
||||
String type = TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType()) ? FCTransferType.TRANSFER_OUT_ALL.getValue() : FCTransferType.TRANSFER_OUT.getValue();
|
||||
|
|
@ -398,10 +380,13 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
exchangeMoney.setCoinAfter(transferResponseDTO.getAfterPoint());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue());
|
||||
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesFCServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", transferResponseDTO.getResult());
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
|
|
@ -412,11 +397,30 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
* 汇兑转移状态
|
||||
*
|
||||
* @param exchangeTransferMoneyRequestDTO 兑换转账请求dto
|
||||
* @return {@link Boolean }
|
||||
* @return {@link ExchangeTransferStatusResponseDTO }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesDGServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
Map<String, Object> paramsMap = new LinkedHashMap<>();
|
||||
paramsMap.put("TrsID", exchangeTransferMoneyRequestDTO.getOrderId());
|
||||
paramsMap.putAll(getKeyMap(paramsMap, exchangeTransferMoneyRequestDTO.getAgentKey(), exchangeTransferMoneyRequestDTO.getCurrency(), exchangeTransferMoneyRequestDTO.getAgentId()));
|
||||
|
||||
ApiCFBalanceTransferStatusResponseDTO apiCFBalanceTransferStatusResponseDTO = FCClient.exchangeTransferStatus(paramsMap);
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.getIsSuccess(apiCFBalanceTransferStatusResponseDTO.getResult())) {
|
||||
status = StatusType.SUCCESS.getValue();
|
||||
} else {
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
|
||||
return ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.balance(apiCFBalanceTransferStatusResponseDTO.getPoints())
|
||||
.coinBefore(apiCFBalanceTransferStatusResponseDTO.getBeforePoints())
|
||||
.coinAfter(apiCFBalanceTransferStatusResponseDTO.getAfterPoints())
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -430,37 +434,29 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
@Override
|
||||
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
|
||||
// List<GameSecretKeyCurrencyDTO> gameSecretKeyCurrencies = gameSecretKeyCurrencyService
|
||||
// .findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.FC.getInfo())
|
||||
// .build());
|
||||
|
||||
Platform platform = betRecordByTimeDTO.getVendor();
|
||||
//for (KeyInfo keyInfo : platform.getKeyInfo()) {
|
||||
// for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) {
|
||||
String startTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getStartTime(), "America/New_York", DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
String endTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getEndTime(), "America/New_York", DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
Map<String, Object> paramsMap = new HashMap<>();
|
||||
paramsMap.put("StartDate", startTime);
|
||||
paramsMap.put("EndDate", endTime);
|
||||
KeyInfo keyInfo = betRecordByTimeDTO.getKeyInfo();
|
||||
String currency = keyInfo.getCurrency();
|
||||
String targetCurrency = platform.getCurrencyInfo().get(currency);
|
||||
if (StringUtils.isEmpty(targetCurrency)) {
|
||||
log.error("获取不到币种,platformCode:{},{}->{}", platform.getPlatformCode(), currency, targetCurrency);
|
||||
//continue;
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
String startTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getStartTime(), "America/New_York", DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
String endTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getEndTime(), "America/New_York", DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
Map<String, Object> paramsMap = new HashMap<>();
|
||||
paramsMap.put("StartDate", startTime);
|
||||
paramsMap.put("EndDate", endTime);
|
||||
KeyInfo keyInfo = betRecordByTimeDTO.getKeyInfo();
|
||||
String currency = keyInfo.getCurrency();
|
||||
String targetCurrency = platform.getCurrencyInfo().get(currency);
|
||||
if (StringUtils.isEmpty(targetCurrency)) {
|
||||
log.error("获取不到币种,platformCode:{},{}->{}", platform.getPlatformCode(), currency, targetCurrency);
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
paramsMap.putAll(getKeyMap(paramsMap, betRecordByTimeDTO.getAgentKey(), keyInfo.getCurrency(), betRecordByTimeDTO.getAgentId()));
|
||||
paramsMap.putAll(getKeyMap(paramsMap, betRecordByTimeDTO.getAgentKey(), keyInfo.getCurrency(), betRecordByTimeDTO.getAgentId()));
|
||||
|
||||
ApiFCBetRecordResponseDTO betRecordByTime = FCClient.getBetRecordByTime(paramsMap);
|
||||
ApiFCBetRecordResponseDTO betRecordByTime = FCClient.getBetRecordByTime(paramsMap);
|
||||
|
||||
if (this.getIsSuccess(betRecordByTime.getResult())) {
|
||||
//数据组装
|
||||
this.batchInsert(betRecordByTime, currency, targetCurrency);
|
||||
}
|
||||
//}
|
||||
if (this.getIsSuccess(betRecordByTime.getResult())) {
|
||||
//数据组装
|
||||
this.batchInsert(betRecordByTime, currency, targetCurrency);
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -476,7 +472,7 @@ public class GamesFCServiceImpl implements IGamesService {
|
|||
Platform platform = betRecordByTimeDTO.getVendor();
|
||||
for (KeyInfo keyInfo : platform.getKeyInfo()) {
|
||||
|
||||
// for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) {
|
||||
|
||||
//必须两个小时之前的数据
|
||||
long startTimeLong = DateUtils.addOrSubtractMinutes(betRecordByTimeDTO.getStartTime(), -120);
|
||||
long endTimeLong = DateUtils.addOrSubtractMinutes(betRecordByTimeDTO.getEndTime(), -120);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public class MyJILIAddressSource implements AddressSource {
|
|||
|
||||
@Override
|
||||
public ForestAddress getAddress(ForestRequest request) {
|
||||
String apiBaseUrl = platformService.get(GamePlatforms.FC.getCode())
|
||||
String apiBaseUrl = platformService.get(GamePlatforms.JILI.getCode())
|
||||
.getUrlInfo().getUrl();
|
||||
return new ForestAddress("https", apiBaseUrl, 443, "api1");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,22 @@ public interface JILIClient {
|
|||
)
|
||||
JILIExchangeMoneyResponseDTO exchangeTransferByAgentId(@Var("parameters") String parameters,@Body("AgentId") String agentId);
|
||||
|
||||
/**
|
||||
* 按交易id检查转账
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param agentId 代理id
|
||||
* @return {@link JILITransferStatusResponseDTO }
|
||||
*/
|
||||
@Post(
|
||||
url = "/CheckTransferByTransactionId?${parameters}",
|
||||
headers = {
|
||||
"Content-type: application/x-www-form-urlencoded"
|
||||
}
|
||||
)
|
||||
JILITransferStatusResponseDTO checkTransferByTransactionId(@Var("parameters") String parameters,@Body("AgentId") String agentId);
|
||||
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
package com.ff.game.api.jili.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* jilitransfer状态响应数据
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Data
|
||||
public class JILITransferStatusResponseDTO {
|
||||
|
||||
|
||||
/**
|
||||
* 错误代码,0 表示成功
|
||||
*/
|
||||
@JsonProperty("ErrorCode")
|
||||
private int errorCode;
|
||||
|
||||
/**
|
||||
* 错误或状态信息
|
||||
*/
|
||||
@JsonProperty("Message")
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 转账相关数据
|
||||
*/
|
||||
@JsonProperty("Data")
|
||||
private TransferData data;
|
||||
|
||||
/**
|
||||
* 转账详细数据结构
|
||||
*/
|
||||
@Data
|
||||
public static class TransferData {
|
||||
|
||||
/**
|
||||
* 用户账户名
|
||||
*/
|
||||
@JsonProperty("Account")
|
||||
private String account;
|
||||
|
||||
/**
|
||||
* 转账交易 ID
|
||||
*/
|
||||
@JsonProperty("TransactionId")
|
||||
private String transactionId;
|
||||
|
||||
/**
|
||||
* 转账时间,格式为 ISO 8601,如:2023-03-13T01:13:59-04:00
|
||||
*/
|
||||
@JsonProperty("TransferTime")
|
||||
private String transferTime;
|
||||
|
||||
/**
|
||||
* 转账金额
|
||||
*/
|
||||
@JsonProperty("Amount")
|
||||
private BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 转账状态,1 表示成功,其他值可表示失败等状态
|
||||
*/
|
||||
@JsonProperty("Status")
|
||||
private int status;
|
||||
|
||||
/**
|
||||
* 转账类型,例如 1 表示入账,2 表示出账(视接口定义而定)
|
||||
*/
|
||||
@JsonProperty("TransferType")
|
||||
private int transferType;
|
||||
}
|
||||
}
|
||||
|
|
@ -15,6 +15,7 @@ import com.ff.base.utils.sign.Md5Utils;
|
|||
import com.ff.base.utils.uuid.IdUtils;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.fc.dto.ApiCFBalanceTransferStatusResponseDTO;
|
||||
import com.ff.game.api.jili.client.JILIClient;
|
||||
import com.ff.game.api.jili.dto.*;
|
||||
import com.ff.game.api.request.*;
|
||||
|
|
@ -226,23 +227,8 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
if (this.getIsSuccess(jiliGames.getErrorCode())) {
|
||||
|
||||
for (JILIGamesDataDTO gamesDataDTO : jiliGames.getData()) {
|
||||
/*GamePlatform gamePlatform = GamePlatform.builder()
|
||||
.platformType(JILIGameType.findSystemByCode(gamesDataDTO.getGameCategoryId()))
|
||||
.platformCode(GamePlatforms.JILI.getInfo())
|
||||
.build();
|
||||
List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.JILI.getInfo() + JILIGameType.findInfoByCode(gamesDataDTO.getGameCategoryId()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
Integer platformType = JILIGameType.findSystemByCode(gamesDataDTO.getGameCategoryId());
|
||||
Game game = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
.platformCode(GamePlatforms.JILI.getCode())
|
||||
.platformType(platformType)
|
||||
.gameCode(String.valueOf(gamesDataDTO.getGameId()))
|
||||
|
|
@ -257,7 +243,7 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
game.setCreateBy(Constants.SYSTEM);
|
||||
game.setPlatformType(platformType);
|
||||
game.setPlatformCode(GamePlatforms.JILI.getCode());
|
||||
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.JILI.getCode(), gamesDataDTO.getGameId()));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getName().getZhCN(), "zh-CN"));
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getName().getEnUS(), "en-US"));
|
||||
|
|
@ -270,27 +256,6 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
gamesDataDTO.setSystemGameId(game.getId());
|
||||
|
||||
|
||||
/*List<GameName> gameNames = gameNameService.selectGameNameList(GameName
|
||||
.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName()).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(gamesDataDTO.getName().getEnUS())
|
||||
.langCode("en-US")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
redisCache.deleteObject(CacheConstants.JILI_GAMES);
|
||||
|
|
@ -313,9 +278,6 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
@Override
|
||||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .currency(exchangeTransferMoneyRequestDTO.getCurrency()).build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.JILI.getInfo() + IdUtils.simpleUUID();
|
||||
|
|
@ -343,8 +305,12 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.JILI.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
//接口限制限制50字符
|
||||
exchangeMoney.setTransactionId(transactionId);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
String query = "Account=" + exchangeTransferMoneyRequestDTO.getAccount()
|
||||
+ "&TransactionId=" + exchangeMoney.getTransactionId()
|
||||
+ "&Amount=" + exchangeTransferMoneyRequestDTO.getAmount()
|
||||
|
|
@ -371,10 +337,14 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
exchangeMoney.setCoinAfter(exchangeMoneyResponseData.getCoinAfter());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoneyResponseData.getCurrencyBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoneyResponseData.getCurrencyAfter());
|
||||
exchangeMoney.setStatus(exchangeMoneyResponseData.getStatus());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
throw new BaseException(exchangeMoneyResponse.getMessage());
|
||||
}
|
||||
|
||||
|
|
@ -389,8 +359,32 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
return Boolean.TRUE;
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesDGServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
String query = "TransactionId=" + exchangeTransferMoneyRequestDTO.getOrderId()
|
||||
+ "&AgentId=" + exchangeTransferMoneyRequestDTO.getAgentId();
|
||||
exchangeTransferMoneyRequestDTO.setQuery(query);
|
||||
|
||||
String key = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
|
||||
JILITransferStatusResponseDTO jiliTransferStatusResponseDTO = jiliClient.checkTransferByTransactionId(query + "&Key=" + key, exchangeTransferMoneyRequestDTO.getAgentId());
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.getIsSuccess(jiliTransferStatusResponseDTO.getErrorCode())) {
|
||||
status = StatusType.SUCCESS.getValue();
|
||||
} else {
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
JILITransferStatusResponseDTO.TransferData data = jiliTransferStatusResponseDTO.getData();
|
||||
ExchangeTransferStatusResponseDTO statusResponseDTO = ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.build();
|
||||
if (!ObjectUtils.isEmpty(data)) {
|
||||
|
||||
statusResponseDTO.setBalance(data.getAmount());
|
||||
}
|
||||
|
||||
return statusResponseDTO;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -452,7 +446,45 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
return null;
|
||||
String startTime = DateUtils.formatDateToGMT4(new Date(betRecordByTimeDTO.getStartTime()));
|
||||
String endTime = DateUtils.formatDateToGMT4(new Date(betRecordByTimeDTO.getEndTime()));
|
||||
|
||||
//请求参数
|
||||
String query = "StartTime=" + startTime + "&EndTime=" + endTime + "&Page=" + betRecordByTimeDTO.getPage() + "&PageLimit=" + betRecordByTimeDTO.getPageLimit() + "&AgentId=" + betRecordByTimeDTO.getAgentId();
|
||||
log.info("GamesJILIServiceImpl [getBetRecordByHistoryTime] 请求参数 {}", query);
|
||||
betRecordByTimeDTO.setQuery(query);
|
||||
//获取key
|
||||
String key = this.getKey(betRecordByTimeDTO);
|
||||
JILIBetRecordResponseDTO betRecordJILIResponse = jiliClient.getBetRecordByTime(query + "&Key=" + key, betRecordByTimeDTO.getAgentId());
|
||||
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) {
|
||||
|
||||
//数据插入
|
||||
this.batchInsert(betRecordJILIResponse, betRecordByTimeDTO);
|
||||
JILIBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData();
|
||||
//获取下一页数据
|
||||
while (dataBean.getPagination().getCurrentPage() != dataBean.getPagination().getTotalPages() && dataBean.getPagination().getTotalPages() > 0) {
|
||||
betRecordByTimeDTO.setPage(dataBean.getPagination().getCurrentPage() + 1);
|
||||
//请求参数
|
||||
query = "StartTime=" + startTime + "&EndTime=" + endTime + "&Page=" + betRecordByTimeDTO.getPage() + "&PageLimit=" + betRecordByTimeDTO.getPageLimit() + "&AgentId=" + betRecordByTimeDTO.getAgentId();
|
||||
log.info("GamesJILIServiceImpl [getBetRecordByHistoryTime] 请求参数 {}", query);
|
||||
betRecordByTimeDTO.setQuery(query);
|
||||
key = this.getKey(betRecordByTimeDTO);
|
||||
betRecordJILIResponse = jiliClient.getBetRecordByTime(query + "&Key=" + key, betRecordByTimeDTO.getAgentId());
|
||||
dataBean = betRecordJILIResponse.getData();
|
||||
if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) {
|
||||
//数据插入
|
||||
this.batchInsert(betRecordJILIResponse, betRecordByTimeDTO);
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getBetRecordByHistoryTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getErrorCode(), betRecordJILIResponse.getMessage());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getBetRecordByHistoryTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getErrorCode(), betRecordJILIResponse.getMessage());
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -467,9 +499,6 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
|
||||
String freeSpinValidity = DateUtils.formatDateToGMT4(new Date(createFreeSpinRequest.getFreeSpinValidity()));
|
||||
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .code(createFreeSpinRequest.getAgentId())
|
||||
// .currency(createFreeSpinRequest.getCurrency()).build());
|
||||
|
||||
List<Long> gameIds = createFreeSpinRequest.getGameIds();
|
||||
GameUniqueDTO gameUniqueDTO = new GameUniqueDTO();
|
||||
|
|
@ -678,7 +707,6 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
//请求参数
|
||||
String query = "ReferenceId=" + cancelFreeSpinRequestDTO.getReferenceId()
|
||||
+ "&AgentId=" + cancelFreeSpinRequestDTO.getAgentId();
|
||||
;
|
||||
log.info("GamesJILIServiceImpl [cancelFreeSpin] 请求参数 {}", query);
|
||||
cancelFreeSpinRequestDTO.setQuery(query);
|
||||
//获取key
|
||||
|
|
@ -717,7 +745,7 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
* @param betRecordJILIResponse 投注记录jiliresponse
|
||||
* @return {@link Integer }
|
||||
*/
|
||||
private void batchInsert(JILIBetRecordResponseDTO betRecordJILIResponse, BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
private synchronized void batchInsert(JILIBetRecordResponseDTO betRecordJILIResponse, BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
List<String> wagersIds = new ArrayList<>();
|
||||
//数据组装
|
||||
|
|
@ -761,10 +789,6 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
|
||||
//转化类
|
||||
JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO = (JILIBetRecordDataResponseDTO) gamesDataBuildDTO.getData();
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .code(jiliBetRecordDataResponseDTO.getAgentId())
|
||||
// .platformCode(GamePlatforms.JILI.getInfo()).build());
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(jiliBetRecordDataResponseDTO.getAccount());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
|
|
|
|||
|
|
@ -2,13 +2,11 @@ package com.ff.game.api.km.client;
|
|||
|
||||
|
||||
import com.dtflys.forest.annotation.*;
|
||||
import com.ff.game.api.dg.dto.DGBetRecordResponseDTO;
|
||||
import com.ff.game.api.dg.dto.DGResponse;
|
||||
import com.ff.game.api.dg.dto.DGUserListResponseDTO;
|
||||
import com.ff.game.api.fc.dto.ApiCFBalanceTransferStatusResponseDTO;
|
||||
import com.ff.game.api.km.address.MyKMAddressSource;
|
||||
import com.ff.game.api.km.dto.*;
|
||||
import com.ff.game.api.km.success.MyKMSuccessCondition;
|
||||
import com.ff.game.api.xk.dto.XKBetRecordResponseDTO;
|
||||
import com.ff.game.api.success.MySuccessCondition;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
|
@ -19,7 +17,7 @@ import java.util.Map;
|
|||
* @date 2025/02/10
|
||||
*/
|
||||
@Address(source = MyKMAddressSource.class)
|
||||
@Success(condition = MyKMSuccessCondition.class)
|
||||
@Success(condition = MySuccessCondition.class)
|
||||
public interface KMClient {
|
||||
/**
|
||||
* 创建成员
|
||||
|
|
@ -81,6 +79,16 @@ public interface KMClient {
|
|||
@Get(url ="/v2/history/bets?{params}")
|
||||
KMBetRecordResponse getBetRecordByTime(@Var("params")String params, @Header Map<String, Object> header);
|
||||
|
||||
/**
|
||||
* 汇兑转移状态
|
||||
*
|
||||
* @param params 参数
|
||||
* @param parameters 范围
|
||||
* @return {@link KMBalanceTransferStatusResponseDTO }
|
||||
*/
|
||||
@Post(url = "/history/transfers/{params}")
|
||||
KMBalanceTransferStatusResponseDTO exchangeTransferStatus(@Var("params")String params,@JSONBody Map<String, Object> parameters);
|
||||
|
||||
|
||||
/**
|
||||
* 踢腿队员
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
package com.ff.game.api.km.dto;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* km平衡传输状态响应数据
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Data
|
||||
public class KMBalanceTransferStatusResponseDTO {
|
||||
|
||||
/**
|
||||
* 错误代码
|
||||
*/
|
||||
@JsonProperty("err")
|
||||
private Integer errorCode;
|
||||
|
||||
/**
|
||||
* 错误描述
|
||||
*/
|
||||
@JsonProperty("errdesc")
|
||||
private String errorDescription;
|
||||
|
||||
/**
|
||||
* 转账交易 ID
|
||||
*/
|
||||
@JsonProperty("txid")
|
||||
private String txid;
|
||||
|
||||
/**
|
||||
* 转账时间戳,格式为 ISO 8601,如:2017-12-12T12:11:16+08:00
|
||||
*/
|
||||
@JsonProperty("timestamp")
|
||||
private String timestamp;
|
||||
|
||||
/**
|
||||
* 用户 ID
|
||||
*/
|
||||
@JsonProperty("userid")
|
||||
private String userid;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
@JsonProperty("username")
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 玩家类型,1 代表普通玩家(具体含义根据接口文档定义)
|
||||
*/
|
||||
@JsonProperty("playertype")
|
||||
private int playertype;
|
||||
|
||||
/**
|
||||
* 转账金额
|
||||
*/
|
||||
@JsonProperty("amt")
|
||||
private BigDecimal amt;
|
||||
|
||||
/**
|
||||
* 转账后的余额
|
||||
*/
|
||||
@JsonProperty("postbal")
|
||||
private BigDecimal postbal;
|
||||
|
||||
/**
|
||||
* 货币类型,符合 ISO 4217 标准(如 THB)
|
||||
*/
|
||||
@JsonProperty("cur")
|
||||
private String cur;
|
||||
}
|
||||
|
|
@ -15,6 +15,8 @@ import com.ff.base.utils.ip.IpUtils;
|
|||
import com.ff.base.utils.uuid.IdUtils;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.fc.dto.ApiCFBalanceTransferStatusResponseDTO;
|
||||
import com.ff.game.api.jili.dto.JILITransferStatusResponseDTO;
|
||||
import com.ff.game.api.km.client.KMClient;
|
||||
import com.ff.game.api.km.dto.*;
|
||||
import com.ff.game.api.request.*;
|
||||
|
|
@ -78,21 +80,6 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
private IGameBettingDetailsService gameBettingDetailsService;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
private static final Long GAME_ID = 1904452832756003817L;
|
||||
|
||||
/**
|
||||
* 平台ID
|
||||
*/
|
||||
private static final Long PLATFORM_ID = 1904411420157108325L;
|
||||
|
||||
/**
|
||||
* 游戏名称id
|
||||
*/
|
||||
private static final Long GAME_NAME_ID = 1904452832756002317L;
|
||||
|
||||
/**
|
||||
* 获得就是成功
|
||||
*
|
||||
|
|
@ -168,11 +155,7 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) {
|
||||
log.info("GamesDGServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO);
|
||||
Map<String, Object> paramsMap = new HashMap<>();
|
||||
// Member member = memberService.selectMemberByGameAccount(memberInfoRequestDTO.getAccounts());
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.KM.getInfo())
|
||||
// .currency(member.getCurrencyCode())
|
||||
// .build());
|
||||
|
||||
|
||||
paramsMap.put("userid", memberInfoRequestDTO.getAccounts());
|
||||
paramsMap.put("cur", memberInfoRequestDTO.getCurrency());
|
||||
|
|
@ -196,11 +179,7 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
log.info("GamesKMServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin);
|
||||
String kmUserToken = redisCache.getCacheObject(CacheConstants.KM_USER_TOKEN + gamesLogin.getAccount());
|
||||
if (StringUtils.isEmpty(kmUserToken)) {
|
||||
// Member member = memberService.selectMemberByGameAccount(gamesLogin.getAccount());
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.KM.getInfo())
|
||||
// .currency(member.getCurrencyCode())
|
||||
// .build());
|
||||
|
||||
|
||||
CreateMemberRequestDTO gamesBaseRequestDTO = CreateMemberRequestDTO.builder()
|
||||
.account(gamesLogin.getAccount())
|
||||
|
|
@ -213,7 +192,6 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
}
|
||||
|
||||
String loginUrl = platformService.get(GamePlatforms.KM.getCode()).getUrlInfo().getLoginUrl();
|
||||
//String selectConfigByKey = configService.selectConfigByKey(Constants.KM_API_BASE_LOGIN_URL);
|
||||
|
||||
return loginUrl + "/gamelauncher?gpcode=" + gamesLogin.getGameType()
|
||||
+ "&gcode=" + gamesLogin.getGameId()
|
||||
|
|
@ -269,23 +247,9 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
.anyMatch(pc -> pc.getCode().equals(mobile.getCode())))
|
||||
.collect(Collectors.toList());
|
||||
for (KMGameResponse.Game game : games) {
|
||||
// GamePlatform gamePlatform = GamePlatform.builder()
|
||||
// .platformType(KMGameType.findSystemByCode(game.getProviderCode()))
|
||||
// .platformCode(GamePlatforms.KM.getCode())
|
||||
// .build();
|
||||
/*List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.KM.getInfo() + KMGameType.findInfoByCode(game.getProviderCode()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
|
||||
Integer platformType = KMGameType.findSystemByCode(game.getProviderCode());
|
||||
Game gameOne = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
.platformCode(GamePlatforms.KM.getCode())
|
||||
.platformType(platformType)
|
||||
.gameCode(game.getCode())
|
||||
|
|
@ -312,23 +276,8 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
*/
|
||||
private List<KMGameResponse.Game> gameList(KMGameResponse gameList, Integer ingress) {
|
||||
for (KMGameResponse.Game gamesDataDTO : gameList.getGames()) {
|
||||
// GamePlatform gamePlatform = GamePlatform.builder()
|
||||
// .platformType(KMGameType.findSystemByCode(gamesDataDTO.getProviderCode()))
|
||||
// .platformCode(GamePlatforms.KM.getCode())
|
||||
// .build();
|
||||
/*List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.KM.getInfo() + KMGameType.findInfoByCode(gamesDataDTO.getProviderCode()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
Integer platformType = KMGameType.findSystemByCode(gamesDataDTO.getProviderCode());
|
||||
Game game = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
.platformCode(GamePlatforms.KM.getCode())
|
||||
.platformType(platformType)
|
||||
.gameCode(gamesDataDTO.getCode())
|
||||
|
|
@ -345,6 +294,7 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
game.setIngress(ingress);
|
||||
game.setPlatformCode(GamePlatforms.KM.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.KM.getCode(), gamesDataDTO.getCode()));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getName(), "zh-CN"));
|
||||
game.setNameInfo(nameInfos);
|
||||
|
|
@ -353,16 +303,6 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
game = games.get(0);
|
||||
}
|
||||
gamesDataDTO.setSystemGameId(game.getId());
|
||||
// List<GameName> gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(game.getGameName()).build());
|
||||
// if (CollectionUtils.isEmpty(gameNames)) {
|
||||
// gameNameService.insertGameName(GameName.builder()
|
||||
// .gameId(game.getId())
|
||||
// .gameName(game.getGameName())
|
||||
// .langCode("zh-CN")
|
||||
// .createBy(Constants.SYSTEM)
|
||||
// .build());
|
||||
// }
|
||||
|
||||
}
|
||||
return gameList.getGames();
|
||||
}
|
||||
|
|
@ -377,10 +317,7 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesKMServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.KM.getInfo())
|
||||
// .currency(exchangeTransferMoneyRequestDTO.getCurrency())
|
||||
// .build());
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.KM.getInfo() + IdUtils.simpleUUID();
|
||||
|
|
@ -406,6 +343,11 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.KM.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
BigDecimal amount = exchangeTransferMoneyRequestDTO.getAmount();
|
||||
if (TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) {
|
||||
|
|
@ -443,9 +385,13 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
exchangeMoney.setCoinAfter(kmTransactionResponse.getBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesDGServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{},错误信息{}", kmTransactionResponse.getErrorCode(), kmTransactionResponse.getErrorDescription());
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
|
|
@ -460,8 +406,25 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
return Boolean.TRUE;
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesKMServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
|
||||
Map<String, Object> headerMap = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
|
||||
KMBalanceTransferStatusResponseDTO kmBalanceTransferStatusResponseDTO = KMClient.exchangeTransferStatus(exchangeTransferMoneyRequestDTO.getOrderId(), headerMap);
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (ObjectUtils.isEmpty(kmBalanceTransferStatusResponseDTO.getErrorCode()) || this.getIsSuccess(kmBalanceTransferStatusResponseDTO.getErrorCode())) {
|
||||
status = StatusType.SUCCESS.getValue();
|
||||
} else {
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
return ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.balance(kmBalanceTransferStatusResponseDTO.getAmt())
|
||||
.coinBefore(NumberUtil.sub(kmBalanceTransferStatusResponseDTO.getAmt(), kmBalanceTransferStatusResponseDTO.getPostbal()).abs())
|
||||
.coinAfter(kmBalanceTransferStatusResponseDTO.getPostbal())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -514,7 +477,35 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
return null;
|
||||
|
||||
log.info("GamesKMServiceImpl [getBetRecordByHistoryTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
Map<String, Object> key = this.getKey(betRecordByTimeDTO);
|
||||
String startTime = null;
|
||||
String endTime = null;
|
||||
try {
|
||||
|
||||
|
||||
startTime = URLEncoder.encode(DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getStartTime(), DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00", "UTF-8");
|
||||
endTime = URLEncoder.encode(DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00", "UTF-8");
|
||||
} catch (Exception e) {
|
||||
throw new BaseException(e.getMessage());
|
||||
}
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("startdate", startTime);
|
||||
params.put("enddate", endTime);
|
||||
params.put("includetestplayers", Boolean.TRUE);
|
||||
params.put("issettled", Boolean.TRUE);
|
||||
|
||||
KMBetRecordResponse betRecordByTime = KMClient.getBetRecordByTime(JsonUtil.mapToQueryString(params), key);
|
||||
|
||||
if (ObjectUtils.isEmpty(betRecordByTime.getErrorCode()) || this.getIsSuccess(betRecordByTime.getErrorCode())) {
|
||||
this.batchInsert(betRecordByTime, betRecordByTimeDTO);
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesKMServiceImpl [getBetRecordByHistoryTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordByTime.getErrorCode(), betRecordByTime.getErrorDescription());
|
||||
throw new BaseException(betRecordByTime.getErrorDescription());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -661,11 +652,7 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
public GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO) {
|
||||
//转化类
|
||||
KMBetRecordResponse.Bet resultBean = (KMBetRecordResponse.Bet) gamesDataBuildDTO.getData();
|
||||
//
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.KM.getInfo())
|
||||
// .currency(resultBean.getCurrency())
|
||||
// .build());
|
||||
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getUserId());
|
||||
|
|
@ -678,7 +665,6 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
e -> e,
|
||||
(existing, replacement) -> existing
|
||||
));
|
||||
;
|
||||
KMGameResponse.Game gamesDataDTO = dataDTOMap.get(resultBean.getGCode());
|
||||
|
||||
//输赢状态
|
||||
|
|
@ -702,7 +688,7 @@ public class GamesKMServiceImpl implements IGamesService {
|
|||
.gameCode(gamesDataDTO.getCode())
|
||||
.gameType(PlatformType.CARD_GAME.getCode())
|
||||
.platformCode(GamePlatforms.KM.getCode())
|
||||
.gameId(GAME_ID)
|
||||
.gameId(gamesDataDTO.getSystemGameId())
|
||||
.gameName(gamesDataDTO.getName())
|
||||
.gameStatus(gameStatus)
|
||||
.gameStatusType(1)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.ff.game.api.meitian.client;
|
|||
import com.dtflys.forest.annotation.Address;
|
||||
import com.dtflys.forest.annotation.Post;
|
||||
import com.dtflys.forest.annotation.Var;
|
||||
import com.ff.game.api.km.dto.KMBalanceTransferStatusResponseDTO;
|
||||
import com.ff.game.api.meitian.address.MeiTianAddressSource;
|
||||
import com.ff.game.api.meitian.dto.*;
|
||||
|
||||
|
|
@ -103,6 +104,22 @@ public interface MeiTianClient {
|
|||
@Var("data") String data
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* 汇兑转移状态
|
||||
*
|
||||
* @param merchantId 商户ID
|
||||
* @param playerName 玩家姓名
|
||||
* @param coins 硬币
|
||||
* @return {@link MeiTianBalanceTransferStatusResponseDTO }
|
||||
*/
|
||||
@Post("dg/player/queryTransbyId/{playerName}/{merchantId}/{extTransId}")
|
||||
MeiTianBalanceTransferStatusResponseDTO exchangeTransferStatus(
|
||||
@Var("playerName") String merchantId,
|
||||
@Var("merchantId") String playerName,
|
||||
@Var("extTransId") String coins
|
||||
);
|
||||
|
||||
/**
|
||||
* 按recordId获取投注记录
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
package com.ff.game.api.meitian.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 梅田余额转移状态响应dto
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Data
|
||||
public class MeiTianBalanceTransferStatusResponseDTO {
|
||||
/**
|
||||
* 响应结果代码
|
||||
*/
|
||||
@JsonProperty("resultCode")
|
||||
private Integer resultCode;
|
||||
|
||||
/**
|
||||
* 交易 ID
|
||||
*/
|
||||
@JsonProperty("transId")
|
||||
private String transId;
|
||||
|
||||
/**
|
||||
* 交易时间,格式为 yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
@JsonProperty("transTime")
|
||||
private String transTime;
|
||||
|
||||
/**
|
||||
* 交易类型代码
|
||||
*/
|
||||
@JsonProperty("transType")
|
||||
private String transType;
|
||||
|
||||
/**
|
||||
* 交易金额
|
||||
*/
|
||||
@JsonProperty("transCoins")
|
||||
private BigDecimal transCoins;
|
||||
|
||||
/**
|
||||
* 当前余额
|
||||
*/
|
||||
@JsonProperty("curBalance")
|
||||
private BigDecimal curBalance;
|
||||
|
||||
/**
|
||||
* 时区信息,如:GMT+8
|
||||
*/
|
||||
@JsonProperty("timeZone")
|
||||
private String timeZone;
|
||||
|
||||
/**
|
||||
* 交易状态,1 表示成功
|
||||
*/
|
||||
@JsonProperty("status")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 货币类型,如:CNY
|
||||
*/
|
||||
@JsonProperty("currency")
|
||||
private String currency;
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package com.ff.game.api.meitian.impl;
|
|||
|
||||
import cn.hutool.core.codec.Base64;
|
||||
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;
|
||||
|
|
@ -12,9 +13,11 @@ import com.ff.base.exception.base.BaseException;
|
|||
import com.ff.base.system.domain.SysConfig;
|
||||
import com.ff.base.system.service.impl.SysConfigServiceImpl;
|
||||
import com.ff.base.utils.DateUtils;
|
||||
import com.ff.base.utils.StringUtils;
|
||||
import com.ff.base.utils.sign.Md5Utils;
|
||||
import com.ff.base.utils.uuid.IdUtils;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.km.dto.KMBalanceTransferStatusResponseDTO;
|
||||
import com.ff.game.api.meitian.client.MeiTianClient;
|
||||
import com.ff.game.api.meitian.dto.*;
|
||||
import com.ff.game.api.request.*;
|
||||
|
|
@ -24,8 +27,6 @@ import com.ff.game.service.IGameExchangeMoneyService;
|
|||
import com.ff.game.service.IGameService;
|
||||
import com.ff.member.domain.Member;
|
||||
import com.ff.member.service.IMemberService;
|
||||
import com.ff.utils.CalculateDateDaysAgo;
|
||||
import com.ff.utils.TimestampFromString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
|
@ -38,6 +39,10 @@ import javax.annotation.Resource;
|
|||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -49,7 +54,7 @@ import java.util.stream.Collectors;
|
|||
* @author shi
|
||||
* @date 2024/10/21
|
||||
*/
|
||||
@Service("MeiTianService")
|
||||
@Service("MTService")
|
||||
@Slf4j
|
||||
public class MeiTianGameServiceImpl implements IGamesService {
|
||||
|
||||
|
|
@ -215,23 +220,8 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
MeiTianGamesDTO gameList = new MeiTianGamesDTO();
|
||||
|
||||
for (MeiTianGameDataDTO gamesDataDTO : gameList.getData()) {
|
||||
/* GamePlatform gamePlatform = GamePlatform.builder()
|
||||
.platformType(MeiTianGameType.findSystemByCode(gamesDataDTO.getGameCategoryId()))
|
||||
.platformCode(GamePlatforms.MT.getCode())
|
||||
.build();
|
||||
List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.MT.getInfo() + MeiTianGameType.findInfoByCode(gamesDataDTO.getGameCategoryId()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
Integer platformType = MeiTianGameType.findSystemByCode(gamesDataDTO.getGameCategoryId());
|
||||
Game game = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
.platformCode(GamePlatforms.MT.getCode())
|
||||
.platformType(platformType)
|
||||
.gameCode(String.valueOf(gamesDataDTO.getGameId()))
|
||||
|
|
@ -246,7 +236,7 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
game.setCreateBy(Constants.SYSTEM);
|
||||
game.setPlatformType(platformType);
|
||||
game.setPlatformCode(GamePlatforms.MT.getCode());
|
||||
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.MT.getCode(), gamesDataDTO.getGameId()));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getCnName(), "zh-CN"));
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getEnName(), "en-US"));
|
||||
|
|
@ -257,22 +247,6 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
}
|
||||
gamesDataDTO.setSystemGameId(game.getId());
|
||||
|
||||
/*List<GameName> gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(game.getGameName()).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(gamesDataDTO.getEnName())
|
||||
.langCode("en-US")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
redisCache.deleteObject(CacheConstants.MeiTian_GAMES);
|
||||
|
|
@ -291,9 +265,6 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
@Override
|
||||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .currency(exchangeTransferMoneyRequestDTO.getCurrency()).build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.MT.getCode() + IdUtils.simpleUUID();
|
||||
|
|
@ -321,15 +292,25 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.MT.getCode())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
//接口限制限制50字符
|
||||
exchangeMoney.setTransactionId(transactionId);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
// String key = gameSecretKey.getKey();
|
||||
String key = exchangeTransferMoneyRequestDTO.getAgentKey();
|
||||
String merchantId = exchangeTransferMoneyRequestDTO.getAgentId();
|
||||
String playerName = exchangeTransferMoneyRequestDTO.getAccount();
|
||||
String coins = exchangeTransferMoneyRequestDTO.getAmount().setScale(4, RoundingMode.DOWN).toString();
|
||||
if (exchangeTransferMoneyRequestDTO.getTransferType().equals(TransferType.ALL.getCode())){
|
||||
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
|
||||
.accounts(member.getGameAccount())
|
||||
.agentId(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
.currency(exchangeTransferMoneyRequestDTO.getCurrency())
|
||||
.agentKey(exchangeTransferMoneyRequestDTO.getAgentKey())
|
||||
.build();
|
||||
coins = this.getMemberInfo(gamesBaseRequestDTO).getBalance().setScale(4, RoundingMode.DOWN).toString();
|
||||
}
|
||||
|
||||
Map<String, String> rawMap = new LinkedHashMap<>();
|
||||
rawMap.put("merchantId", merchantId);
|
||||
rawMap.put("playerName", playerName);
|
||||
|
|
@ -360,16 +341,21 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
//判断是否转移成功
|
||||
if (this.isSuccess(exchangeMoneyResponse.getErrorCode())) {
|
||||
//更新数据
|
||||
exchangeMoney.setBalance(exchangeMoneyResponse.getBalance());
|
||||
BigDecimal transAmount = exchangeTransferMoneyRequestDTO.getAmount();
|
||||
BigDecimal transAmount =new BigDecimal(coins);
|
||||
exchangeMoney.setBalance(transAmount);
|
||||
|
||||
exchangeMoney.setCoinBefore(exchangeMoneyResponse.getBalance().subtract(transAmount));
|
||||
exchangeMoney.setCoinAfter(exchangeMoneyResponse.getBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoneyResponse.getBalance().subtract(transAmount));
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoneyResponse.getBalance());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue()); // SUCCESS
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
throw new BaseException(MeiTianExchangeMoneyResponseDTO.TransferIn.get(exchangeMoneyResponse.getErrorCode()).getMessage());
|
||||
}
|
||||
|
||||
|
|
@ -388,15 +374,20 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
//判断是否转移成功
|
||||
if (this.isSuccess(exchangeMoneyResponse.getErrorCode())) {
|
||||
//更新数据
|
||||
exchangeMoney.setBalance(exchangeMoneyResponse.getBalance());
|
||||
BigDecimal transAmount = exchangeTransferMoneyRequestDTO.getAmount();
|
||||
BigDecimal transAmount =new BigDecimal(coins);
|
||||
exchangeMoney.setBalance(transAmount);
|
||||
|
||||
exchangeMoney.setCoinBefore(exchangeMoneyResponse.getBalance().add(transAmount));
|
||||
exchangeMoney.setCoinAfter(exchangeMoneyResponse.getBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoneyResponse.getBalance().add(transAmount));
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoneyResponse.getBalance());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue()); // SUCCESS
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
throw new BaseException(MeiTianExchangeMoneyResponseDTO.TransferOut.get(exchangeMoneyResponse.getErrorCode()).getMessage());
|
||||
}
|
||||
}
|
||||
|
|
@ -410,8 +401,30 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
return Boolean.TRUE;
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("MeiTianGameServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
|
||||
String merchantId = exchangeTransferMoneyRequestDTO.getAgentId();
|
||||
String playerName = exchangeTransferMoneyRequestDTO.getAccount();
|
||||
|
||||
MeiTianBalanceTransferStatusResponseDTO meiTianBalanceTransferStatusResponseDTO = meiTianClient.exchangeTransferStatus(
|
||||
playerName,
|
||||
merchantId,
|
||||
exchangeTransferMoneyRequestDTO.getOrderId()
|
||||
);
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.isSuccess(meiTianBalanceTransferStatusResponseDTO.getResultCode())&& "1".equals(meiTianBalanceTransferStatusResponseDTO.getStatus())) {
|
||||
status = StatusType.SUCCESS.getValue();
|
||||
} else {
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
return ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.balance(meiTianBalanceTransferStatusResponseDTO.getTransCoins())
|
||||
.coinBefore(NumberUtil.sub(meiTianBalanceTransferStatusResponseDTO.getTransCoins(), meiTianBalanceTransferStatusResponseDTO.getCurBalance()).abs())
|
||||
.coinAfter(meiTianBalanceTransferStatusResponseDTO.getCurBalance())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -483,7 +496,7 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
|
||||
boolean doSyncRecordByDate(BetRecordByTimeDTO betRecordByTimeDTO, int daysToSubtract) {
|
||||
|
||||
String date = CalculateDateDaysAgo.getStr(daysToSubtract);
|
||||
String date = getDateStr(daysToSubtract);
|
||||
String configKey = GamePlatforms.MT.getCode() + ":lastSyncDate";
|
||||
String syncDateStr = sysConfigServiceImpl.selectConfigByKey(configKey);
|
||||
Map<String, Long> syncDateMap = new HashMap<>();
|
||||
|
|
@ -746,9 +759,9 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
Map<String, MeiTianGameDataDTO> dataDTOMap = gameDatas.stream().collect(Collectors.toMap(MeiTianGameDataDTO::getGameId, e -> e));
|
||||
MeiTianGameDataDTO gamesDataDTO = dataDTOMap.get(dataBean.getGameCode());
|
||||
BigDecimal originPayoffAmount = new BigDecimal(dataBean.getIncome()); // 这个值是到手的
|
||||
BigDecimal betAmount = new BigDecimal(dataBean.getBetAmount());
|
||||
int compareResult = originPayoffAmount.compareTo(betAmount);
|
||||
long gameTime = TimestampFromString.from(dataBean.getGameDate());
|
||||
|
||||
int compareResult = originPayoffAmount.compareTo(BigDecimal.ZERO);
|
||||
long gameTime = getTime(dataBean.getGameDate());
|
||||
Platform platform = gamesDataBuildDTO.getPlatform();
|
||||
String systemCurrency = platform.getOurCurrency(dataBean.getCurrency());
|
||||
//数据构造
|
||||
|
|
@ -780,4 +793,30 @@ public class MeiTianGameServiceImpl implements IGamesService {
|
|||
gameBettingDetails.setCreateTime(DateUtils.getNowDate());
|
||||
return gameBettingDetails;
|
||||
}
|
||||
|
||||
public long getTime(String date) {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
try {
|
||||
Date parse = simpleDateFormat.parse(date);
|
||||
return parse.getTime();
|
||||
} catch (ParseException e) {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
|
||||
public LocalDate getDate(int daysToSubtract) {
|
||||
return LocalDate.now().minusDays(daysToSubtract); // 获取当前日期减去两天
|
||||
}
|
||||
|
||||
public String getDateStr(int daysToSubtract) {
|
||||
// 获取当前日期减去指定天数
|
||||
LocalDate date = LocalDate.now().minusDays(daysToSubtract);
|
||||
|
||||
// 定义日期格式
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
// 返回格式化日期字符串
|
||||
return date.format(formatter);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ public class MyNGAddressSource implements AddressSource {
|
|||
|
||||
@Override
|
||||
public ForestAddress getAddress(ForestRequest request) {
|
||||
//String apiBaseUrl = configService.selectConfigByKey(Constants.NG_API_BASE_URL);
|
||||
String apiBaseUrl = platformService.get(GamePlatforms.PG.getCode())
|
||||
.getUrlInfo().getUrl();
|
||||
return new ForestAddress("https", apiBaseUrl, 443, "api");
|
||||
|
|
|
|||
|
|
@ -232,23 +232,8 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
ApiNGResponseDTO<List<ApiGameInfoResponseDTO>> gameList = ngClient.getGameList(paramsMap, headerMap);
|
||||
if (this.getIsSuccess(gameList.getCode())) {
|
||||
for (ApiGameInfoResponseDTO apiGameInfoResponseDTO : gameList.getData()) {
|
||||
/*GamePlatform gamePlatform = GamePlatform.builder()
|
||||
.platformType(NGGameType.findSystemByCode(apiGameInfoResponseDTO.getGameType()))
|
||||
.platformCode(GamePlatforms.PG.getCode())
|
||||
.build();
|
||||
List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.PG.getInfo() + NGGameType.findInfoByCode(apiGameInfoResponseDTO.getGameType()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
Integer platformType = NGGameType.findSystemByCode(apiGameInfoResponseDTO.getGameType());
|
||||
Game game = Game.builder()
|
||||
// .platformId(gamePlatform.getId())
|
||||
.platformCode(GamePlatforms.PG.getCode())
|
||||
.platformType(platformType)
|
||||
.gameCode(apiGameInfoResponseDTO.getGameCode())
|
||||
|
|
@ -264,6 +249,7 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
game.setCreateBy(Constants.SYSTEM);
|
||||
game.setPlatformCode(GamePlatforms.PG.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.PG.getCode(), apiGameInfoResponseDTO.getGameCode()));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo(apiGameInfoResponseDTO.getGameName().get("zh-hans"), "zh-CN"));
|
||||
nameInfos.add(new NameInfo(apiGameInfoResponseDTO.getGameName().get("zh-hant"), "zh-TW"));
|
||||
|
|
@ -274,32 +260,6 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
game = games.get(0);
|
||||
}
|
||||
apiGameInfoResponseDTO.setSystemGameId(game.getId());
|
||||
/*Map<String, String> gameName = apiGameInfoResponseDTO.getGameName();
|
||||
for (String key : gameName.keySet()) {
|
||||
String name = gameName.get(key);
|
||||
List<GameName> gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(name).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
if ("zh-hans".equals(key)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(name)
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
} else if (!"zh-hant".equals(key)) {
|
||||
GameSecretKeyLangDTO gameSecretKeyLangDTO = gameSecretKeyLangService.findGameSecretKeyLangDTO(GameSecretKeyLangDTO.builder()
|
||||
.platformCode(GamePlatforms.PG.getCode())
|
||||
.lang(key)
|
||||
.build());
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(name)
|
||||
.langCode(gameSecretKeyLangDTO.getSystemLangCode())
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -324,11 +284,6 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesNGServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.PG.getCode())
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .currency(exchangeTransferMoneyRequestDTO.getCurrency())
|
||||
// .build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.PG.getCode(), 32);
|
||||
|
|
@ -354,6 +309,11 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.PG.getCode())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
|
||||
//获取余额
|
||||
String type = TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType()) ? NGTransferType.TRANSFER_OUT.getValue() : NGTransferType.TRANSFER_IN.getValue();
|
||||
|
|
@ -385,16 +345,13 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
if (this.getIsSuccess(apiNGResponseDTO.getCode())) {
|
||||
//更新数据
|
||||
exchangeMoney.setBalance(exchangeTransferMoneyRequestDTO.getAmount());
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO();
|
||||
exchangeTransferStatusRequestDTO.setAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
exchangeTransferStatusRequestDTO.setCurrency(exchangeTransferMoneyRequestDTO.getCurrency());
|
||||
exchangeTransferStatusRequestDTO.setOrderId(transactionId);
|
||||
exchangeTransferStatusRequestDTO.setAgentId(exchangeTransferMoneyRequestDTO.getAgentId());
|
||||
exchangeTransferStatusRequestDTO.setAgentKey(exchangeTransferMoneyRequestDTO.getAgentKey());
|
||||
this.exchangeTransferStatus(exchangeTransferStatusRequestDTO);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesPGServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{},错误信息{}", apiNGResponseDTO.getCode(), apiNGResponseDTO.getMsg());
|
||||
throw new BaseException(apiNGResponseDTO.getMsg());
|
||||
}
|
||||
|
|
@ -408,7 +365,7 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
|
||||
|
||||
Map<String, Object> paramsMap = new HashMap<>();
|
||||
|
|
@ -417,32 +374,24 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
paramsMap.put("orderId", exchangeTransferMoneyRequestDTO.getOrderId());
|
||||
Map<String, String> key = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
ApiNGResponseDTO<ApiExchangeTransferStatusResponseDTO> apiNGResponseDTO = ngClient.exchangeTransferStatus(paramsMap, key);
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.getIsSuccess(apiNGResponseDTO.getCode())) {
|
||||
ApiExchangeTransferStatusResponseDTO apiNGResponseDTOData = apiNGResponseDTO.getData();
|
||||
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
|
||||
GameExchangeMoney.builder()
|
||||
.platformCode(GamePlatforms.PG.getCode())
|
||||
.transactionId(exchangeTransferMoneyRequestDTO.getOrderId())
|
||||
.build()
|
||||
);
|
||||
|
||||
for (GameExchangeMoney exchangeMoney : gameExchangeMonies) {
|
||||
//更新数据
|
||||
exchangeMoney.setBalance(apiNGResponseDTOData.getAmount().abs());
|
||||
exchangeMoney.setCoinBefore(NumberUtil.sub(apiNGResponseDTOData.getAfterBalance(), apiNGResponseDTOData.getAmount()));
|
||||
exchangeMoney.setCoinAfter(apiNGResponseDTOData.getAfterBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
exchangeMoney.setStatus(apiNGResponseDTOData.getStatus());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
status = StatusType.SUCCESS.getValue();
|
||||
} else {
|
||||
log.error("GamesPGServiceImpl [exchangeTransferStatus]错误代码{},错误信息{}", apiNGResponseDTO.getCode(), apiNGResponseDTO.getMsg());
|
||||
return Boolean.FALSE;
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
ExchangeTransferStatusResponseDTO transferStatusResponseDTO = ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.build();
|
||||
ApiExchangeTransferStatusResponseDTO apiNGResponseDTOData = apiNGResponseDTO.getData();
|
||||
if (!ObjectUtils.isEmpty(apiNGResponseDTOData)) {
|
||||
transferStatusResponseDTO.setBalance(apiNGResponseDTOData.getAmount());
|
||||
transferStatusResponseDTO.setCoinBefore(NumberUtil.sub(apiNGResponseDTOData.getAmount(), apiNGResponseDTOData.getAfterBalance()).abs());
|
||||
transferStatusResponseDTO.setCoinAfter(apiNGResponseDTOData.getAfterBalance());
|
||||
}
|
||||
|
||||
|
||||
return transferStatusResponseDTO;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -455,14 +404,6 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
@Override
|
||||
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
|
||||
// GameSecretKeyCurrencyDTO gameSecretKeyDTO = new GameSecretKeyCurrencyDTO();
|
||||
// gameSecretKeyDTO.setPlatformCodes(NGPlatforms.getAllPlatforms());
|
||||
// List<GameSecretKeyCurrencyDTO> currencyDTOList = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(gameSecretKeyDTO);
|
||||
// List<String> currencys = currencyDTOList.stream()
|
||||
// .map(GameSecretKeyCurrencyDTO::getCurrency)
|
||||
// .distinct()
|
||||
// .collect(Collectors.toList());
|
||||
|
||||
|
||||
Platform platform = betRecordByTimeDTO.getVendor();
|
||||
Set<String> cacheSet = redisCache.getCacheSet(CacheConstants.PG_GAMES_BET_CURRENCY);
|
||||
|
|
@ -480,14 +421,7 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
|
||||
String firstCurrency = currencys.get(0);
|
||||
|
||||
// GameSecretKeyCurrencyDTO currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.PG.getCode())
|
||||
// .currency(firstCurrency)
|
||||
// .build());
|
||||
|
||||
|
||||
// betRecordByTimeDTO.setAgentId(currencyDTO.getCode());
|
||||
// betRecordByTimeDTO.setAgentKey(currencyDTO.getKey());
|
||||
int pageNo = 1;
|
||||
int pageSize = 2000;
|
||||
Map<String, Object> paramsMap = new HashMap<>();
|
||||
|
|
@ -753,10 +687,6 @@ public class GamesPGServiceImpl implements IGamesService {
|
|||
return null;
|
||||
}
|
||||
Game gamesDataDTO = games.get(0);
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCodes(NGPlatforms.getAllPlatforms())
|
||||
// .currency(resultBean.getCurrency())
|
||||
// .build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getPlayerId());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
package com.ff.game.api.pgt.address;
|
||||
|
||||
import com.dtflys.forest.callback.AddressSource;
|
||||
import com.dtflys.forest.http.ForestAddress;
|
||||
import com.dtflys.forest.http.ForestRequest;
|
||||
import com.ff.base.constant.Constants;
|
||||
import com.ff.base.enums.GamePlatforms;
|
||||
import com.ff.base.system.service.ISysConfigService;
|
||||
import com.ff.game.service.IPlatformService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
|
||||
/**
|
||||
* 我 pt 泰国来源
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/10
|
||||
*/
|
||||
@Component
|
||||
public class MyPGTAddressSource implements AddressSource {
|
||||
@Resource
|
||||
private IPlatformService platformService;
|
||||
@Resource
|
||||
private ISysConfigService configService;
|
||||
|
||||
|
||||
@Override
|
||||
public ForestAddress getAddress(ForestRequest request) {
|
||||
String apiBaseUrl = platformService.get(GamePlatforms.PGT.getCode())
|
||||
.getUrlInfo().getUrl();
|
||||
return new ForestAddress("https",apiBaseUrl, 443,"");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
package com.ff.game.api.pgt.client;
|
||||
|
||||
import com.dtflys.forest.annotation.*;
|
||||
import com.ff.game.api.dg.dto.DGResponse;
|
||||
import com.ff.game.api.fc.dto.ApiFCGameListResponseDTO;
|
||||
import com.ff.game.api.jili.dto.JILIKickMemberAllDTO;
|
||||
import com.ff.game.api.jili.dto.JILIKickMemberDTO;
|
||||
import com.ff.game.api.ng.dto.ApiExchangeTransferStatusResponseDTO;
|
||||
import com.ff.game.api.ng.dto.ApiNGResponseDTO;
|
||||
import com.ff.game.api.pgt.address.MyPGTAddressSource;
|
||||
import com.ff.game.api.pgt.dto.*;
|
||||
import com.ff.game.api.pgx.dto.PGXPlayerStatusResponse;
|
||||
import com.ff.game.api.success.MySuccessCondition;
|
||||
import com.ff.game.api.xk.dto.XKKickMemberAllDTO;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* pt 泰国
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/10
|
||||
*/
|
||||
@Address(source = MyPGTAddressSource.class)
|
||||
@Success(condition = MySuccessCondition.class)
|
||||
public interface PGTClient {
|
||||
/**
|
||||
* 创建成员
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link String }
|
||||
*/
|
||||
@Post("/member")
|
||||
PGTCreateMemberResponse createMember(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
/**
|
||||
* 获取会员信息
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @return {@link PGTBalanceResponse }
|
||||
*/
|
||||
@Get("/balance?${parameters}")
|
||||
PGTBalanceResponse getMemberInfo(@Var("parameters") String parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 无重定向登录
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @return {@link PGTLoginResponse }
|
||||
*/
|
||||
@Post("/logIn")
|
||||
PGTLoginResponse loginWithoutRedirect(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
/**
|
||||
* 获取游戏列表
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link PGTGameListResponse }
|
||||
*/
|
||||
@Get("/games?${parameters}")
|
||||
PGTGameListResponse getGameList(@Var("parameters") String parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
/**
|
||||
* 押金
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link PGTExchangeTransferResponse }
|
||||
*/
|
||||
@Post(url = "/deposit")
|
||||
PGTExchangeTransferResponse deposit(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
/**
|
||||
* 收回
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link PGTExchangeTransferResponse }
|
||||
*/
|
||||
@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 = "/verifyDepositWithdraw")
|
||||
PGTTransactionResponse exchangeTransferStatus(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link PGTTransactionDetailsResponse }
|
||||
*/
|
||||
@Get(url = "/betTransactionsV2?{parameters}")
|
||||
PGTTransactionDetailsResponse getBetRecordByTime(@Var("parameters") String parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
/**
|
||||
* 投注交易回放
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link PGTReplayUrlResponseDTO }
|
||||
*/
|
||||
@Get(url = "/betTransactionReplay?{parameters}")
|
||||
PGTReplayUrlResponseDTO betTransactionReplay(@Var("parameters") String parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 踢出队员
|
||||
*
|
||||
* @param parameters 范围
|
||||
* @param headerMap 标题映射
|
||||
* @return {@link PGTKickMemberResponse }
|
||||
*/
|
||||
@Post("/seamless/kickOutPlayer")
|
||||
PGTKickMemberResponse kickMember(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* PG平衡响应
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/03
|
||||
*/
|
||||
@Data
|
||||
public class PGTBalanceResponse {
|
||||
|
||||
/**
|
||||
* 每个请求的唯一引用
|
||||
*/
|
||||
@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("username")
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 每个 productId 的当前余额
|
||||
*/
|
||||
@JsonProperty("balance")
|
||||
private BigDecimal balance;
|
||||
|
||||
/**
|
||||
* 响应状态
|
||||
*/
|
||||
@JsonProperty("status")
|
||||
private String status;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* pgtcreate成员响应
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/03
|
||||
*/
|
||||
@Data
|
||||
public class PGTCreateMemberResponse {
|
||||
|
||||
/**
|
||||
* 请求的唯一标识符
|
||||
*/
|
||||
@JsonProperty("reqId")
|
||||
private String reqId;
|
||||
|
||||
/**
|
||||
* 状态码,0 表示成功,其他值表示错误
|
||||
*/
|
||||
@JsonProperty("code")
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* 响应消息,通常用于提供请求处理的结果
|
||||
*/
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 响应的实际数据
|
||||
*/
|
||||
@JsonProperty("data")
|
||||
private ResponseData data;
|
||||
|
||||
@Data
|
||||
public static class ResponseData {
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
@JsonProperty("username")
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 货币类型
|
||||
*/
|
||||
@JsonProperty("currency")
|
||||
private String currency;
|
||||
|
||||
/**
|
||||
* 操作状态
|
||||
*/
|
||||
@JsonProperty("status")
|
||||
private String status;
|
||||
}
|
||||
}
|
||||
|
|
@ -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,133 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* pgtgame列表响应
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/07
|
||||
*/
|
||||
@Data
|
||||
public class PGTGameListResponse {
|
||||
/**
|
||||
* 每个请求的唯一引用
|
||||
*/
|
||||
@JsonProperty("reqId")
|
||||
private String reqId;
|
||||
|
||||
/**
|
||||
* 响应状态,0 表示成功,其他值表示错误
|
||||
*/
|
||||
@JsonProperty("code")
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* 有关响应状态的其他信息
|
||||
*/
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 包含游戏数据的对象
|
||||
*/
|
||||
@JsonProperty("data")
|
||||
private GameData data;
|
||||
|
||||
@Data
|
||||
public static class GameData {
|
||||
|
||||
/**
|
||||
* 游戏列表
|
||||
*/
|
||||
@JsonProperty("games")
|
||||
private List<Game> games;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Game {
|
||||
|
||||
/**
|
||||
* 游戏名称
|
||||
*/
|
||||
@JsonProperty("name")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 游戏类别
|
||||
*/
|
||||
@JsonProperty("category")
|
||||
private String category;
|
||||
|
||||
/**
|
||||
* 游戏类型
|
||||
*/
|
||||
@JsonProperty("type")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 游戏代码
|
||||
*/
|
||||
@JsonProperty("code")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 游戏图片链接
|
||||
*/
|
||||
@JsonProperty("img")
|
||||
private String img;
|
||||
|
||||
/**
|
||||
* 系统游戏id
|
||||
*/
|
||||
private Long systemGameId;
|
||||
|
||||
/**
|
||||
* 游戏排名
|
||||
*/
|
||||
@JsonProperty("rank")
|
||||
private int rank;
|
||||
|
||||
/**
|
||||
* 游戏提供者代码
|
||||
*/
|
||||
@JsonProperty("providerCode")
|
||||
private String providerCode;
|
||||
|
||||
|
||||
/**
|
||||
* 场所
|
||||
*/
|
||||
@JsonProperty("locale")
|
||||
private Locale locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* 场所
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/07
|
||||
*/
|
||||
@Data
|
||||
public class Locale {
|
||||
/**
|
||||
* 泰文
|
||||
*/
|
||||
@JsonProperty("TH")
|
||||
private String th;
|
||||
/**
|
||||
* 英语
|
||||
*/
|
||||
@JsonProperty("EN")
|
||||
private String en;
|
||||
/**
|
||||
* 中国
|
||||
*/
|
||||
@JsonProperty("CN")
|
||||
private String cn;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* pgtkick成员响应
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/07
|
||||
*/
|
||||
@Data
|
||||
public class PGTKickMemberResponse {
|
||||
|
||||
|
||||
/**
|
||||
* 每个请求的唯一引用
|
||||
*/
|
||||
@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("status")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 玩家用户名
|
||||
*/
|
||||
@JsonProperty("username")
|
||||
private String username;
|
||||
}
|
||||
}
|
||||
|
|
@ -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,50 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* pgtreplay url响应dto
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Data
|
||||
public class PGTReplayUrlResponseDTO {
|
||||
/**
|
||||
* 请求 ID
|
||||
*/
|
||||
@JsonProperty("reqId")
|
||||
private String reqId;
|
||||
|
||||
/**
|
||||
* 响应代码,0 表示成功
|
||||
*/
|
||||
@JsonProperty("code")
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* 响应消息,描述请求的状态
|
||||
*/
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 数据,包含重播 URL 信息
|
||||
*/
|
||||
@JsonProperty("data")
|
||||
private Datas data;
|
||||
|
||||
/**
|
||||
* 内部数据类,包含重播 URL
|
||||
*/
|
||||
@Data
|
||||
public static class Datas {
|
||||
|
||||
/**
|
||||
* 重播链接
|
||||
*/
|
||||
@JsonProperty("url")
|
||||
private String url;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
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 Date accountingDate;
|
||||
|
||||
/**
|
||||
* 最新更新时间
|
||||
*/
|
||||
@JsonProperty("updatedDate")
|
||||
private Date updatedDate;
|
||||
|
||||
/**
|
||||
* 质押金额
|
||||
*/
|
||||
@JsonProperty("stake")
|
||||
private BigDecimal stake;
|
||||
|
||||
/**
|
||||
* 支付金额(包括本金)
|
||||
*/
|
||||
@JsonProperty("payout")
|
||||
private BigDecimal payout;
|
||||
|
||||
/**
|
||||
* 产品 ID
|
||||
*/
|
||||
@JsonProperty("productId")
|
||||
private String productId;
|
||||
|
||||
/**
|
||||
* 游戏代码
|
||||
*/
|
||||
@JsonProperty("gameCode")
|
||||
private String gameCode;
|
||||
|
||||
/**
|
||||
* 游戏名称
|
||||
*/
|
||||
@JsonProperty("gameName")
|
||||
private String gameName;
|
||||
|
||||
/**
|
||||
* 轮次 ID
|
||||
*/
|
||||
@JsonProperty("roundId")
|
||||
private String roundId;
|
||||
|
||||
/**
|
||||
* 投注状态(未结、已结算、未结算、无效)
|
||||
* OPEN, SETTLED, UNSETTLED, VOID
|
||||
*/
|
||||
@JsonProperty("betStatus")
|
||||
private String betStatus;
|
||||
|
||||
/**
|
||||
* 支付状态(LOSE、WIN、DRAW、UNKNOWN)
|
||||
*/
|
||||
@JsonProperty("payoutStatus")
|
||||
private String payoutStatus;
|
||||
|
||||
/**
|
||||
* 佣金
|
||||
*/
|
||||
@JsonProperty("commission")
|
||||
private double commission;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
package com.ff.game.api.pgt.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 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 BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 交易前的余额
|
||||
*/
|
||||
@JsonProperty("beforeBalance")
|
||||
private BigDecimal beforeBalance;
|
||||
|
||||
/**
|
||||
* 交易后的余额
|
||||
*/
|
||||
@JsonProperty("afterBalance")
|
||||
private BigDecimal afterBalance;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,670 @@
|
|||
package com.ff.game.api.pgt.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.ff.base.config.RedisConfig;
|
||||
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.StringUtils;
|
||||
import com.ff.base.utils.sign.Base64;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.fc.dto.ApiFCGameListResponseDTO;
|
||||
import com.ff.game.api.fc.dto.ApiFCResult;
|
||||
import com.ff.game.api.pgt.client.PGTClient;
|
||||
import com.ff.game.api.pgt.dto.*;
|
||||
import com.ff.game.api.request.*;
|
||||
import com.ff.game.api.xk.dto.XKBetRecordResponseDTO;
|
||||
import com.ff.game.api.xk.dto.XKGamesDTO;
|
||||
import com.ff.game.domain.*;
|
||||
import com.ff.game.dto.GameBettingDetailsDTO;
|
||||
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.Base64Utils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* pg泰
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/03/27
|
||||
*/
|
||||
@Service("PGTService")
|
||||
@Slf4j
|
||||
public class GamesPGTServiceImpl 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 PGTClient pgtClient;
|
||||
|
||||
|
||||
@Resource
|
||||
private KeyConfig keyConfig;
|
||||
|
||||
@Resource
|
||||
private IGameBettingDetailsService gameBettingDetailsService;
|
||||
|
||||
|
||||
String productId = "PGSOFT";
|
||||
|
||||
/**
|
||||
* 获得就是成功
|
||||
*
|
||||
* @param errorCode 错误代码
|
||||
* @return {@link Boolean }
|
||||
*/
|
||||
private Boolean getIsSuccess(Integer errorCode) {
|
||||
|
||||
return 0 == errorCode;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取密钥
|
||||
*
|
||||
* @return {@link String }
|
||||
*/
|
||||
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);
|
||||
|
||||
return headerMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建成员
|
||||
*
|
||||
* @param createMemberRequestDTO 创建成员请求dto
|
||||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean createMember(CreateMemberRequestDTO createMemberRequestDTO) {
|
||||
log.info("GamesPGTServiceImpl [createMember] 请求参数 {}", createMemberRequestDTO);
|
||||
Map<String, String> headerMap = this.getKey(createMemberRequestDTO);
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("username", createMemberRequestDTO.getAccount());
|
||||
params.put("productId", productId);
|
||||
|
||||
PGTCreateMemberResponse member = pgtClient.createMember(params, headerMap);
|
||||
if (this.getIsSuccess(member.getCode())) {
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
//判断是否获取成功
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取会员信息
|
||||
*
|
||||
* @param memberInfoRequestDTO 会员信息请求dto
|
||||
* @return {@link MemberInfoResponseDTO }
|
||||
*/
|
||||
@Override
|
||||
public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) {
|
||||
log.info("GamesPGTServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO);
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("username", memberInfoRequestDTO.getAccounts());
|
||||
params.put("productId", productId);
|
||||
Map<String, String> headerMap = this.getKey(memberInfoRequestDTO);
|
||||
PGTBalanceResponse memberInfo = pgtClient.getMemberInfo(JsonUtil.mapToQueryString(params), headerMap);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(memberInfo.getCode())) {
|
||||
MemberInfoResponseDTO memberInfoResponseDTO = MemberInfoResponseDTO.builder()
|
||||
.status(GameMemberStatus.UNKNOWN.getCode())
|
||||
.balance(memberInfo.getData().getBalance())
|
||||
.account(memberInfoRequestDTO.getAccounts())
|
||||
.build();
|
||||
return memberInfoResponseDTO;
|
||||
} else {
|
||||
throw new BaseException(memberInfo.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 无重定向登录
|
||||
*
|
||||
* @param gamesLogin 游戏登录
|
||||
* @return {@link String }
|
||||
*/
|
||||
@Override
|
||||
public String loginWithoutRedirect(GamesLogin gamesLogin) {
|
||||
log.info("GamesPGTServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin);
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
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);
|
||||
PGTLoginResponse pgtLoginResponse = pgtClient.loginWithoutRedirect(params, key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(pgtLoginResponse.getCode())) {
|
||||
return pgtLoginResponse.getData().getUrl();
|
||||
} else {
|
||||
throw new BaseException(pgtLoginResponse.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取游戏列表
|
||||
*
|
||||
* @param gamesBaseRequestDTO 游戏请求dto
|
||||
* @return {@link String }
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||
List<PGTGameListResponse.Game> apiGameInfoResponseDTOS = redisCache.getCacheList(CacheConstants.PGT_GAMES);
|
||||
if (!CollectionUtils.isEmpty(apiGameInfoResponseDTOS)) {
|
||||
return CacheConstants.PGT_GAMES;
|
||||
}
|
||||
|
||||
|
||||
log.info("GamesPGTServiceImpl [getGameList] 请求参数 {}", gamesBaseRequestDTO);
|
||||
Map<String, Object> paramsMap = new HashMap<>();
|
||||
paramsMap.put("productId", productId);
|
||||
PGTGameListResponse gameList = pgtClient.getGameList(JsonUtil.mapToQueryString(paramsMap), this.getKey(gamesBaseRequestDTO));
|
||||
if (this.getIsSuccess(gameList.getCode())) {
|
||||
|
||||
|
||||
//新增游戏
|
||||
for (PGTGameListResponse.Game gameIdKey : gameList.getData().getGames()) {
|
||||
|
||||
Game game = Game.builder()
|
||||
.platformCode(GamePlatforms.PGT.getCode())
|
||||
.gameCode(gameIdKey.getCode())
|
||||
.build();
|
||||
List<Game> games = gameService.selectGameList(game);
|
||||
int platformType = PGTGameType.findSystemByCode(gameIdKey.getCategory());
|
||||
//不存在这个游戏
|
||||
if (CollectionUtils.isEmpty(games)) {
|
||||
|
||||
game.setGameSourceType(gameIdKey.getCategory());
|
||||
game.setFreespin(Boolean.FALSE);
|
||||
game.setDemoStatus(Boolean.FALSE);
|
||||
game.setPlatformCode(GamePlatforms.PGT.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
game.setSortNo(gameService.selectMaxSortNo(platformType, GamePlatforms.PGT.getCode()) + 1);
|
||||
game.setGameName(gameIdKey.getName());
|
||||
game.setCreateBy(Constants.SYSTEM);
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.PGT.getCode(), gameIdKey.getCode()));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(NameInfo.builder().lang("en-US").name(gameIdKey.getName()).build());
|
||||
game.setNameInfo(nameInfos);
|
||||
gameService.insertGame(game);
|
||||
} else {
|
||||
game = games.get(0);
|
||||
}
|
||||
gameIdKey.setSystemGameId(game.getId());
|
||||
}
|
||||
|
||||
|
||||
redisCache.deleteObject(CacheConstants.PGT_GAMES);
|
||||
redisCache.setCacheList(CacheConstants.PGT_GAMES, gameList.getData().getGames());
|
||||
redisCache.expire(CacheConstants.PGT_GAMES, 5L, TimeUnit.HOURS);
|
||||
} else {
|
||||
throw new ApiException(ErrorCode.ERROR.getCode());
|
||||
}
|
||||
return CacheConstants.PGT_GAMES;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按代理id进行交换转账
|
||||
*
|
||||
* @param exchangeTransferMoneyRequestDTO 外汇转账moeny dto
|
||||
* @return {@link Long }
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesPGTServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
String currency = exchangeTransferMoneyRequestDTO.getCurrency();
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.PGX.getInfo(), 17);
|
||||
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
|
||||
GameExchangeMoney.builder()
|
||||
.tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey())
|
||||
.orderId(exchangeTransferMoneyRequestDTO.getOrderId())
|
||||
.build()
|
||||
);
|
||||
Assert.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), "订单号重复");
|
||||
|
||||
|
||||
//获取下一个自增id
|
||||
GameExchangeMoney exchangeMoney = GameExchangeMoney
|
||||
.builder()
|
||||
.tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey())
|
||||
.orderId(exchangeTransferMoneyRequestDTO.getOrderId())
|
||||
.quota(exchangeTransferMoneyRequestDTO.getQuota())
|
||||
.balance(exchangeTransferMoneyRequestDTO.getAmount())
|
||||
.exchangeType(exchangeTransferMoneyRequestDTO.getTransferType())
|
||||
.currencyCode(currency)
|
||||
.memberId(member.getId())
|
||||
.transactionId(transactionId)
|
||||
.platformCode(GamePlatforms.PGT.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
BigDecimal amount = exchangeTransferMoneyRequestDTO.getAmount();
|
||||
BigDecimal amountBefore = BigDecimal.ZERO;
|
||||
|
||||
// 获取第三方钱包余额
|
||||
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
|
||||
.accounts(exchangeTransferMoneyRequestDTO.getAccount())
|
||||
.agentId(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
.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("username", exchangeTransferMoneyRequestDTO.getAccount());
|
||||
paramsMap.put("amount", amount.setScale(2, RoundingMode.DOWN).toString());
|
||||
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())) {
|
||||
PGTExchangeTransferResponse.BalanceData data = errorResponse.getData();
|
||||
//更新数据
|
||||
exchangeMoney.setBalance(data.getAmount());
|
||||
exchangeMoney.setCoinBefore(data.getBeforeBalance());
|
||||
exchangeMoney.setCoinAfter(data.getBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesPGTServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", errorResponse.getCode());
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
return exchangeMoney.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 汇兑转移状态
|
||||
*
|
||||
* @param exchangeTransferMoneyRequestDTO 兑换转账请求dto
|
||||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesPGTServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(exchangeTransferMoneyRequestDTO.getGameExchangeMoneyId());
|
||||
Map<String, Object> paramsMap = new LinkedHashMap<>();
|
||||
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);
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.getIsSuccess(transactionResponse.getCode())) {
|
||||
status = transactionResponse.getData().isSuccess() ? StatusType.SUCCESS.getValue() : StatusType.FAILURE.getValue();
|
||||
} else {
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
ExchangeTransferStatusResponseDTO transferStatusResponseDTO = ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.build();
|
||||
if (!ObjectUtils.isEmpty(transactionResponse.getData())) {
|
||||
transferStatusResponseDTO.setBalance(transactionResponse.getData().getAmount());
|
||||
transferStatusResponseDTO.setCoinBefore(transactionResponse.getData().getBeforeBalance());
|
||||
transferStatusResponseDTO.setCoinAfter(transactionResponse.getData().getAfterBalance());
|
||||
}
|
||||
return transferStatusResponseDTO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
* @param betRecordByTimeDTO 按时间dto投注记录
|
||||
* @return {@link List }<{@link GameBettingDetails }>
|
||||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
//请求参数
|
||||
log.info("GamesPGTServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
|
||||
String startTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getStartTime(), DateUtils.ISO_8601_FORMAT_Z, "GMT+0");
|
||||
String endTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT_Z, "GMT+0");
|
||||
|
||||
String nextId = redisCache.getCacheObject(CacheConstants.PGT_NEXT_ID);
|
||||
|
||||
|
||||
Map<String, Object> paramsMap = new LinkedHashMap<>();
|
||||
paramsMap.put("productId", productId);
|
||||
paramsMap.put("startTime", startTime);
|
||||
paramsMap.put("endTime", endTime);
|
||||
paramsMap.put("nextId", nextId);
|
||||
Map<String, String> key = this.getKey(betRecordByTimeDTO);
|
||||
|
||||
PGTTransactionDetailsResponse betRecordByTime = pgtClient.getBetRecordByTime(JsonUtil.mapToQueryString(paramsMap), key);
|
||||
|
||||
if (this.getIsSuccess(betRecordByTime.getCode())) {
|
||||
List<PGTTransactionDetailsResponse.Transaction> txns = betRecordByTime.getData().getTxns();
|
||||
this.batchInsert(txns, betRecordByTimeDTO);
|
||||
//保存本次请求的id
|
||||
redisCache.setCacheObject(CacheConstants.PGT_NEXT_ID, betRecordByTime.getData().getNextId());
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesPGXServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordByTime.getCode(), betRecordByTime.getMessage());
|
||||
throw new BaseException(betRecordByTime.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 按历史时间获取投注记录
|
||||
*
|
||||
* @param betRecordByTimeDTO 按时间dto投注记录
|
||||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
//请求参数
|
||||
log.info("GamesPGTServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
|
||||
String startTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getStartTime(), DateUtils.ISO_8601_FORMAT_Z, "GMT+0");
|
||||
String endTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT_Z, "GMT+0");
|
||||
|
||||
String nextId = redisCache.getCacheObject(CacheConstants.PGT_NEXT_ID);
|
||||
|
||||
|
||||
Map<String, Object> paramsMap = new LinkedHashMap<>();
|
||||
paramsMap.put("productId", productId);
|
||||
paramsMap.put("startTime", startTime);
|
||||
paramsMap.put("endTime", endTime);
|
||||
paramsMap.put("nextId", nextId);
|
||||
Map<String, String> key = this.getKey(betRecordByTimeDTO);
|
||||
|
||||
PGTTransactionDetailsResponse betRecordByTime = pgtClient.getBetRecordByTime(JsonUtil.mapToQueryString(paramsMap), key);
|
||||
|
||||
if (this.getIsSuccess(betRecordByTime.getCode())) {
|
||||
List<PGTTransactionDetailsResponse.Transaction> txns = betRecordByTime.getData().getTxns();
|
||||
this.batchInsert(txns, betRecordByTimeDTO);
|
||||
//保存本次请求的id
|
||||
redisCache.setCacheObject(CacheConstants.PGT_NEXT_ID, betRecordByTime.getData().getNextId());
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesPGXServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordByTime.getCode(), betRecordByTime.getMessage());
|
||||
throw new BaseException(betRecordByTime.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 赠送免费局数
|
||||
*
|
||||
* @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) {
|
||||
//请求参数
|
||||
log.info("GamesPGTServiceImpl [getGameDetail] 请求参数 {}", getGameDetailRequestDTO);
|
||||
|
||||
List<GameBettingDetails> gameBettingDetails = gameBettingDetailsService.selectGameBettingDetailsList(GameBettingDetailsDTO.builder()
|
||||
.wagersId(getGameDetailRequestDTO.getWagersId())
|
||||
.platformCode(GamePlatforms.PGT.getCode())
|
||||
.build());
|
||||
if (CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||
return null;
|
||||
}
|
||||
GameBettingDetails bettingDetails = gameBettingDetails.get(0);
|
||||
|
||||
|
||||
Map<String, Object> paramsMap = new LinkedHashMap<>();
|
||||
paramsMap.put("productId", productId);
|
||||
paramsMap.put("betId", getGameDetailRequestDTO.getWagersId());
|
||||
paramsMap.put("username", bettingDetails.getAccount());
|
||||
Map<String, String> key = this.getKey(getGameDetailRequestDTO);
|
||||
|
||||
PGTReplayUrlResponseDTO pgtReplayUrlResponseDTO = pgtClient.betTransactionReplay(JsonUtil.mapToQueryString(paramsMap), key);
|
||||
|
||||
if (this.getIsSuccess(pgtReplayUrlResponseDTO.getCode())) {
|
||||
return GetGameDetailResponseDTO.builder()
|
||||
.url(pgtReplayUrlResponseDTO.getData().getUrl())
|
||||
.build();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制会员从游戏注销
|
||||
*
|
||||
* @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());
|
||||
}
|
||||
|
||||
/**
|
||||
* 游戏演示登录
|
||||
*
|
||||
* @param gameDemoLoginRequestDTO 游戏演示登录请求dto
|
||||
* @return {@link GameDemoLoginResponseDTO }
|
||||
*/
|
||||
@Override
|
||||
public GameDemoLoginResponseDTO gameDemoLogin(GameDemoLoginRequestDTO gameDemoLoginRequestDTO) {
|
||||
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param dataBean 数据bean
|
||||
*/
|
||||
private synchronized void batchInsert(List<PGTTransactionDetailsResponse.Transaction> dataBean, GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
List<String> wagersIds = new ArrayList<>();
|
||||
|
||||
//数据转化
|
||||
for (PGTTransactionDetailsResponse.Transaction bean : dataBean) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().agentId(gamesBaseRequestDTO.getAgentId())
|
||||
.platform(gamesBaseRequestDTO.getVendor())
|
||||
.data(bean).build());
|
||||
if (!ObjectUtils.isEmpty(bettingDetails)) {
|
||||
bettingDetails.setId(IdUtil.getSnowflakeNextId());
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
wagersIds.add(String.valueOf(bean.getId()));
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||
//查询重复数据id
|
||||
List<String> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds, GamePlatforms.PGX.getInfo());
|
||||
//用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) {
|
||||
//转化类
|
||||
PGTTransactionDetailsResponse.Transaction resultBean = (PGTTransactionDetailsResponse.Transaction) gamesDataBuildDTO.getData();
|
||||
|
||||
|
||||
//只要结算的数据
|
||||
if (!PGTBetStatus.SETTLED.getType().equals(resultBean.getBetStatus())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getUsername());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
return null;
|
||||
}
|
||||
List<PGTGameListResponse.Game> gamesDatas = redisCache.getCacheList(CacheConstants.PGT_GAMES);
|
||||
Map<String, PGTGameListResponse.Game> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(PGTGameListResponse.Game::getCode, e -> e));
|
||||
PGTGameListResponse.Game gamesDataDTO = dataDTOMap.get(resultBean.getGameCode());
|
||||
|
||||
|
||||
//数据构造
|
||||
GameBettingDetails gameBettingDetails = GameBettingDetails.builder()
|
||||
.tenantKey(member.getTenantKey())
|
||||
//保存我们的币种id
|
||||
.currencyCode(gamesDataBuildDTO.getPlatform().getOurCurrency(resultBean.getCurrency()))
|
||||
.memberId(member.getId())
|
||||
.gameCode(resultBean.getGameCode())
|
||||
.gameType(PGTGameType.findSystemByCode(gamesDataDTO.getCategory()))
|
||||
.platformCode(GamePlatforms.PGT.getCode())
|
||||
.gameId(gamesDataDTO.getSystemGameId())
|
||||
.gameName(gamesDataDTO.getName())
|
||||
.gameStatus(PGTPayoutStatus.getByCode(resultBean.getPayoutStatus()).getSystemCode())
|
||||
.gameStatusType(1)
|
||||
.gameCurrencyCode(resultBean.getCurrency())
|
||||
.account(resultBean.getUsername())
|
||||
.wagersId(resultBean.getBetId())
|
||||
.wagersTime(resultBean.getAccountingDate().getTime())
|
||||
.betAmount(resultBean.getStake())
|
||||
.payoffTime(resultBean.getAccountingDate().getTime())
|
||||
.payoffAmount(resultBean.getPayout())
|
||||
.settlementTime(resultBean.getAccountingDate().getTime())
|
||||
.turnover(resultBean.getStake())
|
||||
.orderNo(resultBean.getRoundId())
|
||||
.settlementStatus(SettlementStatusEnum.COMPLETED.getCode())
|
||||
.build();
|
||||
gameBettingDetails.setCreateBy(Constants.SYSTEM);
|
||||
gameBettingDetails.setCreateTime(DateUtils.getNowDate());
|
||||
return gameBettingDetails;
|
||||
}
|
||||
}
|
||||
|
|
@ -106,13 +106,13 @@ public interface PGXClient {
|
|||
*
|
||||
* @return {@link PGXBetHistoryResponse }
|
||||
*/
|
||||
@Get(url = "http://fetch.336699bet.com/fetchbykey.aspx?{parameters}")
|
||||
PGXBetHistoryResponse getBetRecordByTime(@Var("parameters") String parameters);
|
||||
@Get(url = "{url}/fetchbykey.aspx?{parameters}")
|
||||
PGXBetHistoryResponse getBetRecordByTime(@Var("url") String url,@Var("parameters") String parameters);
|
||||
|
||||
|
||||
|
||||
@Get(url = "http://fetch.336699bet.com/fetchArchieve.aspx?{parameters}")
|
||||
PGXBetHistoryResponse getBetRecordByHistoryTime(@Var("parameters") String parameters);
|
||||
@Get(url = "{url}/fetchArchieve.aspx?{parameters}")
|
||||
PGXBetHistoryResponse getBetRecordByHistoryTime(@Var("url") String url,@Var("parameters") String parameters);
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.ff.game.api.pgx.dto;
|
|||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* pgxexchange传输状态响应
|
||||
*
|
||||
|
|
@ -45,7 +47,7 @@ public class PGXExchangeTransferStatusResponse {
|
|||
|
||||
/** 交易金额 (double类型) */
|
||||
@JsonProperty("amount")
|
||||
private double amount;
|
||||
private BigDecimal amount;
|
||||
|
||||
/** 运营商的参考ID (String类型) */
|
||||
@JsonProperty("ref_id")
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ 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.StringUtils;
|
||||
import com.ff.base.utils.sign.Md5Utils;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
|
|
@ -142,7 +143,6 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
@Override
|
||||
public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) {
|
||||
log.info("GamesPGXServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO);
|
||||
// GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyByCode(memberInfoRequestDTO.getAgentId());
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("operatorcode", memberInfoRequestDTO.getAgentId());
|
||||
KeyInfo keyInfo = memberInfoRequestDTO.getKeyInfo();
|
||||
|
|
@ -174,7 +174,6 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
@Override
|
||||
public String loginWithoutRedirect(GamesLogin gamesLogin) {
|
||||
log.info("GamesPGXServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin);
|
||||
// GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyByCode(gamesLogin.getAgentId());
|
||||
KeyInfo keyInfo = gamesLogin.getKeyInfo();
|
||||
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
|
|
@ -213,7 +212,6 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
return CacheConstants.PGX_GAMES;
|
||||
}
|
||||
|
||||
// GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyByCode(gamesBaseRequestDTO.getAgentId());
|
||||
KeyInfo keyInfo = gamesBaseRequestDTO.getKeyInfo();
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("operatorcode", gamesBaseRequestDTO.getAgentId());
|
||||
|
|
@ -230,37 +228,23 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
|
||||
List<PGXGameListResponse.Game> gameLists = JSON.parseArray(gameList.getGamelist(), PGXGameListResponse.Game.class);
|
||||
for (PGXGameListResponse.Game gamesDataDTO : gameLists) {
|
||||
/* GamePlatform gamePlatform = GamePlatform.builder()
|
||||
.platformType(GPXGameType.SL.getSystemCode())
|
||||
.platformCode(GamePlatforms.PGX.getInfo())
|
||||
.build();
|
||||
List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.PGX.getInfo() + XKGameType.findInfoByCode(GPXGameType.SL.getSystemCode()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
Integer platformType = GPXGameType.findSystemByCode(gamesDataDTO.getGameCode());
|
||||
|
||||
Game game = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
.gameCode(gamesDataDTO.getGameId())
|
||||
.platformCode(GamePlatforms.PGX.getCode())
|
||||
.platformType(platformType)
|
||||
.platformType(GPXGameType.SL.getSystemCode())
|
||||
.build();
|
||||
List<Game> games = gameService.selectGameList(game);
|
||||
//不存在这个游戏
|
||||
if (CollectionUtils.isEmpty(games)) {
|
||||
game.setGameSourceType(GPXGameType.SL.getCode());
|
||||
game.setFreespin(Boolean.FALSE);
|
||||
game.setSortNo(gameService.selectMaxSortNo(platformType, GamePlatforms.PGX.getCode()) + 1);
|
||||
game.setSortNo(gameService.selectMaxSortNo(GPXGameType.SL.getSystemCode(), GamePlatforms.PGX.getCode()) + 1);
|
||||
game.setGameName(gamesDataDTO.getGameName());
|
||||
game.setCreateBy(Constants.SYSTEM);
|
||||
game.setPlatformCode(GamePlatforms.PGX.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
game.setPlatformType(GPXGameType.SL.getSystemCode());
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.PGX.getCode(), gamesDataDTO.getGameId()));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getGameName(), "en-US"));
|
||||
game.setNameInfo(nameInfos);
|
||||
|
|
@ -269,16 +253,6 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
game = games.get(0);
|
||||
}
|
||||
gamesDataDTO.setSystemGameId(game.getId());
|
||||
/*List<GameName> gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(game.getGameName()).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("en-US")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -303,11 +277,6 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesPGXServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
|
||||
// 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);
|
||||
|
|
@ -319,7 +288,6 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
);
|
||||
Assert.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), "订单号重复");
|
||||
|
||||
// GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyByCode(exchangeTransferMoneyRequestDTO.getAgentId());
|
||||
|
||||
//获取下一个自增id
|
||||
GameExchangeMoney exchangeMoney = GameExchangeMoney
|
||||
|
|
@ -335,7 +303,10 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.PGX.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
//获取余额
|
||||
String type = TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType()) ? PGXTransferType.WITHDRAW.getCode() : PGXTransferType.DEPOSIT.getCode();
|
||||
|
||||
|
|
@ -346,6 +317,10 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
|
||||
.accounts(exchangeTransferMoneyRequestDTO.getAccount())
|
||||
.agentId(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
.vendor(exchangeTransferMoneyRequestDTO.getVendor())
|
||||
.keyInfo(exchangeTransferMoneyRequestDTO.getKeyInfo())
|
||||
.systemCurrency(exchangeTransferMoneyRequestDTO.getSystemCurrency())
|
||||
.currency(exchangeTransferMoneyRequestDTO.getCurrency())
|
||||
.agentKey(exchangeTransferMoneyRequestDTO.getAgentKey())
|
||||
.build();
|
||||
|
||||
|
|
@ -383,16 +358,13 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
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(keyInfo.getCode());
|
||||
exchangeTransferStatusRequestDTO.setAgentKey(keyInfo.getKey());
|
||||
this.exchangeTransferStatus(exchangeTransferStatusRequestDTO);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesFCServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", errorResponse.getErrCode());
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
|
|
@ -406,7 +378,7 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesPGXServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
Map<String, Object> paramsMap = new LinkedHashMap<>();
|
||||
paramsMap.put("operatorcode", exchangeTransferMoneyRequestDTO.getAgentId());
|
||||
|
|
@ -415,24 +387,16 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
paramsMap.put("signature", key);
|
||||
|
||||
PGXExchangeTransferStatusResponse exchangeTransferStatusResponse = PGXClient.exchangeTransferStatus(JsonUtil.mapToQueryString(paramsMap));
|
||||
Integer status = StatusType.IN_PROGRESS.getValue();
|
||||
if (this.getIsSuccess(exchangeTransferStatusResponse.getErrCode())) {
|
||||
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
|
||||
GameExchangeMoney.builder()
|
||||
.platformCode(GamePlatforms.PGX.getInfo())
|
||||
.transactionId(exchangeTransferMoneyRequestDTO.getOrderId())
|
||||
.build()
|
||||
);
|
||||
|
||||
for (GameExchangeMoney exchangeMoney : gameExchangeMonies) {
|
||||
//更新数据
|
||||
exchangeMoney.setStatus(PGXTransactionStatus.findValueByCode(exchangeTransferStatusResponse.getStatus()));
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
status= PGXTransactionStatus.findValueByCode(exchangeTransferStatusResponse.getStatus());
|
||||
} else {
|
||||
log.error("GamesPGXServiceImpl [exchangeTransferStatus]错误代码{},错误信息{}", exchangeTransferStatusResponse.getErrCode(), exchangeTransferStatusResponse.getErrMsg());
|
||||
return Boolean.FALSE;
|
||||
status = StatusType.FAILURE.getValue();
|
||||
}
|
||||
return ExchangeTransferStatusResponseDTO.builder()
|
||||
.statusType(status)
|
||||
.balance(exchangeTransferStatusResponse.getAmount())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -451,7 +415,8 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
String key = this.getKey(paramsMap, betRecordByTimeDTO);
|
||||
paramsMap.put("versionkey", 0);
|
||||
paramsMap.put("signature", key);
|
||||
PGXBetHistoryResponse betRecordByTime = PGXClient.getBetRecordByTime(JsonUtil.mapToQueryString(paramsMap));
|
||||
String betUrl = betRecordByTimeDTO.getVendor().getUrlInfo().getBetUrl();
|
||||
PGXBetHistoryResponse betRecordByTime = PGXClient.getBetRecordByTime(betUrl,JsonUtil.mapToQueryString(paramsMap));
|
||||
|
||||
if (this.getIsSuccess(betRecordByTime.getErrCode())) {
|
||||
List<PGXBetHistoryResponse.Result> results = JSON.parseArray(betRecordByTime.getResult(), PGXBetHistoryResponse.Result.class);
|
||||
|
|
@ -478,7 +443,8 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
String key = this.getKey(paramsMap, betRecordByTimeDTO);
|
||||
paramsMap.put("versionkey", 0);
|
||||
paramsMap.put("signature", key);
|
||||
PGXBetHistoryResponse betRecordByTime = PGXClient.getBetRecordByHistoryTime(JsonUtil.mapToQueryString(paramsMap));
|
||||
String betUrl = betRecordByTimeDTO.getVendor().getUrlInfo().getBetUrl();
|
||||
PGXBetHistoryResponse betRecordByTime = PGXClient.getBetRecordByHistoryTime(betUrl,JsonUtil.mapToQueryString(paramsMap));
|
||||
|
||||
if (this.getIsSuccess(betRecordByTime.getErrCode())) {
|
||||
List<PGXBetHistoryResponse.Result> results = JSON.parseArray(betRecordByTime.getResult(), PGXBetHistoryResponse.Result.class);
|
||||
|
|
@ -623,10 +589,7 @@ public class GamesPGXServiceImpl implements IGamesService {
|
|||
//转化类
|
||||
PGXBetHistoryResponse.Result resultBean = (PGXBetHistoryResponse.Result) gamesDataBuildDTO.getData();
|
||||
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.PGX.getInfo())
|
||||
// .code(gamesDataBuildDTO.getAgentId())
|
||||
// .build());
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getMember());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import com.ff.base.annotation.Excel;
|
||||
import com.ff.base.enums.StatusType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 交易所转账状态响应数据
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/04/08
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class ExchangeTransferStatusResponseDTO {
|
||||
|
||||
|
||||
/**
|
||||
* 状态类型 StatusType 枚举
|
||||
*/
|
||||
private Integer statusType;
|
||||
|
||||
|
||||
/** 操作金额 */
|
||||
private BigDecimal balance;
|
||||
|
||||
/** 转账前金额(游戏币) */
|
||||
private BigDecimal coinBefore;
|
||||
|
||||
/** 转账后金额(游戏币) */
|
||||
private BigDecimal coinAfter;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
|
@ -11,6 +13,8 @@ import lombok.NoArgsConstructor;
|
|||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class GetGameDetailResponseDTO {
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -221,18 +221,7 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
@Override
|
||||
public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||
// GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID);
|
||||
//没有此平台就新增一个平台
|
||||
/*if (ObjectUtils.isEmpty(gamePlatform)) {
|
||||
gamePlatform = new GamePlatform();
|
||||
gamePlatform.setId(PLATFORM_ID);
|
||||
gamePlatform.setPlatformCode(GamePlatforms.SA.getInfo());
|
||||
gamePlatform.setPlatformType(PlatformType.CARD_GAME.getCode());
|
||||
gamePlatform.setPlatformName(GamePlatforms.SA.getInfo() + PlatformType.CARD_GAME.getName());
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
}*/
|
||||
|
||||
Game game = gameService.selectGameById(GAME_ID);
|
||||
Integer platformType = PlatformType.CARD_GAME.getCode();
|
||||
//不存在这个游戏
|
||||
|
|
@ -240,7 +229,6 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
game = new Game();
|
||||
game.setId(GAME_ID);
|
||||
game.setSortNo(gameService.selectMaxSortNo(platformType, GamePlatforms.SA.getCode()) + 1);
|
||||
//game.setPlatformId(gamePlatform.getId());
|
||||
game.setPlatformCode(GamePlatforms.SA.getCode());
|
||||
game.setPlatformType(platformType);
|
||||
game.setGameCode("1");
|
||||
|
|
@ -249,19 +237,11 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
game.setCreateBy(Constants.SYSTEM);
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo("真人棋牌", "zh-CN"));
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.SA.getCode(), 1));
|
||||
game.setNameInfo(nameInfos);
|
||||
gameService.insertGame(game);
|
||||
gameService.updateGame(game);
|
||||
}
|
||||
// GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID);
|
||||
/*if (ObjectUtils.isEmpty(gameName)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.id(GAME_NAME_ID)
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
|
||||
return CacheConstants.SA_GAMES;
|
||||
}
|
||||
|
||||
|
|
@ -275,10 +255,6 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesSAServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.SA.getInfo())
|
||||
// .code(exchangeTransferMoneyRequestDTO.getAgentId())
|
||||
// .build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
|
||||
|
|
@ -310,6 +286,11 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
.platformCode(GamePlatforms.SA.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
|
||||
exchangeMoney.setStep(GameExchangeStep.CREATE_ORDER.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
|
||||
if (TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) {
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("Username", exchangeTransferMoneyRequestDTO.getAccount());
|
||||
|
|
@ -330,9 +311,13 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
exchangeMoney.setCoinAfter(BigDecimal.ZERO);
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCurrencyBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCurrencyAfter());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesXKServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", errorCode);
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
|
|
@ -358,9 +343,13 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
exchangeMoney.setCoinAfter(saCreditBalanceResponse.getBalance());
|
||||
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
|
||||
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
|
||||
exchangeMoney.setStatus(StatusType.SUCCESS.getValue());
|
||||
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.SUCCESS.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
} else {
|
||||
exchangeMoney.setStep(GameExchangeStep.PLATFORM_TRANSACTION.getCode());
|
||||
exchangeMoney.setStepStatus(GameExchangeStepStatus.FAILURE.getCode());
|
||||
gameExchangeMoneyService.updateGameExchangeMoney(exchangeMoney);
|
||||
log.error("GamesXKServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{}", errorCode);
|
||||
throw new ApiException(ErrorCode.BALANCE_TRANSFER_FAILED.getCode());
|
||||
}
|
||||
|
|
@ -377,7 +366,7 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||
}
|
||||
|
||||
|
|
@ -414,7 +403,7 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{}", errorCode);
|
||||
log.error("GamesSAServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{}", errorCode);
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
|
@ -427,7 +416,33 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
return Boolean.TRUE;
|
||||
String startTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getStartTime(), "Asia/Shanghai", DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
String endTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getEndTime(), "Asia/Shanghai", DateUtils.YYYY_MM_DD_HH_MM_SS);
|
||||
|
||||
//请求参数
|
||||
log.info("GamesSAServiceImpl [getBetRecordByHistoryTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("FromTime", startTime);
|
||||
params.put("ToTime", endTime);
|
||||
String query = JsonUtil.mapToQueryString(params);
|
||||
betRecordByTimeDTO.setQuery(query);
|
||||
String key = this.getKey(betRecordByTimeDTO, "GetAllBetDetailsForTimeIntervalDV");
|
||||
|
||||
String result = SAClient.getBetRecordByTime(key);
|
||||
SAGetAllBetDetailsResponse saGetAllBetDetailsResponse = XmlUtils.xmlDecrypt(result, SAGetAllBetDetailsResponse.class);
|
||||
Integer errorCode = saGetAllBetDetailsResponse.getErrorMsgId();
|
||||
|
||||
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(errorCode)) {
|
||||
//数据组装
|
||||
this.batchInsert(saGetAllBetDetailsResponse, betRecordByTimeDTO);
|
||||
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesSAServiceImpl [getBetRecordByHistoryTime] 获取投注记录失败,错误代码{}", errorCode);
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -569,10 +584,6 @@ public class GamesSAServiceImpl implements IGamesService {
|
|||
//转化类
|
||||
SAGetAllBetDetailsResponse.BetDetail resultBean = (SAGetAllBetDetailsResponse.BetDetail) gamesDataBuildDTO.getData();
|
||||
|
||||
// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(GamePlatforms.SA.getInfo())
|
||||
// .currency(resultBean.getCurrency())
|
||||
// .build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getUsername());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.ff.game.api.km.success;
|
||||
package com.ff.game.api.success;
|
||||
|
||||
|
||||
import com.dtflys.forest.callback.SuccessWhen;
|
||||
|
|
@ -11,7 +11,7 @@ import com.dtflys.forest.http.ForestResponse;
|
|||
* @author shi
|
||||
* @date 2025/04/02
|
||||
*/
|
||||
public class MyKMSuccessCondition implements SuccessWhen {
|
||||
public class MySuccessCondition implements SuccessWhen {
|
||||
|
||||
/**
|
||||
* 请求成功条件
|
||||
|
|
@ -10,6 +10,7 @@ import com.ff.base.exception.base.ApiException;
|
|||
import com.ff.base.exception.base.BaseException;
|
||||
import com.ff.base.utils.DateUtils;
|
||||
import com.ff.base.utils.JsonUtil;
|
||||
import com.ff.base.utils.StringUtils;
|
||||
import com.ff.base.utils.sign.Md5Utils;
|
||||
import com.ff.base.utils.uuid.IdUtils;
|
||||
import com.ff.config.KeyConfig;
|
||||
|
|
@ -226,20 +227,6 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
if (this.getIsSuccess(xkGamesDTO.getCode())) {
|
||||
|
||||
for (XKGamesDTO.DataBean gamesDataDTO : xkGamesDTO.getData()) {
|
||||
/*GamePlatform gamePlatform = GamePlatform.builder()
|
||||
.platformType(XKGameType.findSystemByCode(gamesDataDTO.getGameCategoryId()))
|
||||
.platformCode(GamePlatforms.XK.getCode())
|
||||
.build();
|
||||
List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.XK.getInfo() + XKGameType.findInfoByCode(gamesDataDTO.getGameCategoryId()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}*/
|
||||
Integer platformType = XKGameType.findSystemByCode(gamesDataDTO.getGameCategoryId());
|
||||
Game game = Game.builder()
|
||||
//.platformId(gamePlatform.getId())
|
||||
|
|
@ -257,7 +244,7 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
game.setPlatformType(platformType);
|
||||
game.setGameName(gamesDataDTO.getName());
|
||||
game.setCreateBy(Constants.SYSTEM);
|
||||
|
||||
game.setGameId(StringUtils.addSuffix(GamePlatforms.SA.getCode(), 1));
|
||||
List<NameInfo> nameInfos = new ArrayList<>();
|
||||
nameInfos.add(new NameInfo(gamesDataDTO.getName(), "zh-CN"));
|
||||
game.setNameInfo(nameInfos);
|
||||
|
|
@ -267,15 +254,6 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
game = games.get(0);
|
||||
}
|
||||
gamesDataDTO.setSystemGameId(game.getId());
|
||||
/*List<GameName> gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(game.getGameName()).build());
|
||||
if (CollectionUtils.isEmpty(gameNames)) {
|
||||
gameNameService.insertGameName(GameName.builder()
|
||||
.gameId(game.getId())
|
||||
.gameName(game.getGameName())
|
||||
.langCode("zh-CN")
|
||||
.createBy(Constants.SYSTEM)
|
||||
.build());
|
||||
}*/
|
||||
}
|
||||
|
||||
redisCache.deleteObject(CacheConstants.XK_GAMES);
|
||||
|
|
@ -369,8 +347,8 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
return Boolean.TRUE;
|
||||
public ExchangeTransferStatusResponseDTO exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
return new ExchangeTransferStatusResponseDTO();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -94,5 +94,13 @@ public class Game extends BaseEntity {
|
|||
*/
|
||||
private Integer platformType;
|
||||
|
||||
/**
|
||||
* 名称信息
|
||||
*/
|
||||
private List<NameInfo> nameInfo;
|
||||
|
||||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
private String gameId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,8 +67,8 @@ public class GameBettingDetails extends BaseEntity
|
|||
@Excel(name = "游戏名称")
|
||||
private String gameName;
|
||||
|
||||
/** 注单状态 1: 赢 2: 输 3: 平局 */
|
||||
@Excel(name = "注单状态 1: 赢 2: 输 3: 平局")
|
||||
/** 注单状态 1: 赢 2: 输 3: 平局 4 未知 */
|
||||
@Excel(name = "注单状态 1: 赢 2: 输 3: 平局 4 未知")
|
||||
private Integer gameStatus;
|
||||
|
||||
/** 注单类型
|
||||
|
|
|
|||
|
|
@ -90,5 +90,13 @@ public class GameExchangeMoney extends BaseEntity
|
|||
@Excel(name = "状态 1 成功 2失败")
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 步 GameExchangeStep 枚举
|
||||
*/
|
||||
private Integer step;
|
||||
|
||||
/**
|
||||
* 步骤状态 GameExchangeStepStatus 枚举
|
||||
*/
|
||||
private Integer stepStatus;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,12 @@ import java.io.Serializable;
|
|||
@Builder
|
||||
@NoArgsConstructor
|
||||
public class NameInfo implements Serializable {
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 长
|
||||
*/
|
||||
private String lang;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,12 @@ public class Platform extends BaseEntity {
|
|||
return this.type == Type.MULTI.getCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取我们货币
|
||||
*
|
||||
* @param currency 它们的货币
|
||||
* @return {@link String }
|
||||
*/
|
||||
public String getOurCurrency(String currency) {
|
||||
Set<Map.Entry<String, String>> entrySet= currencyInfo.entrySet();
|
||||
for (Map.Entry<String, String> entry : entrySet) {
|
||||
|
|
|
|||
|
|
@ -13,4 +13,8 @@ public class UrlInfo implements Serializable {
|
|||
private String url;
|
||||
private String loginUrl;
|
||||
private String hallCode;
|
||||
/**
|
||||
* 投注网址
|
||||
*/
|
||||
private String betUrl;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,15 @@ public interface GameMapper {
|
|||
*/
|
||||
Game selectGameById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 按游戏id选择游戏
|
||||
*
|
||||
* @param gameId 游戏id
|
||||
* @return {@link Game }
|
||||
*/
|
||||
Game selectGameByGameId(String gameId);
|
||||
|
||||
/**
|
||||
* 查询平台子游戏管理列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -22,6 +22,15 @@ public interface IGameService {
|
|||
*/
|
||||
Game selectGameById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 按游戏id选择游戏
|
||||
*
|
||||
* @param gameId 游戏id
|
||||
* @return {@link Game }
|
||||
*/
|
||||
Game selectGameByGameId(String gameId);
|
||||
|
||||
/**
|
||||
* 查询平台子游戏管理列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -48,6 +48,17 @@ public class GameServiceImpl implements IGameService {
|
|||
return gameMapper.selectGameById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按游戏id选择游戏
|
||||
*
|
||||
* @param gameId 游戏id
|
||||
* @return {@link Game }
|
||||
*/
|
||||
@Override
|
||||
public Game selectGameByGameId(String gameId) {
|
||||
return gameMapper.selectGameByGameId(gameId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询平台子游戏管理列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -30,9 +30,11 @@ public interface IMemberService
|
|||
/**
|
||||
* 生成会员游戏账号
|
||||
*
|
||||
* @param platformCode 平台代码
|
||||
* @param tenantSn 租户sn
|
||||
* @return {@link String }
|
||||
*/
|
||||
String getMemberGameAccount(String platformCode);
|
||||
String getMemberGameAccount(String platformCode,String tenantSn);
|
||||
|
||||
/**
|
||||
* 新增会员
|
||||
|
|
|
|||
|
|
@ -53,19 +53,21 @@ public class MemberServiceImpl implements IMemberService {
|
|||
* @return {@link String }
|
||||
*/
|
||||
@Override
|
||||
public synchronized String getMemberGameAccount(String platformCode) {
|
||||
public synchronized String getMemberGameAccount(String platformCode,String tenantSn) {
|
||||
String gameAccount = null;
|
||||
if (GamePlatforms.DG.getInfo().equals(platformCode) || GamePlatforms.KM.getInfo().equals(platformCode)) {
|
||||
tenantSn=tenantSn.toUpperCase();
|
||||
do {
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccountUpper();
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccountUpper()+tenantSn;
|
||||
} while (!ObjectUtils.isEmpty(memberMapper.selectMemberByGameAccount(gameAccount)));
|
||||
} else if (GamePlatforms.PG.getInfo().equals(platformCode) || GamePlatforms.PGX.getInfo().equals(platformCode)) {
|
||||
} else if (GamePlatforms.PG.getInfo().equals(platformCode) || GamePlatforms.PGX.getInfo().equals(platformCode) || GamePlatforms.PGT.getInfo().equals(platformCode)) {
|
||||
tenantSn=tenantSn.toLowerCase();
|
||||
do {
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccountLower();
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccountLower()+tenantSn;
|
||||
} while (!ObjectUtils.isEmpty(memberMapper.selectMemberByGameAccount(gameAccount)));
|
||||
} else {
|
||||
do {
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccount();
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccount()+tenantSn;
|
||||
} while (!ObjectUtils.isEmpty(memberMapper.selectMemberByGameAccount(gameAccount)));
|
||||
}
|
||||
|
||||
|
|
@ -129,7 +131,7 @@ public class MemberServiceImpl implements IMemberService {
|
|||
*/
|
||||
@Override
|
||||
public Member selectMemberByGameAccount(String gameAccount) {
|
||||
return memberMapper.selectMemberByGameAccount(gameAccount.toLowerCase());
|
||||
return memberMapper.selectMemberByGameAccount(gameAccount);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ public class GameTask {
|
|||
* @param backTimeMin
|
||||
*/
|
||||
public void syncRealtimeBetRecord(String platformCode, Integer backTimeMin) {
|
||||
this.syncGameList(platformCode);
|
||||
//捞取指定分钟前的数据
|
||||
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin);
|
||||
Long endTime = DateUtils.getNowDate();
|
||||
|
|
@ -134,7 +135,7 @@ public class GameTask {
|
|||
* @param backTimeMin
|
||||
*/
|
||||
public void syncHistoryBetRecord(String platformCode, Integer backTimeMin) {
|
||||
|
||||
this.syncGameList(platformCode);
|
||||
//捞取指定分钟前的数据
|
||||
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin);
|
||||
Long endTime = DateUtils.getNowDate();
|
||||
|
|
@ -206,9 +207,6 @@ public class GameTask {
|
|||
List<GameExchangeMoney> gameExchangeMoneyList = gameExchangeMoneyService.selectGameExchangeMoneyList(GameExchangeMoney.builder().status(StatusType.IN_PROGRESS.getValue()).build());
|
||||
for (GameExchangeMoney exchangeMoney : gameExchangeMoneyList) {
|
||||
try {
|
||||
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
||||
// .platformCode(exchangeMoney.getPlatformCode())
|
||||
// .systemCurrency(exchangeMoney.getCurrencyCode()).build());
|
||||
Platform platform = platformService.get(exchangeMoney.getPlatformCode());
|
||||
if (null == platform) {
|
||||
log.error("平台不存在platformCode:{}", exchangeMoney.getPlatformCode());
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="step" column="step"/>
|
||||
<result property="stepStatus" column="step_status"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
|
|
@ -48,6 +50,8 @@
|
|||
<result property="updateTime" column="update_time"/>
|
||||
<result property="memberAccount" column="member_account"/>
|
||||
<result property="gameAccount" column="game_account"/>
|
||||
<result property="step" column="step"/>
|
||||
<result property="stepStatus" column="step_status"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectGameExchangeMoneyVo">
|
||||
|
|
@ -69,7 +73,9 @@
|
|||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time
|
||||
update_time,
|
||||
step,
|
||||
step_status
|
||||
from ff_game_exchange_money
|
||||
</sql>
|
||||
|
||||
|
|
@ -275,6 +281,12 @@
|
|||
<if test="updateTime != null">
|
||||
update_time,
|
||||
</if>
|
||||
<if test="step != null">
|
||||
step,
|
||||
</if>
|
||||
<if test="stepStatus != null">
|
||||
step_status,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">
|
||||
|
|
@ -334,6 +346,12 @@
|
|||
<if test="updateTime != null">
|
||||
#{updateTime},
|
||||
</if>
|
||||
<if test="step != null">
|
||||
#{step},
|
||||
</if>
|
||||
<if test="stepStatus != null">
|
||||
#{stepStatus},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
|
@ -394,6 +412,12 @@
|
|||
<if test="updateTime != null">
|
||||
update_time = #{updateTime},
|
||||
</if>
|
||||
<if test="step != null">
|
||||
step = #{step},
|
||||
</if>
|
||||
<if test="stepStatus != null">
|
||||
step_status = #{stepStatus},
|
||||
</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
|
|
|||
|
|
@ -12,11 +12,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="gameSourceType" column="game_source_type" />
|
||||
<result property="gameName" column="game_name" />
|
||||
<result property="nameInfo" column="name_info" typeHandler="com.ff.base.handler.JsonListHandler" javaType="com.ff.game.domain.NameInfo" />
|
||||
<result property="gameId" column="game_id" />
|
||||
<result property="platformCode" column="platform_code" />
|
||||
<result property="platformType" column="platform_type" />
|
||||
<result property="freespin" column="freespin" />
|
||||
<result property="demoStatus" column="demo_status" />
|
||||
<result property="stopStatus" column="stop_status" />
|
||||
<result property="platformCode" column="platform_code" />
|
||||
<result property="platformType" column="platform_type" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
|
|
@ -24,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</resultMap>
|
||||
|
||||
<sql id="selectGameVo">
|
||||
select * from ff_game
|
||||
select id, sort_no, game_code,ingress, game_source_type, game_name, freespin, demo_status, stop_status, create_by, create_time, update_by, update_time, name_info, game_id, platform_code, platform_type from ff_game
|
||||
</sql>
|
||||
|
||||
|
||||
|
|
@ -48,19 +49,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</select>
|
||||
|
||||
<select id="selectGameDTOList" parameterType="com.ff.game.dto.GameDTO" resultMap="GameResult">
|
||||
<include refid="selectGameVo"/>
|
||||
<where>
|
||||
<if test="sortNo != null "> and sort_no = #{sortNo}</if>
|
||||
<if test="gameCode != null "> and game_code = #{gameCode}</if>
|
||||
<if test="ingress != null "> and ingress = #{ingress}</if>
|
||||
<if test="gameSourceType != null "> and game_source_type = #{gameSourceType}</if>
|
||||
<if test="gameName != null and gameName != ''"> and game_name like concat('%', #{gameName}, '%')</if>
|
||||
<if test="freespin != null "> and freespin = #{freespin}</if>
|
||||
<if test="demoStatus != null "> and demo_status = #{demoStatus}</if>
|
||||
<if test="stopStatus != null "> and stop_status = #{stopStatus}</if>
|
||||
<if test="platformCode != null "> and platform_code = #{platformCode}</if>
|
||||
<if test="platformType != null "> and platform_type = #{platformType}</if>
|
||||
select g.id,
|
||||
g.sort_no,
|
||||
g.game_code,
|
||||
g.ingress,
|
||||
g.game_source_type,
|
||||
g.game_name,
|
||||
g.freespin,
|
||||
g.demo_status,
|
||||
g.stop_status,
|
||||
g.create_by,
|
||||
g.create_time,
|
||||
g.update_by,
|
||||
g.update_time
|
||||
from ff_game g
|
||||
|
||||
|
||||
<where>
|
||||
<if test="sortNo != null "> and g.sort_no = #{sortNo}</if>
|
||||
<if test="gameCode != null "> and g.game_code = #{gameCode}</if>
|
||||
<if test="ingress != null "> and g.ingress = #{ingress}</if>
|
||||
<if test="gameSourceType != null "> and g.game_source_type = #{gameSourceType}</if>
|
||||
<if test="gameName != null and gameName != ''"> and name_info like concat('%', #{gameName}, '%')</if>
|
||||
<if test="freespin != null "> and g.freespin = #{freespin}</if>
|
||||
<if test="demoStatus != null "> and g.demo_status = #{demoStatus}</if>
|
||||
<if test="stopStatus != null "> and g.stop_status = #{stopStatus}</if>
|
||||
<if test="platformCode != null and platformCode != ''"> and g.platform_code = #{platformCode}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
|
@ -72,11 +86,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="selectGameByGameId" resultMap="GameResult">
|
||||
<include refid="selectGameVo"/>
|
||||
where game_id = #{gameId}
|
||||
</select>
|
||||
|
||||
<insert id="insertGame" parameterType="Game" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into ff_game
|
||||
<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">id,</if>
|
||||
<if test="sortNo != null">sort_no,</if>
|
||||
<if test="platformId != null">platform_id,</if>
|
||||
<if test="gameCode != null">game_code,</if>
|
||||
<if test="ingress != null">ingress,</if>
|
||||
<if test="gameSourceType != null">game_source_type,</if>
|
||||
|
|
@ -88,6 +106,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="nameInfo != null ">name_info,</if>
|
||||
<if test="gameId != null and gameId != ''">game_id,</if>
|
||||
<if test="platformCode != null and platformCode != ''">platform_code,</if>
|
||||
<if test="platformType != null and platformType != ''">platform_type,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if>
|
||||
<if test="sortNo != null">#{sortNo},</if>
|
||||
|
|
@ -102,6 +124,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="nameInfo != null">#{nameInfo, typeHandler=com.ff.base.handler.JsonListHandler,javaType=com.ff.game.domain.NameInfo},</if>
|
||||
<if test="gameId != null and gameId != ''">#{gameId},</if>
|
||||
<if test="platformCode != null and platformCode != ''">#{platformCode},</if>
|
||||
<if test="platformType != null and platformType != ''">#{platformType},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
|
@ -120,6 +146,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="nameInfo != null">name_info = #{nameInfo, typeHandler=com.ff.base.handler.JsonListHandler,javaType=com.ff.game.domain.NameInfo},</if>
|
||||
<if test="gameId != null and gameId != ''">game_id = #{gameId},</if>
|
||||
<if test="platformCode != null and platformCode != ''">platform_code = #{platformCode},</if>
|
||||
<if test="platformType != null and platformType != ''">platform_type = #{platformType},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
|
@ -136,11 +166,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</delete>
|
||||
|
||||
|
||||
<select id="selectMaxSortNoByPlatformId" parameterType="Long" resultType="java.lang.Integer">
|
||||
select ifnull(max(sort_no), 0)
|
||||
from ff_game
|
||||
where platform_id = #{platformId}
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectMaxSortNoBy" resultType="java.lang.Integer">
|
||||
select ifnull(max(sort_no), 0)
|
||||
|
|
@ -148,28 +174,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
where platform_type = #{platformType} and platform_code = #{platformCode}
|
||||
</select>
|
||||
<resultMap id="GameResponseResultMap" type="com.ff.api.response.GameResponse">
|
||||
<result property="id" column="id"/>
|
||||
<result property="id" column="game_id"/>
|
||||
<result property="gameName" column="game_name"/>
|
||||
<result property="freeSpin" column="freespin"/>
|
||||
<result property="demoStatus" column="demo_status"/>
|
||||
<result property="platformCode" column="platform_code"/>
|
||||
<result property="platformType" column="platform_type"/>
|
||||
<result property="platformCode" column="platform_code"/>
|
||||
<result property="ingress" column="ingress"/>
|
||||
<result property="nameInfo" column="name_info" typeHandler="com.ff.base.handler.JsonHandler" javaType="com.ff.game.domain.NameInfo"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
|
||||
<select id="selectGameResponseList" resultMap="GameResponseResultMap">
|
||||
select
|
||||
g.id,
|
||||
g.game_id,
|
||||
g.game_name,
|
||||
g.freespin,
|
||||
g.demo_status,
|
||||
gp.platform_code,
|
||||
g.ingress,
|
||||
gp.platform_type
|
||||
g.platform_type,
|
||||
g.platform_code,
|
||||
g.name_info
|
||||
from ff_game g
|
||||
where g.stop_status=1
|
||||
where g.stop_status=1
|
||||
</select>
|
||||
|
||||
|
||||
|
|
@ -181,7 +209,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<include refid="selectGameVo"/>
|
||||
<where>
|
||||
<if test="sortNo != null "> and sort_no = #{sortNo}</if>
|
||||
<if test="platformId != null "> and platform_id = #{platformId}</if>
|
||||
<if test="gameCode != null "> and game_code = #{gameCode}</if>
|
||||
<if test="ingress != null "> and ingress = #{ingress}</if>
|
||||
<if test="gameSourceType != null "> and game_source_type = #{gameSourceType}</if>
|
||||
|
|
|
|||
Loading…
Reference in New Issue