feat(game): 增加游戏投注记录详细信息

- 在 GameBettingDetails 模型中添加新字段:round, table, seat, betContent
- 更新相关 mapper 和 SQL 文件以支持新字段- 添加 GameDTO 类用于游戏数据传输
- 更新 ApiGameController 和 ApiMemberController 中的相关方法
- 优化部分代码结构,使用 SuperBuilder 等特性
main-p
shi 2025-03-14 13:31:17 +08:00
parent bd1c3d9d9e
commit 47235ed870
87 changed files with 2513 additions and 330 deletions

View File

@ -56,19 +56,9 @@ public class CacheConstants
* pg
*/
public static final String PG_GAMES= "pg_games:";
/**
*
*/
public static final String NOTICE_WINDOW= "notice:window:";
/**
*
* pg
*/
public static final String AGENT_RELATION_KEY = "agentRelation:";
/**
*
*/
public static final String LAYOUT_PREVIEW = "layout:preview:";
public static final String PG_GAMES_BET_CURRENCY= "pg_games:bet:currency";
}

View File

@ -4,7 +4,11 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.util.HashMap;
@ -16,6 +20,9 @@ import java.util.Map;
* @author ff
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity implements Serializable
{
private static final long serialVersionUID = 1L;

View File

@ -22,6 +22,7 @@ public enum ErrorCode {
CURRENCY_EXCHANGE(1006, "不支持币种的汇率"),
FREQUENT_INTERFACE_REQUESTS (1007, "接口请求频繁"),
BALANCE_TRANSFER_FAILED (1008, "余额转移失败"),
LANG_NOT_EXIST(1009, "游戏平台不支持的语言"),
;
// 获取错误码

View File

@ -3,7 +3,11 @@ package com.ff.base.enums;
import lombok.Getter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* ng
@ -25,8 +29,46 @@ public enum NGPlatforms {
this.platform = platform;
}
/**
*
*
* @param code
* @return {@link NGPlatforms }
*/
public static NGPlatforms getByCode(String code) {
for (NGPlatforms platform : NGPlatforms.values()) {
if (platform.code.equalsIgnoreCase(code)) {
return platform;
}
}
return null;
}
/**
*
* @param platformName
* @return true false
*/
public static Boolean exists(String platformName) {
for (NGPlatforms platform : NGPlatforms.values()) {
if (platform.platform.equalsIgnoreCase(platformName)) {
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
/**
*
* @return List<String>
*/
public static List<String> getAllPlatforms() {
return Arrays.stream(NGPlatforms.values())
.map(NGPlatforms::getPlatform)
.collect(Collectors.toList());
}
}

View File

@ -0,0 +1,31 @@
package com.ff.base.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
*
*
* @author shi
* @date 2025/03/13
*/
@Getter
@AllArgsConstructor
public enum NGSettlementStatusEnum {
UNFINISHED(1, 0, "未结算"),
COMPLETED(2, 1, "已完成"),
CANCELED(3, 2, "已取消"),
REVOKED(4, 3, "已撤单");
private final int code;
private final int status;
private final String description;
public static NGSettlementStatusEnum fromStatus(int status) {
return Arrays.stream(values())
.filter(e -> e.status == status)
.findFirst().get();
}
}

View File

@ -0,0 +1,26 @@
package com.ff.base.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
*
*
* @author shi
* @date 2025/03/13
*/
@Getter
@AllArgsConstructor
public enum SettlementStatusEnum {
UNFINISHED(1, "未结算"),
COMPLETED(2, "已完成"),
CANCELED(3, "已取消"),
REVOKED(4, "已撤单");
private final int code;
private final String description;
}

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent
@ -18,7 +19,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgent extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_platform
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantPlatform extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -11,6 +11,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_secret_key
@ -21,7 +22,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantSecretKey extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_white
@ -18,7 +19,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantWhite extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -22,7 +23,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class CreateTenantDTO implements Serializable {
private final static long serialVersionUID = 1L;
/**

View File

@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ff.base.annotation.Excel;
import com.ff.base.core.domain.BaseEntity;
import lombok.*;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent_commission
@ -17,7 +18,7 @@ import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgentCommission extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent_invite
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgentInvite extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent_invite_platform
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgentInvitePlatform extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent_invite_register
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgentInviteRegister extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent_withdrawal
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgentWithdrawal extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -9,6 +9,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.math.BigDecimal;
@ -21,7 +22,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class AgentTenantSecretKeyDTO extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -22,6 +22,8 @@ import com.ff.config.KeyConfig;
import com.ff.game.api.IGamesService;
import com.ff.game.api.request.*;
import com.ff.game.domain.*;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.dto.GameSecretKeyLangDTO;
import com.ff.game.service.*;
import com.ff.member.domain.Member;
import com.ff.member.service.IMemberService;
@ -94,6 +96,13 @@ public class ApiGameController extends BaseController {
@Resource
private IGameExchangeMoneyService gameExchangeMoneyService;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
@Resource
private IGameSecretKeyLangService gameSecretKeyLangService;
@Autowired
@Qualifier("threadPoolTaskExecutor")
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@ -108,10 +117,9 @@ public class ApiGameController extends BaseController {
public AjaxResult list() {
List<GameResponse> gameResponses = gameService.selectGameResponseList();
for (GameResponse gameRespons : gameResponses) {
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder()
.platform(gameRespons.getPlatformCode())
.build());
List<String> currencyCode = gameSecretKeys.stream().map(GameSecretKey::getSystemCurrency).collect(Collectors.toList());
List<GameSecretKeyCurrency> gameSecretKeyCurrencies = gameSecretKeyCurrencyService.selectGameSecretKeyCurrencyList(GameSecretKeyCurrencyDTO.builder().platformCode(gameRespons.getPlatformCode()).build());
List<String> currencyCode = gameSecretKeyCurrencies.stream().map(GameSecretKeyCurrency::getSystemCurrency).collect(Collectors.toList());
gameRespons.setCurrencyCode(currencyCode);
}
return AjaxResult.success(gameResponses);
@ -138,26 +146,32 @@ public class ApiGameController extends BaseController {
TenantSecretKey tenantSecretKey = keyConfig.get();
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gamePlatform.getPlatformCode(), memberCreateApiRequest.getCurrencyCode());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
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());
GameSecretKey gameSecretKeyLang = gameSecretKeyService.findByPlatformAndSystemLangCode(gamePlatform.getPlatformCode(), memberCreateApiRequest.getLangCode());
Assert.notNull(gameSecretKeyLang, "当前语言不存在");
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberCreateApiRequest.getAccount(), memberCreateApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
GamesLogin gamesLogin = GamesLogin.builder()
.agentId(gameSecretKey.getCode())
.agentKey(gameSecretKey.getKey())
.agentId(secretKeyCurrencyDTO.getCode())
.agentKey(secretKeyCurrencyDTO.getKey())
.account(member.getGameAccount())
.gameSecretKeyId(gameSecretKey.getId())
.gameType(game.getGameSourceType())
.currency(secretKeyCurrencyDTO.getCurrency())
.gameId(game.getGameCode())
.homeUrl(memberCreateApiRequest.getHomeUrl())
.platform(memberCreateApiRequest.getPlatform())
.disableFullScreen(memberCreateApiRequest.getDisableFullScreen())
.lang(gameSecretKeyLang.getLang())
.lang(gameSecretKeyLangDTO.getLang())
.build();
String login = iGamesService.loginWithoutRedirect(gamesLogin);
@ -182,7 +196,10 @@ public class ApiGameController extends BaseController {
TenantSecretKey tenantSecretKey = keyConfig.get();
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameExchangeBalanceRequest.getPlatformCode(), gameExchangeBalanceRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameExchangeBalanceRequest.getPlatformCode())
.systemCurrency(gameExchangeBalanceRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
BigDecimal quota = tenantGameQuotaService.gameBalanceExchange(GameBalanceExchange.builder()
@ -205,7 +222,7 @@ public class ApiGameController extends BaseController {
.agentKey(gameSecretKey.getKey())
.orderId(gameExchangeBalanceRequest.getOrderId())
.account(member.getGameAccount())
.gameSecretKeyId(gameSecretKey.getId())
.currency(gameSecretKey.getCurrency())
.tenantKey(tenantSecretKey.getTenantKey())
.quota(quota)
.amount(gameExchangeBalanceRequest.getAmount())
@ -234,7 +251,9 @@ public class ApiGameController extends BaseController {
TenantSecretKey tenantSecretKey = keyConfig.get();
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameCreateFreeSpinRequest.getPlatformCode(), gameCreateFreeSpinRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameCreateFreeSpinRequest.getPlatformCode())
.systemCurrency(gameCreateFreeSpinRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(gameCreateFreeSpinRequest.getAccount(), gameCreateFreeSpinRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
@ -303,15 +322,26 @@ public class ApiGameController extends BaseController {
public AjaxResult getDetail(@Validated @RequestBody GameGetDetailRequest gameGetDetailRequest) {
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameGetDetailRequest.getPlatformCode(), gameGetDetailRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameGetDetailRequest.getPlatformCode())
.systemCurrency(gameGetDetailRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
IGamesService iGamesService = gamesService.get(gameGetDetailRequest.getPlatformCode() + Constants.SERVICE);
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
GameSecretKey gameSecretKeyLang = gameSecretKeyService.findByPlatformAndSystemLangCode(gameGetDetailRequest.getPlatformCode(), gameGetDetailRequest.getLangCode());
Assert.notNull(gameSecretKeyLang, "当前语言不存在");
GameSecretKeyLangDTO gameSecretKeyLang = gameSecretKeyLangService.findGameSecretKeyLangDTO(GameSecretKeyLangDTO.builder()
.platformCode(gameGetDetailRequest.getPlatformCode())
.systemLangCode(gameGetDetailRequest.getLangCode())
.build());
ApiException.notNull(gameSecretKeyLang, ErrorCode.LANG_NOT_EXIST.getCode());
GetGameDetailResponseDTO gameDetail = iGamesService.getGameDetail(GetGameDetailRequestDTO.builder()
@ -331,7 +361,9 @@ public class ApiGameController extends BaseController {
*/
@PostMapping("/kick/member")
public AjaxResult kickMember(@Validated @RequestBody GameKickMemeberRequest gameKickMemeberRequest) {
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameKickMemeberRequest.getPlatformCode(), gameKickMemeberRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameKickMemeberRequest.getPlatformCode())
.systemCurrency(gameKickMemeberRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
TenantSecretKey tenantSecretKey = keyConfig.get();
@ -351,7 +383,10 @@ public class ApiGameController extends BaseController {
@PostMapping("/kick/member/all")
public AjaxResult kickMemberAll(@Validated @RequestBody GameKickMemeberAllRequest gameKickMemeberAllRequest) {
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameKickMemeberAllRequest.getPlatformCode(), gameKickMemeberAllRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameKickMemeberAllRequest.getPlatformCode())
.systemCurrency(gameKickMemeberAllRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
IGamesService iGamesService = gamesService.get(gameKickMemeberAllRequest.getPlatformCode() + Constants.SERVICE);
@ -413,7 +448,9 @@ public class ApiGameController extends BaseController {
*/
@PostMapping("/cancel/free/spin")
public AjaxResult cancelFreeSpin(@Validated @RequestBody GameCancelFreeSpinRequest gameGetFreeSpinDashflowRequest) {
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameGetFreeSpinDashflowRequest.getPlatformCode(), gameGetFreeSpinDashflowRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameGetFreeSpinDashflowRequest.getPlatformCode())
.systemCurrency(gameGetFreeSpinDashflowRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
IGamesService iGamesService = gamesService.get(gameGetFreeSpinDashflowRequest.getPlatformCode() + Constants.SERVICE);
@ -441,7 +478,8 @@ public class ApiGameController extends BaseController {
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().systemCurrency(gameExchangeBalanceAllRequest.getCurrencyCode()).build());
List<GameSecretKeyCurrencyDTO> gameSecretKeys = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder()
.systemCurrency(gameExchangeBalanceAllRequest.getCurrencyCode()).build());
// 创建线程池
@ -452,18 +490,18 @@ public class ApiGameController extends BaseController {
List<Future<Long>> futures = new ArrayList<>();
// 提交异步任务到线程池
for (GameSecretKey gameSecretKey : gameSecretKeys) {
for (GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO : gameSecretKeys) {
futures.add(threadPoolTaskExecutor.submit(() -> {
try {
IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatform() + Constants.SERVICE);
IGamesService iGamesService = gamesService.get(gameSecretKeyCurrencyDTO.getPlatformCode() + Constants.SERVICE);
//操作第三方钱包
ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO = ExchangeTransferMoneyRequestDTO.builder()
.agentId(gameSecretKey.getCode())
.agentKey(gameSecretKey.getKey())
.agentId(gameSecretKeyCurrencyDTO.getCode())
.agentKey(gameSecretKeyCurrencyDTO.getKey())
.orderId(gameExchangeBalanceAllRequest.getOrderId())
.gameSecretKeyId(gameSecretKey.getId())
.amount(BigDecimal.ONE)
.currency(gameSecretKeyCurrencyDTO.getCurrency())
.tenantKey(tenantSecretKey.getTenantKey())
.account(member.getGameAccount())
.transferType(TransferType.ALL.getCode())

View File

@ -19,6 +19,8 @@ import com.ff.config.KeyConfig;
import com.ff.game.api.IGamesService;
import com.ff.game.api.request.*;
import com.ff.game.domain.GameSecretKey;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.service.IGameSecretKeyCurrencyService;
import com.ff.game.service.IGameSecretKeyService;
import com.ff.game.service.IGameService;
import com.ff.member.domain.Member;
@ -78,6 +80,9 @@ public class ApiMemberController extends BaseController {
@Qualifier("threadPoolTaskExecutor")
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
/**
*
*
@ -92,7 +97,10 @@ public class ApiMemberController extends BaseController {
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
TenantSecretKey tenantSecretKey = keyConfig.get();
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(memberCreateApiRequest.getPlatformCode(), memberCreateApiRequest.getCurrencyCode());
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(memberCreateApiRequest.getAccount(), memberCreateApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn());
@ -110,14 +118,14 @@ public class ApiMemberController extends BaseController {
.currencyCode(memberCreateApiRequest.getCurrencyCode())
.build();
int insertMember = memberService.insertMember(member);
Assert.isTrue(insertMember>0, "建立游戏账号失败");
Assert.isTrue(insertMember > 0, "建立游戏账号失败");
}
//向第三方注册账号
CreateMemberRequestDTO gamesBaseRequestDTO = CreateMemberRequestDTO.builder()
.account(gameAccount)
.agentId(gameSecretKey.getCode())
.gameSecretKeyId(gameSecretKey.getId())
.agentKey(gameSecretKey.getKey())
.currency(gameSecretKey.getCurrency())
.build();
Boolean result = iGamesService.createMember(gamesBaseRequestDTO);
Assert.isTrue(result, "建立游戏账号失败");
@ -139,7 +147,10 @@ public class ApiMemberController extends BaseController {
TenantSecretKey tenantSecretKey = keyConfig.get();
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(memberInfoApiRequest.getPlatformCode(), memberInfoApiRequest.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(memberInfoApiRequest.getPlatformCode())
.systemCurrency(memberInfoApiRequest.getCurrencyCode()).build());
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberInfoApiRequest.getAccount(), memberInfoApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
@ -149,7 +160,7 @@ public class ApiMemberController extends BaseController {
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
.accounts(member.getGameAccount())
.agentId(gameSecretKey.getCode())
.gameSecretKeyId(gameSecretKey.getId())
.currency(gameSecretKey.getCurrency())
.agentKey(gameSecretKey.getKey())
.build();
MemberInfoResponseDTO memberInfo = iGamesService.getMemberInfo(gamesBaseRequestDTO);
@ -173,8 +184,8 @@ public class ApiMemberController extends BaseController {
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().systemCurrency(memberInfoAllApiRequest.getCurrencyCode()).build());
List<GameSecretKeyCurrencyDTO> gameSecretKeys = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder()
.systemCurrency(memberInfoAllApiRequest.getCurrencyCode()).build());
// 创建线程池
Map<String, BigDecimal> balanceMap = new LinkedHashMap<>();
@ -184,14 +195,14 @@ public class ApiMemberController extends BaseController {
List<Future<MemberInfoAllResponse>> futures = new ArrayList<>();
// 提交异步任务到线程池
for (GameSecretKey gameSecretKey : gameSecretKeys) {
for (GameSecretKeyCurrencyDTO gameSecretKey : gameSecretKeys) {
futures.add(threadPoolTaskExecutor.submit(() -> {
try {
IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatform() + Constants.SERVICE);
IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatformCode() + Constants.SERVICE);
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
.accounts(member.getGameAccount())
.agentId(gameSecretKey.getCode())
.gameSecretKeyId(gameSecretKey.getId())
.currency(gameSecretKey.getCurrency())
.agentKey(gameSecretKey.getKey())
.build();
//查询余额
@ -200,7 +211,7 @@ public class ApiMemberController extends BaseController {
.account(member.getGameAccount())
.balance(memberInfo.getBalance())
.status(memberInfo.getStatus())
.platformCode(gameSecretKey.getPlatform())
.platformCode(gameSecretKey.getPlatformCode())
.build();
} finally {
latch.countDown(); // 任务完成后减少计数

View File

@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -19,7 +20,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GameBettingDetailsResponse implements Serializable
{
private static final long serialVersionUID = -988976119749917266L;

View File

@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -19,7 +20,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GameExchangeBalanceResponse implements Serializable
{
private static final long serialVersionUID = 1L;

View File

@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
@ -17,7 +18,7 @@ import java.io.Serializable;
*/
@Data
@AllArgsConstructor
@Builder
@SuperBuilder
@NoArgsConstructor
public class GameFreeRecordResponse implements Serializable
{

View File

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -18,7 +19,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GameResponse implements Serializable {
private static final long serialVersionUID = 7932597077733961820L;

View File

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -17,7 +18,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class MemberInfoAllResponse implements Serializable
{
private static final long serialVersionUID = 1L;

View File

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -17,7 +18,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class MemberInfoResponse implements Serializable
{
private static final long serialVersionUID = 1L;

View File

@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_agent_platform
@ -17,7 +18,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantAgentPlatform extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -11,6 +11,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_game_quota
@ -21,7 +22,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantGameQuota extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_game_quota_flow
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantGameQuotaFlow extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_tenant_quota_exchange
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantQuotaExchange extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -21,7 +22,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class BalanceChangesDTO implements Serializable {
private static final long serialVersionUID = -7479292236485670076L;

View File

@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
@ -18,7 +19,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class BalanceRealChangesDTO implements Serializable {
private static final long serialVersionUID = -4864053711644163092L;

View File

@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ -19,7 +20,7 @@ import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GameBalanceExchange implements Serializable {
private final static long serialVersionUID = 3452954102791311247L;

View File

@ -27,6 +27,8 @@ import com.ff.base.system.service.ITenantSecretKeyService;
import com.ff.game.api.IGamesService;
import com.ff.game.api.request.MemberInfoRequestDTO;
import com.ff.game.domain.GameSecretKey;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.service.IGameSecretKeyCurrencyService;
import com.ff.game.service.IGameSecretKeyService;
import com.ff.member.domain.Member;
import com.ff.member.service.IMemberService;
@ -78,6 +80,11 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService {
@Resource
private ITenantPlatformService tenantPlatformService;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
/**
*
*
@ -282,7 +289,10 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService {
@Override
public BigDecimal gameBalanceExchange(GameBalanceExchange gameBalanceExchange) {
// 获取平台接口密钥
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCurrency(gameBalanceExchange.getPlatformCode(), gameBalanceExchange.getCurrencyCode());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(gameBalanceExchange.getPlatformCode())
.currency(gameBalanceExchange.getCurrencyCode()).build());
// 检查平台密钥是否存在,否则抛出异常
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
@ -329,7 +339,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService {
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
.accounts(member.getGameAccount())
.agentId(gameSecretKey.getCode())
.gameSecretKeyId(gameSecretKey.getId())
.currency(gameSecretKey.getCurrency())
.agentKey(gameSecretKey.getKey())
.build();
balanceRequestAmount = iGamesService.getMemberInfo(gamesBaseRequestDTO).getBalance();

View File

@ -30,7 +30,7 @@ public class JILIBetRecordDataResponseDTO {
* id
*/
@JsonProperty("GameId")
private int gameId;
private String gameId;
/**
*
*/

View File

@ -17,7 +17,7 @@ public class JILIGamesDataDTO {
* id
*/
@JsonProperty("GameId")
private int gameId;
private String gameId;
/**
*id

View File

@ -19,6 +19,7 @@ import com.ff.game.api.jili.client.JILIClient;
import com.ff.game.api.jili.dto.*;
import com.ff.game.api.request.*;
import com.ff.game.domain.*;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.service.*;
import com.ff.member.domain.Member;
import com.ff.member.service.IMemberService;
@ -84,7 +85,11 @@ public class GamesJILIServiceImpl implements IGamesService {
@Resource
private IGameBettingDetailsService gameBettingDetailsService;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
@Resource
private IGameNameService gameNameService;
/**
*
*
@ -262,6 +267,24 @@ 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());
}
}
@ -285,7 +308,10 @@ public class GamesJILIServiceImpl implements IGamesService {
@Override
@Transactional
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
String systemByCode = gameSecretKeyService.findSystemByCode(exchangeTransferMoneyRequestDTO.getAgentId(), GamePlatforms.JILI.getInfo());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.code(exchangeTransferMoneyRequestDTO.getAgentId())
.currency(exchangeTransferMoneyRequestDTO.getCurrency()).build());
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
String transactionId = GamePlatforms.JILI.getCode() + IdUtils.simpleUUID();
@ -306,7 +332,7 @@ public class GamesJILIServiceImpl implements IGamesService {
.quota(exchangeTransferMoneyRequestDTO.getQuota())
.balance(exchangeTransferMoneyRequestDTO.getAmount())
.exchangeType(exchangeTransferMoneyRequestDTO.getTransferType())
.currencyCode(systemByCode)
.currencyCode(gameSecretKey.getSystemCurrency())
.memberId(member.getId())
.transactionId(transactionId)
.platformCode(GamePlatforms.JILI.getCode())
@ -421,6 +447,9 @@ 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();
@ -468,8 +497,10 @@ public class GamesJILIServiceImpl implements IGamesService {
member = new Member();
}
for (Game game : gameList) {
GameFreeRecord gameFreeRecord = GameFreeRecord.builder()
.currencyCode(gameSecretKeyService.findSystemByCode(createFreeSpinRequest.getAgentId(), GamePlatforms.JILI.getInfo()))
.currencyCode(gameSecretKey.getSystemCurrency())
.referenceId(referenceId)
.platformCode(GamePlatforms.JILI.getInfo())
.memberId(member.getId())
@ -694,13 +725,17 @@ public class GamesJILIServiceImpl implements IGamesService {
//转化类
JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO = (JILIBetRecordDataResponseDTO) gamesDataBuildDTO.getData();
String systemByCode = gameSecretKeyService.findSystemByCode(jiliBetRecordDataResponseDTO.getAgentId(), GamePlatforms.JILI.getInfo());
GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.code(jiliBetRecordDataResponseDTO.getAgentId())
.platformCode(GamePlatforms.JILI.getInfo()).build());
Member member = memberService.selectMemberByGameAccount(jiliBetRecordDataResponseDTO.getAccount());
if (ObjectUtils.isEmpty(member)) {
return null;
}
List<JILIGamesDataDTO> gamesDatas = redisCache.getCacheList(CacheConstants.JILI_GAMES);
Map<Integer, JILIGamesDataDTO> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(JILIGamesDataDTO::getGameId, e -> e));
Map<String, JILIGamesDataDTO> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(JILIGamesDataDTO::getGameId, e -> e));
JILIGamesDataDTO gamesDataDTO = dataDTOMap.get(jiliBetRecordDataResponseDTO.getGameId());
BigDecimal payoffAmount = BigDecimal.ZERO;
if (GameStatus.WIN.getCode().equals(jiliBetRecordDataResponseDTO.getStatus())) {
@ -713,7 +748,7 @@ public class GamesJILIServiceImpl implements IGamesService {
GameBettingDetails gameBettingDetails = GameBettingDetails.builder()
.tenantKey(member.getTenantKey())
//保存我们的币种id
.currencyCode(systemByCode)
.currencyCode(gameSecretKey.getSystemCurrency())
.memberId(member.getId())
.gameCode(jiliBetRecordDataResponseDTO.getGameId())
.gameType(JILIGameType.findSystemByCode(jiliBetRecordDataResponseDTO.getGameCategoryId()))
@ -732,6 +767,7 @@ public class GamesJILIServiceImpl implements IGamesService {
.settlementTime(jiliBetRecordDataResponseDTO.getSettlementTime())
.turnover(jiliBetRecordDataResponseDTO.getTurnover())
.orderNo(String.valueOf(jiliBetRecordDataResponseDTO.getRoundIndex()))
.settlementStatus(SettlementStatusEnum.COMPLETED.getCode())
.build();
gameBettingDetails.setCreateBy(Constants.SYSTEM);
gameBettingDetails.setCreateTime(DateUtils.getNowDate());

View File

@ -85,4 +85,15 @@ public interface NGClient {
*/
@Post(url = "/server/transferStatus")
ApiNGResponseDTO<ApiExchangeTransferStatusResponseDTO> exchangeTransferStatus(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
/**
*
*
* @param parameters
* @param headerMap
* @return {@link ApiNGResponseDTO }<{@link ApiGameBetRecordPageResponseDTO }>
*/
@Post(url = "server/recordAll")
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> getBetRecordByTime(@JSONBody Map<String, Object> parameters, @Header Map<String, String> headerMap);
}

View File

@ -0,0 +1,129 @@
package com.ff.game.api.ng.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
* apidto
*
* @author shi
* @date 2025/03/12
*/
@Data
public class ApiGameBetRecordPageResponseDTO {
/**
*
*/
private int total;
/**
*
*/
private int pageNo;
/**
*
*/
private int pageSize;
/**
*
*/
private List<GameBetRecord> list;
/**
*
*/
@Data
public static class GameBetRecord {
/**
*
*/
private String playerId;
/**
*
*/
private String platType;
/**
*
*/
private String currency;
/**
*
* 1:2:3:4:5:6:7:
*/
private int gameType;
/**
*
*/
private String gameName;
/**
*
*/
private String round;
/**
*
*/
private String table;
/**
*
*/
private String seat;
/**
*
*/
private BigDecimal betAmount;
/**
*
*/
private BigDecimal validAmount;
/**
*
*/
private BigDecimal settledAmount;
/**
* text
*/
private String betContent;
/**
*
* 0:1:2:3:
*/
private int status;
/**
*
*/
private Long gameOrderId;
/**
* (UTC +8)
*/
private Date betTime;
/**
* (UTC +8)
*/
private Date lastUpdateTime;
}
}

View File

@ -2,6 +2,7 @@ package com.ff.game.api.ng.service.impl;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
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;
@ -10,6 +11,7 @@ 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.SleepUtil;
import com.ff.base.utils.StringUtils;
import com.ff.base.utils.sign.Md5Utils;
@ -20,11 +22,17 @@ import com.ff.game.api.jili.dto.*;
import com.ff.game.api.ng.client.NGClient;
import com.ff.game.api.ng.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.*;
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.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
@ -34,8 +42,11 @@ import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -87,6 +98,20 @@ public class GamesPGServiceImpl implements IGamesService {
@Resource
private IGameBettingDetailsService gameBettingDetailsService;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
@Resource
private IGameNameService gameNameService;
@Resource
private IGameSecretKeyLangService gameSecretKeyLangService;
@Autowired
@Qualifier("threadPoolTaskExecutor")
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
/**
*
@ -139,11 +164,10 @@ public class GamesPGServiceImpl implements IGamesService {
@Override
public Boolean createMember(CreateMemberRequestDTO createMemberRequestDTO) {
log.info("GamesNGServiceImpl [createMember] 请求参数 {}", createMemberRequestDTO);
GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyById(createMemberRequestDTO.getGameSecretKeyId());
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("playerId", createMemberRequestDTO.getAccount());
paramsMap.put("platType", NGPlatforms.PG.getCode());
paramsMap.put("currency", gameSecretKey.getCurrency());
paramsMap.put("currency", createMemberRequestDTO.getCurrency());
Map<String, String> headerMap = this.getKey(createMemberRequestDTO);
ApiNGResponseDTO apiNGResponseDTO = ngClient.createMember(paramsMap, headerMap);
int errorCode = apiNGResponseDTO.getCode();
@ -167,11 +191,10 @@ public class GamesPGServiceImpl implements IGamesService {
@Override
public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) {
log.info("GamesNGServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO);
GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyById(memberInfoRequestDTO.getGameSecretKeyId());
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("playerId", memberInfoRequestDTO.getAccounts());
paramsMap.put("platType", NGPlatforms.PG.getCode());
paramsMap.put("currency", gameSecretKey.getCurrency());
paramsMap.put("currency", memberInfoRequestDTO.getCurrency());
Map<String, String> headerMap = this.getKey(memberInfoRequestDTO);
//这个接口请求稍微重复一次就报错
SleepUtil.sleep(500);
@ -193,13 +216,12 @@ public class GamesPGServiceImpl implements IGamesService {
@Override
public String loginWithoutRedirect(GamesLogin gamesLogin) {
log.info("GamesNGServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin);
GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyById(gamesLogin.getGameSecretKeyId());
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("playerId", gamesLogin.getAccount());
paramsMap.put("platType", NGPlatforms.PG.getCode());
paramsMap.put("currency", gameSecretKey.getCurrency());
paramsMap.put("currency", gamesLogin.getCurrency());
paramsMap.put("gameType", gamesLogin.getGameType());
paramsMap.put("lang", gameSecretKey.getLang());
paramsMap.put("lang", gamesLogin.getLang());
paramsMap.put("gameCode", gamesLogin.getGameId());
paramsMap.put("returnUrl", gamesLogin.getHomeUrl());
paramsMap.put("ingress", PlatformHomeType.WEB.getValue().equals(gamesLogin.getPlatform()) ? IngressType.PC_WEB.getValue() : IngressType.MOBILE_WEB.getValue());
@ -267,9 +289,36 @@ 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());
}
}
}
}
redisCache.deleteObject(CacheConstants.PG_GAMES);
redisCache.setCacheList(CacheConstants.PG_GAMES, gameList.getData());
redisCache.expire(CacheConstants.PG_GAMES, 5L, TimeUnit.HOURS);
@ -289,7 +338,13 @@ public class GamesPGServiceImpl implements IGamesService {
@Transactional
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
log.info("GamesNGServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
GameSecretKey gameSecretKey = gameSecretKeyService.selectGameSecretKeyById(exchangeTransferMoneyRequestDTO.getGameSecretKeyId());
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);
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
@ -308,7 +363,7 @@ public class GamesPGServiceImpl implements IGamesService {
.quota(exchangeTransferMoneyRequestDTO.getQuota())
.balance(exchangeTransferMoneyRequestDTO.getAmount())
.exchangeType(exchangeTransferMoneyRequestDTO.getTransferType())
.currencyCode(gameSecretKey.getSystemCurrency())
.currencyCode(currencyDTO.getSystemCurrency())
.memberId(member.getId())
.transactionId(transactionId)
.platformCode(GamePlatforms.PG.getCode())
@ -316,13 +371,13 @@ public class GamesPGServiceImpl implements IGamesService {
exchangeMoney.setCreateBy(Constants.SYSTEM);
//获取余额
String type = TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType()) ? NGTransferType.TRANSFER_IN.getValue() : NGTransferType.TRANSFER_OUT.getValue();
String type = TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType()) ? NGTransferType.TRANSFER_OUT.getValue() : NGTransferType.TRANSFER_IN.getValue();
//获取当前游戏币
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
.accounts(member.getGameAccount())
.agentId(gameSecretKey.getCode())
.gameSecretKeyId(gameSecretKey.getId())
.agentKey(gameSecretKey.getKey())
.agentId(exchangeTransferMoneyRequestDTO.getAgentId())
.agentKey(exchangeTransferMoneyRequestDTO.getAgentKey())
.currency(currencyDTO.getCurrency())
.build();
MemberInfoResponseDTO memberInfo = this.getMemberInfo(gamesBaseRequestDTO);
//判断是不是转出
@ -330,15 +385,16 @@ public class GamesPGServiceImpl implements IGamesService {
exchangeTransferMoneyRequestDTO.setAmount(memberInfo.getBalance());
}
System.out.print("aa" + transactionId.length());
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("platType", NGPlatforms.PG.getCode());
paramsMap.put("playerId", exchangeTransferMoneyRequestDTO.getAccount());
paramsMap.put("currency", gameSecretKey.getCurrency());
paramsMap.put("currency", currencyDTO.getCurrency());
paramsMap.put("type", type);
paramsMap.put("amount", String.valueOf(exchangeTransferMoneyRequestDTO.getAmount()));
paramsMap.put("orderId", transactionId);
Map<String, String> key = this.getKey(exchangeTransferMoneyRequestDTO);
ApiNGResponseDTO apiNGResponseDTO = ngClient.exchangeTransferByAgentId(paramsMap, key);
if (this.getIsSuccess(apiNGResponseDTO.getCode())) {
@ -346,13 +402,12 @@ public class GamesPGServiceImpl implements IGamesService {
exchangeMoney.setBalance(exchangeTransferMoneyRequestDTO.getAmount());
exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue());
gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney);
ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO=new ExchangeTransferStatusRequestDTO();
ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO();
exchangeTransferStatusRequestDTO.setAccount(exchangeTransferMoneyRequestDTO.getAccount());
exchangeTransferStatusRequestDTO.setCurrency(gameSecretKey.getCurrency());
exchangeTransferStatusRequestDTO.setCurrency(currencyDTO.getCurrency());
exchangeTransferStatusRequestDTO.setOrderId(transactionId);
exchangeTransferStatusRequestDTO.setAgentId(exchangeTransferMoneyRequestDTO.getAgentId());
exchangeTransferStatusRequestDTO.setAgentKey(exchangeTransferMoneyRequestDTO.getAgentKey());
exchangeTransferStatusRequestDTO.setGameSecretKeyId(exchangeTransferMoneyRequestDTO.getGameSecretKeyId());
this.exchangeTransferStatus(exchangeTransferStatusRequestDTO);
} else {
log.error("GamesPGServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{},错误信息{}", apiNGResponseDTO.getCode(), apiNGResponseDTO.getMsg());
@ -389,7 +444,7 @@ public class GamesPGServiceImpl implements IGamesService {
for (GameExchangeMoney exchangeMoney : gameExchangeMonies) {
//更新数据
exchangeMoney.setBalance(apiNGResponseDTOData.getAmount().abs());
exchangeMoney.setCoinBefore(NumberUtil.add(apiNGResponseDTOData.getAmount(), apiNGResponseDTOData.getAfterBalance()));
exchangeMoney.setCoinBefore(NumberUtil.sub(apiNGResponseDTOData.getAfterBalance(), apiNGResponseDTOData.getAmount()));
exchangeMoney.setCoinAfter(apiNGResponseDTOData.getAfterBalance());
exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore());
exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter());
@ -415,7 +470,87 @@ public class GamesPGServiceImpl implements IGamesService {
@Override
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
return null;
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());
Set<String> cacheSet = redisCache.getCacheSet(CacheConstants.PG_GAMES_BET_CURRENCY);
if (CollectionUtils.isEmpty(cacheSet)) {
cacheSet = new HashSet<>();
}
//如果长度一致则清空缓存循环币种
if (cacheSet.size() >= currencys.size()) {
redisCache.deleteObject(CacheConstants.PG_GAMES_BET_CURRENCY);
}
//去掉重复的
currencys.removeAll(cacheSet);
String firstCurrency = currencys.get(0);
GameSecretKeyCurrencyDTO currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(GamePlatforms.PG.getCode())
.currency(firstCurrency)
.build());
currencyDTO.setCurrency("CNY");
betRecordByTimeDTO.setAgentId(currencyDTO.getCode());
betRecordByTimeDTO.setAgentKey(currencyDTO.getKey());
int pageNo = 1;
int pageSize = 1;
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("currency", currencyDTO.getCurrency());
paramsMap.put("pageNo", pageNo);
paramsMap.put("pageSize", pageSize);
Map<String, String> key = this.getKey(betRecordByTimeDTO);
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> betRecordByTime = ngClient.getBetRecordByTime(paramsMap, key);
if (this.getIsSuccess(betRecordByTime.getCode())) {
cacheSet.add(firstCurrency);
redisCache.setCacheSet(CacheConstants.PG_GAMES_BET_CURRENCY, cacheSet);
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> result = betRecordByTime;
AtomicInteger pageNoAtomic = new AtomicInteger(pageNo);
threadPoolTaskExecutor.execute(() -> {
ApiGameBetRecordPageResponseDTO data = result.getData();
//数据组装
this.batchInsert(data);
//总页数
// 计算总页数,确保不会遗漏
int totalPage = (int) Math.ceil((double) data.getTotal() / pageSize);
// 获取下一页数据
while (pageNoAtomic.get() < totalPage && data.getTotal() > 0) {
pageNoAtomic.incrementAndGet();
//请求参数
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("currency", currencyDTO.getCurrency());
paramMap.put("pageNo", pageNo);
paramMap.put("pageSize", pageSize);
//每次翻页请求必须间隔 10 秒钟
SleepUtil.sleep(10000);
ApiNGResponseDTO<ApiGameBetRecordPageResponseDTO> betRecordByTimePage = ngClient.getBetRecordByTime(paramsMap, key);
data = betRecordByTimePage.getData();
//数据组装
this.batchInsert(data);
}
});
}
return Boolean.TRUE;
}
/**
@ -502,6 +637,99 @@ public class GamesPGServiceImpl implements IGamesService {
@Override
public GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO) {
return null;
//转化类
ApiGameBetRecordPageResponseDTO.GameBetRecord resultBean = (ApiGameBetRecordPageResponseDTO.GameBetRecord) gamesDataBuildDTO.getData();
NGPlatforms ngPlatforms = NGPlatforms.getByCode(resultBean.getPlatType());
if (ObjectUtils.isEmpty(ngPlatforms)) {
return null;
}
String platform = ngPlatforms.getPlatform();
List<Game> games = gameService.selectGameDTOList(GameDTO.builder().platformCode(platform).build());
if (CollectionUtils.isEmpty(games)) {
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)) {
return null;
}
GameDTO gameDTO = new GameDTO();
gameDTO.setPlatformCodes(NGPlatforms.getAllPlatforms());
//数据构造
GameBettingDetails gameBettingDetails = GameBettingDetails.builder()
.tenantKey(member.getTenantKey())
//保存我们的币种id
.currencyCode(currencyDTO.getSystemCurrency())
.memberId(member.getId())
.gameCode(gamesDataDTO.getGameCode())
.gameType(NGGameType.findSystemByCode(resultBean.getGameType()))
.platformCode(NGPlatforms.getByCode(resultBean.getPlatType()).getPlatform())
.gameId(gamesDataDTO.getId())
.gameName(gamesDataDTO.getGameName())
.gameStatus(resultBean.getStatus())
.gameStatusType(1)
.gameCurrencyCode(resultBean.getCurrency())
.account(resultBean.getPlayerId())
.wagersId(resultBean.getGameOrderId())
.wagersTime(resultBean.getBetTime().getTime())
.betAmount(resultBean.getBetAmount().abs())
.payoffTime(resultBean.getLastUpdateTime().getTime())
.payoffAmount(resultBean.getSettledAmount())
.settlementTime(resultBean.getLastUpdateTime().getTime())
.turnover(resultBean.getValidAmount())
.orderNo(String.valueOf(resultBean.getRound()))
.settlementStatus(NGSettlementStatusEnum.fromStatus(resultBean.getStatus()).getCode())
.round(resultBean.getRound())
.table(resultBean.getTable())
.seat(resultBean.getSeat())
.betContent(resultBean.getBetContent())
.build();
gameBettingDetails.setCreateBy(Constants.SYSTEM);
gameBettingDetails.setCreateTime(DateUtils.getNowDate());
return gameBettingDetails;
}
/**
*
*
* @param data
*/
private void batchInsert(ApiGameBetRecordPageResponseDTO data) {
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
List<Long> wagersIds = new ArrayList<>();
//数据转化
for (ApiGameBetRecordPageResponseDTO.GameBetRecord bean : data.getList()) {
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).build());
if (!ObjectUtils.isEmpty(bettingDetails)) {
bettingDetails.setId(IdUtil.getSnowflakeNextId());
gameBettingDetails.add(bettingDetails);
}
wagersIds.add(bean.getGameOrderId());
}
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
//查询重复数据id
List<Long> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds);
//用steam流清除list中与wagersIds集合相同的数据
gameBettingDetails = gameBettingDetails.stream()
.filter(detail -> !removeWagersIds.contains(detail.getWagersId()))
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
List<Long> wagersId = gameBettingDetails.stream().map(GameBettingDetails::getWagersId).collect(Collectors.toList());
gameBettingDetailsService.deleteGameBettingDetailsByWagersId(wagersId);
gameBettingDetailsService.batchInsert(gameBettingDetails);
}
}
}
}

View File

@ -37,4 +37,6 @@ public class BetRecordByTimeDTO extends GamesBaseRequestDTO {
}

View File

@ -36,10 +36,12 @@ public class GamesBaseRequestDTO implements Serializable {
private String query;
/**
* id
*
*/
private Long gameSecretKeyId;
private String currency;
}

View File

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* dto
@ -13,7 +14,7 @@ import lombok.NoArgsConstructor;
*/
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
@Data
public class GamesDataBuildDTO
{

View File

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.math.BigDecimal;
@ -17,7 +18,7 @@ import java.math.BigDecimal;
@NoArgsConstructor
@Data
@AllArgsConstructor
@Builder
@SuperBuilder
public class MemberInfoResponseDTO {

View File

@ -37,7 +37,7 @@ public class XKBetRecordResponseDTO {
public static class ResultBean {
private String account;
private Long wagersId;
private Integer gameId;
private String gameId;
private Long wagersTime;
private BigDecimal betAmount;
private Long payoffTime;

View File

@ -31,7 +31,7 @@ public class XKGamesDTO {
/**
* id
*/
private int gameId;
private String gameId;
/**
*
*/

View File

@ -20,6 +20,7 @@ import com.ff.game.api.request.*;
import com.ff.game.api.xk.client.XKClient;
import com.ff.game.api.xk.dto.*;
import com.ff.game.domain.*;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.service.*;
import com.ff.member.domain.Member;
import com.ff.member.service.IMemberService;
@ -74,6 +75,9 @@ public class GamesXKServiceImpl implements IGamesService {
@Resource
private IGameSecretKeyService gameSecretKeyService;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
@Resource
private XKClient xkClient;
@ -84,6 +88,9 @@ public class GamesXKServiceImpl implements IGamesService {
@Resource
private IGameBettingDetailsService gameBettingDetailsService;
@Resource
private IGameNameService gameNameService;
/**
*
@ -273,7 +280,15 @@ 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());
}
}
@ -298,7 +313,11 @@ public class GamesXKServiceImpl implements IGamesService {
@Transactional
public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
log.info("GamesXKServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
String systemByCode = gameSecretKeyService.findSystemByCode(exchangeTransferMoneyRequestDTO.getAgentId(), GamePlatforms.XK.getInfo());
GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(GamePlatforms.XK.getInfo())
.code(exchangeTransferMoneyRequestDTO.getAgentId())
.build());
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
String transactionId = GamePlatforms.XK.getCode() + IdUtils.simpleUUID();
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
@ -317,7 +336,7 @@ public class GamesXKServiceImpl implements IGamesService {
.quota(exchangeTransferMoneyRequestDTO.getQuota())
.balance(exchangeTransferMoneyRequestDTO.getAmount())
.exchangeType(exchangeTransferMoneyRequestDTO.getTransferType())
.currencyCode(systemByCode)
.currencyCode(currencyDTO.getSystemCurrency())
.memberId(member.getId())
.transactionId(transactionId)
.platformCode(GamePlatforms.XK.getCode())
@ -549,13 +568,18 @@ public class GamesXKServiceImpl implements IGamesService {
public GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO) {
//转化类
XKBetRecordResponseDTO.DataBean.ResultBean resultBean = (XKBetRecordResponseDTO.DataBean.ResultBean) gamesDataBuildDTO.getData();
String systemByCode = gameSecretKeyService.findSystemByCode(resultBean.getAgentId(), GamePlatforms.XK.getInfo());
GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
.platformCode(GamePlatforms.XK.getInfo())
.code(resultBean.getAgentId())
.build());
Member member = memberService.selectMemberByGameAccount(resultBean.getAccount());
if (ObjectUtils.isEmpty(member)) {
return null;
}
List<XKGamesDTO.DataBean> gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES);
Map<Integer, XKGamesDTO.DataBean> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(XKGamesDTO.DataBean::getGameId, e -> e));
Map<String, XKGamesDTO.DataBean> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(XKGamesDTO.DataBean::getGameId, e -> e));
XKGamesDTO.DataBean gamesDataDTO = dataDTOMap.get(resultBean.getGameId());
BigDecimal payoffAmount = BigDecimal.ZERO;
@ -568,7 +592,7 @@ public class GamesXKServiceImpl implements IGamesService {
GameBettingDetails gameBettingDetails = GameBettingDetails.builder()
.tenantKey(member.getTenantKey())
//保存我们的币种id
.currencyCode(systemByCode)
.currencyCode(currencyDTO.getSystemCurrency())
.memberId(member.getId())
.gameCode(resultBean.getGameId())
.gameType(XKGameType.findSystemByCode(resultBean.getGameCategoryId()))
@ -587,6 +611,7 @@ public class GamesXKServiceImpl implements IGamesService {
.settlementTime(resultBean.getSettlementTime())
.turnover(resultBean.getTurnover())
.orderNo(String.valueOf(resultBean.getRoundIndex()))
.settlementStatus(SettlementStatusEnum.COMPLETED.getCode())
.build();
gameBettingDetails.setCreateBy(Constants.SYSTEM);
gameBettingDetails.setCreateTime(DateUtils.getNowDate());

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game
@ -18,7 +19,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class Game extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_betting_details
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GameBettingDetails extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ -47,7 +48,7 @@ public class GameBettingDetails extends BaseEntity
/** 游戏id */
@Excel(name = "游戏id ")
private Integer gameCode;
private String gameCode;
/** 游戏id */
@Excel(name = "游戏id")
@ -70,7 +71,17 @@ public class GameBettingDetails extends BaseEntity
@Excel(name = "注单状态 1: 赢 2: 输 3: 平局")
private Integer gameStatus;
/** 注单类型 */
/**
* 1
9
11
12
17 ()
18 ()
19
28
*/
@Excel(name = "注单类型")
private Integer gameStatusType;
@ -82,6 +93,27 @@ public class GameBettingDetails extends BaseEntity
@Excel(name = "游戏账号")
private String account;
/**
*
*/
private String round;
/**
*
*/
private String table;
/**
*
*/
private String seat;
/**
* text
*/
private String betContent;
/** 游戏注单唯一值 */
@Excel(name = "游戏注单唯一值")
@JsonSerialize(using = ToStringSerializer.class)
@ -119,7 +151,7 @@ public class GameBettingDetails extends BaseEntity
@Excel(name = "订单id")
private String orderNo;
/** 结算状态 1 未结算 2已结算 3 已撤单 */
/** 结算状态 1 未结算 2已结算 3 已撤单 4 已取消 */
@Excel(name = "结算状态 1 未结算 2已结算 3 已撤单")
private Integer settlementStatus;

View File

@ -10,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_exchange_money
@ -20,7 +21,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GameExchangeMoney extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -18,7 +18,7 @@ import lombok.experimental.SuperBuilder;
*/
@Data
@AllArgsConstructor
@Builder
@SuperBuilder
@NoArgsConstructor
public class GameFreeRecord extends BaseEntity
{

View File

@ -0,0 +1,50 @@
package com.ff.game.domain;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ff.base.annotation.Excel;
import com.ff.base.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_name
*
* @author shi
* @date 2025-03-13
*/
@Data
@AllArgsConstructor
@SuperBuilder
@NoArgsConstructor
public class GameName extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* $column.columnComment
*/
private Long id;
/**
* id
*/
@JsonSerialize(using = ToStringSerializer.class)
@Excel(name = "游戏id", width = 30, dateFormat = "yyyy-MM-dd")
private Long gameId;
/**
*
*/
@Excel(name = "游戏名称")
private String gameName;
/**
*
*/
@Excel(name = "语言代码")
private String langCode;
}

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_platform
@ -18,7 +19,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class GamePlatform extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -1,30 +1,27 @@
package com.ff.game.domain;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ff.base.annotation.Excel;
import com.ff.base.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_secret_key
*
* @author shi
* @date 2025-02-10
* @date 2025-03-13
*/
@Data
@AllArgsConstructor
@SuperBuilder
@NoArgsConstructor
@Builder
public class GameSecretKey extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键id */
@JsonSerialize(using = ToStringSerializer.class)
/** $column.columnComment */
private Long id;
/** 平台 */
@ -40,26 +37,4 @@ public class GameSecretKey extends BaseEntity
private String key;
/**
*
*/
private String currency;
/** 系统币种 */
@Excel(name = "系统币种")
private String systemCurrency;
/** 语言 */
@Excel(name = "语言")
private String lang;
/** 系统语种id */
@Excel(name = "系统语种id")
private String systemLangCode;
/** 信息 */
@Excel(name = "信息")
private String info;
}

View File

@ -0,0 +1,51 @@
package com.ff.game.domain;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ff.base.annotation.Excel;
import com.ff.base.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_secret_key_currency
*
* @author shi
* @date 2025-03-13
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class GameSecretKeyCurrency extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* $column.columnComment
*/
private Long id;
/**
*
*/
@JsonSerialize(using = ToStringSerializer.class)
@Excel(name = "平台", width = 30, dateFormat = "yyyy-MM-dd")
private Long gameSecretKeyId;
/**
*
*/
@Excel(name = "币种")
private String currency;
/**
*
*/
@Excel(name = "系统代码")
private String systemCurrency;
}

View File

@ -0,0 +1,43 @@
package com.ff.game.domain;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ff.base.annotation.Excel;
import com.ff.base.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_game_secret_key_lang
*
* @author shi
* @date 2025-03-13
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class GameSecretKeyLang extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** 平台 */
@JsonSerialize(using = ToStringSerializer.class)
@Excel(name = "平台", width = 30, dateFormat = "yyyy-MM-dd")
private Long gameSecretKeyId;
/** 语言 */
@Excel(name = "语言")
private String lang;
/** 系统语种id */
@Excel(name = "系统语种id")
private String systemLangCode;
}

View File

@ -0,0 +1,31 @@
package com.ff.game.dto;
import com.ff.game.domain.Game;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
/**
* dto
*
* @author shi
* @date 2025/03/12
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class GameDTO extends Game {
/**
*
*/
private List<String> platformCodes;
/**
*
*/
private String platformCode;
}

View File

@ -0,0 +1,28 @@
package com.ff.game.dto;
import com.ff.game.domain.GameName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class GameNameDTO extends GameName {
/**
*
*/
private String platformCode;
/**
*
*/
private String defaultName;
/**
*
*/
private String gameCode;
}

View File

@ -0,0 +1,51 @@
package com.ff.game.dto;
import com.ff.game.domain.GameSecretKeyCurrency;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
/**
* dto
*
* @author shi
* @date 2025/03/13
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class GameSecretKeyCurrencyDTO extends GameSecretKeyCurrency {
/**
*
*/
private String platformCode;
/**
*
*/
private List<String> platformCodes;
/**
* API code
*/
private String code;
/**
* id
*/
private Long gameSecretKeyId;
/**
*
*/
private String key;
}

View File

@ -0,0 +1,21 @@
package com.ff.game.dto;
import com.ff.game.domain.GameSecretKey;
import lombok.Data;
import java.util.List;
/**
* dto
*
* @author shi
* @date 2025/03/12
*/
@Data
public class GameSecretKeyDTO extends GameSecretKey {
/**
*
*/
private List<String> platforms;
}

View File

@ -0,0 +1,41 @@
package com.ff.game.dto;
import com.ff.game.domain.GameSecretKeyLang;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* lang dto
*
* @author shi
* @date 2025/03/13
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class GameSecretKeyLangDTO extends GameSecretKeyLang {
/**
*
*/
private String platformCode;
/**
* API code
*/
private String code;
/**
* id
*/
private Long gameSecretKeyId;
/**
*
*/
private String key;
}

View File

@ -3,6 +3,7 @@ package com.ff.game.mapper;
import java.util.List;
import com.ff.game.domain.GameBettingDetails;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
/**
* Mapper
@ -77,4 +78,13 @@ public interface GameBettingDetailsMapper
* @return int
*/
int batchInsert(List<GameBettingDetails> bettingDetails);
/**
* id
*
* @param wagersIds id
* @return int
*/
int deleteGameBettingDetailsByWagersId(@Param("wagersIds") List<Long> wagersIds);
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.ff.api.response.GameResponse;
import com.ff.game.api.request.GameUniqueDTO;
import com.ff.game.domain.Game;
import com.ff.game.dto.GameDTO;
/**
* Mapper
@ -87,4 +88,13 @@ public interface GameMapper
*/
List<GameResponse> selectGameResponseList();
/**
*
*
* @param gameDTO dto
* @return {@link List }<{@link Game }>
*/
List<Game> selectGameDTOList(GameDTO gameDTO);
}

View File

@ -0,0 +1,72 @@
package com.ff.game.mapper;
import com.ff.game.domain.GameName;
import com.ff.game.dto.GameDTO;
import com.ff.game.dto.GameNameDTO;
import java.util.List;
/**
* Mapper
*
* @author shi
* @date 2025-03-13
*/
public interface GameNameMapper
{
/**
*
*
* @param id
* @return
*/
GameName selectGameNameById(Long id);
/**
*
*
* @param gameName
* @return
*/
List<GameName> selectGameNameList(GameName gameName);
/**
*
*
* @param gameName
* @return
*/
int insertGameName(GameName gameName);
/**
*
*
* @param gameName
* @return
*/
int updateGameName(GameName gameName);
/**
*
*
* @param id
* @return
*/
int deleteGameNameById(Long id);
/**
*
*
* @param ids
* @return
*/
int deleteGameNameByIds(Long[] ids);
/**
*
*
* @param gameNameDTO dto
* @return {@link List }<{@link GameDTO }>
*/
List<GameDTO> selectGameNameDTOList(GameNameDTO gameNameDTO);
}

View File

@ -0,0 +1,79 @@
package com.ff.game.mapper;
import java.util.List;
import com.ff.game.domain.GameSecretKeyCurrency;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
/**
* Mapper
*
* @author shi
* @date 2025-03-13
*/
public interface GameSecretKeyCurrencyMapper
{
/**
*
*
* @param id
* @return
*/
GameSecretKeyCurrency selectGameSecretKeyCurrencyById(Long id);
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
List<GameSecretKeyCurrency> selectGameSecretKeyCurrencyList(GameSecretKeyCurrency gameSecretKeyCurrency);
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
int insertGameSecretKeyCurrency(GameSecretKeyCurrency gameSecretKeyCurrency);
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
int updateGameSecretKeyCurrency(GameSecretKeyCurrency gameSecretKeyCurrency);
/**
*
*
* @param id
* @return
*/
int deleteGameSecretKeyCurrencyById(Long id);
/**
*
*
* @param ids
* @return
*/
int deleteGameSecretKeyCurrencyByIds(Long[] ids);
/**
* dto
*
* @param gameSecretKeyCurrencyDTO dto
* @return {@link GameSecretKeyCurrencyDTO }
*/
GameSecretKeyCurrencyDTO findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO);
/**
*
*
* @param gameSecretKeyCurrencyDTO dto
* @return {@link List }<{@link GameSecretKeyCurrencyDTO }>
*/
List<GameSecretKeyCurrencyDTO> findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO);
}

View File

@ -0,0 +1,71 @@
package com.ff.game.mapper;
import java.util.List;
import com.ff.game.domain.GameSecretKeyLang;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.dto.GameSecretKeyLangDTO;
/**
* Mapper
*
* @author shi
* @date 2025-03-13
*/
public interface GameSecretKeyLangMapper
{
/**
*
*
* @param id
* @return
*/
GameSecretKeyLang selectGameSecretKeyLangById(Long id);
/**
*
*
* @param gameSecretKeyLang
* @return
*/
List<GameSecretKeyLang> selectGameSecretKeyLangList(GameSecretKeyLang gameSecretKeyLang);
/**
*
*
* @param gameSecretKeyLang
* @return
*/
int insertGameSecretKeyLang(GameSecretKeyLang gameSecretKeyLang);
/**
*
*
* @param gameSecretKeyLang
* @return
*/
int updateGameSecretKeyLang(GameSecretKeyLang gameSecretKeyLang);
/**
*
*
* @param id
* @return
*/
int deleteGameSecretKeyLangById(Long id);
/**
*
*
* @param ids
* @return
*/
int deleteGameSecretKeyLangByIds(Long[] ids);
/**
* dto
*
* @param gameSecretKeyLangDTO dto
* @return {@link GameSecretKeyLangDTO }
*/
GameSecretKeyLangDTO findGameSecretKeyLangDTO(GameSecretKeyLangDTO gameSecretKeyLangDTO);
}

View File

@ -1,16 +1,13 @@
package com.ff.game.mapper;
import java.util.List;
import com.ff.base.system.domain.TenantSecretKey;
import com.ff.game.domain.GameSecretKey;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
*
* @author shi
* @date 2025-02-10
* @date 2025-03-13
*/
public interface GameSecretKeyMapper
{
@ -61,30 +58,4 @@ public interface GameSecretKeyMapper
* @return
*/
int deleteGameSecretKeyByIds(Long[] ids);
/**
*
*
* @param code
* @return {@link String }
*/
String findSystemByCode(@Param("code") String code, @Param("platform")String platform);
/**
*
*
* @param platform
* @param systemCode
* @return {@link TenantSecretKey }
*/
GameSecretKey findSecretKeyByPlatformAndSystemCurrency(@Param("platform") String platform, @Param("systemCurrency") String systemCode);
/**
* lang
*
* @param platform
* @param systemLangCode
* @return {@link GameSecretKey }
*/
GameSecretKey findByPlatformAndSystemLangCode(@Param("platform") String platform, @Param("systemLangCode") String systemLangCode);
}

View File

@ -32,6 +32,7 @@ public interface IGameBettingDetailsService
/**
*
*
@ -80,4 +81,12 @@ public interface IGameBettingDetailsService
* @return
*/
int deleteGameBettingDetailsById(Long id);
/**
* id
*
* @param wagersId id
* @return int
*/
int deleteGameBettingDetailsByWagersId(List<Long> wagersId);
}

View File

@ -0,0 +1,74 @@
package com.ff.game.service;
import com.ff.game.domain.GameName;
import com.ff.game.dto.GameDTO;
import com.ff.game.dto.GameNameDTO;
import java.util.List;
/**
* Service
*
* @author shi
* @date 2025-03-13
*/
public interface IGameNameService
{
/**
*
*
* @param id
* @return
*/
GameName selectGameNameById(Long id);
/**
*
*
* @param gameName
* @return
*/
List<GameName> selectGameNameList(GameName gameName);
/**
*
*
* @param gameName
* @return
*/
int insertGameName(GameName gameName);
/**
*
*
* @param gameName
* @return
*/
int updateGameName(GameName gameName);
/**
*
*
* @param ids
* @return
*/
int deleteGameNameByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
int deleteGameNameById(Long id);
/**
*
*
* @param gameNameDTO dto
* @return {@link List }<{@link GameDTO }>
*/
List<GameDTO> selectGameNameDTOList(GameNameDTO gameNameDTO);
}

View File

@ -0,0 +1,86 @@
package com.ff.game.service;
import java.util.List;
import com.ff.game.domain.GameName;
import com.ff.game.domain.GameSecretKey;
import com.ff.game.domain.GameSecretKeyCurrency;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.dto.GameSecretKeyDTO;
/**
* Service
*
* @author shi
* @date 2025-03-13
*/
public interface IGameSecretKeyCurrencyService
{
/**
*
*
* @param id
* @return
*/
GameSecretKeyCurrency selectGameSecretKeyCurrencyById(Long id);
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
List<GameSecretKeyCurrency> selectGameSecretKeyCurrencyList(GameSecretKeyCurrency gameSecretKeyCurrency);
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
int insertGameSecretKeyCurrency(GameSecretKeyCurrency gameSecretKeyCurrency);
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
int updateGameSecretKeyCurrency(GameSecretKeyCurrency gameSecretKeyCurrency);
/**
*
*
* @param ids
* @return
*/
int deleteGameSecretKeyCurrencyByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
int deleteGameSecretKeyCurrencyById(Long id);
/**
* dto
*
* @param gameSecretKeyCurrencyDTO dto
* @return {@link GameSecretKeyCurrencyDTO }
*/
GameSecretKeyCurrencyDTO findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO);
/**
*
*
* @param gameSecretKeyCurrencyDTO dto
* @return {@link List }<{@link GameSecretKeyCurrencyDTO }>
*/
List<GameSecretKeyCurrencyDTO> findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO);
}

View File

@ -0,0 +1,72 @@
package com.ff.game.service;
import java.util.List;
import com.ff.game.domain.GameSecretKeyLang;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.dto.GameSecretKeyDTO;
import com.ff.game.dto.GameSecretKeyLangDTO;
/**
* Service
*
* @author shi
* @date 2025-03-13
*/
public interface IGameSecretKeyLangService {
/**
*
*
* @param id
* @return
*/
GameSecretKeyLang selectGameSecretKeyLangById(Long id);
/**
*
*
* @param gameSecretKeyLang
* @return
*/
List<GameSecretKeyLang> selectGameSecretKeyLangList(GameSecretKeyLang gameSecretKeyLang);
/**
*
*
* @param gameSecretKeyLang
* @return
*/
int insertGameSecretKeyLang(GameSecretKeyLang gameSecretKeyLang);
/**
*
*
* @param gameSecretKeyLang
* @return
*/
int updateGameSecretKeyLang(GameSecretKeyLang gameSecretKeyLang);
/**
*
*
* @param ids
* @return
*/
int deleteGameSecretKeyLangByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
int deleteGameSecretKeyLangById(Long id);
/**
* dto
*
* @param gameSecretKeyLangDTO dto
* @return {@link GameSecretKeyLangDTO }
*/
GameSecretKeyLangDTO findGameSecretKeyLangDTO(GameSecretKeyLangDTO gameSecretKeyLangDTO);
}

View File

@ -1,14 +1,13 @@
package com.ff.game.service;
import java.util.List;
import com.ff.game.domain.GameSecretKey;
/**
* Service
*
* @author shi
* @date 2025-02-10
* @date 2025-03-13
*/
public interface IGameSecretKeyService
{
@ -59,35 +58,4 @@ public interface IGameSecretKeyService
* @return
*/
int deleteGameSecretKeyById(Long id);
/**
*
*
* @param code
* @param platform
* @return {@link String }
*/
String findSystemByCode( String code,String platform);
/**
*
*
* @param platform
* @param systemCode
* @return {@link GameSecretKey }
*/
GameSecretKey findSecretKeyByPlatformAndSystemCurrency(String platform, String systemCode);
/**
* lang
*
* @param platform
* @param systemLangCode
* @return {@link GameSecretKey }
*/
GameSecretKey findByPlatformAndSystemLangCode( String platform,String systemLangCode);
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.ff.api.response.GameResponse;
import com.ff.game.api.request.GameUniqueDTO;
import com.ff.game.domain.Game;
import com.ff.game.dto.GameDTO;
/**
* Service
@ -30,6 +31,15 @@ public interface IGameService
*/
List<Game> selectGameList(Game game);
/**
*
*
* @param gameDTO dto
* @return {@link List }<{@link Game }>
*/
List<Game> selectGameDTOList(GameDTO gameDTO);
/**
*
*

View File

@ -119,4 +119,15 @@ public class GameBettingDetailsServiceImpl implements IGameBettingDetailsService
{
return gameBettingDetailsMapper.deleteGameBettingDetailsById(id);
}
/**
* id
*
* @param wagersId id
* @return int
*/
@Override
public int deleteGameBettingDetailsByWagersId(List<Long> wagersId) {
return gameBettingDetailsMapper.deleteGameBettingDetailsByWagersId(wagersId);
}
}

View File

@ -0,0 +1,113 @@
package com.ff.game.service.impl;
import java.util.Collections;
import java.util.List;
import com.ff.base.utils.DateUtils;
import com.ff.game.domain.GameName;
import com.ff.game.dto.GameDTO;
import com.ff.game.dto.GameNameDTO;
import com.ff.game.mapper.GameNameMapper;
import com.ff.game.service.IGameNameService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.hutool.core.util.IdUtil;
/**
* Service
*
* @author shi
* @date 2025-03-13
*/
@Service
public class GameNameServiceImpl implements IGameNameService
{
@Autowired
private GameNameMapper gameNameMapper;
/**
*
*
* @param id
* @return
*/
@Override
public GameName selectGameNameById(Long id)
{
return gameNameMapper.selectGameNameById(id);
}
/**
*
*
* @param gameName
* @return
*/
@Override
public List<GameName> selectGameNameList(GameName gameName)
{
return gameNameMapper.selectGameNameList(gameName);
}
/**
*
*
* @param gameName
* @return
*/
@Override
public int insertGameName(GameName gameName)
{
gameName.setId(IdUtil.getSnowflakeNextId());
gameName.setCreateTime(DateUtils.getNowDate());
return gameNameMapper.insertGameName(gameName);
}
/**
*
*
* @param gameName
* @return
*/
@Override
public int updateGameName(GameName gameName)
{
gameName.setUpdateTime(DateUtils.getNowDate());
return gameNameMapper.updateGameName(gameName);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteGameNameByIds(Long[] ids)
{
return gameNameMapper.deleteGameNameByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteGameNameById(Long id)
{
return gameNameMapper.deleteGameNameById(id);
}
/**
*
*
* @param gameNameDTO dto
* @return {@link List }<{@link GameDTO }>
*/
@Override
public List<GameDTO> selectGameNameDTOList(GameNameDTO gameNameDTO) {
return gameNameMapper.selectGameNameDTOList(gameNameDTO);
}
}

View File

@ -0,0 +1,123 @@
package com.ff.game.service.impl;
import java.util.Collections;
import java.util.List;
import com.ff.base.utils.DateUtils;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ff.game.mapper.GameSecretKeyCurrencyMapper;
import com.ff.game.domain.GameSecretKeyCurrency;
import com.ff.game.service.IGameSecretKeyCurrencyService;
import cn.hutool.core.util.IdUtil;
/**
* Service
*
* @author shi
* @date 2025-03-13
*/
@Service
public class GameSecretKeyCurrencyServiceImpl implements IGameSecretKeyCurrencyService
{
@Autowired
private GameSecretKeyCurrencyMapper gameSecretKeyCurrencyMapper;
/**
*
*
* @param id
* @return
*/
@Override
public GameSecretKeyCurrency selectGameSecretKeyCurrencyById(Long id)
{
return gameSecretKeyCurrencyMapper.selectGameSecretKeyCurrencyById(id);
}
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
@Override
public List<GameSecretKeyCurrency> selectGameSecretKeyCurrencyList(GameSecretKeyCurrency gameSecretKeyCurrency)
{
return gameSecretKeyCurrencyMapper.selectGameSecretKeyCurrencyList(gameSecretKeyCurrency);
}
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
@Override
public int insertGameSecretKeyCurrency(GameSecretKeyCurrency gameSecretKeyCurrency)
{
gameSecretKeyCurrency.setId(IdUtil.getSnowflakeNextId());
gameSecretKeyCurrency.setCreateTime(DateUtils.getNowDate());
return gameSecretKeyCurrencyMapper.insertGameSecretKeyCurrency(gameSecretKeyCurrency);
}
/**
*
*
* @param gameSecretKeyCurrency
* @return
*/
@Override
public int updateGameSecretKeyCurrency(GameSecretKeyCurrency gameSecretKeyCurrency)
{
gameSecretKeyCurrency.setUpdateTime(DateUtils.getNowDate());
return gameSecretKeyCurrencyMapper.updateGameSecretKeyCurrency(gameSecretKeyCurrency);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteGameSecretKeyCurrencyByIds(Long[] ids)
{
return gameSecretKeyCurrencyMapper.deleteGameSecretKeyCurrencyByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteGameSecretKeyCurrencyById(Long id)
{
return gameSecretKeyCurrencyMapper.deleteGameSecretKeyCurrencyById(id);
}
/**
* dto
*
* @param gameSecretKeyCurrencyDTO dto
* @return {@link GameSecretKeyCurrency }
*/
@Override
public GameSecretKeyCurrencyDTO findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO) {
return gameSecretKeyCurrencyMapper.findByGameSecretKeyCurrencyDTO(gameSecretKeyCurrencyDTO);
}
/**
*
*
* @param gameSecretKeyCurrencyDTO dto
* @return {@link List }<{@link GameSecretKeyCurrencyDTO }>
*/
@Override
public List<GameSecretKeyCurrencyDTO> findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO) {
return gameSecretKeyCurrencyMapper.findByGameSecretKeyCurrencyDTOList(gameSecretKeyCurrencyDTO);
}
}

View File

@ -0,0 +1,106 @@
package com.ff.game.service.impl;
import java.util.List;
import com.ff.base.utils.DateUtils;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.dto.GameSecretKeyLangDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ff.game.mapper.GameSecretKeyLangMapper;
import com.ff.game.domain.GameSecretKeyLang;
import com.ff.game.service.IGameSecretKeyLangService;
import cn.hutool.core.util.IdUtil;
/**
* Service
*
* @author shi
* @date 2025-03-13
*/
@Service
public class GameSecretKeyLangServiceImpl implements IGameSecretKeyLangService {
@Autowired
private GameSecretKeyLangMapper gameSecretKeyLangMapper;
/**
*
*
* @param id
* @return
*/
@Override
public GameSecretKeyLang selectGameSecretKeyLangById(Long id) {
return gameSecretKeyLangMapper.selectGameSecretKeyLangById(id);
}
/**
*
*
* @param gameSecretKeyLang
* @return
*/
@Override
public List<GameSecretKeyLang> selectGameSecretKeyLangList(GameSecretKeyLang gameSecretKeyLang) {
return gameSecretKeyLangMapper.selectGameSecretKeyLangList(gameSecretKeyLang);
}
/**
*
*
* @param gameSecretKeyLang
* @return
*/
@Override
public int insertGameSecretKeyLang(GameSecretKeyLang gameSecretKeyLang) {
gameSecretKeyLang.setId(IdUtil.getSnowflakeNextId());
gameSecretKeyLang.setCreateTime(DateUtils.getNowDate());
return gameSecretKeyLangMapper.insertGameSecretKeyLang(gameSecretKeyLang);
}
/**
*
*
* @param gameSecretKeyLang
* @return
*/
@Override
public int updateGameSecretKeyLang(GameSecretKeyLang gameSecretKeyLang) {
gameSecretKeyLang.setUpdateTime(DateUtils.getNowDate());
return gameSecretKeyLangMapper.updateGameSecretKeyLang(gameSecretKeyLang);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteGameSecretKeyLangByIds(Long[] ids) {
return gameSecretKeyLangMapper.deleteGameSecretKeyLangByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteGameSecretKeyLangById(Long id) {
return gameSecretKeyLangMapper.deleteGameSecretKeyLangById(id);
}
/**
* dto
*
* @param gameSecretKeyLangDTO dto
* @return {@link GameSecretKeyLangDTO }
*/
@Override
public GameSecretKeyLangDTO findGameSecretKeyLangDTO(GameSecretKeyLangDTO gameSecretKeyLangDTO) {
return gameSecretKeyLangMapper.findGameSecretKeyLangDTO(gameSecretKeyLangDTO);
}
}

View File

@ -1,20 +1,20 @@
package com.ff.game.service.impl;
import java.util.List;
import cn.hutool.core.util.IdUtil;
import com.ff.base.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ff.game.mapper.GameSecretKeyMapper;
import com.ff.game.domain.GameSecretKey;
import com.ff.game.service.IGameSecretKeyService;
import cn.hutool.core.util.IdUtil;
/**
* Service
*
* @author shi
* @date 2025-02-10
* @date 2025-03-13
*/
@Service
public class GameSecretKeyServiceImpl implements IGameSecretKeyService
@ -96,41 +96,4 @@ public class GameSecretKeyServiceImpl implements IGameSecretKeyService
{
return gameSecretKeyMapper.deleteGameSecretKeyById(id);
}
/**
*
*
* @param code
* @param platform
* @return {@link String }
*/
@Override
public String findSystemByCode(String code,String platform) {
return gameSecretKeyMapper.findSystemByCode(code,platform);
}
/**
*
*
* @param platform
* @param systemCode
* @return {@link GameSecretKey }
*/
@Override
public GameSecretKey findSecretKeyByPlatformAndSystemCurrency(String platform, String systemCode) {
return gameSecretKeyMapper.findSecretKeyByPlatformAndSystemCurrency(platform,systemCode);
}
/**
* lang
*
* @param platform
* @param systemLangCode
* @return {@link GameSecretKey }
*/
@Override
public GameSecretKey findByPlatformAndSystemLangCode(String platform, String systemLangCode) {
return gameSecretKeyMapper.findByPlatformAndSystemLangCode(platform,systemLangCode);
}
}

View File

@ -8,6 +8,7 @@ import com.ff.api.response.GameResponse;
import com.ff.base.constant.ConfigConstants;
import com.ff.base.utils.DateUtils;
import com.ff.game.api.request.GameUniqueDTO;
import com.ff.game.dto.GameDTO;
import com.ff.member.service.IMemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -56,6 +57,17 @@ public class GameServiceImpl implements IGameService
return gameMapper.selectGameList(game);
}
/**
*
*
* @param gameDTO dto
* @return {@link List }<{@link Game }>
*/
@Override
public List<Game> selectGameDTOList(GameDTO gameDTO) {
return gameMapper.selectGameDTOList(gameDTO);
}
/**
*
*

View File

@ -8,6 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* ff_member
@ -18,7 +19,7 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class Member extends BaseEntity
{
private static final long serialVersionUID = 1L;

View File

@ -3,22 +3,39 @@ package com.ff.quartz.task;
import com.ff.base.constant.Constants;
import com.ff.base.datasource.DynamicDataSourceContextHolder;
import com.ff.base.enums.GamePlatforms;
import com.ff.base.enums.NGPlatforms;
import com.ff.base.enums.StatusType;
import com.ff.base.utils.DateUtils;
import com.ff.game.api.IGamesService;
import com.ff.game.api.ng.client.NGClient;
import com.ff.game.api.ng.dto.ApiExchangeTransferStatusResponseDTO;
import com.ff.game.api.ng.dto.ApiNGResponseDTO;
import com.ff.game.api.request.BetRecordByTimeDTO;
import com.ff.game.api.request.ExchangeTransferStatusRequestDTO;
import com.ff.game.api.request.GamesBaseRequestDTO;
import com.ff.game.api.request.GetFreeSpinDashflowRequestDTO;
import com.ff.game.domain.GameExchangeMoney;
import com.ff.game.domain.GameSecretKey;
import com.ff.game.dto.GameSecretKeyCurrencyDTO;
import com.ff.game.dto.GameSecretKeyDTO;
import com.ff.game.service.IGameExchangeMoneyService;
import com.ff.game.service.IGamePlatformService;
import com.ff.game.service.IGameSecretKeyCurrencyService;
import com.ff.game.service.IGameSecretKeyService;
import com.ff.member.domain.Member;
import com.ff.member.service.IMemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.scheduling.annotation.AsyncConfigurationSelector;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.sql.DataSource;
import javax.xml.crypto.dsig.keyinfo.PGPData;
import java.util.*;
import java.util.stream.Collectors;
@ -40,6 +57,21 @@ public class GameTask {
@Resource
private IGameSecretKeyService gameSecretKeyService;
@Resource
private IGamePlatformService gamePlatformService;
@Resource
private NGClient ngClient;
@Resource
private IGameExchangeMoneyService gameExchangeMoneyService;
@Resource
private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService;
@Resource
private IMemberService memberService;
/**
*
*/
@ -50,13 +82,14 @@ public class GameTask {
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime);
Long endTime = DateUtils.getNowDate();
Map<Object, DataSource> resolvedDataSources = DynamicDataSourceContextHolder.getAllDataSource();
for (Map.Entry<Object, DataSource> entry : resolvedDataSources.entrySet()) {
Object key = entry.getKey();
// 设置数据源类型
DynamicDataSourceContextHolder.setDataSourceType(key.toString());
for (String gameKey : gamesService.keySet()) {
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(gameKey.replace(Constants.SERVICE, "")).build());
String platformCode = gameKey.replace(Constants.SERVICE, "");
if (NGPlatforms.exists(platformCode)) {
continue;
}
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(platformCode).build());
for (GameSecretKey gameSecretKey : gameSecretKeys) {
try {
gamesService.get(gameKey).getGameList(GamesBaseRequestDTO.builder()
@ -78,18 +111,32 @@ public class GameTask {
}
}
}
}
/**
* ngbetting
*
*/
public void insertGameNGBettingDetails() {
try {
BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO();
gamesService.get(NGPlatforms.PG.getPlatform() + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO);
} catch (Exception e) {
log.error("查询 NG 投注记录失败,错误信息 {}", e);
}
}
/**
*
*/
public void insertFreeSpinDashflow() {
Map<Object, DataSource> resolvedDataSources = DynamicDataSourceContextHolder.getAllDataSource();
for (Map.Entry<Object, DataSource> entry : resolvedDataSources.entrySet()) {
Object key = entry.getKey();
// 设置数据源类型
DynamicDataSourceContextHolder.setDataSourceType(key.toString());
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), -70);
for (String gameKey : gamesService.keySet()) {
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(gameKey.replace(Constants.SERVICE, "")).build());
@ -105,9 +152,34 @@ public class GameTask {
}
}
}
}
}
public void updateGameExchangeMoney() {
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());
Member member = memberService.selectMemberById(exchangeMoney.getMemberId());
ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO();
exchangeTransferStatusRequestDTO.setAccount(member.getGameAccount());
exchangeTransferStatusRequestDTO.setCurrency(gameSecretKey.getCurrency());
exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId());
exchangeTransferStatusRequestDTO.setAgentId(gameSecretKey.getCode());
exchangeTransferStatusRequestDTO.setAgentKey(gameSecretKey.getKey());
gamesService.get(exchangeMoney.getPlatformCode()+Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO);
} catch (Exception e) {
log.error("查询 更新交易记录失败,错误信息 {}", e);
}
}
}
}

View File

@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
@ -19,7 +20,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@SuperBuilder
public class TenantDTO implements java.io.Serializable{
private static final long serialVersionUID = 4132444654065053186L;

View File

@ -18,6 +18,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="gameStatusType" column="game_status_type" />
<result property="gameCurrencyCode" column="game_currency_code" />
<result property="account" column="account" />
<result property="round" column="round" />
<result property="table" column="table" />
<result property="seat" column="seat" />
<result property="betContent" column="bet_content" />
<result property="wagersId" column="wagers_id" />
<result property="wagersTime" column="wagers_time" />
<result property="betAmount" column="bet_amount" />
@ -34,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectGameBettingDetailsVo">
select id,tenant_key, currency_code, member_id, game_code, game_id, game_type, platform_code, game_name, game_status, game_status_type, game_currency_code, account, wagers_id, wagers_time, bet_amount, payoff_time, payoff_amount, settlement_time, turnover, order_no, settlement_status, create_by, create_time, update_by, update_time from ff_game_betting_details
select id,tenant_key, currency_code, member_id, game_code, game_id, game_type, platform_code, game_name, game_status, game_status_type, game_currency_code, account, round, `table`, seat, bet_content, wagers_id, wagers_time, bet_amount, payoff_time, payoff_amount, settlement_time, turnover, order_no, settlement_status, create_by, create_time, update_by, update_time from ff_game_betting_details
</sql>
<select id="selectGameBettingDetailsList" parameterType="GameBettingDetails" resultMap="GameBettingDetailsResult">
@ -84,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<foreach item="wagersId" collection="wagersIds" open="(" separator="," close=")">
#{wagersId}
</foreach>
and settlement_status !=1
</select>
@ -103,6 +109,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="gameStatusType != null">game_status_type,</if>
<if test="gameCurrencyCode != null">game_currency_code,</if>
<if test="account != null">account,</if>
<if test="round != null">round,</if>
<if test="table != null">table,</if>
<if test="seat != null">seat,</if>
<if test="betContent != null">bet_content,</if>
<if test="wagersId != null">wagers_id,</if>
<if test="wagersTime != null">wagers_time,</if>
<if test="betAmount != null">bet_amount,</if>
@ -130,6 +140,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="gameStatusType != null">#{gameStatusType},</if>
<if test="gameCurrencyCode != null">#{gameCurrencyCode},</if>
<if test="account != null">#{account},</if>
<if test="round != null">#{round},</if>
<if test="table != null">#{table},</if>
<if test="seat != null">#{seat},</if>
<if test="betContent != null">#{betContent},</if>
<if test="wagersId != null">#{wagersId},</if>
<if test="wagersTime != null">#{wagersTime},</if>
<if test="betAmount != null">#{betAmount},</if>
@ -161,6 +175,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="gameStatusType != null">game_status_type = #{gameStatusType},</if>
<if test="gameCurrencyCode != null">game_currency_code = #{gameCurrencyCode},</if>
<if test="account != null">account = #{account},</if>
<if test="round != null">round = #{round},</if>
<if test="table != null">table = #{table},</if>
<if test="seat != null">seat = #{seat},</if>
<if test="betContent != null">bet_content = #{betContent},</if>
<if test="wagersId != null">wagers_id = #{wagersId},</if>
<if test="wagersTime != null">wagers_time = #{wagersTime},</if>
<if test="betAmount != null">bet_amount = #{betAmount},</if>
@ -188,15 +206,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<delete id="deleteGameBettingDetailsByWagersId" >
delete from ff_game_betting_details where wagers_id in
<foreach item="wagersId" collection="wagersIds" open="(" separator="," close=")">
#{wagersId}
</foreach>
</delete>
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="id">
insert into ff_game_betting_details
<trim prefix="(" suffix=")" suffixOverrides=",">id,
tenant_key, game_id, currency_code, member_id, game_code, game_type, platform_code,
game_name, game_status, game_status_type, game_currency_code, account,
game_name, game_status, game_status_type, game_currency_code, `account`,
wagers_id, wagers_time, bet_amount, payoff_time, payoff_amount,
settlement_time, turnover, order_no, create_by, create_time
</trim>
settlement_time, turnover, order_no, create_by, create_time, settlement_status,
update_by, update_time, round, `table`, seat, bet_content
</trim>
values
<foreach collection="list" item="item" separator=",">
<trim prefix="(" suffix=")" suffixOverrides=",">#{item.id},
@ -221,7 +251,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item.turnover},
#{item.orderNo},
#{item.createBy},
#{item.createTime}
#{item.createTime},
#{item.settlementStatus},
#{item.updateBy},
#{item.updateTime},
#{item.round},
#{item.table},
#{item.seat},
#{item.betContent}
</trim>
</foreach>
</insert>

View File

@ -26,10 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql>
<select id="selectGameByGameCode" resultMap="GameResult">
<include refid="selectGameVo"/>
where game_code = #{gameCode} and platform_id = #{platformId}
</select>
<select id="selectGameList" parameterType="Game" resultMap="GameResult">
<include refid="selectGameVo"/>
@ -45,6 +42,47 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stopStatus != null "> and stop_status = #{stopStatus}</if>
</where>
</select>
<select id="selectGameDTOList" parameterType="com.ff.game.dto.GameDTO" resultMap="GameResult">
select g.id,
g.sort_no,
g.platform_id,
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
inner join ff_game_platform p on g.platform_id = p.id
<where>
<if test="sortNo != null "> and g.sort_no = #{sortNo}</if>
<if test="platformId != null "> and g.platform_id = #{platformId}</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 game_name 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="platformCodes != null and platformCodes.size()>0"> and p.platform_code in
<foreach collection="platforms" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="platformCode != null and platformCode != ''"> and p.platform_code = #{platformCode}</if>
</where>
</select>
<select id="selectGameById" parameterType="Long" resultMap="GameResult">
<include refid="selectGameVo"/>
@ -153,6 +191,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectGameUniqueList" parameterType="com.ff.game.api.request.GameUniqueDTO" resultMap="GameResult">
<include refid="selectGameVo"/>
<where>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ff.game.mapper.GameNameMapper">
<resultMap type="GameName" id="GameNameResult">
<result property="id" column="id" />
<result property="gameId" column="game_id" />
<result property="gameName" column="game_name" />
<result property="langCode" column="lang_code" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap type="com.ff.game.dto.GameNameDTO" id="GameNameDTOResult">
<result property="id" column="id" />
<result property="gameId" column="game_id" />
<result property="gameName" column="game_name" />
<result property="langCode" column="lang_code" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="defaultName" column="default_name" />
<result property="gameCode" column="game_code" />
</resultMap>
<sql id="selectGameNameVo">
select id, game_id, game_name, lang_code, create_by, create_time, update_by, update_time from ff_game_name
</sql>
<select id="selectGameNameList" parameterType="GameName" resultMap="GameNameResult">
<include refid="selectGameNameVo"/>
<where>
<if test="gameId != null "> and game_id = #{gameId}</if>
<if test="gameName != null and gameName != ''"> and game_name = #{gameName}</if>
<if test="langCode != null and langCode != ''"> and lang_code = #{langCode}</if>
</where>
</select>
<select id="selectGameNameDTOList" parameterType="com.ff.game.dto.GameNameDTO" resultMap="GameNameDTOResult">
select gn.id,
gn.game_id,
gn.game_name,
gn.lang_code,
gn.create_by,
gn.create_time,
gn.update_by,
g.game_code,
gn.update_time,
g.game_name as default_name
from ff_game_name gn
inner join ff_game g on g.id = gn.game_id
inner join ff_game_platform gp on gp.id = g.platform_id
<where>
<if test="platformCode != null and platformCode != ''"> and gp.platform_code = #{platformCode}</if>
<if test="gameId != null "> and gn.game_id = #{gameId}</if>
<if test="gameName != null and gameName != ''"> and gn.game_name = #{gameName}</if>
<if test="langCode != null and langCode != ''"> and gn.lang_code =#{langCode}</if>
</where>
</select>
<select id="selectGameNameById" parameterType="Long" resultMap="GameNameResult">
<include refid="selectGameNameVo"/>
where id = #{id}
</select>
<insert id="insertGameName" parameterType="GameName">
insert into ff_game_name
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="gameId != null">game_id,</if>
<if test="gameName != null">game_name,</if>
<if test="langCode != null">lang_code,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="gameId != null">#{gameId},</if>
<if test="gameName != null">#{gameName},</if>
<if test="langCode != null">#{langCode},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateGameName" parameterType="GameName">
update ff_game_name
<trim prefix="SET" suffixOverrides=",">
<if test="gameId != null">game_id = #{gameId},</if>
<if test="gameName != null">game_name = #{gameName},</if>
<if test="langCode != null">lang_code = #{langCode},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteGameNameById" parameterType="Long">
delete from ff_game_name where id = #{id}
</delete>
<delete id="deleteGameNameByIds" parameterType="String">
delete from ff_game_name where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ff.game.mapper.GameSecretKeyCurrencyMapper">
<resultMap type="GameSecretKeyCurrency" id="GameSecretKeyCurrencyResult">
<result property="id" column="id" />
<result property="gameSecretKeyId" column="game_secret_key_id" />
<result property="currency" column="currency" />
<result property="systemCurrency" column="system_currency" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap type="com.ff.game.dto.GameSecretKeyCurrencyDTO" id="GameSecretKeyCurrencyDTOResult">
<result property="id" column="id" />
<result property="gameSecretKeyId" column="game_secret_key_id" />
<result property="currency" column="currency" />
<result property="systemCurrency" column="system_currency" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="code" column="code" />
<result property="key" column="key" />
<result property="platformCode" column="platform_code" />
</resultMap>
<sql id="selectGameSecretKeyCurrencyVo">
select id, game_secret_key_id, currency, system_currency, create_by, create_time, update_by, update_time from ff_game_secret_key_currency
</sql>
<select id="selectGameSecretKeyCurrencyList" parameterType="GameSecretKeyCurrency" resultMap="GameSecretKeyCurrencyResult">
<include refid="selectGameSecretKeyCurrencyVo"/>
<where>
<if test="gameSecretKeyId != null "> and game_secret_key_id = #{gameSecretKeyId}</if>
<if test="currency != null and currency != ''"> and currency = #{currency}</if>
<if test="systemCurrency != null and systemCurrency != ''"> and system_currency = #{systemCurrency}</if>
</where>
</select>
<select id="selectGameSecretKeyCurrencyById" parameterType="Long" resultMap="GameSecretKeyCurrencyResult">
<include refid="selectGameSecretKeyCurrencyVo"/>
where id = #{id}
</select>
<insert id="insertGameSecretKeyCurrency" parameterType="GameSecretKeyCurrency">
insert into ff_game_secret_key_currency
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="gameSecretKeyId != null">game_secret_key_id,</if>
<if test="currency != null">currency,</if>
<if test="systemCurrency != null and systemCurrency != ''">system_currency,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="gameSecretKeyId != null">#{gameSecretKeyId},</if>
<if test="currency != null">#{currency},</if>
<if test="systemCurrency != null and systemCurrency != ''">#{systemCurrency},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateGameSecretKeyCurrency" parameterType="GameSecretKeyCurrency">
update ff_game_secret_key_currency
<trim prefix="SET" suffixOverrides=",">
<if test="gameSecretKeyId != null">game_secret_key_id = #{gameSecretKeyId},</if>
<if test="currency != null">currency = #{currency},</if>
<if test="systemCurrency != null and systemCurrency != ''">system_currency = #{systemCurrency},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteGameSecretKeyCurrencyById" parameterType="Long">
delete from ff_game_secret_key_currency where id = #{id}
</delete>
<delete id="deleteGameSecretKeyCurrencyByIds" parameterType="String">
delete from ff_game_secret_key_currency where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="findByGameSecretKeyCurrencyDTO" parameterType="com.ff.game.dto.GameSecretKeyCurrencyDTO" resultMap="GameSecretKeyCurrencyDTOResult">
select gskc.currency, gskc.system_currency,gskc.game_secret_key_id,gsk.code ,gsk.`key`,gsk.platform as platform_code
from ff_game_secret_key gsk
inner join ff_game_secret_key_currency gskc on gsk.id = gskc.game_secret_key_id
<where>
<if test="currency != null and currency != ''"> and gskc.currency = #{currency}</if>
<if test="systemCurrency != null and systemCurrency != ''"> and gskc.system_currency = #{systemCurrency}</if>
<if test="platformCode != null and platformCode != ''"> and gsk.platform = #{platformCode}</if>
<if test="code != null and code != ''"> and gsk.code = #{code}</if>
<if test="platformCodes != null and platformCodes.size() > 0">
and gsk.platform
<foreach collection="platformCodes" item="platformCode" open=" in (" separator="," close=")">
#{platformCode}
</foreach>
</if>
</where>
limit 1
</select>
<select id="findByGameSecretKeyCurrencyDTOList" parameterType="com.ff.game.dto.GameSecretKeyCurrencyDTO" resultMap="GameSecretKeyCurrencyDTOResult">
select gskc.currency, gskc.system_currency,gskc.game_secret_key_id,gsk.code ,gsk.`key`,gsk.platform as platform_code
from ff_game_secret_key gsk
inner join ff_game_secret_key_currency gskc on gsk.id = gskc.game_secret_key_id
<where>
<if test="currency != null and currency != ''"> and gskc.currency = #{currency}</if>
<if test="systemCurrency != null and systemCurrency != ''"> and gskc.system_currency = #{systemCurrency}</if>
<if test="platformCode != null and platformCode != ''"> and gsk.platform = #{platformCode}</if>
<if test="code != null and code != ''"> and gsk.code = #{code}</if>
<if test="platformCodes != null and platformCodes.size() > 0">
and gsk.platform
<foreach collection="platformCodes" item="platformCode" open=" in (" separator="," close=")">
#{platformCode}
</foreach>
</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ff.game.mapper.GameSecretKeyLangMapper">
<resultMap type="GameSecretKeyLang" id="GameSecretKeyLangResult">
<result property="id" column="id" />
<result property="gameSecretKeyId" column="game_secret_key_id" />
<result property="lang" column="lang" />
<result property="systemLangCode" column="system_lang_code" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap type="com.ff.game.dto.GameSecretKeyLangDTO" id="GameSecretKeyLangDTOResult">
<result property="id" column="id" />
<result property="gameSecretKeyId" column="game_secret_key_id" />
<result property="lang" column="lang" />
<result property="systemLangCode" column="system_lang_code" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="code" column="code" />
<result property="key" column="key" />
</resultMap>
<sql id="selectGameSecretKeyLangVo">
select id, game_secret_key_id, lang, system_lang_code, create_by, create_time, update_by, update_time from ff_game_secret_key_lang
</sql>
<select id="selectGameSecretKeyLangList" parameterType="GameSecretKeyLang" resultMap="GameSecretKeyLangResult">
<include refid="selectGameSecretKeyLangVo"/>
<where>
<if test="gameSecretKeyId != null "> and game_secret_key_id = #{gameSecretKeyId}</if>
<if test="lang != null and lang != ''"> and lang = #{lang}</if>
<if test="systemLangCode != null and systemLangCode != ''"> and system_lang_code = #{systemLangCode}</if>
</where>
</select>
<select id="selectGameSecretKeyLangById" parameterType="Long" resultMap="GameSecretKeyLangResult">
<include refid="selectGameSecretKeyLangVo"/>
where id = #{id}
</select>
<insert id="insertGameSecretKeyLang" parameterType="GameSecretKeyLang">
insert into ff_game_secret_key_lang
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="gameSecretKeyId != null">game_secret_key_id,</if>
<if test="lang != null and lang != ''">lang,</if>
<if test="systemLangCode != null">system_lang_code,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="gameSecretKeyId != null">#{gameSecretKeyId},</if>
<if test="lang != null and lang != ''">#{lang},</if>
<if test="systemLangCode != null">#{systemLangCode},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateGameSecretKeyLang" parameterType="GameSecretKeyLang">
update ff_game_secret_key_lang
<trim prefix="SET" suffixOverrides=",">
<if test="gameSecretKeyId != null">game_secret_key_id = #{gameSecretKeyId},</if>
<if test="lang != null and lang != ''">lang = #{lang},</if>
<if test="systemLangCode != null">system_lang_code = #{systemLangCode},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteGameSecretKeyLangById" parameterType="Long">
delete from ff_game_secret_key_lang where id = #{id}
</delete>
<delete id="deleteGameSecretKeyLangByIds" parameterType="String">
delete from ff_game_secret_key_lang where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="findGameSecretKeyLangDTO" parameterType="com.ff.game.dto.GameSecretKeyLangDTO" resultMap="GameSecretKeyLangDTOResult">
select gskl.lang, gskl.system_lang_code,gsk.code ,gsk.`key`,gskl.game_secret_key_id
from ff_game_secret_key gsk
inner join ff_game_secret_key_lang gskl on gsk.id = gskl.game_secret_key_id
<where>
<if test="lang != null and lang != ''"> and gskl.lang = #{lang}</if>
<if test="systemLangCode != null and systemLangCode != ''"> and gskl.system_lang_code = #{systemLangCode}</if>
<if test="platformCode != null and platformCode != ''"> and gsk.platform = #{platformCode}</if>
<if test="code != null and code != ''"> and gsk.code = #{code}</if>
</where>
limit 1
</select>
</mapper>

View File

@ -9,11 +9,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="platform" column="platform" />
<result property="code" column="code" />
<result property="key" column="key" />
<result property="currency" column="currency" />
<result property="systemCurrency" column="system_currency" />
<result property="lang" column="lang" />
<result property="systemLangCode" column="system_lang_code" />
<result property="info" column="info" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
@ -21,20 +16,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectGameSecretKeyVo">
select id, platform, code,currency, `key`, system_currency, lang, system_lang_code, info, create_by, create_time, update_by, update_time from ff_game_secret_key
select id, platform, code, `key`, create_by, create_time, update_by, update_time from ff_game_secret_key
</sql>
<select id="selectGameSecretKeyList" parameterType="GameSecretKey" resultMap="GameSecretKeyResult">
<include refid="selectGameSecretKeyVo"/>
<where>
<where>
<if test="platform != null and platform != ''"> and platform = #{platform}</if>
<if test="code != null and code != ''"> and code = #{code}</if>
<if test="key != null and key != ''"> and `key` = #{key}</if>
<if test="currency != null and currency != ''"> and currency = #{currency}</if>
<if test="systemCurrency != null and systemCurrency != ''"> and system_currency = #{systemCurrency}</if>
<if test="lang != null and lang != ''"> and lang = #{lang}</if>
<if test="systemLangCode != null and systemLangCode != ''"> and system_lang_code = #{systemLangCode}</if>
<if test="info != null and info != ''"> and info = #{info}</if>
<if test="key != null and key != ''"> and key = #{key}</if>
</where>
</select>
@ -43,31 +33,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<insert id="insertGameSecretKey" parameterType="GameSecretKey" useGeneratedKeys="true" keyProperty="id">
<insert id="insertGameSecretKey" parameterType="GameSecretKey">
insert into ff_game_secret_key
<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">id,</if>
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="platform != null and platform != ''">platform,</if>
<if test="code != null and code != ''">code,</if>
<if test="currency != null and currency != ''">currency,</if>
<if test="key != null and key != ''">`key`,</if>
<if test="systemCurrency != null and systemCurrency != ''">system_currency,</if>
<if test="lang != null and lang != ''">lang,</if>
<if test="systemLangCode != null">system_lang_code,</if>
<if test="info != null and info != ''">info,</if>
<if test="key != null and key != ''">key,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="platform != null and platform != ''">#{platform},</if>
<if test="code != null and code != ''">#{code},</if>
<if test="currency != null and currency != ''">#{currency},</if>
<if test="key != null and key != ''">#{key},</if>
<if test="systemCurrency != null and systemCurrency != ''">#{systemCurrency},</if>
<if test="lang != null and lang != ''">#{lang},</if>
<if test="systemLangCode != null">#{systemLangCode},</if>
<if test="info != null and info != ''">#{info},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
@ -80,12 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<trim prefix="SET" suffixOverrides=",">
<if test="platform != null and platform != ''">platform = #{platform},</if>
<if test="code != null and code != ''">code = #{code},</if>
<if test="key != null and key != ''">`key` = #{key},</if>
<if test="currency != null and currency != ''">currency = #{currency},</if>
<if test="systemCurrency != null and systemCurrency != ''">system_currency = #{systemCurrency},</if>
<if test="lang != null and lang != ''">lang = #{lang},</if>
<if test="systemLangCode != null">system_lang_code = #{systemLangCode},</if>
<if test="info != null and info != ''">info = #{info},</if>
<if test="key != null and key != ''">key = #{key},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
@ -104,20 +81,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="findSystemByCode" resultType="string">
SELECT system_currency
FROM ff_game_secret_key
WHERE code = #{code} and platform = #{platform}
</select>
<select id="findSecretKeyByPlatformAndSystemCurrency" resultType="com.ff.game.domain.GameSecretKey">
<include refid="selectGameSecretKeyVo"/>
where platform = #{platform} and system_currency = #{systemCurrency}
</select>
<select id="findByPlatformAndSystemLangCode" resultType="com.ff.game.domain.GameSecretKey">
<include refid="selectGameSecretKeyVo"/>
where platform = #{platform} and system_lang_code = #{systemLangCode}
</select>
</mapper>