From 40208aab98fa9157942f0fc4f48293a5e16db76a Mon Sep 17 00:00:00 2001 From: cengy Date: Mon, 7 Apr 2025 10:15:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(game):=20=E6=96=B0=E5=A2=9E=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E5=B9=B3=E5=8F=B0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 AE 和 DG 游戏平台的接口实现 - 新增游戏列表、兑换转账、投注记录等功能 - 优化游戏数据构建和处理逻辑 - 移除不必要的服务和缓存操作 --- .../ff/api/controller/ApiGameController.java | 13 + .../api/controller/ApiMemberController.java | 2 + .../game/api/ae/impl/GamesAEServiceImpl.java | 125 +++--- .../dg/service/impl/GamesDGServiceImpl.java | 94 ++--- .../game/api/fc/impl/GamesFCServiceImpl.java | 146 ++++--- .../service/impl/GamesJILIServiceImpl.java | 94 +++-- .../game/api/request/BetRecordByTimeDTO.java | 7 - .../game/api/request/GamesBaseRequestDTO.java | 1 + .../game/api/request/GamesDataBuildDTO.java | 3 + .../java/com/ff/game/domain/CurrencyInfo.java | 5 + .../main/java/com/ff/game/domain/ExtInfo.java | 20 + .../main/java/com/ff/game/domain/Game.java | 3 + .../java/com/ff/game/domain/NameInfo.java | 20 + .../java/com/ff/game/domain/Platform.java | 38 ++ .../java/com/ff/game/mapper/GameMapper.java | 46 +-- .../com/ff/game/service/IGameService.java | 39 +- .../java/com/ff/quartz/task/GameTask.java | 367 ++++++++---------- .../main/resources/mapper/game/GameMapper.xml | 9 + 18 files changed, 521 insertions(+), 511 deletions(-) create mode 100644 ff-game/src/main/java/com/ff/game/domain/ExtInfo.java create mode 100644 ff-game/src/main/java/com/ff/game/domain/NameInfo.java diff --git a/ff-game/src/main/java/com/ff/api/controller/ApiGameController.java b/ff-game/src/main/java/com/ff/api/controller/ApiGameController.java index 2d5ee20..27c3a29 100644 --- a/ff-game/src/main/java/com/ff/api/controller/ApiGameController.java +++ b/ff-game/src/main/java/com/ff/api/controller/ApiGameController.java @@ -191,6 +191,8 @@ public class ApiGameController extends BaseController { .lang(/*gameSecretKeyLangDTO.getLang()*/ targetLang) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(loginRequest.getCurrencyCode()) + .build(); String login = iGamesService.loginWithoutRedirect(gamesLogin); @@ -265,6 +267,8 @@ public class ApiGameController extends BaseController { .transferType(gameExchangeBalanceRequest.getTransferType()) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(gameExchangeBalanceRequest.getCurrencyCode()) + .build(); Long exchangeTransferId = iGamesService.exchangeTransferByAgentId(exchangeTransferMoneyRequestDTO); GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(exchangeTransferId); @@ -349,6 +353,7 @@ public class ApiGameController extends BaseController { .startTime(gameCreateFreeSpinRequest.getStartTime()) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(gameCreateFreeSpinRequest.getCurrencyCode()) .build(); @@ -447,6 +452,7 @@ public class ApiGameController extends BaseController { .agentKey(keyInfo.getKey()) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(gameGetDetailRequest.getCurrencyCode()) .build()); return AjaxResult.success(gameDetail); } @@ -496,6 +502,7 @@ public class ApiGameController extends BaseController { .agentKey(keyInfo.getKey()) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(gameKickMemeberRequest.getCurrencyCode()) .build())); } @@ -533,6 +540,7 @@ public class ApiGameController extends BaseController { .currency(/*gameSecretKey.getCurrency()*/targetCurrency) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(gameKickMemeberAllRequest.getCurrencyCode()) .build(); if (!ObjectUtils.isEmpty(gameKickMemeberAllRequest.getGameId())) { Game game = gameService.selectGameById(gameKickMemeberAllRequest.getGameId()); @@ -617,6 +625,7 @@ public class ApiGameController extends BaseController { .referenceId(request.getReferenceId()) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(request.getCurrencyCode()) .build()); return AjaxResult.success(cancelFreeSpin); } @@ -665,6 +674,7 @@ public class ApiGameController extends BaseController { key.setCurrency(targetCurrency); key.setPlatform(platform); key.setKeyInfo(keyInfo); + key.setSystemCurrency(request.getCurrencyCode()); keys.add(key); } @@ -697,6 +707,7 @@ public class ApiGameController extends BaseController { .account(member.getGameAccount()) .vendor(key.getPlatform()) .keyInfo(key.getKeyInfo()) + .systemCurrency(key.systemCurrency) .transferType(TransferType.ALL.getCode()) .build(); return iGamesService.exchangeTransferByAgentId(exchangeTransferMoneyRequestDTO); @@ -801,6 +812,7 @@ public class ApiGameController extends BaseController { .lang(/*gameSecretKeyLangDTO.getLang()*/targetLang) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(request.getCurrencyCode()) .build(); GameDemoLoginResponseDTO gameDemoLoginResponseDTO = iGamesService.gameDemoLogin(gamesLogin); @@ -817,5 +829,6 @@ public class ApiGameController extends BaseController { private String key; private Platform platform; private KeyInfo keyInfo; + private String systemCurrency; } } diff --git a/ff-game/src/main/java/com/ff/api/controller/ApiMemberController.java b/ff-game/src/main/java/com/ff/api/controller/ApiMemberController.java index 50a08a8..745d42e 100644 --- a/ff-game/src/main/java/com/ff/api/controller/ApiMemberController.java +++ b/ff-game/src/main/java/com/ff/api/controller/ApiMemberController.java @@ -145,6 +145,7 @@ public class ApiMemberController extends BaseController { .currency(targetCurrency) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(memberCreateApiRequest.getCurrencyCode()) .build(); Boolean result = iGamesService.createMember(gamesBaseRequestDTO); Assert.isTrue(result, "建立游戏账号失败"); @@ -201,6 +202,7 @@ public class ApiMemberController extends BaseController { .agentKey(keyInfo.getKey()) .vendor(platform) .keyInfo(keyInfo) + .systemCurrency(request.getCurrencyCode()) .build(); MemberInfoResponseDTO memberInfo = iGamesService.getMemberInfo(gamesBaseRequestDTO); MemberInfoResponse memberInfoResponse = new MemberInfoResponse(); diff --git a/ff-game/src/main/java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java index ac359be..927c928 100644 --- a/ff-game/src/main/java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java @@ -12,23 +12,19 @@ import com.ff.base.system.service.ISysConfigService; import com.ff.base.utils.DateUtils; import com.ff.base.utils.JsonUtil; import com.ff.base.utils.StringUtils; -import com.ff.base.utils.TenantUtils; import com.ff.base.utils.uuid.IdUtils; import com.ff.common.dto.GameBalanceExchange; -import com.ff.common.service.ITenantGameQuotaFlowService; import com.ff.common.service.ITenantGameQuotaService; import com.ff.config.KeyConfig; import com.ff.game.api.IGamesService; import com.ff.game.api.ae.client.AEClient; import com.ff.game.api.ae.dto.*; -import com.ff.game.api.ng.dto.ApiExchangeTransferStatusResponseDTO; -import com.ff.game.api.ng.dto.ApiNGResponseDTO; import com.ff.game.api.request.*; -import com.ff.game.api.xk.dto.XKGamesDTO; import com.ff.game.api.xk.dto.XKKickMemberDTO; import com.ff.game.domain.*; -import com.ff.game.dto.GameSecretKeyCurrencyDTO; -import com.ff.game.service.*; +import com.ff.game.service.IGameBettingDetailsService; +import com.ff.game.service.IGameExchangeMoneyService; +import com.ff.game.service.IGameService; import com.ff.member.domain.Member; import com.ff.member.service.IMemberService; import lombok.extern.slf4j.Slf4j; @@ -65,10 +61,6 @@ public class GamesAEServiceImpl implements IGamesService { private IGameExchangeMoneyService gameExchangeMoneyService; - @Resource - private IGamePlatformService gamePlatformService; - - @Resource private IGameService gameService; @Resource @@ -77,14 +69,6 @@ public class GamesAEServiceImpl implements IGamesService { @Resource private IMemberService memberService; - @Resource - private IGameFreeRecordService gameFreeRecordService; - @Resource - private IGameSecretKeyService gameSecretKeyService; - - @Resource - private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; - @Resource private AEClient AEClient; @@ -95,10 +79,6 @@ public class GamesAEServiceImpl implements IGamesService { @Resource private IGameBettingDetailsService gameBettingDetailsService; - @Resource - private IGameNameService gameNameService; - - /** * 游戏id */ @@ -222,32 +202,39 @@ public class GamesAEServiceImpl implements IGamesService { @Transactional @Override public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) { - GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID); +// GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID); //没有此平台就新增一个平台 - if (ObjectUtils.isEmpty(gamePlatform)) { - gamePlatform = new GamePlatform(); - gamePlatform.setId(PLATFORM_ID); - gamePlatform.setPlatformCode(GamePlatforms.AE.getInfo()); - gamePlatform.setPlatformType(PlatformType.GAME_HALL.getCode()); - gamePlatform.setPlatformName(GamePlatforms.AE.getInfo() + PlatformType.GAME_HALL.getName()); - gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1); - gamePlatform.setCreateBy(Constants.SYSTEM); - gamePlatformService.insertGamePlatform(gamePlatform); - } +// if (ObjectUtils.isEmpty(gamePlatform)) { +// gamePlatform = new GamePlatform(); +// gamePlatform.setId(PLATFORM_ID); +// gamePlatform.setPlatformCode(GamePlatforms.AE.getInfo()); +// gamePlatform.setPlatformType(PlatformType.GAME_HALL.getCode()); +// gamePlatform.setPlatformName(GamePlatforms.AE.getInfo() + PlatformType.GAME_HALL.getName()); +// gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1); +// gamePlatform.setCreateBy(Constants.SYSTEM); +// gamePlatformService.insertGamePlatform(gamePlatform); +// } + Platform platform = gamesBaseRequestDTO.getVendor(); Game game = gameService.selectGameById(GAME_ID); //不存在这个游戏 if (ObjectUtils.isEmpty(game)) { game = new Game(); game.setId(GAME_ID); - game.setSortNo(gameService.selectMaxSortNoByPlatformId(gamePlatform.getId()) + 1); - game.setPlatformId(gamePlatform.getId()); + game.setSortNo(gameService.selectMaxSortNo(PlatformType.GAME_HALL.getCode(), GamePlatforms.AE.getCode()) + 1); + //game.setPlatformId(gamePlatform.getId()); + game.setPlatformCode(platform.getPlatformCode()); + game.setPlatformType(PlatformType.GAME_HALL.getCode()); game.setGameCode("1"); game.setGameSourceType(String.valueOf(1)); game.setGameName("AE大厅"); game.setCreateBy(Constants.SYSTEM); + NameInfo nameInfo = new NameInfo(); + nameInfo.setLang("zh-CN"); + nameInfo.setName("AE大厅"); + game.setNameInfo(Collections.singletonList(nameInfo)); gameService.insertGame(game); } - GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID); + /*GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID); if (ObjectUtils.isEmpty(gameName)) { gameNameService.insertGameName(GameName.builder() .id(GAME_NAME_ID) @@ -256,7 +243,7 @@ public class GamesAEServiceImpl implements IGamesService { .langCode("zh-CN") .createBy(Constants.SYSTEM) .build()); - } + }*/ return CacheConstants.XK_GAMES; } @@ -271,10 +258,10 @@ public class GamesAEServiceImpl implements IGamesService { @Transactional public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) { log.info("GamesAEServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); - GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.AE.getInfo()) - .code(exchangeTransferMoneyRequestDTO.getAgentId()) - .build()); +// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .platformCode(GamePlatforms.AE.getInfo()) +// .code(exchangeTransferMoneyRequestDTO.getAgentId()) +// .build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); String transactionId = GamePlatforms.AE.getCode() + IdUtils.simpleUUID(); @@ -294,7 +281,7 @@ public class GamesAEServiceImpl implements IGamesService { .quota(exchangeTransferMoneyRequestDTO.getQuota()) .balance(exchangeTransferMoneyRequestDTO.getAmount()) .exchangeType(exchangeTransferMoneyRequestDTO.getTransferType()) - .currencyCode(currencyDTO.getSystemCurrency()) + .currencyCode(exchangeTransferMoneyRequestDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) .platformCode(GamePlatforms.AE.getInfo()) @@ -402,20 +389,20 @@ public class GamesAEServiceImpl implements IGamesService { Map params = this.getKey(betRecordByTimeDTO); String timeFrom = redisCache.getCacheObject(CacheConstants.AE_TIME_FROM); - if (StringUtils.isEmpty(timeFrom)){ - timeFrom = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT, "GMT+8")+"+08:00"; + if (StringUtils.isEmpty(timeFrom)) { + timeFrom = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00"; } params.put("timeFrom", timeFrom); params.put("platform", "SEXYBCRT"); - params.put("delayTime",10000); + params.put("delayTime", 10000); AEBetRecordResponse aeBetRecordResponse = AEClient.getBetRecordByTime(params); //判断是否获取成功 if (this.getIsSuccess(aeBetRecordResponse.getStatus())) { //数据组装 - this.batchInsert(aeBetRecordResponse); + this.batchInsert(aeBetRecordResponse, betRecordByTimeDTO); return Boolean.TRUE; } else { log.error("GamesAEServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", aeBetRecordResponse.getStatus(), aeBetRecordResponse.getDesc()); @@ -436,19 +423,19 @@ public class GamesAEServiceImpl implements IGamesService { Map params = this.getKey(betRecordByTimeDTO); long startTimeLong = DateUtils.addOrSubtractMinutes(betRecordByTimeDTO.getStartTime(), -40); - String startTime = DateUtils.convertTimestampToFormattedDate(startTimeLong, DateUtils.ISO_8601_FORMAT, "GMT+8")+"+08:00"; - String endTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT, "GMT+8")+"+08:00"; + String startTime = DateUtils.convertTimestampToFormattedDate(startTimeLong, DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00"; + String endTime = DateUtils.convertTimestampToFormattedDate(betRecordByTimeDTO.getEndTime(), DateUtils.ISO_8601_FORMAT, "GMT+8") + "+08:00"; params.put("startTime", startTime); params.put("endTime", endTime); - params.put("platform","SEXYBCRT"); + params.put("platform", "SEXYBCRT"); AEBetRecordResponse aeBetRecordResponse = AEClient.getBetHistoryRecordByTime(params); //判断是否获取成功 if (this.getIsSuccess(aeBetRecordResponse.getStatus())) { //数据组装 - this.batchInsert(aeBetRecordResponse); + this.batchInsert(aeBetRecordResponse, betRecordByTimeDTO); return Boolean.TRUE; } else { log.error("GamesAEServiceImpl [getBetRecordByHistoryTime] 获取投注记录失败,错误代码{},错误信息{}", aeBetRecordResponse.getStatus(), aeBetRecordResponse.getDesc()); @@ -548,22 +535,24 @@ public class GamesAEServiceImpl implements IGamesService { * * @param aeBetRecordResponse ae下注记录响应dto */ - private void batchInsert(AEBetRecordResponse aeBetRecordResponse) { + private void batchInsert(AEBetRecordResponse aeBetRecordResponse, BetRecordByTimeDTO betRecordByTimeDTO) { List gameBettingDetails = new ArrayList<>(); List wagersIds = new ArrayList<>(); //数据组装 List dataBean = aeBetRecordResponse.getTransactions(); - String timeFrom=null ; + String timeFrom = null; //数据转化 for (AEBetRecordResponse.Transaction bean : dataBean) { - GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).build()); + GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder() + .platform(betRecordByTimeDTO.getVendor()) + .data(bean).build()); if (!ObjectUtils.isEmpty(bettingDetails)) { bettingDetails.setId(IdUtil.getSnowflakeNextId()); gameBettingDetails.add(bettingDetails); } wagersIds.add(bean.getPlatform() + bean.getPlatformTxId()); - timeFrom=bean.getUpdateTime(); + timeFrom = bean.getUpdateTime(); } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id @@ -576,8 +565,8 @@ public class GamesAEServiceImpl implements IGamesService { gameBettingDetailsService.batchInsert(gameBettingDetails); } } - if (StringUtils.isEmpty(timeFrom)){ - timeFrom = DateUtils.convertTimestampToFormattedDate(DateUtils.getNowDate(), DateUtils.ISO_8601_FORMAT, "UTC+8")+"+08:00"; + if (StringUtils.isEmpty(timeFrom)) { + timeFrom = DateUtils.convertTimestampToFormattedDate(DateUtils.getNowDate(), DateUtils.ISO_8601_FORMAT, "UTC+8") + "+08:00"; } redisCache.setCacheObject(CacheConstants.AE_TIME_FROM, timeFrom); } @@ -593,10 +582,10 @@ public class GamesAEServiceImpl implements IGamesService { //转化类 AEBetRecordResponse.Transaction resultBean = (AEBetRecordResponse.Transaction) gamesDataBuildDTO.getData(); - GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() + /*GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() .platformCode(GamePlatforms.AE.getInfo()) .currency(resultBean.getCurrency()) - .build()); + .build());*/ Member member = memberService.selectMemberByGameAccount(resultBean.getUserId()); if (ObjectUtils.isEmpty(member)) { @@ -606,26 +595,26 @@ public class GamesAEServiceImpl implements IGamesService { // 判断输赢 Integer gameStatus = GameStatus.FLAT.getCode(); - BigDecimal payoffAmount=BigDecimal.ZERO; + BigDecimal payoffAmount = BigDecimal.ZERO; if (resultBean.getRealWinAmount().compareTo(resultBean.getRealBetAmount()) > 0) { gameStatus = GameStatus.WIN.getCode(); - payoffAmount=resultBean.getRealWinAmount().subtract(resultBean.getRealBetAmount()); - } else if (resultBean.getRealWinAmount().compareTo(resultBean.getRealBetAmount()) < 0) { + payoffAmount = resultBean.getRealWinAmount().subtract(resultBean.getRealBetAmount()); + } else if (resultBean.getRealWinAmount().compareTo(resultBean.getRealBetAmount()) < 0) { gameStatus = GameStatus.FAIL.getCode(); - payoffAmount=resultBean.getRealWinAmount().subtract(resultBean.getRealBetAmount()).abs(); + payoffAmount = resultBean.getRealWinAmount().subtract(resultBean.getRealBetAmount()).abs(); } //结算状态 - int settlementStatus=SettlementStatusEnum.REVOKED.getCode(); - if (resultBean.getTxStatus() == 1){ - settlementStatus=SettlementStatusEnum.COMPLETED.getCode(); + int settlementStatus = SettlementStatusEnum.REVOKED.getCode(); + if (resultBean.getTxStatus() == 1) { + settlementStatus = SettlementStatusEnum.COMPLETED.getCode(); } //数据构造 GameBettingDetails gameBettingDetails = GameBettingDetails.builder() .tenantKey(member.getTenantKey()) //保存我们的币种id - .currencyCode(currencyDTO.getSystemCurrency()) + .currencyCode(gamesDataBuildDTO.getPlatform().getOurCurrency(resultBean.getCurrency())) .memberId(member.getId()) .gameCode(resultBean.getGameCode()) .gameType(PlatformType.GAME_HALL.getCode()) @@ -636,7 +625,7 @@ public class GamesAEServiceImpl implements IGamesService { .gameStatusType(resultBean.getSettleStatus()) .gameCurrencyCode(resultBean.getCurrency()) .account(resultBean.getUserId()) - .wagersId(resultBean.getPlatform()+resultBean.getPlatformTxId()) + .wagersId(resultBean.getPlatform() + resultBean.getPlatformTxId()) .wagersTime(resultBean.getBetTime().getTime()) .betAmount(resultBean.getRealBetAmount()) .payoffTime(resultBean.getTxTime().getTime()) diff --git a/ff-game/src/main/java/com/ff/game/api/dg/service/impl/GamesDGServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/dg/service/impl/GamesDGServiceImpl.java index 7153ed0..cf46f08 100644 --- a/ff-game/src/main/java/com/ff/game/api/dg/service/impl/GamesDGServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/dg/service/impl/GamesDGServiceImpl.java @@ -4,14 +4,10 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import com.ff.base.constant.CacheConstants; import com.ff.base.constant.Constants; -import com.ff.base.core.redis.RedisCache; import com.ff.base.enums.*; import com.ff.base.exception.base.ApiException; import com.ff.base.exception.base.BaseException; -import com.ff.base.system.service.ISysConfigService; import com.ff.base.utils.DateUtils; -import com.ff.base.utils.JsonUtil; -import com.ff.base.utils.SleepUtil; import com.ff.base.utils.StringUtils; import com.ff.base.utils.sign.Md5Utils; import com.ff.base.utils.uuid.IdUtils; @@ -19,14 +15,8 @@ import com.ff.config.KeyConfig; import com.ff.game.api.IGamesService; import com.ff.game.api.dg.client.DGClient; import com.ff.game.api.dg.dto.*; -import com.ff.game.api.ng.dto.ApiLoginResponseDTO; -import com.ff.game.api.ng.dto.ApiMemberInfoResponseDTO; -import com.ff.game.api.ng.dto.ApiNGResponseDTO; 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; @@ -40,7 +30,6 @@ import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -54,13 +43,6 @@ import java.util.stream.Collectors; @Slf4j public class GamesDGServiceImpl implements IGamesService { - - @Resource - private ISysConfigService configService; - - @Resource - private RedisCache redisCache; - @Resource private IGameExchangeMoneyService gameExchangeMoneyService; @@ -76,18 +58,9 @@ public class GamesDGServiceImpl implements IGamesService { @Resource private IMemberService memberService; - @Resource - private IGameFreeRecordService gameFreeRecordService; - @Resource - private IGameSecretKeyService gameSecretKeyService; - - @Resource - private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; - @Resource private DGClient DGClient; - @Resource private KeyConfig keyConfig; @@ -97,7 +70,6 @@ public class GamesDGServiceImpl implements IGamesService { @Resource private IGameNameService gameNameService; - /** * 游戏id */ @@ -229,9 +201,9 @@ public class GamesDGServiceImpl implements IGamesService { @Transactional @Override public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) { - GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID); + //GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(PLATFORM_ID); //没有此平台就新增一个平台 - if (ObjectUtils.isEmpty(gamePlatform)) { + /*if (ObjectUtils.isEmpty(gamePlatform)) { gamePlatform = new GamePlatform(); gamePlatform.setId(PLATFORM_ID); gamePlatform.setPlatformCode(GamePlatforms.DG.getInfo()); @@ -240,21 +212,24 @@ public class GamesDGServiceImpl implements IGamesService { gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1); gamePlatform.setCreateBy(Constants.SYSTEM); gamePlatformService.insertGamePlatform(gamePlatform); - } + }*/ Game game = gameService.selectGameById(GAME_ID); //不存在这个游戏 if (ObjectUtils.isEmpty(game)) { game = new Game(); game.setId(GAME_ID); - game.setSortNo(gameService.selectMaxSortNoByPlatformId(gamePlatform.getId()) + 1); - game.setPlatformId(gamePlatform.getId()); + game.setSortNo(1); + //game.setPlatformId(gamePlatform.getId()); + game.setPlatformCode(GamePlatforms.DG.getCode()); + game.setPlatformType(PlatformType.GAME_HALL.getCode()); game.setGameCode("1"); game.setGameSourceType(String.valueOf(1)); game.setGameName("真人棋牌"); game.setCreateBy(Constants.SYSTEM); + game.setNameInfo(Collections.singletonList(new NameInfo("真人棋牌", "zh-CN"))); gameService.insertGame(game); } - GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID); + /*GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID); if (ObjectUtils.isEmpty(gameName)) { gameNameService.insertGameName(GameName.builder() .id(GAME_NAME_ID) @@ -263,7 +238,7 @@ public class GamesDGServiceImpl implements IGamesService { .langCode("zh-CN") .createBy(Constants.SYSTEM) .build()); - } + }*/ return CacheConstants.DG_GAMES; } @@ -277,10 +252,10 @@ public class GamesDGServiceImpl implements IGamesService { @Transactional public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) { log.info("GamesDGServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); - GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.DG.getInfo()) - .code(exchangeTransferMoneyRequestDTO.getAgentId()) - .build()); +// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .platformCode(GamePlatforms.DG.getInfo()) +// .code(exchangeTransferMoneyRequestDTO.getAgentId()) +// .build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); String transactionId = GamePlatforms.DG.getInfo() + IdUtils.simpleUUID(); @@ -300,7 +275,7 @@ public class GamesDGServiceImpl implements IGamesService { .quota(exchangeTransferMoneyRequestDTO.getQuota()) .balance(exchangeTransferMoneyRequestDTO.getAmount()) .exchangeType(exchangeTransferMoneyRequestDTO.getTransferType()) - .currencyCode(currencyDTO.getSystemCurrency()) + .currencyCode(exchangeTransferMoneyRequestDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) .platformCode(GamePlatforms.DG.getInfo()) @@ -373,9 +348,7 @@ public class GamesDGServiceImpl implements IGamesService { DGBetRecordResponseDTO betRecordByTime = DGClient.getBetRecordByTime(key); if (this.getIsSuccess(betRecordByTime.getCodeId())) { - this.batchInsert(betRecordByTime,betRecordByTimeDTO); - - + this.batchInsert(betRecordByTime, betRecordByTimeDTO); return Boolean.TRUE; } else { log.error("GamesDGServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordByTime.getCodeId(), betRecordByTime.getMsg()); @@ -432,14 +405,14 @@ public class GamesDGServiceImpl implements IGamesService { if (!this.getIsSuccess(userListResponseDTO.getCodeId())) { throw new ApiException(ErrorCode.KICK_OUT_AILED.getCode()); } - if (CollectionUtils.isEmpty(userListResponseDTO.getList())){ + if (CollectionUtils.isEmpty(userListResponseDTO.getList())) { return Boolean.TRUE; } DGUserListResponseDTO.UserDTO userDTO = userListResponseDTO.getList().stream() .filter(user -> user.getUsername().equals(kickMemberRequestDTO.getAccount())) .findFirst() .orElse(null); - if (Objects.isNull(userDTO)){ + if (Objects.isNull(userDTO)) { return Boolean.TRUE; } @@ -447,7 +420,7 @@ public class GamesDGServiceImpl implements IGamesService { List memberIds = new ArrayList<>(); memberIds.add(userDTO.getMemberId()); Map params = new LinkedHashMap<>(); - params.put("list",memberIds); + params.put("list", memberIds); DGResponse dgResponse = DGClient.kickMember(params, key); //判断是否获取成功 if (this.getIsSuccess(dgResponse.getCodeId())) { @@ -472,7 +445,7 @@ public class GamesDGServiceImpl implements IGamesService { throw new ApiException(ErrorCode.KICK_OUT_AILED.getCode()); } - if (CollectionUtils.isEmpty(userListResponseDTO.getList())){ + if (CollectionUtils.isEmpty(userListResponseDTO.getList())) { return Boolean.TRUE; } @@ -480,7 +453,7 @@ public class GamesDGServiceImpl implements IGamesService { Map params = new LinkedHashMap<>(); - params.put("list",memberIds); + params.put("list", memberIds); DGResponse dgResponse = DGClient.kickMember(params, key); //判断是否获取成功 if (this.getIsSuccess(dgResponse.getCodeId())) { @@ -513,7 +486,6 @@ public class GamesDGServiceImpl implements IGamesService { } - /** * 取消赠送免费局数 * @@ -531,14 +503,16 @@ public class GamesDGServiceImpl implements IGamesService { * * @param dgBetRecordResponseDTO dg投注记录响应dto */ - private void batchInsert(DGBetRecordResponseDTO dgBetRecordResponseDTO,GamesBaseRequestDTO gamesBaseRequestDTO) { + private void batchInsert(DGBetRecordResponseDTO dgBetRecordResponseDTO, GamesBaseRequestDTO gamesBaseRequestDTO) { List gameBettingDetails = new ArrayList<>(); List wagersIds = new ArrayList<>(); //数据组装 List report = dgBetRecordResponseDTO.getList(); //数据转化 for (DGBetRecordResponseDTO.ReportDTO bean : report) { - GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).build()); + GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder() + .platform(gamesBaseRequestDTO.getVendor()) + .data(bean).build()); if (!ObjectUtils.isEmpty(bettingDetails)) { bettingDetails.setId(IdUtil.getSnowflakeNextId()); gameBettingDetails.add(bettingDetails); @@ -547,7 +521,7 @@ public class GamesDGServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.DG.getInfo()); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds, GamePlatforms.DG.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) @@ -557,7 +531,7 @@ public class GamesDGServiceImpl implements IGamesService { Map key = this.getKey(gamesBaseRequestDTO); Map params = new HashMap<>(); params.put("list", wagersIds); - DGClient.markReport(params,key); + DGClient.markReport(params, key); } } @@ -575,10 +549,10 @@ public class GamesDGServiceImpl implements IGamesService { DGBetRecordResponseDTO.ReportDTO resultBean = (DGBetRecordResponseDTO.ReportDTO) gamesDataBuildDTO.getData(); - GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.DG.getInfo()) - .currencyId(String.valueOf(resultBean.getCurrencyId())) - .build()); +// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .platformCode(GamePlatforms.DG.getInfo()) +// .currencyId(String.valueOf(resultBean.getCurrencyId())) +// .build()); Member member = memberService.selectMemberByGameAccount(resultBean.getUserName()); @@ -608,16 +582,16 @@ public class GamesDGServiceImpl implements IGamesService { GameBettingDetails gameBettingDetails = GameBettingDetails.builder() .tenantKey(member.getTenantKey()) //保存我们的币种id - .currencyCode(currencyDTO.getSystemCurrency()) + .currencyCode(gamesDataBuildDTO.getPlatform().getExtInfo().getOurCurrency(String.valueOf(resultBean.getCurrencyId()))) .memberId(member.getId()) .gameCode(String.valueOf(resultBean.getGameId())) .gameType(PlatformType.CARD_GAME.getCode()) - .platformCode(GamePlatforms.DG.getInfo()) + .platformCode(GamePlatforms.DG.getCode()) .gameId(GAME_ID) .gameName(game.getGameName()) .gameStatus(gameStatus) .gameStatusType(resultBean.getGameType()) - .gameCurrencyCode(currencyDTO.getCurrency()) + .gameCurrencyCode(/*gamesDataBuildDTO.getCurrencyCode()*/String.valueOf(resultBean.getCurrencyId())) .account(String.valueOf(resultBean.getUserName())) .wagersId(String.valueOf(resultBean.getId())) .wagersTime(resultBean.getBetTime().getTime()) diff --git a/ff-game/src/main/java/com/ff/game/api/fc/impl/GamesFCServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/fc/impl/GamesFCServiceImpl.java index df5c607..faae116 100644 --- a/ff-game/src/main/java/com/ff/game/api/fc/impl/GamesFCServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/fc/impl/GamesFCServiceImpl.java @@ -9,19 +9,19 @@ import com.ff.base.core.redis.RedisCache; import com.ff.base.enums.*; import com.ff.base.exception.base.ApiException; import com.ff.base.exception.base.BaseException; -import com.ff.base.system.service.ISysConfigService; import com.ff.base.utils.DateUtils; +import com.ff.base.utils.StringUtils; import com.ff.base.utils.sign.Md5Utils; import com.ff.config.KeyConfig; import com.ff.game.api.IGamesService; -import com.ff.game.api.fc.dto.*; import com.ff.game.api.fc.client.FCClient; -import com.ff.game.api.ng.client.NGClient; +import com.ff.game.api.fc.dto.*; import com.ff.game.api.request.*; import com.ff.game.domain.*; -import com.ff.game.dto.GameBettingDetailsDTO; -import com.ff.game.dto.GameSecretKeyCurrencyDTO; -import com.ff.game.service.*; +import com.ff.game.service.IGameBettingDetailsService; +import com.ff.game.service.IGameExchangeMoneyService; +import com.ff.game.service.IGameService; +import com.ff.game.service.IPlatformService; import com.ff.member.domain.Member; import com.ff.member.service.IMemberService; import lombok.extern.slf4j.Slf4j; @@ -54,21 +54,12 @@ import java.util.stream.Collectors; @Slf4j public class GamesFCServiceImpl implements IGamesService { - - @Resource - private ISysConfigService configService; - @Resource private RedisCache redisCache; @Resource private IGameExchangeMoneyService gameExchangeMoneyService; - - @Resource - private IGamePlatformService gamePlatformService; - - @Resource private IGameService gameService; @@ -76,37 +67,22 @@ public class GamesFCServiceImpl implements IGamesService { @Resource private IMemberService memberService; - @Resource - private IGameFreeRecordService gameFreeRecordService; - - @Resource - private IGameSecretKeyService gameSecretKeyService; - @Resource private FCClient FCClient; - @Resource private KeyConfig keyConfig; @Resource private IGameBettingDetailsService gameBettingDetailsService; - @Resource - private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; - - @Resource - private IGameNameService gameNameService; - - - @Resource - private IGameSecretKeyLangService gameSecretKeyLangService; - - @Autowired @Qualifier("threadPoolTaskExecutor") private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Autowired + private IPlatformService platformService; + /** * 获得就是成功 * @@ -276,45 +252,40 @@ public class GamesFCServiceImpl implements IGamesService { for (String gameTypeKey : gameList.getGetGameIconList().keySet()) { Map integerGameDetailsMap = gameList.getGetGameIconList().get(gameTypeKey); - GamePlatform gamePlatform = GamePlatform.builder() - .platformType(FCGameType.findSystemByCode(gameTypeKey)) - .platformCode(GamePlatforms.FC.getInfo()) - .build(); - List gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform); - //没有此平台就新增一个平台 - if (CollectionUtils.isEmpty(gamePlatforms)) { - gamePlatform.setPlatformName(GamePlatforms.FC.getInfo() + FCGameType.findInfoByCode(gameTypeKey)); - gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1); - gamePlatform.setCreateBy(Constants.SYSTEM); - gamePlatformService.insertGamePlatform(gamePlatform); - } else { - gamePlatform = gamePlatforms.get(0); - } //新增游戏 for (String gameIdKey : integerGameDetailsMap.keySet()) { ApiFCGameListResponseDTO.GameDetails gameDetails = integerGameDetailsMap.get(gameIdKey); Game game = Game.builder() - .platformId(gamePlatform.getId()) + //.platformId(gamePlatform.getId()) + .platformCode(GamePlatforms.FC.getCode()) .gameCode(gameIdKey) .build(); List games = gameService.selectGameList(game); + int platformType = FCGameType.findSystemByCode(gameTypeKey); //不存在这个游戏 if (CollectionUtils.isEmpty(games)) { game.setGameSourceType(String.valueOf(PlatformType.ELECTRONIC.getCode())); game.setFreespin(Boolean.FALSE); game.setDemoStatus(Boolean.TRUE); - game.setSortNo(gameService.selectMaxSortNoByPlatformId(gamePlatform.getId()) + 1); + game.setPlatformCode(GamePlatforms.FC.getCode()); + game.setPlatformType(platformType); + game.setSortNo(gameService.selectMaxSortNo(platformType, GamePlatforms.FC.getCode()) + 1); game.setGameName(gameDetails.getGameNameOfChinese()); game.setCreateBy(Constants.SYSTEM); + + List nameInfos = new ArrayList<>(); + nameInfos.add(NameInfo.builder().lang("zh-CN").name(gameDetails.getGameNameOfChinese()).build()); + nameInfos.add(NameInfo.builder().lang("en-US").name(gameDetails.getGameNameOfEnglish()).build()); + game.setNameInfo(nameInfos); gameService.insertGame(game); } else { game = games.get(0); } gameDetails.setSystemGameId(game.getId()); - List gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(gameDetails.getGameNameOfChinese()).build()); + /*List gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(gameDetails.getGameNameOfChinese()).build()); if (CollectionUtils.isEmpty(gameNames)) { gameNameService.insertGameName(GameName.builder() .gameId(game.getId()) @@ -331,7 +302,7 @@ public class GamesFCServiceImpl implements IGamesService { .langCode("en-US") .createBy(Constants.SYSTEM) .build()); - } + }*/ gameDetails.setGameId(gameIdKey); gameDetailsList.add(gameDetails); @@ -359,11 +330,11 @@ public class GamesFCServiceImpl implements IGamesService { public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) { log.info("GamesFCServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); - GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.FC.getInfo()) - .code(exchangeTransferMoneyRequestDTO.getAgentId()) - .currency(exchangeTransferMoneyRequestDTO.getCurrency()) - .build()); +// GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .platformCode(GamePlatforms.FC.getInfo()) +// .code(exchangeTransferMoneyRequestDTO.getAgentId()) +// .currency(exchangeTransferMoneyRequestDTO.getCurrency()) +// .build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.FC.getInfo(), 30); @@ -383,7 +354,7 @@ public class GamesFCServiceImpl implements IGamesService { .quota(exchangeTransferMoneyRequestDTO.getQuota()) .balance(exchangeTransferMoneyRequestDTO.getAmount()) .exchangeType(exchangeTransferMoneyRequestDTO.getTransferType()) - .currencyCode(currencyDTO.getSystemCurrency()) + .currencyCode(exchangeTransferMoneyRequestDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) .platformCode(GamePlatforms.FC.getInfo()) @@ -402,7 +373,7 @@ public class GamesFCServiceImpl implements IGamesService { .accounts(member.getGameAccount()) .agentId(exchangeTransferMoneyRequestDTO.getAgentId()) .agentKey(exchangeTransferMoneyRequestDTO.getAgentKey()) - .currency(currencyDTO.getCurrency()) + .currency(exchangeTransferMoneyRequestDTO.getCurrency()) .build(); MemberInfoResponseDTO memberInfo = this.getMemberInfo(gamesBaseRequestDTO); //判断是不是转出 @@ -459,29 +430,37 @@ public class GamesFCServiceImpl implements IGamesService { @Override public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) { +// List gameSecretKeyCurrencies = gameSecretKeyCurrencyService +// .findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder() +// .platformCode(GamePlatforms.FC.getInfo()) +// .build()); - List gameSecretKeyCurrencies = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.FC.getInfo()) - .build()); - - for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) { + Platform platform = betRecordByTimeDTO.getVendor(); + //for (KeyInfo keyInfo : platform.getKeyInfo()) { +// for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) { String startTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getStartTime(), "America/New_York", DateUtils.YYYY_MM_DD_HH_MM_SS); String endTime = DateUtils.convertTimeZone(betRecordByTimeDTO.getEndTime(), "America/New_York", DateUtils.YYYY_MM_DD_HH_MM_SS); Map paramsMap = new HashMap<>(); paramsMap.put("StartDate", startTime); paramsMap.put("EndDate", endTime); - paramsMap.putAll(getKeyMap(paramsMap, betRecordByTimeDTO.getAgentKey(), gameSecretKeyCurrency.getCurrency(), betRecordByTimeDTO.getAgentId())); + KeyInfo keyInfo = betRecordByTimeDTO.getKeyInfo(); + String currency = keyInfo.getCurrency(); + String targetCurrency = platform.getCurrencyInfo().get(currency); + if (StringUtils.isEmpty(targetCurrency)) { + log.error("获取不到币种,platformCode:{},{}->{}", platform.getPlatformCode(), currency, targetCurrency); + //continue; + return Boolean.FALSE; + } + + paramsMap.putAll(getKeyMap(paramsMap, betRecordByTimeDTO.getAgentKey(), keyInfo.getCurrency(), betRecordByTimeDTO.getAgentId())); ApiFCBetRecordResponseDTO betRecordByTime = FCClient.getBetRecordByTime(paramsMap); if (this.getIsSuccess(betRecordByTime.getResult())) { //数据组装 - this.batchInsert(betRecordByTime, gameSecretKeyCurrency.getSystemCurrency(), gameSecretKeyCurrency.getCurrency()); - + this.batchInsert(betRecordByTime, currency, targetCurrency); } - - - } + //} return Boolean.TRUE; } @@ -493,15 +472,20 @@ public class GamesFCServiceImpl implements IGamesService { */ @Override public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) { - List gameSecretKeyCurrencies = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.FC.getInfo()) - .build()); - for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) { + Platform platform = betRecordByTimeDTO.getVendor(); + for (KeyInfo keyInfo : platform.getKeyInfo()) { + +// for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) { //必须两个小时之前的数据 long startTimeLong = DateUtils.addOrSubtractMinutes(betRecordByTimeDTO.getStartTime(), -120); long endTimeLong = DateUtils.addOrSubtractMinutes(betRecordByTimeDTO.getEndTime(), -120); - + String currency = keyInfo.getCurrency(); + String targetCurrency = platform.getCurrencyInfo().get(currency); + if (StringUtils.isEmpty(targetCurrency)) { + log.error("获取不到币种,platformCode:{},{}->{}", platform.getPlatformCode(), currency, targetCurrency); + continue; + } //查询一个小时内的数据一次最多15分钟 int timeWheel = 60; while (timeWheel > 0) { @@ -510,18 +494,16 @@ public class GamesFCServiceImpl implements IGamesService { Map paramsMap = new HashMap<>(); paramsMap.put("StartDate", startTime); paramsMap.put("EndDate", endTime); - paramsMap.putAll(getKeyMap(paramsMap, betRecordByTimeDTO.getAgentKey(), gameSecretKeyCurrency.getCurrency(), betRecordByTimeDTO.getAgentId())); + paramsMap.putAll(getKeyMap(paramsMap, betRecordByTimeDTO.getAgentKey(), targetCurrency, betRecordByTimeDTO.getAgentId())); ApiFCBetRecordResponseDTO betRecordByTime = FCClient.getBetRecordByHistoryTime(paramsMap); if (this.getIsSuccess(betRecordByTime.getResult())) { //数据组装 - this.batchInsert(betRecordByTime, gameSecretKeyCurrency.getSystemCurrency(), gameSecretKeyCurrency.getCurrency()); + this.batchInsert(betRecordByTime, currency, targetCurrency); } timeWheel -= 15; } - - } return Boolean.TRUE; } @@ -660,7 +642,7 @@ public class GamesFCServiceImpl implements IGamesService { .memberId(member.getId()) .gameCode(resultBean.getGameID()) .gameType(FCGameType.findSystemByCode(resultBean.getGametype())) - .platformCode(GamePlatforms.FC.getInfo()) + .platformCode(GamePlatforms.FC.getCode()) .gameId(gamesDataDTO.getSystemGameId()) .gameName(gamesDataDTO.getGameNameOfChinese()) .gameStatus(gameStatus) @@ -694,7 +676,9 @@ public class GamesFCServiceImpl implements IGamesService { List wagersIds = new ArrayList<>(); //数据转化 for (ApiFCBetRecordResponseDTO.BetRecord bean : data.getRecords()) { - GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).currencyCode(currencyCode).systemCurrencyCode(systemCurrencyCode).build()); + GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean) + .currencyCode(currencyCode) + .systemCurrencyCode(systemCurrencyCode).build()); if (!ObjectUtils.isEmpty(bettingDetails)) { bettingDetails.setId(IdUtil.getSnowflakeNextId()); gameBettingDetails.add(bettingDetails); @@ -703,7 +687,7 @@ public class GamesFCServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.FC.getInfo()); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds, GamePlatforms.FC.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) diff --git a/ff-game/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java index 86b3d74..c7abe9e 100644 --- a/ff-game/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java @@ -19,8 +19,10 @@ 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.game.service.IGameBettingDetailsService; +import com.ff.game.service.IGameExchangeMoneyService; +import com.ff.game.service.IGameFreeRecordService; +import com.ff.game.service.IGameService; import com.ff.member.domain.Member; import com.ff.member.service.IMemberService; import lombok.extern.slf4j.Slf4j; @@ -58,10 +60,6 @@ public class GamesJILIServiceImpl implements IGamesService { private IGameExchangeMoneyService gameExchangeMoneyService; - @Resource - private IGamePlatformService gamePlatformService; - - @Resource private IGameService gameService; @@ -72,8 +70,6 @@ public class GamesJILIServiceImpl implements IGamesService { @Resource private IGameFreeRecordService gameFreeRecordService; - @Resource - private IGameSecretKeyService gameSecretKeyService; @Resource private JILIClient jiliClient; @@ -85,11 +81,6 @@ public class GamesJILIServiceImpl implements IGamesService { @Resource private IGameBettingDetailsService gameBettingDetailsService; - @Resource - private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; - - @Resource - private IGameNameService gameNameService; /** * 获得就是成功 * @@ -138,10 +129,10 @@ public class GamesJILIServiceImpl implements IGamesService { String key = this.getKey(createMemberRequestDTO); JILICreateMemberResponseDTO createMemberResponseDTO = jiliClient.createMember(query + "&Key=" + key); int errorCode = createMemberResponseDTO.getErrorCode(); - if (0 == errorCode){ + if (0 == errorCode) { return Boolean.TRUE; } - if (101 == errorCode){ + if (101 == errorCode) { throw new ApiException(ErrorCode.GAME_ACCOUNT_CREATION_FAILED.getCode()); } //判断是否获取成功 @@ -235,7 +226,7 @@ public class GamesJILIServiceImpl implements IGamesService { if (this.getIsSuccess(jiliGames.getErrorCode())) { for (JILIGamesDataDTO gamesDataDTO : jiliGames.getData()) { - GamePlatform gamePlatform = GamePlatform.builder() + /*GamePlatform gamePlatform = GamePlatform.builder() .platformType(JILIGameType.findSystemByCode(gamesDataDTO.getGameCategoryId())) .platformCode(GamePlatforms.JILI.getInfo()) .build(); @@ -248,9 +239,12 @@ public class GamesJILIServiceImpl implements IGamesService { gamePlatformService.insertGamePlatform(gamePlatform); } else { gamePlatform = gamePlatforms.get(0); - } + }*/ + Integer platformType = JILIGameType.findSystemByCode(gamesDataDTO.getGameCategoryId()); Game game = Game.builder() - .platformId(gamePlatform.getId()) + //.platformId(gamePlatform.getId()) + .platformCode(GamePlatforms.JILI.getCode()) + .platformType(platformType) .gameCode(String.valueOf(gamesDataDTO.getGameId())) .build(); List games = gameService.selectGameList(game); @@ -258,7 +252,7 @@ public class GamesJILIServiceImpl implements IGamesService { if (CollectionUtils.isEmpty(games)) { game.setGameSourceType(String.valueOf(gamesDataDTO.getGameCategoryId())); game.setFreespin(gamesDataDTO.isFreespin()); - game.setSortNo(gameService.selectMaxSortNoByPlatformId(gamePlatform.getId()) + 1); + game.setSortNo(gameService.selectMaxSortNo(platformType, GamePlatforms.JILI.getCode()) + 1); game.setGameName(gamesDataDTO.getName().getZhCN()); game.setCreateBy(Constants.SYSTEM); gameService.insertGame(game); @@ -266,9 +260,16 @@ public class GamesJILIServiceImpl implements IGamesService { game = games.get(0); } gamesDataDTO.setSystemGameId(game.getId()); + List nameInfos = new ArrayList<>(); + nameInfos.add(new NameInfo(gamesDataDTO.getName().getZhCN(), "zh-CN")); + nameInfos.add(new NameInfo(gamesDataDTO.getName().getEnUS(), "en-US")); + game.setNameInfo(nameInfos); - List gameNames = gameNameService.selectGameNameList(GameName.builder().gameId(game.getId()).gameName(game.getGameName()).build()); - if (CollectionUtils.isEmpty(gameNames)){ + /*List 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()) @@ -282,8 +283,7 @@ public class GamesJILIServiceImpl implements IGamesService { .langCode("en-US") .createBy(Constants.SYSTEM) .build()); - } - + }*/ } @@ -308,9 +308,9 @@ public class GamesJILIServiceImpl implements IGamesService { @Override @Transactional public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) { - GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .code(exchangeTransferMoneyRequestDTO.getAgentId()) - .currency(exchangeTransferMoneyRequestDTO.getCurrency()).build()); +// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .code(exchangeTransferMoneyRequestDTO.getAgentId()) +// .currency(exchangeTransferMoneyRequestDTO.getCurrency()).build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); String transactionId = GamePlatforms.JILI.getInfo() + IdUtils.simpleUUID(); @@ -332,7 +332,7 @@ public class GamesJILIServiceImpl implements IGamesService { .quota(exchangeTransferMoneyRequestDTO.getQuota()) .balance(exchangeTransferMoneyRequestDTO.getAmount()) .exchangeType(exchangeTransferMoneyRequestDTO.getTransferType()) - .currencyCode(gameSecretKey.getSystemCurrency()) + .currencyCode(exchangeTransferMoneyRequestDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) .platformCode(GamePlatforms.JILI.getInfo()) @@ -410,8 +410,12 @@ public class GamesJILIServiceImpl implements IGamesService { //判断是否获取成功 if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) { + + KeyInfo keyInfo = betRecordByTimeDTO.getKeyInfo(); + String currency = keyInfo.getCurrency(); + String targetCurrency = betRecordByTimeDTO.getVendor().getOurCurrency(currency); //数据插入 - this.batchInsert(betRecordJILIResponse); + this.batchInsert(betRecordJILIResponse, betRecordByTimeDTO, currency, targetCurrency); JILIBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData(); //获取下一页数据 while (dataBean.getPagination().getCurrentPage() != dataBean.getPagination().getTotalPages() && dataBean.getPagination().getTotalPages() > 0) { @@ -425,7 +429,7 @@ public class GamesJILIServiceImpl implements IGamesService { dataBean = betRecordJILIResponse.getData(); if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) { //数据插入 - this.batchInsert(betRecordJILIResponse); + this.batchInsert(betRecordJILIResponse, betRecordByTimeDTO, currency, targetCurrency); } else { log.error("GameBettingDataJILIServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getErrorCode(), betRecordJILIResponse.getMessage()); } @@ -461,9 +465,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()); +// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .code(createFreeSpinRequest.getAgentId()) +// .currency(createFreeSpinRequest.getCurrency()).build()); List gameIds = createFreeSpinRequest.getGameIds(); GameUniqueDTO gameUniqueDTO = new GameUniqueDTO(); @@ -473,7 +477,7 @@ public class GamesJILIServiceImpl implements IGamesService { .map(Game::getGameCode) .map(String::valueOf) .collect(Collectors.joining(",")); - String referenceId = GamePlatforms.JILI.getInfo() + IdUtils.simpleUUID(); + String referenceId = GamePlatforms.JILI.getCode() + IdUtils.simpleUUID(); //请求参数 String query = "Account=" + createFreeSpinRequest.getAccount() + "&Currency=" + createFreeSpinRequest.getCurrency() @@ -514,7 +518,7 @@ public class GamesJILIServiceImpl implements IGamesService { GameFreeRecord gameFreeRecord = GameFreeRecord.builder() - .currencyCode(gameSecretKey.getSystemCurrency()) + .currencyCode(createFreeSpinRequest.getSystemCurrency()) .referenceId(referenceId) .platformCode(GamePlatforms.JILI.getInfo()) .memberId(member.getId()) @@ -677,7 +681,7 @@ public class GamesJILIServiceImpl implements IGamesService { cancelFreeSpinRequestDTO.setQuery(query); //获取key String key = this.getKey(cancelFreeSpinRequestDTO); - JILICancelFreeSpinResponseDTO cancelFreeSpinResponseDTO = jiliClient.cancelFreeSpin(query + "&Key=" + key); + JILICancelFreeSpinResponseDTO cancelFreeSpinResponseDTO = jiliClient.cancelFreeSpin(query + "&Key=" + key); //判断是否获取成功 if (this.getIsSuccess(cancelFreeSpinResponseDTO.getErrorCode())) { List gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(GameFreeRecord.builder() @@ -692,6 +696,7 @@ public class GamesJILIServiceImpl implements IGamesService { throw new BaseException(cancelFreeSpinResponseDTO.getMessage()); } } + /** * 游戏演示登录 * @@ -704,21 +709,24 @@ public class GamesJILIServiceImpl implements IGamesService { } - /** * 批量插入 * * @param betRecordJILIResponse 投注记录jiliresponse * @return {@link Integer } */ - private void batchInsert(JILIBetRecordResponseDTO betRecordJILIResponse) { + private void batchInsert(JILIBetRecordResponseDTO betRecordJILIResponse, BetRecordByTimeDTO betRecordByTimeDTO, String systemCurrency, String currency) { List gameBettingDetails = new ArrayList<>(); List wagersIds = new ArrayList<>(); //数据组装 JILIBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData(); //数据转化 for (JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO : dataBean.getResult()) { - GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(jiliBetRecordDataResponseDTO).build()); + GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder() + .systemCurrencyCode(systemCurrency) + .currencyCode(currency) + .platform(betRecordByTimeDTO.getVendor()) + .data(jiliBetRecordDataResponseDTO).build()); if (!ObjectUtils.isEmpty(bettingDetails)) { bettingDetails.setId(IdUtil.getSnowflakeNextId()); gameBettingDetails.add(bettingDetails); @@ -727,7 +735,7 @@ public class GamesJILIServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.JILI.getInfo()); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds, GamePlatforms.JILI.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) @@ -750,9 +758,9 @@ public class GamesJILIServiceImpl implements IGamesService { //转化类 JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO = (JILIBetRecordDataResponseDTO) gamesDataBuildDTO.getData(); - GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .code(jiliBetRecordDataResponseDTO.getAgentId()) - .platformCode(GamePlatforms.JILI.getInfo()).build()); +// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .code(jiliBetRecordDataResponseDTO.getAgentId()) +// .platformCode(GamePlatforms.JILI.getInfo()).build()); Member member = memberService.selectMemberByGameAccount(jiliBetRecordDataResponseDTO.getAccount()); @@ -773,7 +781,7 @@ public class GamesJILIServiceImpl implements IGamesService { GameBettingDetails gameBettingDetails = GameBettingDetails.builder() .tenantKey(member.getTenantKey()) //保存我们的币种id - .currencyCode(gameSecretKey.getSystemCurrency()) + .currencyCode(/*gameSecretKey.getSystemCurrency()*/gamesDataBuildDTO.getSystemCurrencyCode()) .memberId(member.getId()) .gameCode(jiliBetRecordDataResponseDTO.getGameId()) .gameType(JILIGameType.findSystemByCode(jiliBetRecordDataResponseDTO.getGameCategoryId())) diff --git a/ff-game/src/main/java/com/ff/game/api/request/BetRecordByTimeDTO.java b/ff-game/src/main/java/com/ff/game/api/request/BetRecordByTimeDTO.java index a0bb724..61dccb9 100644 --- a/ff-game/src/main/java/com/ff/game/api/request/BetRecordByTimeDTO.java +++ b/ff-game/src/main/java/com/ff/game/api/request/BetRecordByTimeDTO.java @@ -30,13 +30,6 @@ public class BetRecordByTimeDTO extends GamesBaseRequestDTO { * 游戏id */ private Integer gameId; - /** - * 指定平台 - */ - private String gamePlatform; - - - } diff --git a/ff-game/src/main/java/com/ff/game/api/request/GamesBaseRequestDTO.java b/ff-game/src/main/java/com/ff/game/api/request/GamesBaseRequestDTO.java index 48511cb..e55b059 100644 --- a/ff-game/src/main/java/com/ff/game/api/request/GamesBaseRequestDTO.java +++ b/ff-game/src/main/java/com/ff/game/api/request/GamesBaseRequestDTO.java @@ -46,5 +46,6 @@ public class GamesBaseRequestDTO implements Serializable { private KeyInfo keyInfo; + private String systemCurrency; } diff --git a/ff-game/src/main/java/com/ff/game/api/request/GamesDataBuildDTO.java b/ff-game/src/main/java/com/ff/game/api/request/GamesDataBuildDTO.java index 73548ee..23cb419 100644 --- a/ff-game/src/main/java/com/ff/game/api/request/GamesDataBuildDTO.java +++ b/ff-game/src/main/java/com/ff/game/api/request/GamesDataBuildDTO.java @@ -1,5 +1,6 @@ package com.ff.game.api.request; +import com.ff.game.domain.Platform; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -39,5 +40,7 @@ public class GamesDataBuildDTO */ private String agentId; + private Platform platform; + } diff --git a/ff-game/src/main/java/com/ff/game/domain/CurrencyInfo.java b/ff-game/src/main/java/com/ff/game/domain/CurrencyInfo.java index fc4456a..22c6e80 100644 --- a/ff-game/src/main/java/com/ff/game/domain/CurrencyInfo.java +++ b/ff-game/src/main/java/com/ff/game/domain/CurrencyInfo.java @@ -1,11 +1,16 @@ package com.ff.game.domain; +import lombok.Data; + import java.io.Serializable; import java.util.HashMap; /** * @author cengy */ +@Data public class CurrencyInfo extends HashMap implements Serializable { + private String currencyId; + } diff --git a/ff-game/src/main/java/com/ff/game/domain/ExtInfo.java b/ff-game/src/main/java/com/ff/game/domain/ExtInfo.java new file mode 100644 index 0000000..c86d5f9 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/domain/ExtInfo.java @@ -0,0 +1,20 @@ +package com.ff.game.domain; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Map; + +/** + * @author cengy + */ +@Data +public class ExtInfo implements Serializable { + + // 币种信息,key为其它平台的币种id,value为我们自己的币种 + private Map currency; + + public String getOurCurrency(String currencyId) { + return currency == null ? null : currency.get(currencyId); + } +} diff --git a/ff-game/src/main/java/com/ff/game/domain/Game.java b/ff-game/src/main/java/com/ff/game/domain/Game.java index 252ebb8..673c71c 100644 --- a/ff-game/src/main/java/com/ff/game/domain/Game.java +++ b/ff-game/src/main/java/com/ff/game/domain/Game.java @@ -9,6 +9,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.List; + /** * 平台子游戏管理对象 ff_game * @@ -92,4 +94,5 @@ public class Game extends BaseEntity { */ private Integer platformType; + private List nameInfo; } diff --git a/ff-game/src/main/java/com/ff/game/domain/NameInfo.java b/ff-game/src/main/java/com/ff/game/domain/NameInfo.java new file mode 100644 index 0000000..76c12d8 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/domain/NameInfo.java @@ -0,0 +1,20 @@ +package com.ff.game.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author cengy + */ +@Data +@AllArgsConstructor +@Builder +@NoArgsConstructor +public class NameInfo implements Serializable { + private String name; + private String lang; +} diff --git a/ff-game/src/main/java/com/ff/game/domain/Platform.java b/ff-game/src/main/java/com/ff/game/domain/Platform.java index 9d818b7..6352a41 100644 --- a/ff-game/src/main/java/com/ff/game/domain/Platform.java +++ b/ff-game/src/main/java/com/ff/game/domain/Platform.java @@ -1,9 +1,13 @@ package com.ff.game.domain; import com.ff.base.core.domain.BaseEntity; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.Getter; import java.util.List; +import java.util.Map; +import java.util.Set; /** * @author cengy @@ -34,5 +38,39 @@ public class Platform extends BaseEntity { private LangInfo langInfo; private CurrencyInfo currencyInfo; private UrlInfo urlInfo; + /** + * 代理类型 0:代理单币种 1:代理多币种 + */ + private Integer type; + private ExtInfo extInfo; + + + @Getter + @AllArgsConstructor + public enum Type { + /** + * 代理类型 0:代理单币种 1:代理多币种 + */ + SINGLE(0, "代理单币种"), + MULTI(1, "代理多币种"); + + private Integer code; + private String name; + + } + + public boolean isMultiAgent() { + return this.type == Type.MULTI.getCode(); + } + + public String getOurCurrency(String currency) { + Set> entrySet= currencyInfo.entrySet(); + for (Map.Entry entry : entrySet) { + if (entry.getValue().equals(currency)) { + return entry.getKey(); + } + } + return null; + } } diff --git a/ff-game/src/main/java/com/ff/game/mapper/GameMapper.java b/ff-game/src/main/java/com/ff/game/mapper/GameMapper.java index a9db62d..c6deaeb 100644 --- a/ff-game/src/main/java/com/ff/game/mapper/GameMapper.java +++ b/ff-game/src/main/java/com/ff/game/mapper/GameMapper.java @@ -1,77 +1,77 @@ package com.ff.game.mapper; -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; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 平台子游戏管理Mapper接口 - * + * * @author shi * @date 2025-02-10 */ -public interface GameMapper -{ +public interface GameMapper { /** * 查询平台子游戏管理 - * + * * @param id 平台子游戏管理主键 * @return 平台子游戏管理 */ - Game selectGameById(Long id); + Game selectGameById(Long id); /** * 查询平台子游戏管理列表 - * + * * @param game 平台子游戏管理 * @return 平台子游戏管理集合 */ - List selectGameList(Game game); + List selectGameList(Game game); /** * 新增平台子游戏管理 - * + * * @param game 平台子游戏管理 * @return 结果 */ - int insertGame(Game game); + int insertGame(Game game); /** * 修改平台子游戏管理 - * + * * @param game 平台子游戏管理 * @return 结果 */ - int updateGame(Game game); + int updateGame(Game game); /** * 删除平台子游戏管理 - * + * * @param id 平台子游戏管理主键 * @return 结果 */ - int deleteGameById(Long id); + int deleteGameById(Long id); /** * 批量删除平台子游戏管理 - * + * * @param ids 需要删除的数据主键集合 * @return 结果 */ - int deleteGameByIds(Long[] ids); + int deleteGameByIds(Long[] ids); /** - * 按平台id选择最大排序号 + * 根据平台code与平台类型选择最大序号 * - * @param platformId 平台id - * @return {@link Integer } + * @param platformType + * @param platformCode + * @return */ - Integer selectMaxSortNoByPlatformId(Long platformId); - + Integer selectMaxSortNoBy(@Param("platformType") Integer platformType, @Param("platformCode") String platformCode); /** * 选择游戏唯一列表 @@ -79,7 +79,7 @@ public interface GameMapper * @param gameUniqueDTO 游戏独有dto * @return {@link List }<{@link Game }> */ - List selectGameUniqueList(GameUniqueDTO gameUniqueDTO); + List selectGameUniqueList(GameUniqueDTO gameUniqueDTO); /** * 选择游戏响应列表 diff --git a/ff-game/src/main/java/com/ff/game/service/IGameService.java b/ff-game/src/main/java/com/ff/game/service/IGameService.java index 8c8572c..e1a0863 100644 --- a/ff-game/src/main/java/com/ff/game/service/IGameService.java +++ b/ff-game/src/main/java/com/ff/game/service/IGameService.java @@ -1,36 +1,34 @@ package com.ff.game.service; -import java.util.List; - -import com.dtflys.forest.annotation.Body; 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; +import java.util.List; + /** * 平台子游戏管理Service接口 - * + * * @author shi * @date 2025-02-10 */ -public interface IGameService -{ +public interface IGameService { /** * 查询平台子游戏管理 - * + * * @param id 平台子游戏管理主键 * @return 平台子游戏管理 */ - Game selectGameById(Long id); + Game selectGameById(Long id); /** * 查询平台子游戏管理列表 - * + * * @param game 平台子游戏管理 * @return 平台子游戏管理集合 */ - List selectGameList(Game game); + List selectGameList(Game game); /** @@ -43,43 +41,42 @@ public interface IGameService /** * 新增平台子游戏管理 - * + * * @param game 平台子游戏管理 * @return 结果 */ - int insertGame(Game game); + int insertGame(Game game); /** * 修改平台子游戏管理 - * + * * @param game 平台子游戏管理 * @return 结果 */ - int updateGame(Game game); + int updateGame(Game game); /** * 批量删除平台子游戏管理 - * + * * @param ids 需要删除的平台子游戏管理主键集合 * @return 结果 */ - int deleteGameByIds(Long[] ids); + int deleteGameByIds(Long[] ids); /** * 删除平台子游戏管理信息 - * + * * @param id 平台子游戏管理主键 * @return 结果 */ - int deleteGameById(Long id); + int deleteGameById(Long id); /** * 按平台id选择最大排序号 * - * @param platformId 平台id * @return {@link Integer } */ - Integer selectMaxSortNoByPlatformId(Long platformId); + Integer selectMaxSortNo(Integer platformType, String platformCode); /** * 选择游戏唯一列表 @@ -103,7 +100,7 @@ public interface IGameService * @param endTime 结束时间 * @param platformCode 平台代码 */ - void insertGameBettingDetails(Long startTime,Long endTime,String platformCode); + void insertGameBettingDetails(Long startTime, Long endTime, String platformCode); } diff --git a/ff-game/src/main/java/com/ff/quartz/task/GameTask.java b/ff-game/src/main/java/com/ff/quartz/task/GameTask.java index 19d7950..1732f03 100644 --- a/ff-game/src/main/java/com/ff/quartz/task/GameTask.java +++ b/ff-game/src/main/java/com/ff/quartz/task/GameTask.java @@ -1,43 +1,30 @@ package com.ff.quartz.task; import com.ff.base.constant.Constants; -import com.ff.base.core.redis.RedisCache; -import com.ff.base.datasource.DynamicDataSourceContextHolder; import com.ff.base.enums.GamePlatforms; -import com.ff.base.enums.NGPlatforms; -import com.ff.base.enums.PlatformType; import com.ff.base.enums.StatusType; import com.ff.base.utils.DateUtils; +import com.ff.base.utils.StringUtils; 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.*; +import com.ff.game.domain.KeyInfo; +import com.ff.game.domain.Platform; +import com.ff.game.service.IGameExchangeMoneyService; +import com.ff.game.service.IPlatformService; 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 org.springframework.util.ObjectUtils; import javax.annotation.Resource; -import javax.sql.DataSource; -import javax.xml.crypto.dsig.keyinfo.PGPData; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; +import java.util.Map; /** @@ -50,242 +37,206 @@ import java.util.stream.Collectors; @Component("gameTask") public class GameTask { - @Autowired private Map gamesService; - @Resource - private IGameSecretKeyService gameSecretKeyService; - - @Resource - private IGamePlatformService gamePlatformService; - - @Resource private NGClient ngClient; @Resource private IGameExchangeMoneyService gameExchangeMoneyService; - @Resource - private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; - @Resource private IMemberService memberService; @Resource - private RedisCache redisCache; - - - @Resource - private IGameService gameService; + private IPlatformService platformService; /** - * 插入游戏投注详细信息 + * 同步游戏列表 */ - - public void insertGameBettingDetails(Integer backTime) { - - //捞取指定分钟前的数据 - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); - - - for (String gameKey : gamesService.keySet()) { - String platformCode = gameKey.replace(Constants.SERVICE, ""); - //特殊的平台跳过 - if (NGPlatforms.exists(platformCode) || GamePlatforms.FC.getInfo().equals(platformCode)) { - continue; + public void syncGameList() { + for (GamePlatforms gamePlatform : GamePlatforms.values()) { + String platformCode = gamePlatform.getCode(); + try { + syncGameList(platformCode); + } catch (Exception e) { + log.error("同步游戏列表失败platformCode:{}", platformCode, e); } + } + } - List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(platformCode).build()); - for (GameSecretKey gameSecretKey : gameSecretKeys) { - try { - gamesService.get(gameKey).getGameList(GamesBaseRequestDTO.builder() - .agentId(gameSecretKey.getCode()) - .agentKey(gameSecretKey.getKey()) + public void syncGameList(String platformCode) { + + Platform platform = platformService.get(platformCode); + if (null == platform) { + return; + } + List keyData = platform.getKeyInfo(); + for (KeyInfo keyInfo : keyData) { + gamesService.get(platformCode + Constants.SERVICE) + .getGameList(GamesBaseRequestDTO.builder() + .agentId(keyInfo.getCode()) + .agentKey(keyInfo.getKey()) + .keyInfo(keyInfo) + .vendor(platform) .build()); - BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); - betRecordByTimeDTO.setGamePlatform(gameSecretKey.getPlatform()); - betRecordByTimeDTO.setStartTime(startTime); - betRecordByTimeDTO.setEndTime(endTime); - betRecordByTimeDTO.setPage(1); - betRecordByTimeDTO.setPageLimit(1000); - betRecordByTimeDTO.setAgentId(gameSecretKey.getCode()); - betRecordByTimeDTO.setAgentKey(gameSecretKey.getKey()); - gamesService.get(gameKey).getBetRecordByTime(betRecordByTimeDTO); - } catch (Exception e) { - log.error("查询 币种 {} 投注记录失败,错误信息 {}", gameSecretKey.getCode(), e); - } + break; + } + } + + /** + * 同步实时投注记录 + * + * @param platformCode + * @param backTimeMin + */ + public void syncRealtimeBetRecord(String platformCode, Integer backTimeMin) { + //捞取指定分钟前的数据 + Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin); + Long endTime = DateUtils.getNowDate(); + + Platform platform = platformService.get(platformCode); + if (null == platform) { + return; + } + List keyData = platform.getKeyInfo(); + + for (KeyInfo keyInfo : keyData) { + try { + BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); + betRecordByTimeDTO.setStartTime(startTime); + betRecordByTimeDTO.setEndTime(endTime); + betRecordByTimeDTO.setPage(1); + betRecordByTimeDTO.setPageLimit(1000); + betRecordByTimeDTO.setAgentId(keyInfo.getCode()); + betRecordByTimeDTO.setAgentKey(keyInfo.getKey()); + betRecordByTimeDTO.setKeyInfo(keyInfo); + betRecordByTimeDTO.setVendor(platform); + gamesService.get(platformCode + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO); + } catch (Exception e) { + log.error("同步平台投注记录失败platformCode:{}", platformCode, e); } - - } - - } - - /** - * 插入游戏cfbetting详细信息 - */ - public void insertGameCFBettingDetails(Integer backTime) { - - - try { - //捞取指定分钟前的数据 - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); - - for (String gameKey : gamesService.keySet()) { - String platformCode = gameKey.replace(Constants.SERVICE, ""); - //不是特殊的平台跳过 - if (!GamePlatforms.FC.getInfo().equals(platformCode)) { - continue; - } - List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(platformCode).build()); - for (GameSecretKey gameSecretKey : gameSecretKeys) { - try { - gamesService.get(gameKey).getGameList(GamesBaseRequestDTO.builder() - .agentId(gameSecretKey.getCode()) - .agentKey(gameSecretKey.getKey()) - .build()); - BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); - betRecordByTimeDTO.setGamePlatform(gameSecretKey.getPlatform()); - betRecordByTimeDTO.setStartTime(startTime); - betRecordByTimeDTO.setEndTime(endTime); - betRecordByTimeDTO.setPage(1); - betRecordByTimeDTO.setPageLimit(1000); - betRecordByTimeDTO.setAgentId(gameSecretKey.getCode()); - betRecordByTimeDTO.setAgentKey(gameSecretKey.getKey()); - gamesService.get(gameKey).getBetRecordByTime(betRecordByTimeDTO); - } catch (Exception e) { - log.error("查询 平台 {} 投注记录失败,错误信息 {}", gameSecretKey.getCode(), e); - } - } - + if (platform.isMultiAgent()) { + break; } - } catch (Exception e) { - log.error("查询 FC 投注记录失败,错误信息 {}", e); - } - - } - - - /** - * 插入FC游戏投注详细信息 - * - * @param backTime 返回时间 - */ - public void insertFCHistoryGameBettingDetails(Integer backTime) { - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); - //捞取指定分钟前的数据 - gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.FC.getInfo()); - - } - - - /** - * 插入AE游戏投注详细信息 - * - * @param backTime 返回时间 - */ - public void insertAEHistoryGameBettingDetails(Integer backTime) { - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); - //捞取指定分钟前的数据 - gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.AE.getInfo()); - } /** - * 插入PGX游戏投注详细信息 + * 同步历史投注记录 * - * @param backTime 返回时间 + * @param platformCode + * @param backTimeMin */ - public void insertPGXHistoryGameBettingDetails(Integer backTime) { - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); - //捞取指定分钟前的数据 - gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.PGX.getInfo()); - - } - - /** - * 插入MT游戏投注详细信息 - * - * @param backTime 返回时间 - */ - public void insertMTHistoryGameBettingDetails(Integer backTime) { - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); + public void syncHistoryBetRecord(String platformCode, Integer backTimeMin) { //捞取指定分钟前的数据 - gameService.insertGameBettingDetails(startTime, endTime, GamePlatforms.MT.getCode()); - - } - - /** - * 插入游戏ngbetting详细信息 - */ - public void insertGameNGBettingDetails(Integer backTime) { - - - try { - //捞取指定分钟前的数据 - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); - Long endTime = DateUtils.getNowDate(); - BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); - betRecordByTimeDTO.setStartTime(startTime); - betRecordByTimeDTO.setEndTime(endTime); - gamesService.get(NGPlatforms.PG.getPlatform() + Constants.SERVICE).getBetRecordByTime(betRecordByTimeDTO); - } catch (Exception e) { - log.error("查询 NG 投注记录失败,错误信息 {}", e); + Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTimeMin); + Long endTime = DateUtils.getNowDate(); + Platform platform = platformService.get(platformCode); + if (null == platform) { + return; } + List keyData = platform.getKeyInfo(); - } + for (KeyInfo keyInfo : keyData) { + try { + BetRecordByTimeDTO betRecordByTimeDTO = new BetRecordByTimeDTO(); + betRecordByTimeDTO.setStartTime(startTime); + betRecordByTimeDTO.setEndTime(endTime); + betRecordByTimeDTO.setPage(1); + betRecordByTimeDTO.setPageLimit(1000); + betRecordByTimeDTO.setAgentId(keyInfo.getCode()); + betRecordByTimeDTO.setAgentKey(keyInfo.getKey()); + betRecordByTimeDTO.setKeyInfo(keyInfo); + betRecordByTimeDTO.setVendor(platform); - - /** - * 插入免费游戏局数情况 - */ - public void insertFreeSpinDashflow() { - Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), -70); - for (String gameKey : gamesService.keySet()) { - List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(gameKey.replace(Constants.SERVICE, "")).build()); - for (GameSecretKey gameSecretKey : gameSecretKeys) { - try { - GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO = new GetFreeSpinDashflowRequestDTO(); - getFreeSpinDashflowRequestDTO.setStartTime(startTime); - getFreeSpinDashflowRequestDTO.setAgentId(gameSecretKey.getCode()); - getFreeSpinDashflowRequestDTO.setAgentKey(gameSecretKey.getKey()); - gamesService.get(gameKey).getFreeSpinDashflow(getFreeSpinDashflowRequestDTO); - } catch (Exception e) { - log.error("查询 币种 {} 免费游戏投注记录失败,错误信息 {}", gameSecretKey.getCode(), e.getMessage()); - } + gamesService.get(platformCode + Constants.SERVICE).getBetRecordByHistoryTime(betRecordByTimeDTO); + } catch (Exception e) { + log.error("同步平台投注记录失败platformCode:{}", platformCode, e); + } + if (platform.isMultiAgent()) { + break; } - - } } + /** + * 同步免费游玩记录 + */ + public void syncFreeBetRecord(String platformCode, Integer backTime) { + // 捞取指定分钟前的数据 + Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime); + + Platform platform = platformService.get(platformCode); + if (null == platform) { + return; + } + List keyData = platform.getKeyInfo(); + + for (KeyInfo keyInfo : keyData) { + try { + GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO = new GetFreeSpinDashflowRequestDTO(); + getFreeSpinDashflowRequestDTO.setStartTime(startTime); + getFreeSpinDashflowRequestDTO.setAgentId(keyInfo.getCode()); + getFreeSpinDashflowRequestDTO.setAgentKey(keyInfo.getKey()); + getFreeSpinDashflowRequestDTO.setVendor(platform); + getFreeSpinDashflowRequestDTO.setKeyInfo(keyInfo); + gamesService.get(platformCode + Constants.SERVICE).getFreeSpinDashflow(getFreeSpinDashflowRequestDTO); + + } catch (Exception e) { + log.error("免费游戏投注记录失败platformCode:{}", platformCode, e); + } + if (platform.isMultiAgent()) { + break; + } + } + } public void updateGameExchangeMoney() { List 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()); +// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() +// .platformCode(exchangeMoney.getPlatformCode()) +// .systemCurrency(exchangeMoney.getCurrencyCode()).build()); + Platform platform = platformService.get(exchangeMoney.getPlatformCode()); + if (null == platform) { + log.error("平台不存在platformCode:{}", exchangeMoney.getPlatformCode()); + continue; + } + + List keyInfos = platform.getKeyInfo(); + KeyInfo keyInfo = null; + for (KeyInfo keyData : keyInfos) { + if (keyData.getCurrency().equalsIgnoreCase(exchangeMoney.getCurrencyCode())) { + keyInfo = keyData; + break; + } + } + if (null == keyInfo) { + log.error("平台不存在currencyCode:{}", exchangeMoney.getCurrencyCode()); + continue; + } + String targetCurrency = platform.getCurrencyInfo().get(exchangeMoney.getCurrencyCode()); + if (StringUtils.isEmpty(targetCurrency)) { + log.error("平台不存在currencyCode:{}", exchangeMoney.getCurrencyCode()); + continue; + } Member member = memberService.selectMemberById(exchangeMoney.getMemberId()); ExchangeTransferStatusRequestDTO exchangeTransferStatusRequestDTO = new ExchangeTransferStatusRequestDTO(); exchangeTransferStatusRequestDTO.setAccount(member.getGameAccount()); - exchangeTransferStatusRequestDTO.setCurrency(gameSecretKey.getCurrency()); + exchangeTransferStatusRequestDTO.setCurrency(targetCurrency); exchangeTransferStatusRequestDTO.setOrderId(exchangeMoney.getTransactionId()); - exchangeTransferStatusRequestDTO.setAgentId(gameSecretKey.getCode()); - exchangeTransferStatusRequestDTO.setAgentKey(gameSecretKey.getKey()); + exchangeTransferStatusRequestDTO.setAgentId(keyInfo.getCode()); + exchangeTransferStatusRequestDTO.setAgentKey(keyInfo.getKey()); exchangeTransferStatusRequestDTO.setGameExchangeMoneyId(exchangeMoney.getId()); + exchangeTransferStatusRequestDTO.setVendor(platform); + exchangeTransferStatusRequestDTO.setKeyInfo(keyInfo); + exchangeTransferStatusRequestDTO.setSystemCurrency(targetCurrency); gamesService.get(exchangeMoney.getPlatformCode() + Constants.SERVICE).exchangeTransferStatus(exchangeTransferStatusRequestDTO); } catch (Exception e) { log.error("查询 更新交易记录失败,错误信息 {}", e); diff --git a/ff-game/src/main/resources/mapper/game/GameMapper.xml b/ff-game/src/main/resources/mapper/game/GameMapper.xml index abf59e2..3baffbe 100644 --- a/ff-game/src/main/resources/mapper/game/GameMapper.xml +++ b/ff-game/src/main/resources/mapper/game/GameMapper.xml @@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -40,6 +41,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and freespin = #{freespin} and demo_status = #{demoStatus} and stop_status = #{stopStatus} + and platform_code = #{platformCode} + and platform_type = #{platformType} + @@ -161,6 +165,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where platform_id = #{platformId} +