From 8732f3e85f24dbe04dfaf0b34938aeffddc81b25 Mon Sep 17 00:00:00 2001 From: shi Date: Fri, 28 Mar 2025 19:23:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor(game):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=BC=A0=E9=80=92=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 GamesPPServiceImpl 中,将 JSONUtils.toJSONString(params) 替换为直接使用 params - 在 PPClient 中,修改 getGameList 方法参数类型从 String 改为 Map --- .../java/com/ff/base/constant/Constants.java | 5 +- .../api/ae/address/MyAEAddressSource.java | 31 + .../com/ff/game/api/ae/client/AEClient.java | 97 +++ .../com/ff/game/api/ae/dto/AEResponse.java | 26 + .../api/ae/dto/XKBetRecordResponseDTO.java | 54 ++ .../api/ae/dto/XKCreateMemberResponseDTO.java | 32 + .../ae/dto/XKExchangeMoneyResponseDTO.java | 46 ++ .../game/api/ae/dto/XKKickMemberAllDTO.java | 27 + .../ff/game/api/ae/dto/XKKickMemberDTO.java | 13 + .../XKLoginWithoutRedirectResponseDTO.java | 29 + .../ff/game/api/ae/dto/XKMemberInfoDTO.java | 49 ++ .../game/api/ae/impl/GamesAEServiceImpl.java | 594 ++++++++++++++++++ 12 files changed, 1002 insertions(+), 1 deletion(-) create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/address/MyAEAddressSource.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/AEResponse.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKBetRecordResponseDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKCreateMemberResponseDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKExchangeMoneyResponseDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberAllDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKLoginWithoutRedirectResponseDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/XKMemberInfoDTO.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java diff --git a/ff-base/src/main/java/com/ff/base/constant/Constants.java b/ff-base/src/main/java/com/ff/base/constant/Constants.java index cfb844f..50e62d9 100644 --- a/ff-base/src/main/java/com/ff/base/constant/Constants.java +++ b/ff-base/src/main/java/com/ff/base/constant/Constants.java @@ -213,7 +213,10 @@ public class Constants { */ public static final String DG_API_BASE_URL = "dg.api.base.url"; - + /** + * ae api基本url + */ + public static final String AE_API_BASE_URL = "ae.api.base.url"; /** * sa-api基本url */ diff --git a/ff-game/src/main/java/com/ff/game/api/ae/address/MyAEAddressSource.java b/ff-game/src/main/java/com/ff/game/api/ae/address/MyAEAddressSource.java new file mode 100644 index 0000000..21eba22 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/address/MyAEAddressSource.java @@ -0,0 +1,31 @@ +package com.ff.game.api.ae.address; + +import com.dtflys.forest.callback.AddressSource; +import com.dtflys.forest.http.ForestAddress; +import com.dtflys.forest.http.ForestRequest; +import com.ff.base.constant.Constants; +import com.ff.base.system.service.ISysConfigService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +/** + * 我jili address来源 + * + * @author shi + * @date 2025/02/10 + */ +@Component +public class MyAEAddressSource implements AddressSource { + + @Resource + private ISysConfigService configService; + + + @Override + public ForestAddress getAddress(ForestRequest request) { + String apiBaseUrl = configService.selectConfigByKey(Constants.AE_API_BASE_URL); + return new ForestAddress("https",apiBaseUrl, 443,""); + } +} \ No newline at end of file diff --git a/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java b/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java new file mode 100644 index 0000000..4427faf --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java @@ -0,0 +1,97 @@ +package com.ff.game.api.ae.client; + +import com.dtflys.forest.annotation.*; +import com.ff.game.api.ae.address.MyAEAddressSource; +import com.ff.game.api.ae.dto.*; +import com.ff.game.api.ae.impl.GamesAEServiceImpl; +import com.ff.game.api.jili.dto.*; +import com.ff.game.api.xk.dto.XKGamesDTO; + +import java.util.Map; + +/** + * xk 请求 + * + * @author shi + * @date 2025/02/10 + */ +@Address(source = MyAEAddressSource.class) +public interface AEClient { + /** + * 创建成员 + * + * @param params 参数 + * @return {@link String } + */ + @Post(url ="/wallet/createMember", + headers = { + "Content-type: application/x-www-form-urlencoded" + }) + AEResponse createMember(@Body Map params); + + /** + * 获取会员信息 + * + * @param params 参数 + * @return {@link XKMemberInfoDTO } + */ + @Post("/getMemberInfo") + XKMemberInfoDTO getMemberInfo(@JSONBody Map params); + + /** + * 无重定向登录 + * + * @param params 参数 + * @return {@link JILILoginWithoutRedirectResponseDTO } + */ + @Post("/loginWithoutRedirect") + XKLoginWithoutRedirectResponseDTO loginWithoutRedirect(@JSONBody Map params); + + /** + * 获取游戏列表 + * + * @param params 参数 + * @return {@link JILIGamesDTO } + */ + @Post("/getGameList") + XKGamesDTO getGameList(@JSONBody Map params); + + /** + * 按代理id进行交换转账 + * + * @param params 参数 + * @return {@link JILIExchangeMoneyResponseDTO } + */ + @Post(url = "/exchangeTransferByAgentId") + XKExchangeMoneyResponseDTO exchangeTransferByAgentId(@JSONBody Map params); + + /** + * 按时间获取投注记录 + * + * @param params 参数 + * @return {@link XKBetRecordResponseDTO } + */ + @Post(url = "/getGameRecordByTime") + XKBetRecordResponseDTO getBetRecordByTime(@JSONBody Map params); + + + /** + * 踢出队员 + * + * @param params 参数 + * @return {@link JILIKickMemberDTO } + */ + @Post("/kickMember") + XKKickMemberDTO kickMember(@JSONBody Map params); + + /** + * 踢出所有队员 + * + * @param params 参数 + * @return {@link JILIKickMemberAllDTO } + */ + @Get("/kickMemberAll") + XKKickMemberAllDTO kickMemberAll(@JSONBody Map params); + + +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/AEResponse.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/AEResponse.java new file mode 100644 index 0000000..499a484 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/AEResponse.java @@ -0,0 +1,26 @@ +package com.ff.game.api.ae.dto; + +import lombok.Data; + +/** + * 航空响应 + * + * @author shi + * @date 2025/03/28 + */ +@Data +public class AEResponse { + /** + * 状态码 (String类型) + * 0000 - 成功 + * 其他 - 错误状态码 + */ + private String status; + + /** + * 描述信息 (String类型) + * "Success" - 请求成功 + * 其他 - 错误信息 + */ + private String desc; +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKBetRecordResponseDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKBetRecordResponseDTO.java new file mode 100644 index 0000000..a4c3540 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKBetRecordResponseDTO.java @@ -0,0 +1,54 @@ +package com.ff.game.api.ae.dto; + +import io.jsonwebtoken.lang.Collections; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@NoArgsConstructor +@Data +public class XKBetRecordResponseDTO { + + private Integer code; + private String msg; + private DataBean data; + + @NoArgsConstructor + @Data + public static class DataBean { + private Integer currentPage; + private Integer totalPages; + private Integer pageLimit; + private Integer totalNumber; + private List result; + + public List getResult() { + if (Collections.isEmpty(result)) { + return new ArrayList<>(); + } + return result; + } + + @NoArgsConstructor + @Data + public static class ResultBean { + private String account; + private Long wagersId; + private String gameId; + private Long wagersTime; + private BigDecimal betAmount; + private Long payoffTime; + private BigDecimal payoffAmount; + private Integer status; + private Long settlementTime; + private Integer gameCategoryId; + private Integer type; + private String agentId; + private BigDecimal turnover; + private Long roundIndex; + } + } +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKCreateMemberResponseDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKCreateMemberResponseDTO.java new file mode 100644 index 0000000..01578a0 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKCreateMemberResponseDTO.java @@ -0,0 +1,32 @@ +package com.ff.game.api.ae.dto; + + +import com.ff.game.api.request.GamesBaseRequestDTO; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 创建成员响应dto + * + * @author shi + * @date 2024/10/22 + */ +@NoArgsConstructor +@Data +public class XKCreateMemberResponseDTO extends GamesBaseRequestDTO { + + + /** + * 代码 + */ + private int code; + /** + * 数据 + */ + private String data; + /** + * msg + */ + private String msg; +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKExchangeMoneyResponseDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKExchangeMoneyResponseDTO.java new file mode 100644 index 0000000..be8a729 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKExchangeMoneyResponseDTO.java @@ -0,0 +1,46 @@ +package com.ff.game.api.ae.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@NoArgsConstructor +@Data +public class XKExchangeMoneyResponseDTO { + + private int code; + private String msg; + private DataBean data; + + @NoArgsConstructor + @Data + public static class DataBean { + /** + * 交易序号,额度转移纪录唯一值, 长度上限 50 + */ + private String transactionId; + /** + * 转账前金额(游戏币) + */ + private BigDecimal coinBefore; + /** + * 转账后金额(游戏币) + */ + private BigDecimal coinAfter; + /** + * 转账前金额(指定货币) + */ + private BigDecimal currencyBefore; + /** + * 转账后金额(指定货币) + */ + private BigDecimal currencyAfter; + /** + * 状态: + * 1: 成功 + * 2: 失败 + */ + private Integer status; + } +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberAllDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberAllDTO.java new file mode 100644 index 0000000..ea17acc --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberAllDTO.java @@ -0,0 +1,27 @@ +package com.ff.game.api.ae.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * xkkick会员全部dto + * + * @author shi + * @date 2024/11/13 + */ +@Data +@NoArgsConstructor +public class XKKickMemberAllDTO { + /** + * 代码 + */ + private int code; + /** + * 数据 + */ + private String data; + /** + * msg + */ + private String msg; +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberDTO.java new file mode 100644 index 0000000..ac5ea42 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKKickMemberDTO.java @@ -0,0 +1,13 @@ +package com.ff.game.api.ae.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@Data +public class XKKickMemberDTO { + + private int code; + private String msg; + private Object data; +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKLoginWithoutRedirectResponseDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKLoginWithoutRedirectResponseDTO.java new file mode 100644 index 0000000..e622416 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKLoginWithoutRedirectResponseDTO.java @@ -0,0 +1,29 @@ +package com.ff.game.api.ae.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 登录时不重定向响应dto + * + * @author shi + * @date 2024/10/22 + */ +@NoArgsConstructor +@Data +public class XKLoginWithoutRedirectResponseDTO { + + + /** + * 代码 + */ + private int code; + /** + * 数据 + */ + private String data; + /** + * msg + */ + private String msg; +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/XKMemberInfoDTO.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKMemberInfoDTO.java new file mode 100644 index 0000000..ae6a3bb --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/XKMemberInfoDTO.java @@ -0,0 +1,49 @@ +package com.ff.game.api.ae.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 会员信息dto + * + * @author shi + * @date 2024/10/30 + */ +@NoArgsConstructor +@Data +public class XKMemberInfoDTO { + + + /** + * 代码 + */ + private Integer code; + /** + * msg + */ + private String msg; + /** + * 数据 + */ + private List data; + + @NoArgsConstructor + @Data + public static class DataBean { + /** + * 账户 + */ + private String account; + /** + * 平衡 + */ + private BigDecimal balance; + /** + * 地位 + */ + private Integer status; + } +} 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 new file mode 100644 index 0000000..0bd6601 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java @@ -0,0 +1,594 @@ +package com.ff.game.api.ae.impl; + +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.sign.Md5Utils; +import com.ff.base.utils.uuid.IdUtils; +import com.ff.config.KeyConfig; +import com.ff.game.api.IGamesService; +import com.ff.game.api.ae.client.AEClient; +import com.ff.game.api.ae.dto.*; +import com.ff.game.api.request.*; +import com.ff.game.api.xk.dto.XKGamesDTO; +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; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + + +/** + * AE 游戏 impl + * + * @author shi + * @date 2024/11/12 + */ +@Service("AEService") +@Slf4j +public class GamesAEServiceImpl implements IGamesService { + + + @Resource + private ISysConfigService configService; + + @Resource + private RedisCache redisCache; + + @Resource + private IGameExchangeMoneyService gameExchangeMoneyService; + + + @Resource + private IGamePlatformService gamePlatformService; + + + @Resource + private IGameService gameService; + + + @Resource + private IMemberService memberService; + + @Resource + private IGameFreeRecordService gameFreeRecordService; + @Resource + private IGameSecretKeyService gameSecretKeyService; + + @Resource + private IGameSecretKeyCurrencyService gameSecretKeyCurrencyService; + + @Resource + private AEClient AEClient; + + + @Resource + private KeyConfig keyConfig; + + @Resource + private IGameBettingDetailsService gameBettingDetailsService; + + @Resource + private IGameNameService gameNameService; + + + /** + * 获得就是成功 + * + * @param errorCode 错误代码 + * @return {@link Boolean } + */ + private Boolean getIsSuccess(Integer errorCode) { + return 0 == errorCode; + } + + + /** + * 获取密钥 + * + * @param gamesBaseRequestDTO 游戏请求dto + * @return {@link Map }<{@link String }, {@link Object }> + */ + private Map getKey(GamesBaseRequestDTO gamesBaseRequestDTO ) { + Map params = new LinkedHashMap<>(); + params.put("cert",gamesBaseRequestDTO.getAgentKey()); + params.put("agentId",gamesBaseRequestDTO.getAgentId()); + return params; + } + + /** + * 创建成员 + * + * @param createMemberRequestDTO 创建成员请求dto + * @return {@link Boolean } + */ + @Override + public Boolean createMember(CreateMemberRequestDTO createMemberRequestDTO) { + log.info("GamesAEServiceImpl [createMember] 请求参数 {}", createMemberRequestDTO); + + Map params = this.getKey(createMemberRequestDTO); + params.put("userId", createMemberRequestDTO.getAccount()); + params.put("currency", createMemberRequestDTO.getCurrency()); + params.put("betLimit", "{}"); + AEResponse aeResponse = AEClient.createMember(params); + String errorCode = aeResponse.getStatus(); + if (this.getIsSuccess(Integer.valueOf(errorCode))) { + return Boolean.TRUE; + } + //判断是否获取成功 + return Boolean.FALSE; + } + + + /** + * 获取会员信息 + * + * @param memberInfoRequestDTO 会员信息请求dto + * @return {@link MemberInfoResponseDTO } + */ + @Override + public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) { + log.info("GamesXKServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO); + return null; + } + + /** + * 无重定向登录 + * + * @param gamesLogin 游戏登录 + * @return {@link String } + */ + @Override + public String loginWithoutRedirect(GamesLogin gamesLogin) { + log.info("GamesXKServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin); + + Map params = new LinkedHashMap<>(); + params.put("account", gamesLogin.getAccount()); + params.put("gameId", Integer.valueOf(gamesLogin.getGameId())); + params.put("lang", gamesLogin.getLang()); + params.put("agentId", gamesLogin.getAgentId()); + String query = JsonUtil.mapToQueryString(params); + gamesLogin.setQuery(query); + Map key = this.getKey(gamesLogin); + params.put("key", key); + params.put("disableFullScreen", gamesLogin.getDisableFullScreen()); + params.put("homeUrl", gamesLogin.getHomeUrl()); + params.put("platform", gamesLogin.getPlatform()); + XKLoginWithoutRedirectResponseDTO xkLoginWithoutRedirectResponseDTO = AEClient.loginWithoutRedirect(params); + //判断是否获取成功 + if (this.getIsSuccess(xkLoginWithoutRedirectResponseDTO.getCode())) { + return xkLoginWithoutRedirectResponseDTO.getData(); + } else { + throw new BaseException(xkLoginWithoutRedirectResponseDTO.getMsg()); + } + } + + + /** + * 获取游戏列表 + * + * @param gamesBaseRequestDTO 游戏请求dto + * @return {@link String } + */ + @Transactional + @Override + public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) { + + List gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES); + if (!CollectionUtils.isEmpty(gamesDatas)) { + return CacheConstants.XK_GAMES; + } + + + Map params = new LinkedHashMap<>(); + params.put("agentId", gamesBaseRequestDTO.getAgentId()); + String query = JsonUtil.mapToQueryString(params); + gamesBaseRequestDTO.setQuery(query); + Map key = this.getKey(gamesBaseRequestDTO); + params.put("key", key); + + XKGamesDTO xkGamesDTO = AEClient.getGameList(params); + //判断是否获取成功 + if (this.getIsSuccess(xkGamesDTO.getCode())) { + + for (XKGamesDTO.DataBean gamesDataDTO : xkGamesDTO.getData()) { + GamePlatform gamePlatform = GamePlatform.builder() + .platformType(XKGameType.findSystemByCode(gamesDataDTO.getGameCategoryId())) + .platformCode(GamePlatforms.XK.getCode()) + .build(); + List gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform); + //没有此平台就新增一个平台 + if (CollectionUtils.isEmpty(gamePlatforms)) { + gamePlatform.setPlatformName(GamePlatforms.XK.getInfo() + XKGameType.findInfoByCode(gamesDataDTO.getGameCategoryId())); + gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1); + gamePlatform.setCreateBy(Constants.SYSTEM); + gamePlatformService.insertGamePlatform(gamePlatform); + } else { + gamePlatform = gamePlatforms.get(0); + } + Game game = Game.builder() + .platformId(gamePlatform.getId()) + .gameCode(String.valueOf(gamesDataDTO.getGameId())) + .build(); + List games = gameService.selectGameList(game); + //不存在这个游戏 + if (CollectionUtils.isEmpty(games)) { + game.setGameSourceType(String.valueOf(gamesDataDTO.getGameCategoryId())); + game.setFreespin(gamesDataDTO.isFreeSpin()); + game.setSortNo(gameService.selectMaxSortNoByPlatformId(gamePlatform.getId()) + 1); + game.setGameName(gamesDataDTO.getName()); + game.setCreateBy(Constants.SYSTEM); + gameService.insertGame(game); + } else { + game = games.get(0); + } + gamesDataDTO.setSystemGameId(game.getId()); + 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()) + .langCode("zh-CN") + .createBy(Constants.SYSTEM) + .build()); + } + + } + + redisCache.deleteObject(CacheConstants.XK_GAMES); + redisCache.setCacheList(CacheConstants.XK_GAMES, xkGamesDTO.getData()); + redisCache.expire(CacheConstants.XK_GAMES, 5L, TimeUnit.HOURS); + } else { + throw new BaseException(xkGamesDTO.getMsg()); + + } + + return CacheConstants.XK_GAMES; + } + + /** + * 按代理id进行交换转账 + * + * @param exchangeTransferMoneyRequestDTO 外汇转账moeny dto + * @return {@link Long } + */ + @Override + @Transactional + public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) { + log.info("GamesXKServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); + 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 gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList( + GameExchangeMoney.builder() + .tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey()) + .orderId(exchangeTransferMoneyRequestDTO.getOrderId()) + .build() + ); + Assert.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), "订单号重复"); + + //获取下一个自增id + GameExchangeMoney exchangeMoney = GameExchangeMoney + .builder() + .tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey()) + .orderId(exchangeTransferMoneyRequestDTO.getOrderId()) + .quota(exchangeTransferMoneyRequestDTO.getQuota()) + .balance(exchangeTransferMoneyRequestDTO.getAmount()) + .exchangeType(exchangeTransferMoneyRequestDTO.getTransferType()) + .currencyCode(currencyDTO.getSystemCurrency()) + .memberId(member.getId()) + .transactionId(transactionId) + .platformCode(GamePlatforms.XK.getCode()) + .build(); + exchangeMoney.setCreateBy(Constants.SYSTEM); + //接口限制限制50字符 + exchangeMoney.setTransactionId(GamePlatforms.XK.getCode() + IdUtils.simpleUUID()); + Map params = new LinkedHashMap<>(); + params.put("account", exchangeTransferMoneyRequestDTO.getAccount()); + params.put("transactionId", exchangeMoney.getTransactionId()); + params.put("amount", exchangeTransferMoneyRequestDTO.getAmount().stripTrailingZeros().toPlainString()); + params.put("transferType", exchangeTransferMoneyRequestDTO.getTransferType()); + params.put("agentId", exchangeTransferMoneyRequestDTO.getAgentId()); + String query = JsonUtil.mapToQueryString(params); + exchangeTransferMoneyRequestDTO.setQuery(query); + Map key = this.getKey(exchangeTransferMoneyRequestDTO); + params.put("key", key); + XKExchangeMoneyResponseDTO exchangeMoneyResponse = AEClient.exchangeTransferByAgentId(params); + //判断是否转移成功 + if (this.getIsSuccess(exchangeMoneyResponse.getCode())) { + XKExchangeMoneyResponseDTO.DataBean exchangeMoneyResponseData = exchangeMoneyResponse.getData(); + ApiException.isTrue(!StatusType.FAILURE.getValue().equals(exchangeMoneyResponseData.getStatus()), ErrorCode.BALANCE_TRANSFER_FAILED.getCode()); + + //更新数据 + exchangeMoney.setBalance(NumberUtil.sub(exchangeMoneyResponseData.getCurrencyAfter(), exchangeMoneyResponseData.getCurrencyBefore()).abs()); + exchangeMoney.setCoinBefore(exchangeMoneyResponseData.getCoinBefore()); + exchangeMoney.setCoinAfter(exchangeMoneyResponseData.getCoinAfter()); + exchangeMoney.setCurrencyBefore(exchangeMoneyResponseData.getCurrencyBefore()); + exchangeMoney.setCurrencyAfter(exchangeMoneyResponseData.getCurrencyAfter()); + exchangeMoney.setStatus(exchangeMoneyResponseData.getStatus()); + gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney); + } else { + log.error("GamesXKServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{},错误信息{}", exchangeMoneyResponse.getCode(), exchangeMoneyResponse.getMsg()); + throw new BaseException(exchangeMoneyResponse.getMsg()); + } + + return exchangeMoney.getId(); + } + + /** + * 汇兑转移状态 + * + * @param exchangeTransferMoneyRequestDTO 兑换转账请求dto + * @return {@link Boolean } + */ + @Override + public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) { + return Boolean.TRUE; + } + + + /** + * 按时间获取投注记录 + * + * @param betRecordByTimeDTO 按时间dto投注记录 + * @return {@link List }<{@link GameBettingDetails }> + */ + @Override + public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) { + List gameBettingDetails = new ArrayList<>(); + //请求参数 + log.info("GamesXKServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO); + Map params = new LinkedHashMap<>(); + params.put("startTime", betRecordByTimeDTO.getStartTime()); + params.put("endTime", betRecordByTimeDTO.getEndTime()); + params.put("page", betRecordByTimeDTO.getPage()); + params.put("pageLimit", betRecordByTimeDTO.getPageLimit()); + params.put("agentId", betRecordByTimeDTO.getAgentId()); + String query = JsonUtil.mapToQueryString(params); + betRecordByTimeDTO.setQuery(query); + Map key = this.getKey(betRecordByTimeDTO); + params.put("key", key); + XKBetRecordResponseDTO xkBetRecordResponseDTO = AEClient.getBetRecordByTime(params); + + //判断是否获取成功 + if (this.getIsSuccess(xkBetRecordResponseDTO.getCode())) { + //数据组装 + XKBetRecordResponseDTO.DataBean dataBean = xkBetRecordResponseDTO.getData(); + this.batchInsert(xkBetRecordResponseDTO); + + //获取下一页数据 + while (!Objects.equals(dataBean.getCurrentPage(), dataBean.getTotalPages()) && dataBean.getTotalPages() > 0) { + betRecordByTimeDTO.setPage(dataBean.getCurrentPage() + 1); + //请求参数 + params = new LinkedHashMap<>(); + params.put("startTime", betRecordByTimeDTO.getStartTime()); + params.put("endTime", betRecordByTimeDTO.getEndTime()); + params.put("page", betRecordByTimeDTO.getPage()); + params.put("pageLimit", betRecordByTimeDTO.getPageLimit()); + params.put("agentId", betRecordByTimeDTO.getAgentId()); + query = JsonUtil.mapToQueryString(params); + betRecordByTimeDTO.setQuery(query); + key = this.getKey(betRecordByTimeDTO); + params.put("key", key); + xkBetRecordResponseDTO = AEClient.getBetRecordByTime(params); + this.batchInsert(xkBetRecordResponseDTO); + } + + + return Boolean.TRUE; + } else { + log.error("GamesXKServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", xkBetRecordResponseDTO.getCode(), xkBetRecordResponseDTO.getMsg()); + throw new BaseException(xkBetRecordResponseDTO.getMsg()); + } + + } + + /** + * 按历史时间获取投注记录 + * + * @param betRecordByTimeDTO 按时间dto投注记录 + * @return {@link Boolean } + */ + @Override + public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) { + return null; + } + + /** + * 赠送免费局数 + * + * @param createFreeSpinRequest 创建自由旋转请求 + * @return {@link Boolean } + */ + @Override + public Boolean createFreeSpin(CreateFreeSpinRequestDTO createFreeSpinRequest) { + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + } + + /** + * 获取游戏详细信息 + * + * @param getGameDetailRequestDTO 获取游戏详细信息请求dto + * @return {@link GetGameDetailResponseDTO } + */ + @Override + public GetGameDetailResponseDTO getGameDetail(GetGameDetailRequestDTO getGameDetailRequestDTO) { + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + } + + /** + * 强制会员从游戏注销 + * + * @param kickMemberRequestDTO 踢会员请求dto + * @return {@link Boolean } + */ + @Override + public Boolean kickMember(KickMemberRequestDTO kickMemberRequestDTO) { + log.info("GamesXKServiceImpl [kickMember] 请求参数 {}", kickMemberRequestDTO); + Map params = new LinkedHashMap<>(); + params.put("account", kickMemberRequestDTO.getAccount()); + params.put("agentId", kickMemberRequestDTO.getAgentId()); + String query = JsonUtil.mapToQueryString(params); + kickMemberRequestDTO.setQuery(query); + Map key = this.getKey(kickMemberRequestDTO); + params.put("key", key); + XKKickMemberDTO xkKickMemberDTO = AEClient.kickMember(params); + //判断是否获取成功 + if (this.getIsSuccess(xkKickMemberDTO.getCode())) { + return Boolean.TRUE; + } else { + throw new BaseException(xkKickMemberDTO.getMsg()); + } + } + + /** + * 踢成员全部 + * + * @param kickMemberAllDTO 踢成员全部dto + * @return {@link Boolean } + */ + @Override + public Boolean kickMemberAll(KickMemberAllDTO kickMemberAllDTO) { + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + } + + /** + * 免费游戏玩家使用的纪录 + * + * @param getFreeSpinDashflowRequestDTO 获取自由旋转dashflow请求dto + * @return {@link List }<{@link GameFreeRecord }> + */ + @Override + public List getFreeSpinDashflow(GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO) { + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + } + + /** + * 取消赠送免费局数 + * + * @param cancelFreeSpinRequestDTO 取消免费旋转请求 + * @return {@link Boolean } + */ + @Override + public Boolean cancelFreeSpin(CancelFreeSpinRequestDTO cancelFreeSpinRequestDTO) { + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + } + + + /** + * 批量插入 + * + * @param xkBetRecordResponseDTO xk下注记录响应dto + */ + private void batchInsert(XKBetRecordResponseDTO xkBetRecordResponseDTO) { + List gameBettingDetails = new ArrayList<>(); + List wagersIds = new ArrayList<>(); + //数据组装 + XKBetRecordResponseDTO.DataBean dataBean = xkBetRecordResponseDTO.getData(); + //数据转化 + for (XKBetRecordResponseDTO.DataBean.ResultBean bean : dataBean.getResult()) { + GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).build()); + if (!ObjectUtils.isEmpty(bettingDetails)) { + bettingDetails.setId(IdUtil.getSnowflakeNextId()); + gameBettingDetails.add(bettingDetails); + } + wagersIds.add(String.valueOf(bean.getWagersId())); + } + if (!CollectionUtils.isEmpty(gameBettingDetails)) { + //查询重复数据id + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + //用steam流清除list中与wagersIds集合相同的数据 + gameBettingDetails = gameBettingDetails.stream() + .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(gameBettingDetails)) { + gameBettingDetailsService.batchInsert(gameBettingDetails); + } + } + + } + + /** + * 数据构建 + * + * @param gamesDataBuildDTO 数据 + * @return {@link GameBettingDetails } + */ + @Override + public GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO) { + //转化类 + XKBetRecordResponseDTO.DataBean.ResultBean resultBean = (XKBetRecordResponseDTO.DataBean.ResultBean) gamesDataBuildDTO.getData(); + + 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 gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES); + Map dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(XKGamesDTO.DataBean::getGameId, e -> e)); + XKGamesDTO.DataBean gamesDataDTO = dataDTOMap.get(resultBean.getGameId()); + BigDecimal payoffAmount = BigDecimal.ZERO; + + if (GameStatus.WIN.getCode().equals(resultBean.getStatus())) { + payoffAmount = NumberUtil.sub(resultBean.getPayoffAmount(), resultBean.getTurnover()); + } else if (GameStatus.FAIL.getCode().equals(resultBean.getStatus())) { + payoffAmount = NumberUtil.sub(resultBean.getPayoffAmount(), resultBean.getTurnover()).negate(); + } + //数据构造 + GameBettingDetails gameBettingDetails = GameBettingDetails.builder() + .tenantKey(member.getTenantKey()) + //保存我们的币种id + .currencyCode(currencyDTO.getSystemCurrency()) + .memberId(member.getId()) + .gameCode(resultBean.getGameId()) + .gameType(XKGameType.findSystemByCode(resultBean.getGameCategoryId())) + .platformCode(GamePlatforms.XK.getCode()) + .gameId(gamesDataDTO.getSystemGameId()) + .gameName(gamesDataDTO.getName()) + .gameStatus(resultBean.getStatus()) + .gameStatusType(resultBean.getType()) + .gameCurrencyCode(resultBean.getAgentId()) + .account(String.valueOf(resultBean.getAccount())) + .wagersId(String.valueOf(resultBean.getWagersId())) + .wagersTime(resultBean.getWagersTime()) + .betAmount(resultBean.getBetAmount().abs()) + .payoffTime(resultBean.getPayoffTime()) + .payoffAmount(payoffAmount) + .settlementTime(resultBean.getSettlementTime()) + .turnover(resultBean.getTurnover()) + .orderNo(String.valueOf(resultBean.getRoundIndex())) + .settlementStatus(SettlementStatusEnum.COMPLETED.getCode()) + .build(); + gameBettingDetails.setCreateBy(Constants.SYSTEM); + gameBettingDetails.setCreateTime(DateUtils.getNowDate()); + return gameBettingDetails; + } +} From 210d878de78f654132a77730800ed8c140d984ac Mon Sep 17 00:00:00 2001 From: shi Date: Mon, 31 Mar 2025 15:23:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(member):=20=E6=B7=BB=E5=8A=A0=E4=BC=9A?= =?UTF-8?q?=E5=91=98=E6=8A=95=E6=B3=A8=E9=99=90=E9=A2=9D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在会员创建接口中增加投注限额参数 - 更新相关 DTO 和服务实现以支持投注限额- 使用 JSON 序列化投注限额对象以适应 AE 接口要求 --- .../java/com/ff/api/controller/ApiMemberController.java | 1 + .../java/com/ff/api/request/MemberCreateApiRequest.java | 6 ++++++ .../java/com/ff/game/api/ae/impl/GamesAEServiceImpl.java | 3 ++- .../com/ff/game/api/request/CreateMemberRequestDTO.java | 7 +++++++ 4 files changed, 16 insertions(+), 1 deletion(-) 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 e82fc57..95fdd5a 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 @@ -132,6 +132,7 @@ public class ApiMemberController extends BaseController { .account(gameAccount) .agentId(gameSecretKey.getCode()) .agentKey(gameSecretKey.getKey()) + .betLimit(memberCreateApiRequest.getBetLimit()) .currency(gameSecretKey.getCurrency()) .build(); Boolean result = iGamesService.createMember(gamesBaseRequestDTO); diff --git a/ff-game/src/main/java/com/ff/api/request/MemberCreateApiRequest.java b/ff-game/src/main/java/com/ff/api/request/MemberCreateApiRequest.java index 249d3f7..1644857 100644 --- a/ff-game/src/main/java/com/ff/api/request/MemberCreateApiRequest.java +++ b/ff-game/src/main/java/com/ff/api/request/MemberCreateApiRequest.java @@ -8,6 +8,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.io.Serializable; +import java.util.Map; /** * 创建成员请求 @@ -34,4 +35,9 @@ public class MemberCreateApiRequest implements Serializable{ @Length(max = 32, message = "currencyCode长度不能超过32个字符") private String currencyCode; + /** + * 投注限额 + */ + private Map>> betLimit; + } 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 0bd6601..f388dfd 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 @@ -2,6 +2,7 @@ package com.ff.game.api.ae.impl; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; +import com.alibaba.fastjson2.JSON; import com.ff.base.constant.CacheConstants; import com.ff.base.constant.Constants; import com.ff.base.core.redis.RedisCache; @@ -129,7 +130,7 @@ public class GamesAEServiceImpl implements IGamesService { Map params = this.getKey(createMemberRequestDTO); params.put("userId", createMemberRequestDTO.getAccount()); params.put("currency", createMemberRequestDTO.getCurrency()); - params.put("betLimit", "{}"); + params.put("betLimit", JsonUtil.objToString(createMemberRequestDTO.getBetLimit())); AEResponse aeResponse = AEClient.createMember(params); String errorCode = aeResponse.getStatus(); if (this.getIsSuccess(Integer.valueOf(errorCode))) { diff --git a/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java b/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java index 46ec0ab..52b4c5c 100644 --- a/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java +++ b/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.Map; + /** * 创建成员请求dto * @@ -22,5 +24,10 @@ public class CreateMemberRequestDTO extends GamesBaseRequestDTO { */ private String account; + /** + * 投注限额 + */ + private Map>> betLimit; + } From 3e96c67d575bfc631932138b99a726fb035621f2 Mon Sep 17 00:00:00 2001 From: shi Date: Tue, 1 Apr 2025 11:18:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(api):=20=E6=B7=BB=E5=8A=A0=20AE=20?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 AEClient 接口和相关 DTO 类- 实现 AE 平台的登录、获取会员信息、存款、 --- .../java/com/ff/base/enums/ErrorCode.java | 2 +- .../java/com/ff/base/enums/GamePlatforms.java | 1 + .../ff/api/controller/ApiGameController.java | 1 + .../com/ff/api/request/GameLoginRequest.java | 6 + .../com/ff/game/api/ae/client/AEClient.java | 40 +-- .../ff/game/api/ae/dto/AELoginResponse.java | 41 +++ .../com/ff/game/api/ae/dto/AEMemberInfo.java | 65 +++++ .../api/ae/dto/AETransactionResponse.java | 60 +++++ .../game/api/ae/impl/GamesAEServiceImpl.java | 248 +++++++++--------- .../dg/service/impl/GamesDGServiceImpl.java | 2 +- .../game/api/fc/impl/GamesFCServiceImpl.java | 16 +- .../service/impl/GamesJILIServiceImpl.java | 12 +- .../ng/service/impl/GamesPGServiceImpl.java | 2 +- .../api/pgx/impl/GamesPGXServiceImpl.java | 14 +- .../api/request/CreateMemberRequestDTO.java | 2 +- .../com/ff/game/api/request/GamesLogin.java | 8 + .../game/api/sa/impl/GamesSAServiceImpl.java | 6 +- .../xk/service/impl/GamesXKServiceImpl.java | 2 +- .../game/mapper/GameBettingDetailsMapper.java | 5 +- .../service/IGameBettingDetailsService.java | 2 +- .../impl/GameBettingDetailsServiceImpl.java | 4 +- .../com/ff/quartz/config/ScheduleConfig.java | 114 ++++---- .../mapper/game/GameBettingDetailsMapper.xml | 2 +- 23 files changed, 416 insertions(+), 239 deletions(-) create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/AELoginResponse.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/AEMemberInfo.java create mode 100644 ff-game/src/main/java/com/ff/game/api/ae/dto/AETransactionResponse.java diff --git a/ff-base/src/main/java/com/ff/base/enums/ErrorCode.java b/ff-base/src/main/java/com/ff/base/enums/ErrorCode.java index b4c841e..ddb5bb7 100644 --- a/ff-base/src/main/java/com/ff/base/enums/ErrorCode.java +++ b/ff-base/src/main/java/com/ff/base/enums/ErrorCode.java @@ -13,7 +13,7 @@ import java.util.stream.Stream; */ @Getter public enum ErrorCode { - ERROR(500, "系统业务异常"), + ERROR(500, "业务异常"), GAME_ACCOUNT_CREATION_FAILED(1001, "当前游戏账号已存在"), ACCOUNT_NOT_EXIST(1002, "当前游戏账号不存在"), PLATFORM_NOT_EXIST(1003, "游戏平台不存在"), diff --git a/ff-base/src/main/java/com/ff/base/enums/GamePlatforms.java b/ff-base/src/main/java/com/ff/base/enums/GamePlatforms.java index 6bd60a4..f372fb6 100644 --- a/ff-base/src/main/java/com/ff/base/enums/GamePlatforms.java +++ b/ff-base/src/main/java/com/ff/base/enums/GamePlatforms.java @@ -11,6 +11,7 @@ public enum GamePlatforms { FC("FC", "FC"), SA("SA", "SA"), DG("DG", "DG"), + AE("AE", "AE"), ; private final String code; 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 cfaa77b..8abd9d3 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 @@ -171,6 +171,7 @@ public class ApiGameController extends BaseController { .currency(secretKeyCurrencyDTO.getCurrency()) .gameId(game.getGameCode()) .homeUrl(memberCreateApiRequest.getHomeUrl()) + .betLimit(memberCreateApiRequest.getBetLimit()) .platform(memberCreateApiRequest.getPlatform()) .disableFullScreen(memberCreateApiRequest.getDisableFullScreen()) .lang(gameSecretKeyLangDTO.getLang()) diff --git a/ff-game/src/main/java/com/ff/api/request/GameLoginRequest.java b/ff-game/src/main/java/com/ff/api/request/GameLoginRequest.java index cc85df7..a90f562 100644 --- a/ff-game/src/main/java/com/ff/api/request/GameLoginRequest.java +++ b/ff-game/src/main/java/com/ff/api/request/GameLoginRequest.java @@ -6,6 +6,7 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.Map; /** * 游戏登录请求 @@ -59,4 +60,9 @@ public class GameLoginRequest implements Serializable { * 带入 1 即关闭全屏幕模式 */ private Integer disableFullScreen; + + /** + * ae 平台 投注限额 + */ + private Map>> betLimit; } diff --git a/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java b/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java index 4427faf..e87950c 100644 --- a/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java +++ b/ff-game/src/main/java/com/ff/game/api/ae/client/AEClient.java @@ -3,9 +3,7 @@ package com.ff.game.api.ae.client; import com.dtflys.forest.annotation.*; import com.ff.game.api.ae.address.MyAEAddressSource; import com.ff.game.api.ae.dto.*; -import com.ff.game.api.ae.impl.GamesAEServiceImpl; import com.ff.game.api.jili.dto.*; -import com.ff.game.api.xk.dto.XKGamesDTO; import java.util.Map; @@ -33,28 +31,24 @@ public interface AEClient { * 获取会员信息 * * @param params 参数 - * @return {@link XKMemberInfoDTO } + * @return {@link AEMemberInfo } */ - @Post("/getMemberInfo") - XKMemberInfoDTO getMemberInfo(@JSONBody Map params); + @Post(url ="/wallet/getBalance", + headers = { + "Content-type: application/x-www-form-urlencoded" + }) + AEMemberInfo getMemberInfo(@Body Map params); /** * 无重定向登录 * * @param params 参数 - * @return {@link JILILoginWithoutRedirectResponseDTO } + * @return {@link AELoginResponse } */ - @Post("/loginWithoutRedirect") - XKLoginWithoutRedirectResponseDTO loginWithoutRedirect(@JSONBody Map params); + @Post("/wallet/login") + AELoginResponse loginWithoutRedirect(@Body Map params); + - /** - * 获取游戏列表 - * - * @param params 参数 - * @return {@link JILIGamesDTO } - */ - @Post("/getGameList") - XKGamesDTO getGameList(@JSONBody Map params); /** * 按代理id进行交换转账 @@ -62,8 +56,18 @@ public interface AEClient { * @param params 参数 * @return {@link JILIExchangeMoneyResponseDTO } */ - @Post(url = "/exchangeTransferByAgentId") - XKExchangeMoneyResponseDTO exchangeTransferByAgentId(@JSONBody Map params); + @Post(url ="/wallet/deposit", + headers = { + "Content-type: application/x-www-form-urlencoded" + }) + AETransactionResponse deposit(@Body Map params); + + + @Post(url ="/wallet/withdraw", + headers = { + "Content-type: application/x-www-form-urlencoded" + }) + AETransactionResponse withdraw(@Body Map params); /** * 按时间获取投注记录 diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/AELoginResponse.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/AELoginResponse.java new file mode 100644 index 0000000..76b33ed --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/AELoginResponse.java @@ -0,0 +1,41 @@ +package com.ff.game.api.ae.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +/** + * aelogin回应 + * + * @author shi + * @date 2025/04/01 + */ +@Data +public class AELoginResponse { + /** + * 响应状态 + */ + @JsonProperty("status") + private Integer status; + + + /** + * 描述信息 (String类型) + * "Success" - 请求成功 + * 其他 - 错误信息 + */ + private String desc; + + /** + * 登录 URL + */ + @JsonProperty("url") + private String url; + + /** + * 扩展字段,类型为列表,可以存储多项数据 + */ + @JsonProperty("extension") + private List extension; +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/AEMemberInfo.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/AEMemberInfo.java new file mode 100644 index 0000000..5b51159 --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/AEMemberInfo.java @@ -0,0 +1,65 @@ +package com.ff.game.api.ae.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.List; + +/** + * AEMEMBER信息 + * + * @author shi + * @date 2025/03/31 + */ +@Data +public class AEMemberInfo { + /** + * 响应结果列表,包含用户信息 + */ + @JsonProperty("results") + private List result; + + /** + * 记录数量 + */ + @JsonProperty("count") + private int count; + + /** + * 查询时间 + */ + @JsonProperty("querytime") + private Date queryTime; + + /** + * 响应状态 + */ + @JsonProperty("status") + private Integer status; + + @Data + public static class UserInfo { + + /** + * 用户ID + */ + @JsonProperty("userId") + private String userId; + + /** + * 用户余额 + */ + @JsonProperty("balance") + private BigDecimal balance; + + /** + * 最后修改时间 + */ + @JsonProperty("lastModified") + private Date lastModified; + } + +} diff --git a/ff-game/src/main/java/com/ff/game/api/ae/dto/AETransactionResponse.java b/ff-game/src/main/java/com/ff/game/api/ae/dto/AETransactionResponse.java new file mode 100644 index 0000000..397d5ea --- /dev/null +++ b/ff-game/src/main/java/com/ff/game/api/ae/dto/AETransactionResponse.java @@ -0,0 +1,60 @@ +package com.ff.game.api.ae.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.ZonedDateTime; + +/** + * 电子交易响应 + * + * @author shi + * @date 2025/04/01 + */ +@Data +public class AETransactionResponse { + + /** + * 响应状态 + */ + @JsonProperty("status") + private String status; + + + /** + * 金额 + */ + @JsonProperty("amount") + private BigDecimal amount; + + /** + * 交易方法(如:DEPOSIT, WITHDRAW) + */ + @JsonProperty("method") + private String method; + + /** + * 数据库ID + */ + @JsonProperty("databaseId") + private int databaseId; + + /** + * 当前余额 + */ + @JsonProperty("currentBalance") + private BigDecimal currentBalance; + + /** + * 最后修改时间 + */ + @JsonProperty("lastModified") + private ZonedDateTime lastModified; + + /** + * 交易代码 + */ + @JsonProperty("txCode") + private String txCode; +} 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 f388dfd..7003447 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 @@ -2,7 +2,6 @@ package com.ff.game.api.ae.impl; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; -import com.alibaba.fastjson2.JSON; import com.ff.base.constant.CacheConstants; import com.ff.base.constant.Constants; import com.ff.base.core.redis.RedisCache; @@ -12,7 +11,6 @@ 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.sign.Md5Utils; import com.ff.base.utils.uuid.IdUtils; import com.ff.config.KeyConfig; import com.ff.game.api.IGamesService; @@ -35,7 +33,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; @@ -93,6 +90,21 @@ public class GamesAEServiceImpl implements IGamesService { private IGameNameService gameNameService; + /** + * 游戏id + */ + private static final Long GAME_ID = 1904452832756013817L; + + /** + * 平台ID + */ + private static final Long PLATFORM_ID = 1904411420257108325L; + + /** + * 游戏名称id + */ + private static final Long GAME_NAME_ID = 1904452833756002317L; + /** * 获得就是成功 * @@ -110,10 +122,10 @@ public class GamesAEServiceImpl implements IGamesService { * @param gamesBaseRequestDTO 游戏请求dto * @return {@link Map }<{@link String }, {@link Object }> */ - private Map getKey(GamesBaseRequestDTO gamesBaseRequestDTO ) { + private Map getKey(GamesBaseRequestDTO gamesBaseRequestDTO) { Map params = new LinkedHashMap<>(); - params.put("cert",gamesBaseRequestDTO.getAgentKey()); - params.put("agentId",gamesBaseRequestDTO.getAgentId()); + params.put("cert", gamesBaseRequestDTO.getAgentKey()); + params.put("agentId", gamesBaseRequestDTO.getAgentId()); return params; } @@ -149,8 +161,22 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public MemberInfoResponseDTO getMemberInfo(MemberInfoRequestDTO memberInfoRequestDTO) { - log.info("GamesXKServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO); - return null; + log.info("GamesAEServiceImpl [getMemberInfo] 请求参数 {}", memberInfoRequestDTO); + Map params = this.getKey(memberInfoRequestDTO); + params.put("alluser", 0); + params.put("userIds", memberInfoRequestDTO.getAccounts()); + AEMemberInfo memberInfo = AEClient.getMemberInfo(params); + //判断是否获取成功 + if (this.getIsSuccess(memberInfo.getStatus())) { + AEMemberInfo.UserInfo userInfo = memberInfo.getResult().get(0); + return MemberInfoResponseDTO.builder() + .status(GameMemberStatus.UNKNOWN.getCode()) + .balance(userInfo.getBalance()) + .account(memberInfoRequestDTO.getAccounts()) + .build(); + } else { + throw new ApiException(ErrorCode.ERROR.getCode()); + } } /** @@ -161,26 +187,19 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public String loginWithoutRedirect(GamesLogin gamesLogin) { - log.info("GamesXKServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin); + log.info("GamesAEServiceImpl [loginWithoutRedirect] 请求参数 {}", gamesLogin); - Map params = new LinkedHashMap<>(); - params.put("account", gamesLogin.getAccount()); - params.put("gameId", Integer.valueOf(gamesLogin.getGameId())); - params.put("lang", gamesLogin.getLang()); - params.put("agentId", gamesLogin.getAgentId()); - String query = JsonUtil.mapToQueryString(params); - gamesLogin.setQuery(query); - Map key = this.getKey(gamesLogin); - params.put("key", key); - params.put("disableFullScreen", gamesLogin.getDisableFullScreen()); - params.put("homeUrl", gamesLogin.getHomeUrl()); - params.put("platform", gamesLogin.getPlatform()); - XKLoginWithoutRedirectResponseDTO xkLoginWithoutRedirectResponseDTO = AEClient.loginWithoutRedirect(params); + Map params = this.getKey(gamesLogin); + params.put("userId", gamesLogin.getAccount()); + params.put("externalURL", gamesLogin.getHomeUrl()); + params.put("language", gamesLogin.getLang()); + params.put("betLimit", gamesLogin.getBetLimit()); + AELoginResponse aeLoginResponse = AEClient.loginWithoutRedirect(params); //判断是否获取成功 - if (this.getIsSuccess(xkLoginWithoutRedirectResponseDTO.getCode())) { - return xkLoginWithoutRedirectResponseDTO.getData(); + if (this.getIsSuccess(aeLoginResponse.getStatus())) { + return aeLoginResponse.getUrl(); } else { - throw new BaseException(xkLoginWithoutRedirectResponseDTO.getMsg()); + throw new BaseException(aeLoginResponse.getDesc()); } } @@ -194,74 +213,40 @@ public class GamesAEServiceImpl implements IGamesService { @Transactional @Override public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) { - - List gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES); - if (!CollectionUtils.isEmpty(gamesDatas)) { - return CacheConstants.XK_GAMES; + 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); } - - - Map params = new LinkedHashMap<>(); - params.put("agentId", gamesBaseRequestDTO.getAgentId()); - String query = JsonUtil.mapToQueryString(params); - gamesBaseRequestDTO.setQuery(query); - Map key = this.getKey(gamesBaseRequestDTO); - params.put("key", key); - - XKGamesDTO xkGamesDTO = AEClient.getGameList(params); - //判断是否获取成功 - if (this.getIsSuccess(xkGamesDTO.getCode())) { - - for (XKGamesDTO.DataBean gamesDataDTO : xkGamesDTO.getData()) { - GamePlatform gamePlatform = GamePlatform.builder() - .platformType(XKGameType.findSystemByCode(gamesDataDTO.getGameCategoryId())) - .platformCode(GamePlatforms.XK.getCode()) - .build(); - List gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform); - //没有此平台就新增一个平台 - if (CollectionUtils.isEmpty(gamePlatforms)) { - gamePlatform.setPlatformName(GamePlatforms.XK.getInfo() + XKGameType.findInfoByCode(gamesDataDTO.getGameCategoryId())); - gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1); - gamePlatform.setCreateBy(Constants.SYSTEM); - gamePlatformService.insertGamePlatform(gamePlatform); - } else { - gamePlatform = gamePlatforms.get(0); - } - Game game = Game.builder() - .platformId(gamePlatform.getId()) - .gameCode(String.valueOf(gamesDataDTO.getGameId())) - .build(); - List games = gameService.selectGameList(game); - //不存在这个游戏 - if (CollectionUtils.isEmpty(games)) { - game.setGameSourceType(String.valueOf(gamesDataDTO.getGameCategoryId())); - game.setFreespin(gamesDataDTO.isFreeSpin()); - game.setSortNo(gameService.selectMaxSortNoByPlatformId(gamePlatform.getId()) + 1); - game.setGameName(gamesDataDTO.getName()); - game.setCreateBy(Constants.SYSTEM); - gameService.insertGame(game); - } else { - game = games.get(0); - } - gamesDataDTO.setSystemGameId(game.getId()); - 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()) - .langCode("zh-CN") - .createBy(Constants.SYSTEM) - .build()); - } - - } - - redisCache.deleteObject(CacheConstants.XK_GAMES); - redisCache.setCacheList(CacheConstants.XK_GAMES, xkGamesDTO.getData()); - redisCache.expire(CacheConstants.XK_GAMES, 5L, TimeUnit.HOURS); - } else { - throw new BaseException(xkGamesDTO.getMsg()); - + 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.setGameCode("1"); + game.setGameSourceType(String.valueOf(1)); + game.setGameName("AE大厅"); + game.setCreateBy(Constants.SYSTEM); + gameService.insertGame(game); + } + GameName gameName = gameNameService.selectGameNameById(GAME_NAME_ID); + if (ObjectUtils.isEmpty(gameName)) { + gameNameService.insertGameName(GameName.builder() + .id(GAME_NAME_ID) + .gameId(game.getId()) + .gameName(game.getGameName()) + .langCode("zh-CN") + .createBy(Constants.SYSTEM) + .build()); } return CacheConstants.XK_GAMES; @@ -276,14 +261,14 @@ public class GamesAEServiceImpl implements IGamesService { @Override @Transactional public Long exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) { - log.info("GamesXKServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); + log.info("GamesAEServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.XK.getInfo()) - .code(exchangeTransferMoneyRequestDTO.getAgentId()) + .platformCode(GamePlatforms.AE.getInfo()) + .code(exchangeTransferMoneyRequestDTO.getAgentId()) .build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); - String transactionId = GamePlatforms.XK.getCode() + IdUtils.simpleUUID(); + String transactionId = GamePlatforms.AE.getCode() + IdUtils.simpleUUID(); List gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList( GameExchangeMoney.builder() .tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey()) @@ -303,40 +288,44 @@ public class GamesAEServiceImpl implements IGamesService { .currencyCode(currencyDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) - .platformCode(GamePlatforms.XK.getCode()) + .platformCode(GamePlatforms.AE.getInfo()) .build(); exchangeMoney.setCreateBy(Constants.SYSTEM); - //接口限制限制50字符 - exchangeMoney.setTransactionId(GamePlatforms.XK.getCode() + IdUtils.simpleUUID()); - Map params = new LinkedHashMap<>(); - params.put("account", exchangeTransferMoneyRequestDTO.getAccount()); - params.put("transactionId", exchangeMoney.getTransactionId()); - params.put("amount", exchangeTransferMoneyRequestDTO.getAmount().stripTrailingZeros().toPlainString()); - params.put("transferType", exchangeTransferMoneyRequestDTO.getTransferType()); - params.put("agentId", exchangeTransferMoneyRequestDTO.getAgentId()); - String query = JsonUtil.mapToQueryString(params); - exchangeTransferMoneyRequestDTO.setQuery(query); - Map key = this.getKey(exchangeTransferMoneyRequestDTO); - params.put("key", key); - XKExchangeMoneyResponseDTO exchangeMoneyResponse = AEClient.exchangeTransferByAgentId(params); - //判断是否转移成功 - if (this.getIsSuccess(exchangeMoneyResponse.getCode())) { - XKExchangeMoneyResponseDTO.DataBean exchangeMoneyResponseData = exchangeMoneyResponse.getData(); - ApiException.isTrue(!StatusType.FAILURE.getValue().equals(exchangeMoneyResponseData.getStatus()), ErrorCode.BALANCE_TRANSFER_FAILED.getCode()); + Map params = this.getKey(exchangeTransferMoneyRequestDTO); + AETransactionResponse deposit = null; + try { + if (TransferType.GAMES.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) { + + params.put("userId", exchangeTransferMoneyRequestDTO.getAccount()); + params.put("txCode", transactionId); + params.put("transferAmount", exchangeTransferMoneyRequestDTO.getAmount()); + deposit = AEClient.deposit(params); + + } else { + params.put("userId", exchangeTransferMoneyRequestDTO.getAccount()); + params.put("txCode", transactionId); + params.put("withdrawType", 1); + deposit = AEClient.withdraw(params); + } + } finally { //更新数据 - exchangeMoney.setBalance(NumberUtil.sub(exchangeMoneyResponseData.getCurrencyAfter(), exchangeMoneyResponseData.getCurrencyBefore()).abs()); - exchangeMoney.setCoinBefore(exchangeMoneyResponseData.getCoinBefore()); - exchangeMoney.setCoinAfter(exchangeMoneyResponseData.getCoinAfter()); - exchangeMoney.setCurrencyBefore(exchangeMoneyResponseData.getCurrencyBefore()); - exchangeMoney.setCurrencyAfter(exchangeMoneyResponseData.getCurrencyAfter()); - exchangeMoney.setStatus(exchangeMoneyResponseData.getStatus()); + exchangeMoney.setBalance(deposit.getAmount()); + exchangeMoney.setCoinBefore(NumberUtil.sub(deposit.getCurrentBalance(), deposit.getAmount())); + exchangeMoney.setCoinAfter(deposit.getCurrentBalance()); + exchangeMoney.setCurrencyBefore(exchangeMoney.getCoinBefore()); + exchangeMoney.setCurrencyAfter(exchangeMoney.getCoinAfter()); + //判断是否转移成功 + if ("0000".equals(deposit.getStatus())) { + exchangeMoney.setStatus(StatusType.SUCCESS.getValue()); + } else { + exchangeMoney.setStatus(StatusType.IN_PROGRESS.getValue()); + } + gameExchangeMoneyService.insertGameExchangeMoney(exchangeMoney); - } else { - log.error("GamesXKServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误代码{},错误信息{}", exchangeMoneyResponse.getCode(), exchangeMoneyResponse.getMsg()); - throw new BaseException(exchangeMoneyResponse.getMsg()); } + return exchangeMoney.getId(); } @@ -348,6 +337,7 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public Boolean exchangeTransferStatus(ExchangeTransferStatusRequestDTO exchangeTransferMoneyRequestDTO) { + log.info("GamesAEServiceImpl [exchangeTransferStatus] 请求参数 {}", exchangeTransferMoneyRequestDTO); return Boolean.TRUE; } @@ -427,7 +417,7 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public Boolean createFreeSpin(CreateFreeSpinRequestDTO createFreeSpinRequest) { - throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); } /** @@ -438,7 +428,7 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public GetGameDetailResponseDTO getGameDetail(GetGameDetailRequestDTO getGameDetailRequestDTO) { - throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); } /** @@ -474,7 +464,7 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public Boolean kickMemberAll(KickMemberAllDTO kickMemberAllDTO) { - throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); } /** @@ -485,7 +475,7 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public List getFreeSpinDashflow(GetFreeSpinDashflowRequestDTO getFreeSpinDashflowRequestDTO) { - throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); } /** @@ -496,7 +486,7 @@ public class GamesAEServiceImpl implements IGamesService { */ @Override public Boolean cancelFreeSpin(CancelFreeSpinRequestDTO cancelFreeSpinRequestDTO) { - throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); + throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode()); } @@ -521,7 +511,7 @@ public class GamesAEServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.AE.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/dg/service/impl/GamesDGServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/dg/service/impl/GamesDGServiceImpl.java index 8c90a26..7097e6f 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 @@ -534,7 +534,7 @@ public class GamesDGServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.DG.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/fc/impl/GamesFCServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/fc/impl/GamesFCServiceImpl.java index 41b96ba..5a4e93c 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 @@ -278,7 +278,7 @@ public class GamesFCServiceImpl implements IGamesService { Map integerGameDetailsMap = gameList.getGetGameIconList().get(gameTypeKey); GamePlatform gamePlatform = GamePlatform.builder() .platformType(FCGameType.findSystemByCode(gameTypeKey)) - .platformCode(GamePlatforms.FC.getCode()) + .platformCode(GamePlatforms.FC.getInfo()) .build(); List gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform); //没有此平台就新增一个平台 @@ -360,13 +360,13 @@ public class GamesFCServiceImpl implements IGamesService { log.info("GamesFCServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.FC.getCode()) + .platformCode(GamePlatforms.FC.getInfo()) .code(exchangeTransferMoneyRequestDTO.getAgentId()) .currency(exchangeTransferMoneyRequestDTO.getCurrency()) .build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); - String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.FC.getCode(), 30); + String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.FC.getInfo(), 30); List gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList( GameExchangeMoney.builder() .tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey()) @@ -386,7 +386,7 @@ public class GamesFCServiceImpl implements IGamesService { .currencyCode(currencyDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) - .platformCode(GamePlatforms.FC.getCode()) + .platformCode(GamePlatforms.FC.getInfo()) .build(); exchangeMoney.setCreateBy(Constants.SYSTEM); @@ -461,7 +461,7 @@ public class GamesFCServiceImpl implements IGamesService { List gameSecretKeyCurrencies = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.FC.getCode()) + .platformCode(GamePlatforms.FC.getInfo()) .build()); for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) { @@ -494,7 +494,7 @@ public class GamesFCServiceImpl implements IGamesService { @Override public Boolean getBetRecordByHistoryTime(BetRecordByTimeDTO betRecordByTimeDTO) { List gameSecretKeyCurrencies = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.FC.getCode()) + .platformCode(GamePlatforms.FC.getInfo()) .build()); for (GameSecretKeyCurrency gameSecretKeyCurrency : gameSecretKeyCurrencies) { @@ -649,7 +649,7 @@ public class GamesFCServiceImpl implements IGamesService { .memberId(member.getId()) .gameCode(resultBean.getGameID()) .gameType(FCGameType.findSystemByCode(resultBean.getGametype())) - .platformCode(GamePlatforms.FC.getCode()) + .platformCode(GamePlatforms.FC.getInfo()) .gameId(gamesDataDTO.getSystemGameId()) .gameName(gamesDataDTO.getGameNameOfChinese()) .gameStatus(gameStatus) @@ -692,7 +692,7 @@ public class GamesFCServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + 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 0b6924e..75d3d47 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 @@ -237,7 +237,7 @@ public class GamesJILIServiceImpl implements IGamesService { for (JILIGamesDataDTO gamesDataDTO : jiliGames.getData()) { GamePlatform gamePlatform = GamePlatform.builder() .platformType(JILIGameType.findSystemByCode(gamesDataDTO.getGameCategoryId())) - .platformCode(GamePlatforms.JILI.getCode()) + .platformCode(GamePlatforms.JILI.getInfo()) .build(); List gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform); //没有此平台就新增一个平台 @@ -313,7 +313,7 @@ public class GamesJILIServiceImpl implements IGamesService { .currency(exchangeTransferMoneyRequestDTO.getCurrency()).build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); - String transactionId = GamePlatforms.JILI.getCode() + IdUtils.simpleUUID(); + String transactionId = GamePlatforms.JILI.getInfo() + IdUtils.simpleUUID(); List gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList( GameExchangeMoney.builder() @@ -335,7 +335,7 @@ public class GamesJILIServiceImpl implements IGamesService { .currencyCode(gameSecretKey.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) - .platformCode(GamePlatforms.JILI.getCode()) + .platformCode(GamePlatforms.JILI.getInfo()) .build(); exchangeMoney.setCreateBy(Constants.SYSTEM); //接口限制限制50字符 @@ -472,7 +472,7 @@ public class GamesJILIServiceImpl implements IGamesService { .map(Game::getGameCode) .map(String::valueOf) .collect(Collectors.joining(",")); - String referenceId = GamePlatforms.JILI.getCode() + IdUtils.simpleUUID(); + String referenceId = GamePlatforms.JILI.getInfo() + IdUtils.simpleUUID(); //请求参数 String query = "Account=" + createFreeSpinRequest.getAccount() + "&Currency=" + createFreeSpinRequest.getCurrency() @@ -715,7 +715,7 @@ public class GamesJILIServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.JILI.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) @@ -765,7 +765,7 @@ public class GamesJILIServiceImpl implements IGamesService { .memberId(member.getId()) .gameCode(jiliBetRecordDataResponseDTO.getGameId()) .gameType(JILIGameType.findSystemByCode(jiliBetRecordDataResponseDTO.getGameCategoryId())) - .platformCode(GamePlatforms.JILI.getCode()) + .platformCode(GamePlatforms.JILI.getInfo()) .gameId(gamesDataDTO.getSystemGameId()) .gameName(gamesDataDTO.getName().getZhCN()) .gameStatus(jiliBetRecordDataResponseDTO.getStatus()) diff --git a/ff-game/src/main/java/com/ff/game/api/ng/service/impl/GamesPGServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/ng/service/impl/GamesPGServiceImpl.java index 8b71e88..c314f47 100644 --- a/ff-game/src/main/java/com/ff/game/api/ng/service/impl/GamesPGServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/ng/service/impl/GamesPGServiceImpl.java @@ -826,7 +826,7 @@ public class GamesPGServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,NGPlatforms.PG.getPlatform()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) diff --git a/ff-game/src/main/java/com/ff/game/api/pgx/impl/GamesPGXServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/pgx/impl/GamesPGXServiceImpl.java index 37f1673..f6bb221 100644 --- a/ff-game/src/main/java/com/ff/game/api/pgx/impl/GamesPGXServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/pgx/impl/GamesPGXServiceImpl.java @@ -244,7 +244,7 @@ public class GamesPGXServiceImpl implements IGamesService { for (PGXGameListResponse.Game gamesDataDTO : gameLists) { GamePlatform gamePlatform = GamePlatform.builder() .platformType(GPXGameType.SL.getSystemCode()) - .platformCode(GamePlatforms.PGX.getCode()) + .platformCode(GamePlatforms.PGX.getInfo()) .build(); List gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform); //没有此平台就新增一个平台 @@ -308,13 +308,13 @@ public class GamesPGXServiceImpl implements IGamesService { log.info("GamesPGXServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO); GameSecretKeyCurrency currencyDTO = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder() - .platformCode(GamePlatforms.PGX.getCode()) + .platformCode(GamePlatforms.PGX.getInfo()) .code(exchangeTransferMoneyRequestDTO.getAgentId()) .currency(exchangeTransferMoneyRequestDTO.getCurrency()) .build()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); - String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.PGX.getCode(), 17); + String transactionId = gameExchangeMoneyService.getTransactionId(GamePlatforms.PGX.getInfo(), 17); List gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList( GameExchangeMoney.builder() .tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey()) @@ -336,7 +336,7 @@ public class GamesPGXServiceImpl implements IGamesService { .currencyCode(currencyDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) - .platformCode(GamePlatforms.PGX.getCode()) + .platformCode(GamePlatforms.PGX.getInfo()) .build(); exchangeMoney.setCreateBy(Constants.SYSTEM); @@ -421,7 +421,7 @@ public class GamesPGXServiceImpl implements IGamesService { if (this.getIsSuccess(exchangeTransferStatusResponse.getErrCode())) { List gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList( GameExchangeMoney.builder() - .platformCode(GamePlatforms.PGX.getCode()) + .platformCode(GamePlatforms.PGX.getInfo()) .transactionId(exchangeTransferMoneyRequestDTO.getOrderId()) .build() ); @@ -564,7 +564,7 @@ public class GamesPGXServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.PGX.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) @@ -628,7 +628,7 @@ public class GamesPGXServiceImpl implements IGamesService { .memberId(member.getId()) .gameCode(resultBean.getGameId()) .gameType(GPXGameType.SL.getSystemCode()) - .platformCode(GamePlatforms.PGX.getCode()) + .platformCode(GamePlatforms.PGX.getInfo()) .gameId(gamesDataDTO.getSystemGameId()) .gameName(gamesDataDTO.getGameName()) .gameStatus(gameStatus) diff --git a/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java b/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java index 52b4c5c..f651b69 100644 --- a/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java +++ b/ff-game/src/main/java/com/ff/game/api/request/CreateMemberRequestDTO.java @@ -25,7 +25,7 @@ public class CreateMemberRequestDTO extends GamesBaseRequestDTO { private String account; /** - * 投注限额 + * ae 平台 投注限额 */ private Map>> betLimit; diff --git a/ff-game/src/main/java/com/ff/game/api/request/GamesLogin.java b/ff-game/src/main/java/com/ff/game/api/request/GamesLogin.java index d46d7fd..e73320c 100644 --- a/ff-game/src/main/java/com/ff/game/api/request/GamesLogin.java +++ b/ff-game/src/main/java/com/ff/game/api/request/GamesLogin.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.Map; + /** * 游戏登录 * @@ -46,4 +48,10 @@ public class GamesLogin extends GamesBaseRequestDTO{ * 游戏类型 */ private String gameType; + + + /** + * ae 平台 投注限额 + */ + private Map>> betLimit; } diff --git a/ff-game/src/main/java/com/ff/game/api/sa/impl/GamesSAServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/sa/impl/GamesSAServiceImpl.java index ac9c0d2..d1b265e 100644 --- a/ff-game/src/main/java/com/ff/game/api/sa/impl/GamesSAServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/sa/impl/GamesSAServiceImpl.java @@ -321,7 +321,7 @@ public class GamesSAServiceImpl implements IGamesService { .currencyCode(currencyDTO.getSystemCurrency()) .memberId(member.getId()) .transactionId(transactionId) - .platformCode(GamePlatforms.SA.getCode()) + .platformCode(GamePlatforms.SA.getInfo()) .build(); exchangeMoney.setCreateBy(Constants.SYSTEM); if (TransferType.ALL.getCode().equals(exchangeTransferMoneyRequestDTO.getTransferType())) { @@ -546,7 +546,7 @@ public class GamesSAServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.SA.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) @@ -599,7 +599,7 @@ public class GamesSAServiceImpl implements IGamesService { .memberId(member.getId()) .gameCode(resultBean.getGameID()) .gameType(PlatformType.CARD_GAME.getCode()) - .platformCode(GamePlatforms.SA.getCode()) + .platformCode(GamePlatforms.SA.getInfo()) .gameId(GAME_ID) .gameName(game.getGameName()) .gameStatus(gameStatus) diff --git a/ff-game/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java b/ff-game/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java index 82675d3..388a27a 100644 --- a/ff-game/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java @@ -557,7 +557,7 @@ public class GamesXKServiceImpl implements IGamesService { } if (!CollectionUtils.isEmpty(gameBettingDetails)) { //查询重复数据id - List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds); + List removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds,GamePlatforms.XK.getInfo()); //用steam流清除list中与wagersIds集合相同的数据 gameBettingDetails = gameBettingDetails.stream() .filter(detail -> !removeWagersIds.contains(detail.getWagersId())) diff --git a/ff-game/src/main/java/com/ff/game/mapper/GameBettingDetailsMapper.java b/ff-game/src/main/java/com/ff/game/mapper/GameBettingDetailsMapper.java index a5ca8cb..d4b5da3 100644 --- a/ff-game/src/main/java/com/ff/game/mapper/GameBettingDetailsMapper.java +++ b/ff-game/src/main/java/com/ff/game/mapper/GameBettingDetailsMapper.java @@ -26,10 +26,11 @@ public interface GameBettingDetailsMapper /** * 按投注id选择游戏投注详细信息 * - * @param wagersIds 投注ID + * @param wagersIds 投注ID + * @param platformCode 平台代码 * @return {@link List }<{@link Long }> */ - List selectGameBettingDetailsByWagersId(@Param("wagersIds") List wagersIds); + List selectGameBettingDetailsByWagersId(@Param("wagersIds") List wagersIds, @Param("platformCode") String platformCode); /** diff --git a/ff-game/src/main/java/com/ff/game/service/IGameBettingDetailsService.java b/ff-game/src/main/java/com/ff/game/service/IGameBettingDetailsService.java index 7f7135d..3ef3fc3 100644 --- a/ff-game/src/main/java/com/ff/game/service/IGameBettingDetailsService.java +++ b/ff-game/src/main/java/com/ff/game/service/IGameBettingDetailsService.java @@ -29,7 +29,7 @@ public interface IGameBettingDetailsService * @param wagersIds 投注ID * @return {@link List }<{@link Long }> */ - List selectGameBettingDetailsByWagersId(List wagersIds); + List selectGameBettingDetailsByWagersId(List wagersIds,String platformCode); diff --git a/ff-game/src/main/java/com/ff/game/service/impl/GameBettingDetailsServiceImpl.java b/ff-game/src/main/java/com/ff/game/service/impl/GameBettingDetailsServiceImpl.java index 2c41c68..62ffbfe 100644 --- a/ff-game/src/main/java/com/ff/game/service/impl/GameBettingDetailsServiceImpl.java +++ b/ff-game/src/main/java/com/ff/game/service/impl/GameBettingDetailsServiceImpl.java @@ -43,8 +43,8 @@ public class GameBettingDetailsServiceImpl implements IGameBettingDetailsService * @return {@link List }<{@link Long }> */ @Override - public List selectGameBettingDetailsByWagersId(List wagersIds) { - return gameBettingDetailsMapper.selectGameBettingDetailsByWagersId(wagersIds); + public List selectGameBettingDetailsByWagersId(List wagersIds, String platformCode) { + return gameBettingDetailsMapper.selectGameBettingDetailsByWagersId(wagersIds,platformCode); } /** diff --git a/ff-game/src/main/java/com/ff/quartz/config/ScheduleConfig.java b/ff-game/src/main/java/com/ff/quartz/config/ScheduleConfig.java index c56e1bc..475653c 100644 --- a/ff-game/src/main/java/com/ff/quartz/config/ScheduleConfig.java +++ b/ff-game/src/main/java/com/ff/quartz/config/ScheduleConfig.java @@ -1,57 +1,57 @@ -package com.ff.quartz.config;//package com.ff.quartz.config; -// -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.scheduling.quartz.SchedulerFactoryBean; -//import javax.sql.DataSource; -//import java.util.Properties; -// -///** -// * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) -// * -// * @author ff -// */ -//@Configuration -//public class ScheduleConfig -//{ -// @Bean -// public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) -// { -// SchedulerFactoryBean factory = new SchedulerFactoryBean(); -// factory.setDataSource(dataSource); -// -// // quartz参数 -// Properties prop = new Properties(); -// prop.put("org.quartz.scheduler.instanceName", "ffScheduler"); -// prop.put("org.quartz.scheduler.instanceId", "AUTO"); -// // 线程池配置 -// prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); -// prop.put("org.quartz.threadPool.threadCount", "20"); -// prop.put("org.quartz.threadPool.threadPriority", "5"); -// // JobStore配置 -// prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); -// // 集群配置 -// prop.put("org.quartz.jobStore.isClustered", "true"); -// prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); -// prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "10"); -// prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); -// -// // sqlserver 启用 -// // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); -// prop.put("org.quartz.jobStore.misfireThreshold", "12000"); -// prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); -// factory.setQuartzProperties(prop); -// -// factory.setSchedulerName("ffScheduler"); -// // 延时启动 -// factory.setStartupDelay(1); -// factory.setApplicationContextSchedulerContextKey("applicationContextKey"); -// // 可选,QuartzScheduler -// // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -// factory.setOverwriteExistingJobs(true); -// // 设置自动启动,默认为true -// factory.setAutoStartup(true); -// -// return factory; -// } -//} +package com.ff.quartz.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import javax.sql.DataSource; +import java.util.Properties; + +/** + * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) + * + * @author ff + */ +@Configuration +public class ScheduleConfig +{ + @Bean + public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) + { + SchedulerFactoryBean factory = new SchedulerFactoryBean(); + factory.setDataSource(dataSource); + + // quartz参数 + Properties prop = new Properties(); + prop.put("org.quartz.scheduler.instanceName", "ffScheduler"); + prop.put("org.quartz.scheduler.instanceId", "AUTO"); + // 线程池配置 + prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); + prop.put("org.quartz.threadPool.threadCount", "20"); + prop.put("org.quartz.threadPool.threadPriority", "5"); + // JobStore配置 + prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); + // 集群配置 + prop.put("org.quartz.jobStore.isClustered", "true"); + prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); + prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "10"); + prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); + + // sqlserver 启用 + // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); + prop.put("org.quartz.jobStore.misfireThreshold", "12000"); + prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); + factory.setQuartzProperties(prop); + + factory.setSchedulerName("ffScheduler"); + // 延时启动 + factory.setStartupDelay(1); + factory.setApplicationContextSchedulerContextKey("applicationContextKey"); + // 可选,QuartzScheduler + // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 + factory.setOverwriteExistingJobs(true); + // 设置自动启动,默认为true + factory.setAutoStartup(true); + + return factory; + } +} diff --git a/ff-game/src/main/resources/mapper/game/GameBettingDetailsMapper.xml b/ff-game/src/main/resources/mapper/game/GameBettingDetailsMapper.xml index 9600ffc..722c77e 100644 --- a/ff-game/src/main/resources/mapper/game/GameBettingDetailsMapper.xml +++ b/ff-game/src/main/resources/mapper/game/GameBettingDetailsMapper.xml @@ -95,7 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where wagers_id in #{wagersId} - + and platform_code = #{platformCode} and settlement_status !=1