feat(game): 添加游戏相关API接口和功能
- 新增免费旋转相关功能:赠送免费局数、获取免费旋转记录等 - 新增游戏记录查询功能:获取游戏详情、获取投注记录等 - 新增游戏踢人功能:踢出指定玩家、踢出所有玩家 - 优化游戏账户创建逻辑main-p
parent
22a7943b33
commit
02388446db
|
|
@ -2,15 +2,14 @@ package com.ff.api.controller;
|
|||
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.dtflys.forest.annotation.Post;
|
||||
import com.ff.annotation.CheckHeader;
|
||||
import com.ff.api.request.GameExchangeBalanceRequest;
|
||||
import com.ff.api.request.GameLoginRequest;
|
||||
import com.ff.api.request.MemberCreateApiRequest;
|
||||
import com.ff.api.request.*;
|
||||
import com.ff.base.constant.Constants;
|
||||
import com.ff.base.core.controller.BaseController;
|
||||
import com.ff.base.core.domain.AjaxResult;
|
||||
import com.ff.base.core.page.TableDataInfo;
|
||||
import com.ff.base.enums.OperationType;
|
||||
import com.ff.base.utils.SecurityUtils;
|
||||
import com.ff.base.utils.StringUtils;
|
||||
import com.ff.common.domain.TenantGameQuotaFlow;
|
||||
import com.ff.common.domain.TenantSecretKey;
|
||||
|
|
@ -20,17 +19,15 @@ import com.ff.common.service.ITenantGameQuotaService;
|
|||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.request.*;
|
||||
import com.ff.game.domain.Game;
|
||||
import com.ff.game.domain.GamePlatform;
|
||||
import com.ff.game.domain.GameSecretKey;
|
||||
import com.ff.game.service.IGamePlatformService;
|
||||
import com.ff.game.service.IGameSecretKeyService;
|
||||
import com.ff.game.service.IGameService;
|
||||
import com.ff.game.domain.*;
|
||||
import com.ff.game.service.*;
|
||||
import com.ff.member.domain.Member;
|
||||
import com.ff.member.service.IMemberService;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
|
@ -39,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
@ -80,6 +78,12 @@ public class ApiGameController extends BaseController {
|
|||
@Resource
|
||||
private ITenantGameQuotaFlowService tenantGameQuotaFlowService;
|
||||
|
||||
@Resource
|
||||
private IGameBettingDetailsService gameBettingDetailsService;
|
||||
|
||||
@Resource
|
||||
private IGameFreeRecordService gameFreeRecordService;
|
||||
|
||||
|
||||
/**
|
||||
* 登录
|
||||
|
|
@ -174,9 +178,9 @@ public class ApiGameController extends BaseController {
|
|||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.memberId(member.getId())
|
||||
.build());
|
||||
//如果转入金额+本次转入金额 大于转出额度则取差值
|
||||
if (NumberUtil.add(balanceInto, balanceRequestAmount).compareTo(balanceOut) > 0){
|
||||
balanceRequestAmount=NumberUtil.sub(balanceOut, balanceInto);
|
||||
//如果转入金额+本次转入金额 大于转出额度则取差值
|
||||
if (NumberUtil.add(balanceInto, balanceRequestAmount).compareTo(balanceOut) > 0) {
|
||||
balanceRequestAmount = NumberUtil.sub(balanceOut, balanceInto);
|
||||
}
|
||||
}
|
||||
//余额扣除
|
||||
|
|
@ -205,4 +209,182 @@ public class ApiGameController extends BaseController {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* 赠送免费局数
|
||||
*
|
||||
* @param gameCreateFreeSpinRequest 游戏创建免费旋转请求
|
||||
* @return {@link AjaxResult }
|
||||
*/
|
||||
@PostMapping("/create/free/spin")
|
||||
public AjaxResult createFreeSpin(@Validated @RequestBody GameCreateFreeSpinRequest gameCreateFreeSpinRequest) {
|
||||
|
||||
|
||||
IGamesService iGamesService = gamesService.get(gameCreateFreeSpinRequest.getPlatformCode() + Constants.SERVICE);
|
||||
Assert.notNull(iGamesService, "游戏平台不存在");
|
||||
|
||||
|
||||
TenantSecretKey tenantSecretKey = keyConfig.get();
|
||||
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(gameCreateFreeSpinRequest.getPlatformCode(), gameCreateFreeSpinRequest.getCurrencyCode());
|
||||
Assert.notNull(gameSecretKey, "货币游戏平台不存在");
|
||||
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(gameCreateFreeSpinRequest.getAccount(), gameCreateFreeSpinRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
|
||||
Assert.notNull(member, "会员不存在");
|
||||
CreateFreeSpinRequestDTO createFreeSpinRequestDTO = CreateFreeSpinRequestDTO.builder()
|
||||
.account(member.getGameAccount())
|
||||
.currency(gameCreateFreeSpinRequest.getCurrencyCode())
|
||||
.agentId(gameSecretKey.getCode())
|
||||
.agentKey(gameSecretKey.getKey())
|
||||
.referenceId(gameCreateFreeSpinRequest.getReferenceId())
|
||||
.freeSpinValidity(gameCreateFreeSpinRequest.getFreeSpinValidity())
|
||||
.numberOfRounds(gameCreateFreeSpinRequest.getNumberOfRounds())
|
||||
.gameIds(gameCreateFreeSpinRequest.getGameIds())
|
||||
.betValue(gameCreateFreeSpinRequest.getBetValue())
|
||||
.startTime(gameCreateFreeSpinRequest.getStartTime())
|
||||
.build();
|
||||
|
||||
|
||||
return AjaxResult.success(iGamesService.createFreeSpin(createFreeSpinRequestDTO));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取投注记录
|
||||
*
|
||||
* @param gameCreateFreeSpinRequest 游戏创建免费旋转请求
|
||||
* @return {@link AjaxResult }
|
||||
*/
|
||||
@PostMapping("/get/bet/record")
|
||||
public TableDataInfo createFreeSpin(@Validated @RequestBody GameGetBetRecordRequest gameCreateFreeSpinRequest) {
|
||||
startPage();
|
||||
PageHelper.startPage(gameCreateFreeSpinRequest.getPageNo(), gameCreateFreeSpinRequest.getPageSize(), "wagers_time desc");
|
||||
GameBettingDetails gameBettingDetails = GameBettingDetails.builder()
|
||||
.platformCode(gameCreateFreeSpinRequest.getPlatformCode())
|
||||
.currencyCode(gameCreateFreeSpinRequest.getCurrencyCode())
|
||||
.build();
|
||||
Map<String, Object> params = gameBettingDetails.getParams();
|
||||
params.put("beginTime", gameCreateFreeSpinRequest.getBeginTime());
|
||||
params.put("endTime", gameCreateFreeSpinRequest.getEndTime());
|
||||
List<GameBettingDetails> bettingDetails = gameBettingDetailsService.selectGameBettingDetailsList(gameBettingDetails);
|
||||
return getDataTable(bettingDetails);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取详细信息
|
||||
*
|
||||
* @param gameGetDetailRequest 游戏获取详细信息请求
|
||||
* @return {@link AjaxResult }
|
||||
*/
|
||||
@PostMapping("/get/detail")
|
||||
public AjaxResult getDetail(@Validated @RequestBody GameGetDetailRequest gameGetDetailRequest) {
|
||||
|
||||
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(gameGetDetailRequest.getPlatformCode(), gameGetDetailRequest.getCurrencyCode());
|
||||
Assert.notNull(gameSecretKey, "货币游戏平台不存在");
|
||||
|
||||
|
||||
IGamesService iGamesService = gamesService.get(gameGetDetailRequest.getPlatformCode() + Constants.SERVICE);
|
||||
Assert.notNull(iGamesService, "游戏平台不存在");
|
||||
|
||||
GameSecretKey gameSecretKeyLang = gameSecretKeyService.findByPlatformAndSystemLangCode(gameGetDetailRequest.getPlatformCode(), gameGetDetailRequest.getLangCode());
|
||||
Assert.notNull(gameSecretKeyLang, "当前语言不存在");
|
||||
|
||||
|
||||
GetGameDetailResponseDTO gameDetail = iGamesService.getGameDetail(GetGameDetailRequestDTO.builder()
|
||||
.wagersId(gameGetDetailRequest.getWagersId())
|
||||
.lang(gameSecretKeyLang.getLang())
|
||||
.agentId(gameSecretKey.getCode())
|
||||
.agentKey(gameSecretKey.getKey())
|
||||
.build());
|
||||
return AjaxResult.success(gameDetail);
|
||||
}
|
||||
|
||||
/**
|
||||
* 踢腿队员
|
||||
*
|
||||
* @param gameKickMemeberRequest 游戏踢迷请求
|
||||
* @return {@link AjaxResult }
|
||||
*/
|
||||
@PostMapping("/kick/member")
|
||||
public AjaxResult kickMember(@Validated @RequestBody GameKickMemeberRequest gameKickMemeberRequest) {
|
||||
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(gameKickMemeberRequest.getPlatformCode(), gameKickMemeberRequest.getCurrencyCode());
|
||||
Assert.notNull(gameSecretKey, "货币游戏平台不存在");
|
||||
|
||||
TenantSecretKey tenantSecretKey = keyConfig.get();
|
||||
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(gameKickMemeberRequest.getAccount(), gameKickMemeberRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
|
||||
Assert.notNull(member, "会员不存在");
|
||||
|
||||
IGamesService iGamesService = gamesService.get(gameKickMemeberRequest.getPlatformCode() + Constants.SERVICE);
|
||||
Assert.notNull(iGamesService, "游戏平台不存在");
|
||||
|
||||
|
||||
return AjaxResult.success(iGamesService.kickMember(KickMemberRequestDTO.builder()
|
||||
.account(member.getGameAccount())
|
||||
.agentId(gameSecretKey.getCode())
|
||||
.agentKey(gameSecretKey.getKey())
|
||||
.build()));
|
||||
}
|
||||
|
||||
@PostMapping("/kick/member/all")
|
||||
public AjaxResult kickMemberAll(@Validated @RequestBody GameKickMemeberAllRequest gameKickMemeberAllRequest) {
|
||||
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(gameKickMemeberAllRequest.getPlatformCode(), gameKickMemeberAllRequest.getCurrencyCode());
|
||||
Assert.notNull(gameSecretKey, "货币游戏平台不存在");
|
||||
|
||||
IGamesService iGamesService = gamesService.get(gameKickMemeberAllRequest.getPlatformCode() + Constants.SERVICE);
|
||||
Assert.notNull(iGamesService, "游戏平台不存在");
|
||||
|
||||
KickMemberAllDTO kickMemberAllDTO = KickMemberAllDTO.builder()
|
||||
.agentId(gameSecretKey.getCode())
|
||||
.agentKey(gameSecretKey.getKey())
|
||||
.build();
|
||||
if (!ObjectUtils.isEmpty(gameKickMemeberAllRequest.getGameId())) {
|
||||
Game game = gameService.selectGameById(gameKickMemeberAllRequest.getGameId());
|
||||
Assert.notNull(game, "游戏不存在");
|
||||
kickMemberAllDTO.setGameId(game.getGameCode());
|
||||
}
|
||||
|
||||
|
||||
return AjaxResult.success(iGamesService.kickMemberAll(kickMemberAllDTO));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得自由旋转气流
|
||||
*
|
||||
* @param gameGetFreeSpinDashflowRequest 游戏获得免费旋转dashflow请求
|
||||
* @return {@link TableDataInfo }
|
||||
*/
|
||||
@PostMapping("/get/free/spin/dashflow")
|
||||
public TableDataInfo getFreeSpinDashflow(@Validated @RequestBody GameGetFreeSpinDashflowRequest gameGetFreeSpinDashflowRequest) {
|
||||
PageHelper.startPage(gameGetFreeSpinDashflowRequest.getPageNo(), gameGetFreeSpinDashflowRequest.getPageSize(), "free_update_time desc");
|
||||
List<GameFreeRecord> gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(GameFreeRecord.builder()
|
||||
.gameId(gameGetFreeSpinDashflowRequest.getGameId())
|
||||
.platformCode(gameGetFreeSpinDashflowRequest.getPlatformCode())
|
||||
.currencyCode(gameGetFreeSpinDashflowRequest.getCurrencyCode())
|
||||
.build());
|
||||
return getDataTable(gameFreeRecords);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 取消自由旋转
|
||||
*
|
||||
* @param gameGetFreeSpinDashflowRequest 游戏获得免费旋转dashflow请求
|
||||
* @return {@link TableDataInfo }
|
||||
*/
|
||||
@PostMapping("/cancel/free/spin")
|
||||
public AjaxResult cancelFreeSpin(@Validated @RequestBody GameCancelFreeSpinRequest gameGetFreeSpinDashflowRequest) {
|
||||
GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(gameGetFreeSpinDashflowRequest.getPlatformCode(), gameGetFreeSpinDashflowRequest.getCurrencyCode());
|
||||
Assert.notNull(gameSecretKey, "货币游戏平台不存在");
|
||||
|
||||
IGamesService iGamesService = gamesService.get(gameGetFreeSpinDashflowRequest.getPlatformCode() + Constants.SERVICE);
|
||||
Assert.notNull(iGamesService, "游戏平台不存在");
|
||||
|
||||
Boolean cancelFreeSpin = iGamesService.cancelFreeSpin(CancelFreeSpinRequestDTO.builder()
|
||||
.agentId(gameSecretKey.getCode())
|
||||
.agentKey(gameSecretKey.getKey())
|
||||
.referenceId(gameGetFreeSpinDashflowRequest.getReferenceId())
|
||||
.build());
|
||||
return AjaxResult.success(cancelFreeSpin);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,10 +20,12 @@ import com.ff.member.domain.Member;
|
|||
import com.ff.member.service.IMemberService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
@ -82,15 +84,22 @@ public class ApiMemberController extends BaseController {
|
|||
.build();
|
||||
Boolean result = iGamesService.createMember(gamesBaseRequestDTO);
|
||||
Assert.isTrue(result, "建立游戏账号失败");
|
||||
//注册本地账号
|
||||
Member member = Member.builder()
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.memberAccount(memberCreateApiRequest.getAccount())
|
||||
.gameAccount(gameAccount)
|
||||
.platformCode(memberCreateApiRequest.getPlatformCode())
|
||||
.currencyCode(memberCreateApiRequest.getCurrencyCode())
|
||||
.build();
|
||||
return toAjax(memberService.insertMember(member));
|
||||
|
||||
List<Member> members = memberService.selectMemberList(Member.builder()
|
||||
.tenantKey(tenantSecretKey.getTenantKey()).memberAccount(memberCreateApiRequest.getAccount()).build());
|
||||
if (CollectionUtils.isEmpty(members)) {
|
||||
//注册本地账号
|
||||
Member member = Member.builder()
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.memberAccount(memberCreateApiRequest.getAccount())
|
||||
.gameAccount(gameAccount)
|
||||
.platformCode(memberCreateApiRequest.getPlatformCode())
|
||||
.currencyCode(memberCreateApiRequest.getCurrencyCode())
|
||||
.build();
|
||||
return toAjax(memberService.insertMember(member));
|
||||
}
|
||||
return toAjax(Boolean.TRUE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -123,5 +132,4 @@ public class ApiMemberController extends BaseController {
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 游戏获得免费游戏游玩记录
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/13
|
||||
*/
|
||||
@Data
|
||||
public class GameCancelFreeSpinRequest implements Serializable {
|
||||
private static final long serialVersionUID = 1871368632132480179L;
|
||||
|
||||
/**
|
||||
* 货币代码
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
/**
|
||||
* 平台代码
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
/**
|
||||
* 取消免费赠送游戏id
|
||||
*/
|
||||
@NotBlank(message = "referenceId不能为空")
|
||||
private String referenceId;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
|
||||
import com.ff.validation.ListSizeCheck;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏赠送免费的局数
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
@Data
|
||||
public class GameCreateFreeSpinRequest implements Serializable {
|
||||
private final static long serialVersionUID = -8079805496329012394L;
|
||||
|
||||
/**
|
||||
* 玩家账号 (JILI 新玩家则会自动创立账号)
|
||||
*/
|
||||
@NotBlank(message = "account不能为空")
|
||||
private String account;
|
||||
|
||||
/**
|
||||
* 玩家游戏平台
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
/**
|
||||
* 玩家使用货币
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
/**
|
||||
* 免费局数序号, 长度上限 40
|
||||
*/
|
||||
@NotBlank(message = "referenceId不能为空")
|
||||
@Length(min = 1, max = 40, message = "referenceId长度不能超过40")
|
||||
private String referenceId;
|
||||
|
||||
/**
|
||||
* 有效期限
|
||||
*
|
||||
*
|
||||
*/
|
||||
@NotNull(message = "freeSpinValidity不能为空")
|
||||
private Long freeSpinValidity;
|
||||
|
||||
/**
|
||||
* 局数
|
||||
*/
|
||||
@NotNull(message = "numberOfRounds不能为空")
|
||||
private Integer numberOfRounds;
|
||||
|
||||
/**
|
||||
* 可使用游戏 ID,
|
||||
* 长度 上限 200
|
||||
*/
|
||||
@NotNull(message = "gameIds不能为空")
|
||||
@ListSizeCheck(message = "gameIds不得超过200", maxSize = 200)
|
||||
private List<Long> gameIds;
|
||||
|
||||
/**
|
||||
* 指定投注额;
|
||||
* 未指定时, 一律使用游戏中的最小投注额
|
||||
*/
|
||||
private BigDecimal betValue;
|
||||
|
||||
/**
|
||||
* 免费游戏局数可使用的开始时间
|
||||
* 未带此参数时, 赠送后玩家可以立即使用
|
||||
*/
|
||||
private Long startTime;
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏获取投注记录请求
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
@Data
|
||||
public class GameGetBetRecordRequest implements Serializable {
|
||||
private final static long serialVersionUID = -8079805496329012394L;
|
||||
|
||||
|
||||
/**
|
||||
* 货币代码
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
/**
|
||||
* 平台代码
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
/**
|
||||
* 开始时间 毫秒时间戳
|
||||
*/
|
||||
@NotNull(message = "beginTime不能为空")
|
||||
private Long beginTime;
|
||||
|
||||
/**
|
||||
* 结束时间 毫秒时间戳
|
||||
*/
|
||||
@NotNull(message = "endTime不能为空")
|
||||
private Long endTime;
|
||||
|
||||
|
||||
/**
|
||||
* 页码,默认第1页,按订单更新时间正序返回数据
|
||||
*/
|
||||
@Min(value = 1, message = "pageNo最小值为1")
|
||||
private Integer pageNo=1;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 页容量,默认200,最大2000
|
||||
*/
|
||||
@Min(value = 1, message = "pageSize最小值为1")
|
||||
@Max(value = 2000, message = "pageSize最大值为2000")
|
||||
private Integer pageSize=200;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
|
||||
import com.ff.validation.ListSizeCheck;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏赠送免费的局数
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
@Data
|
||||
public class GameGetDetailRequest implements Serializable {
|
||||
private final static long serialVersionUID = -8079805496329012394L;
|
||||
|
||||
/**
|
||||
* 平台代码
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
/**
|
||||
* 货币代码
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
/**
|
||||
* 投注id
|
||||
*/
|
||||
@NotNull(message = "wagersId不能为空")
|
||||
private Long wagersId;
|
||||
|
||||
/**
|
||||
* 语言代码
|
||||
*/
|
||||
@NotBlank(message = "langCode不能为空")
|
||||
private String langCode;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
import com.dtflys.forest.annotation.BaseRequest;
|
||||
import com.ff.base.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 游戏获得免费游戏游玩记录
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/13
|
||||
*/
|
||||
@Data
|
||||
public class GameGetFreeSpinDashflowRequest implements Serializable {
|
||||
private static final long serialVersionUID = 1871368632132480179L;
|
||||
|
||||
/**
|
||||
* 货币代码
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
/**
|
||||
* 平台代码
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
private Long gameId;
|
||||
|
||||
|
||||
/**
|
||||
* 页码,默认第1页,按订单更新时间正序返回数据
|
||||
*/
|
||||
@Min(value = 1, message = "pageNo最小值为1")
|
||||
private Integer pageNo=1;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 页容量,默认200,最大2000
|
||||
*/
|
||||
@Min(value = 1, message = "pageSize最小值为1")
|
||||
@Max(value = 2000, message = "pageSize最大值为2000")
|
||||
private Integer pageSize=200;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 游戏踢迷所有请求
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
@Data
|
||||
public class GameKickMemeberAllRequest implements Serializable {
|
||||
private static final long serialVersionUID = -5550133375734112801L;
|
||||
|
||||
/**
|
||||
* 玩家游戏平台
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
/**
|
||||
* 玩家使用货币
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
private Long gameId;
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.ff.api.request;
|
||||
|
||||
|
||||
import com.ff.validation.ListSizeCheck;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏赠送免费的局数
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
@Data
|
||||
public class GameKickMemeberRequest implements Serializable {
|
||||
private final static long serialVersionUID = 7977843394391031014L;
|
||||
|
||||
/**
|
||||
* 玩家账号
|
||||
*/
|
||||
@NotBlank(message = "account不能为空")
|
||||
private String account;
|
||||
|
||||
/**
|
||||
* 玩家游戏平台
|
||||
*/
|
||||
@NotBlank(message = "platformCode不能为空")
|
||||
private String platformCode;
|
||||
|
||||
/**
|
||||
* 玩家使用货币
|
||||
*/
|
||||
@NotBlank(message = "currencyCode不能为空")
|
||||
private String currencyCode;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -69,13 +69,14 @@ public interface IGamesService {
|
|||
*/
|
||||
String exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO);
|
||||
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
* @param betRecordByTimeDTO 按时间dto投注记录
|
||||
* @return {@link List }<{@link GameBettingDetails }>
|
||||
* @return {@link Boolean }
|
||||
*/
|
||||
List<GameBettingDetails> getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO);
|
||||
Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO);
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -61,5 +61,77 @@ public interface JILIClient {
|
|||
"Content-type: application/x-www-form-urlencoded"
|
||||
}
|
||||
)
|
||||
JILIExchangeMoneyResponseDTO exchangeTransferByAgentId(@Var("parameters") String parameters,@Body("AgentId") String username);
|
||||
JILIExchangeMoneyResponseDTO exchangeTransferByAgentId(@Var("parameters") String parameters,@Body("AgentId") String agentId);
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
* @param parameters 参数
|
||||
* @param agentId 代理id
|
||||
* @return {@link JILIBetRecordResponseDTO }
|
||||
*/
|
||||
@Post(
|
||||
url = "/GetBetRecordByTime?${parameters}",
|
||||
headers = {
|
||||
"Content-type: application/x-www-form-urlencoded"
|
||||
}
|
||||
)
|
||||
JILIBetRecordResponseDTO getBetRecordByTime(@Var("parameters") String parameters,@Body("AgentId") String agentId);
|
||||
|
||||
/**
|
||||
* 赠送免费局数
|
||||
*
|
||||
* @param parameters 参数
|
||||
* @return {@link JILICreateFreeSpinResponseDTO }
|
||||
*/
|
||||
@Post(
|
||||
url = "/CreateFreeSpin?${parameters}",
|
||||
headers = {
|
||||
"Content-type: application/x-www-form-urlencoded"
|
||||
}
|
||||
)
|
||||
JILICreateFreeSpinResponseDTO createFreeSpin(@Var("parameters") String parameters,@Body("AgentId") String agentId);
|
||||
|
||||
/**
|
||||
* 获取游戏详细信息
|
||||
*
|
||||
* @param parameters 参数
|
||||
* @return {@link JILIGetGameDetailResponseDTO }
|
||||
*/
|
||||
@Get("/GetGameDetail?${parameters}")
|
||||
JILIGetGameDetailResponseDTO getGameDetail(@Var("parameters") String parameters);
|
||||
|
||||
/**
|
||||
* 踢出队员
|
||||
*
|
||||
* @param parameters 参数
|
||||
* @return {@link JILIKickMemberDTO }
|
||||
*/
|
||||
@Get("/KickMember?${parameters}")
|
||||
JILIKickMemberDTO kickMember(@Var("parameters") String parameters);
|
||||
|
||||
/**
|
||||
* 踢出所有队员
|
||||
*
|
||||
* @param parameters 参数
|
||||
* @return {@link JILIKickMemberAllDTO }
|
||||
*/
|
||||
@Get("/KickMemberAll?${parameters}")
|
||||
JILIKickMemberAllDTO kickMemberAll(@Var("parameters") String parameters);
|
||||
|
||||
/**
|
||||
* 免费游戏玩家使用的纪录
|
||||
*
|
||||
* @param parameters 参数
|
||||
* @return {@link JILIGetFreeSpinDashflowResponseDTO }
|
||||
*/
|
||||
@Post(
|
||||
url = "/GetFreeSpinDashflow?${parameters}"
|
||||
)
|
||||
JILIGetFreeSpinDashflowResponseDTO getFreeSpinDashflow(@Var("parameters") String parameters);
|
||||
|
||||
@Post(
|
||||
url = "/CancelFreeSpin?${parameters}"
|
||||
)
|
||||
JILICancelFreeSpinResponseDTO cancelFreeSpin(@Var("parameters") String parameters);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,8 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
@Resource
|
||||
private KeyConfig keyConfig;
|
||||
|
||||
|
||||
@Resource
|
||||
private IGameBettingDetailsService gameBettingDetailsService;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -302,8 +303,6 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
Assert.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), "订单号重复");
|
||||
|
||||
|
||||
|
||||
|
||||
//获取下一个自增id
|
||||
GameExchangeMoney exchangeMoney = GameExchangeMoney
|
||||
.builder()
|
||||
|
|
@ -359,70 +358,47 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
* 按时间获取投注记录
|
||||
*
|
||||
* @param betRecordByTimeDTO 按时间dto投注记录
|
||||
* @return {@link List }<{@link GameBettingDetails }>
|
||||
* @return {@link Boolean }
|
||||
*/
|
||||
@Override
|
||||
public List<GameBettingDetails> getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
String startTime = DateUtils.formatDateToGMT4(new Date(betRecordByTimeDTO.getStartTime()));
|
||||
String endTime = DateUtils.formatDateToGMT4(new Date(betRecordByTimeDTO.getEndTime()));
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
|
||||
//请求参数
|
||||
String query = "StartTime=" + startTime + "&EndTime=" + endTime + "&Page=" + betRecordByTimeDTO.getPage() + "&PageLimit=" + betRecordByTimeDTO.getPageLimit() + "&AgentId=" + betRecordByTimeDTO.getAgentId();
|
||||
log.info("GamesJILIServiceImpl [getBetRecordByTime] 请求参数 {}", query);
|
||||
betRecordByTimeDTO.setQuery(query);
|
||||
//获取key
|
||||
String key = this.getKey(betRecordByTimeDTO);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
String result = null;
|
||||
try {
|
||||
result = HttpClientSslUtils.doPost(apiBaseUrl + "/GetBetRecordByTime?" + query + "&Key=" + key, "AgentId=" + betRecordByTimeDTO.getAgentId(), ContentType.APPLICATION_FORM_URLENCODED);
|
||||
|
||||
JILIBetRecordResponseDTO betRecordJILIResponse = JSON.parseObject(result, JILIBetRecordResponseDTO.class);
|
||||
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) {
|
||||
//数据组装
|
||||
JILIBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData();
|
||||
for (JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO : dataBean.getResult()) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(jiliBetRecordDataResponseDTO).gamesKey(key).build());
|
||||
if (!ObjectUtils.isEmpty(bettingDetails)) {
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
JILIBetRecordResponseDTO betRecordJILIResponse = jiliClient.getBetRecordByTime(query + "&Key=" + key, betRecordByTimeDTO.getAgentId());
|
||||
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) {
|
||||
//数据插入
|
||||
this.batchInsert(betRecordJILIResponse);
|
||||
JILIBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData();
|
||||
//获取下一页数据
|
||||
while (dataBean.getPagination().getCurrentPage() != dataBean.getPagination().getTotalPages() && dataBean.getPagination().getTotalPages() > 0) {
|
||||
betRecordByTimeDTO.setPage(dataBean.getPagination().getCurrentPage() + 1);
|
||||
//请求参数
|
||||
query = "StartTime=" + startTime + "&EndTime=" + endTime + "&Page=" + betRecordByTimeDTO.getPage() + "&PageLimit=" + betRecordByTimeDTO.getPageLimit() + "&AgentId=" + betRecordByTimeDTO.getAgentId();
|
||||
log.info("GamesJILIServiceImpl [getBetRecordByTime] 请求参数 {}", query);
|
||||
betRecordByTimeDTO.setQuery(query);
|
||||
key = this.getKey(betRecordByTimeDTO);
|
||||
betRecordJILIResponse = jiliClient.getBetRecordByTime(query + "&Key=" + key, betRecordByTimeDTO.getAgentId());
|
||||
if (this.getIsSuccess(betRecordJILIResponse.getErrorCode())) {
|
||||
//数据插入
|
||||
this.batchInsert(betRecordJILIResponse);
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getErrorCode(), betRecordJILIResponse.getMessage());
|
||||
}
|
||||
|
||||
//获取下一页数据
|
||||
while (dataBean.getPagination().getCurrentPage() != dataBean.getPagination().getTotalPages() && dataBean.getPagination().getTotalPages() > 0) {
|
||||
betRecordByTimeDTO.setPage(dataBean.getPagination().getCurrentPage() + 1);
|
||||
//请求参数
|
||||
query = "StartTime=" + startTime + "&EndTime=" + endTime + "&Page=" + betRecordByTimeDTO.getPage() + "&PageLimit=" + betRecordByTimeDTO.getPageLimit() + "&AgentId=" + betRecordByTimeDTO.getAgentId();
|
||||
log.info("GamesJILIServiceImpl [getBetRecordByTime] 请求参数 {}", query);
|
||||
betRecordByTimeDTO.setQuery(query);
|
||||
key = this.getKey(betRecordByTimeDTO);
|
||||
result = HttpUtils.sendPost(apiBaseUrl + "/GetBetRecordByTime?" + query + "&Key=" + key, "");
|
||||
betRecordJILIResponse = JsonUtil.stringToObj(result, JILIBetRecordResponseDTO.class);
|
||||
dataBean = betRecordJILIResponse.getData();
|
||||
for (JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO : dataBean.getResult()) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(jiliBetRecordDataResponseDTO).gamesKey(key).build());
|
||||
if (!ObjectUtils.isEmpty(bettingDetails)) {
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return gameBettingDetails;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getErrorCode(), betRecordJILIResponse.getMessage());
|
||||
throw new BaseException(MessageUtils.message("game.bet.record.retrieve.failed"));
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [getBetRecordByTime] 获取投注记录失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.bet.record.retrieve.failed"));
|
||||
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getErrorCode(), betRecordJILIResponse.getMessage());
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -453,56 +429,58 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
+ "&FreeSpinValidity=" + freeSpinValidity
|
||||
+ "&NumberOfRounds=" + createFreeSpinRequest.getNumberOfRounds()
|
||||
+ "&GameIds=" + gameCodes;
|
||||
|
||||
query += "&AgentId=" + createFreeSpinRequest.getAgentId();
|
||||
log.info("GamesJILIServiceImpl [createFreeSpin] 请求参数 {}", query);
|
||||
createFreeSpinRequest.setQuery(query);
|
||||
//获取key
|
||||
String key = this.getKey(createFreeSpinRequest);
|
||||
//判断是否有免费游戏局数可使用的开始时间
|
||||
if (!ObjectUtils.isEmpty(createFreeSpinRequest.getStartTime())) {
|
||||
String startTime = DateUtils.formatDateToGMT4(new Date(createFreeSpinRequest.getStartTime()));
|
||||
query += "&StartTime=" + startTime;
|
||||
}
|
||||
query += "&AgentId=" + createFreeSpinRequest.getAgentId();
|
||||
;
|
||||
log.info("GamesJILIServiceImpl [createFreeSpin] 请求参数 {}", query);
|
||||
//判断是否有免费游戏局数可使用的开始时间
|
||||
if (!ObjectUtils.isEmpty(createFreeSpinRequest.getStartTime())) {
|
||||
String startTime = DateUtils.formatDateToGMT4(new Date(createFreeSpinRequest.getStartTime()));
|
||||
query += "&StartTime=" + startTime;
|
||||
}
|
||||
//指定投注额
|
||||
if (ObjectUtils.isEmpty(createFreeSpinRequest.getBetValue())) {
|
||||
query += "&BetValue=" + createFreeSpinRequest.getBetValue();
|
||||
}
|
||||
createFreeSpinRequest.setQuery(query);
|
||||
//获取key
|
||||
String key = this.getKey(createFreeSpinRequest);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
String result = null;
|
||||
try {
|
||||
result = HttpClientSslUtils.doPost(apiBaseUrl + "/CreateFreeSpin?" + query + "&Key=" + key, "AgentId=" + createFreeSpinRequest.getAgentId(), ContentType.APPLICATION_FORM_URLENCODED);
|
||||
JILICreateFreeSpinResponseDTO createFreeSpinResponseDTO = jiliClient.createFreeSpin(query + "&Key=" + key, createFreeSpinRequest.getAgentId());
|
||||
|
||||
JILICreateFreeSpinResponseDTO createFreeSpinResponseDTO = JSON.parseObject(result, JILICreateFreeSpinResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(createFreeSpinResponseDTO.getErrorCode())) {
|
||||
Member member = memberService.selectMemberByMemberAccount(createFreeSpinRequest.getAccount());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
member = new Member();
|
||||
}
|
||||
for (Game game : gameList) {
|
||||
GameFreeRecord gameFreeRecord = GameFreeRecord.builder()
|
||||
.currencyCode(gameSecretKeyService.findSystemByCode(createFreeSpinRequest.getAgentId(), GamePlatforms.JILI.getInfo()))
|
||||
.referenceId(referenceId)
|
||||
.memberId(member.getId())
|
||||
.memberAccount(createFreeSpinRequest.getAccount())
|
||||
.gameId(game.getId())
|
||||
.sendTime(createFreeSpinRequest.getStartTime())
|
||||
.expiredTime(createFreeSpinRequest.getFreeSpinValidity())
|
||||
.freeUpdateTime(DateUtils.getNowDate())
|
||||
.sendGame(game.getGameName())
|
||||
.sendAmount(createFreeSpinRequest.getNumberOfRounds())
|
||||
.unusedAmount(createFreeSpinRequest.getNumberOfRounds())
|
||||
.build();
|
||||
gameFreeRecord.setCreateBy(Constants.SYSTEM);
|
||||
gameFreeRecordService.insertGameFreeRecord(gameFreeRecord);
|
||||
}
|
||||
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [createFreeSpin] 赠送免费局数,错误代码{},错误信息{}", createFreeSpinResponseDTO.getErrorCode(), createFreeSpinResponseDTO.getMessage());
|
||||
throw new BaseException(createFreeSpinResponseDTO.getMessage());
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(createFreeSpinResponseDTO.getErrorCode())) {
|
||||
Member member = memberService.selectMemberByGameAccount(createFreeSpinRequest.getAccount());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
member = new Member();
|
||||
}
|
||||
for (Game game : gameList) {
|
||||
GameFreeRecord gameFreeRecord = GameFreeRecord.builder()
|
||||
.currencyCode(gameSecretKeyService.findSystemByCode(createFreeSpinRequest.getAgentId(), GamePlatforms.JILI.getInfo()))
|
||||
.referenceId(referenceId)
|
||||
.platformCode(GamePlatforms.JILI.getInfo())
|
||||
.memberId(member.getId())
|
||||
.memberAccount(createFreeSpinRequest.getAccount())
|
||||
.gameId(game.getId())
|
||||
.sendTime(createFreeSpinRequest.getStartTime())
|
||||
.expiredTime(createFreeSpinRequest.getFreeSpinValidity())
|
||||
.freeUpdateTime(DateUtils.getNowDate())
|
||||
.sendGame(game.getGameName())
|
||||
.sendAmount(createFreeSpinRequest.getNumberOfRounds())
|
||||
.unusedAmount(createFreeSpinRequest.getNumberOfRounds())
|
||||
.build();
|
||||
gameFreeRecord.setCreateBy(Constants.SYSTEM);
|
||||
gameFreeRecordService.insertGameFreeRecord(gameFreeRecord);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [createFreeSpin] 赠送免费局数,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.free.round.gift.failed"));
|
||||
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [createFreeSpin] 赠送免费局数,错误代码{},错误信息{}", createFreeSpinResponseDTO.getErrorCode(), createFreeSpinResponseDTO.getMessage());
|
||||
throw new BaseException(createFreeSpinResponseDTO.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -524,26 +502,15 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
}
|
||||
getGameDetailRequestDTO.setQuery(query);
|
||||
log.info("GamesJILIServiceImpl [getGameDetail] 请求参数 {}", query);
|
||||
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
try {
|
||||
|
||||
String result = HttpClientSslUtils.doGet(apiBaseUrl + "/GetGameDetailUrl?" + query + "&AgentId=" + getGameDetailRequestDTO.getAgentId() + "&Key=" + key);
|
||||
JILIGetGameDetailResponseDTO jiliGetGameDetailResponseDTO = JsonUtil.stringToObj(result, JILIGetGameDetailResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(jiliGetGameDetailResponseDTO.getErrorCode())) {
|
||||
GetGameDetailResponseDTO getGameDetailResponseDTO = new GetGameDetailResponseDTO();
|
||||
getGameDetailResponseDTO.setUrl(jiliGetGameDetailResponseDTO.getData().getUrl());
|
||||
return getGameDetailResponseDTO;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getGameDetail] 获取游戏游玩详情失败,错误代码{},错误信息{}", jiliGetGameDetailResponseDTO.getErrorCode(), jiliGetGameDetailResponseDTO.getMessage());
|
||||
throw new BaseException(MessageUtils.message("game.play.details.retrieve.failed"));
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [getGameDetail] 获取游戏游玩详情失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.play.details.retrieve.failed"));
|
||||
|
||||
JILIGetGameDetailResponseDTO jiliGetGameDetailResponseDTO = jiliClient.getGameDetail(query + "&AgentId=" + getGameDetailRequestDTO.getAgentId() + "&Key=" + key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(jiliGetGameDetailResponseDTO.getErrorCode())) {
|
||||
GetGameDetailResponseDTO getGameDetailResponseDTO = new GetGameDetailResponseDTO();
|
||||
getGameDetailResponseDTO.setUrl(jiliGetGameDetailResponseDTO.getData().getUrl());
|
||||
return getGameDetailResponseDTO;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getGameDetail] 获取游戏游玩详情失败,错误代码{},错误信息{}", jiliGetGameDetailResponseDTO.getErrorCode(), jiliGetGameDetailResponseDTO.getMessage());
|
||||
throw new BaseException(jiliGetGameDetailResponseDTO.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -561,22 +528,12 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
String key = this.getKey(kickMemberRequestDTO);
|
||||
log.info("GamesJILIServiceImpl [kickMember] 请求参数 {}", query);
|
||||
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
try {
|
||||
|
||||
String result = HttpClientSslUtils.doGet(apiBaseUrl + "/KickMember?" + query + "&AgentId=" + kickMemberRequestDTO.getAgentId() + "&Key=" + key);
|
||||
JILIKickMemberDTO jiliKickMemberDTO = JsonUtil.stringToObj(result, JILIKickMemberDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(jiliKickMemberDTO.getErrorCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [kickMember] 强制会员从游戏注销失败,错误代码{},错误信息{}", jiliKickMemberDTO.getErrorCode(), jiliKickMemberDTO.getMessage());
|
||||
throw new BaseException(MessageUtils.message("game.member.force.logout.failed"));
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [kickMember] 强制会员从游戏注销失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.member.force.logout.failed"));
|
||||
JILIKickMemberDTO jiliKickMemberDTO = jiliClient.kickMember(query + "&AgentId=" + kickMemberRequestDTO.getAgentId() + "&Key=" + key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(jiliKickMemberDTO.getErrorCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
throw new BaseException(jiliKickMemberDTO.getMessage());
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -598,24 +555,12 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
kickMemberAllDTO.setQuery(query);
|
||||
String key = this.getKey(kickMemberAllDTO);
|
||||
log.info("GamesJILIServiceImpl [kickMemberAll] 请求参数 {}", query);
|
||||
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
try {
|
||||
|
||||
String result = HttpClientSslUtils.doGet(apiBaseUrl + "/KickMemberAll?" + query + "&Key=" + key);
|
||||
JILIKickMemberAllDTO jiliKickMemberAllDTO = JsonUtil.stringToObj(result, JILIKickMemberAllDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(jiliKickMemberAllDTO.getErrorCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [kickMemberAll] 强制全部会员从游戏注销失败,错误代码{},错误信息{}", jiliKickMemberAllDTO.getErrorCode(), jiliKickMemberAllDTO.getMessage());
|
||||
throw new BaseException(MessageUtils.message("game.members.force.logout.failed"));
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [kickMemberAll] 强制全部会员从游戏注销失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.members.force.logout.failed"));
|
||||
|
||||
JILIKickMemberAllDTO jiliKickMemberAllDTO = jiliClient.kickMemberAll(query + "&AgentId=" + kickMemberAllDTO.getAgentId() + "&Key=" + key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(jiliKickMemberAllDTO.getErrorCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
throw new BaseException(jiliKickMemberAllDTO.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -636,40 +581,30 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
getFreeSpinDashflowRequestDTO.setQuery(query);
|
||||
//获取key
|
||||
String key = this.getKey(getFreeSpinDashflowRequestDTO);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
String result = null;
|
||||
try {
|
||||
result = HttpClientSslUtils.doPost(apiBaseUrl + "/GetFreeSpinDashflow?" + query + "&Key=" + key, "AgentId=" + getFreeSpinDashflowRequestDTO.getAgentId(), ContentType.APPLICATION_FORM_URLENCODED);
|
||||
|
||||
JILIGetFreeSpinDashflowResponseDTO getFreeSpinDashflowResponseDTO = JSON.parseObject(result, JILIGetFreeSpinDashflowResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(getFreeSpinDashflowResponseDTO.getErrorCode())) {
|
||||
for (JILIGetFreeSpinDashflowResponseDTO.DataBean data : getFreeSpinDashflowResponseDTO.getData()) {
|
||||
List<GameFreeRecord> gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(GameFreeRecord.builder()
|
||||
.referenceId(data.getReferenceID())
|
||||
.build());
|
||||
for (GameFreeRecord gameFreeRecord : gameFreeRecords) {
|
||||
gameFreeRecord.setSendTime(data.getSendTime());
|
||||
gameFreeRecord.setExpiredTime(data.getExpiredTime());
|
||||
gameFreeRecord.setFreeUpdateTime(data.getUpdateTime());
|
||||
gameFreeRecord.setSendAmount(data.getSendAmount());
|
||||
gameFreeRecord.setUsedAmount(data.getUsedAmount());
|
||||
gameFreeRecord.setUnusedAmount(data.getUnusedAmount());
|
||||
gameFreeRecordService.updateGameFreeRecord(gameFreeRecord);
|
||||
gameFreeRecordsResult.add(gameFreeRecord);
|
||||
}
|
||||
JILIGetFreeSpinDashflowResponseDTO getFreeSpinDashflowResponseDTO = jiliClient.getFreeSpinDashflow(query + "&Key=" + key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(getFreeSpinDashflowResponseDTO.getErrorCode())) {
|
||||
for (JILIGetFreeSpinDashflowResponseDTO.DataBean data : getFreeSpinDashflowResponseDTO.getData()) {
|
||||
List<GameFreeRecord> gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(GameFreeRecord.builder()
|
||||
.referenceId(data.getReferenceID())
|
||||
.build());
|
||||
for (GameFreeRecord gameFreeRecord : gameFreeRecords) {
|
||||
gameFreeRecord.setSendTime(data.getSendTime());
|
||||
gameFreeRecord.setExpiredTime(data.getExpiredTime());
|
||||
gameFreeRecord.setFreeUpdateTime(data.getUpdateTime());
|
||||
gameFreeRecord.setSendAmount(data.getSendAmount());
|
||||
gameFreeRecord.setUsedAmount(data.getUsedAmount());
|
||||
gameFreeRecord.setUnusedAmount(data.getUnusedAmount());
|
||||
gameFreeRecordService.updateGameFreeRecord(gameFreeRecord);
|
||||
gameFreeRecordsResult.add(gameFreeRecord);
|
||||
}
|
||||
|
||||
return gameFreeRecordsResult;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [getFreeSpinDashflow] 查询免费游戏玩家使用的纪录,错误代码{},错误信息{}", getFreeSpinDashflowResponseDTO.getErrorCode(), getFreeSpinDashflowResponseDTO.getMessage());
|
||||
throw new BaseException(getFreeSpinDashflowResponseDTO.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [getFreeSpinDashflow] 查询免费游戏玩家使用的纪录,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.free.play.record.query.failed"));
|
||||
|
||||
return gameFreeRecordsResult;
|
||||
} else {
|
||||
throw new BaseException(getFreeSpinDashflowResponseDTO.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -688,34 +623,56 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
cancelFreeSpinRequestDTO.setQuery(query);
|
||||
//获取key
|
||||
String key = this.getKey(cancelFreeSpinRequestDTO);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.JILI_API_BASE_URL);
|
||||
String result = null;
|
||||
try {
|
||||
result = HttpClientSslUtils.doPost(apiBaseUrl + "/CancelFreeSpin?" + query + "&Key=" + key, "AgentId=" + cancelFreeSpinRequestDTO.getAgentId(), ContentType.APPLICATION_FORM_URLENCODED);
|
||||
|
||||
JILICancelFreeSpinResponseDTO cancelFreeSpinResponseDTO = JSON.parseObject(result, JILICancelFreeSpinResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(cancelFreeSpinResponseDTO.getErrorCode())) {
|
||||
List<GameFreeRecord> gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(GameFreeRecord.builder()
|
||||
.referenceId(cancelFreeSpinRequestDTO.getReferenceId())
|
||||
.build());
|
||||
for (GameFreeRecord gameFreeRecord : gameFreeRecords) {
|
||||
gameFreeRecord.setFreeStatus(FreeStatus.CANCEL.getCode());
|
||||
gameFreeRecordService.updateGameFreeRecord(gameFreeRecord);
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GameBettingDataJILIServiceImpl [cancelFreeSpin] 取消赠送免费局数,错误代码{},错误信息{}", cancelFreeSpinResponseDTO.getErrorCode(), cancelFreeSpinResponseDTO.getMessage());
|
||||
throw new BaseException(cancelFreeSpinResponseDTO.getMessage());
|
||||
JILICancelFreeSpinResponseDTO cancelFreeSpinResponseDTO = jiliClient.cancelFreeSpin(query + "&Key=" + key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(cancelFreeSpinResponseDTO.getErrorCode())) {
|
||||
List<GameFreeRecord> gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(GameFreeRecord.builder()
|
||||
.referenceId(cancelFreeSpinRequestDTO.getReferenceId())
|
||||
.build());
|
||||
for (GameFreeRecord gameFreeRecord : gameFreeRecords) {
|
||||
gameFreeRecord.setFreeStatus(FreeStatus.CANCEL.getCode());
|
||||
gameFreeRecordService.updateGameFreeRecord(gameFreeRecord);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GameBettingDataJILIServiceImpl [cancelFreeSpin] 取消赠送免费局数,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.free.round.cancel.failed"));
|
||||
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
throw new BaseException(cancelFreeSpinResponseDTO.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param betRecordJILIResponse 投注记录jiliresponse
|
||||
* @return {@link Integer }
|
||||
*/
|
||||
private void batchInsert(JILIBetRecordResponseDTO betRecordJILIResponse) {
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
List<Long> wagersIds = new ArrayList<>();
|
||||
//数据组装
|
||||
JILIBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData();
|
||||
//数据转化
|
||||
for (JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO : dataBean.getResult()) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(jiliBetRecordDataResponseDTO).build());
|
||||
if (!ObjectUtils.isEmpty(bettingDetails)) {
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
wagersIds.add(jiliBetRecordDataResponseDTO.getWagersId());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||
//查询重复数据id
|
||||
List<Long> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds);
|
||||
//用steam流清除list中与wagersIds集合相同的数据
|
||||
gameBettingDetails = gameBettingDetails.stream()
|
||||
.filter(detail -> !removeWagersIds.contains(detail.getWagersId()))
|
||||
.collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||
gameBettingDetailsService.batchInsert(gameBettingDetails);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据构建
|
||||
*
|
||||
|
|
@ -728,7 +685,7 @@ public class GamesJILIServiceImpl implements IGamesService {
|
|||
//转化类
|
||||
JILIBetRecordDataResponseDTO jiliBetRecordDataResponseDTO = (JILIBetRecordDataResponseDTO) gamesDataBuildDTO.getData();
|
||||
String systemByCode = gameSecretKeyService.findSystemByCode(jiliBetRecordDataResponseDTO.getAgentId(), GamePlatforms.JILI.getInfo());
|
||||
Member member = memberService.selectMemberByMemberAccount(jiliBetRecordDataResponseDTO.getAccount());
|
||||
Member member = memberService.selectMemberByGameAccount(jiliBetRecordDataResponseDTO.getAccount());
|
||||
if (ObjectUtils.isEmpty(member)) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 取消免费旋转请求
|
||||
|
|
@ -9,6 +12,9 @@ import lombok.Data;
|
|||
* @date 2024/11/11
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
public class CancelFreeSpinRequestDTO extends GamesBaseRequestDTO {
|
||||
/**
|
||||
* 取消免费赠送游戏id
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
|
@ -12,6 +16,9 @@ import java.util.List;
|
|||
* @date 2024/11/11
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
public class CreateFreeSpinRequestDTO extends GamesBaseRequestDTO {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -23,9 +23,6 @@ public class GamesDataBuildDTO
|
|||
*/
|
||||
private Object data;
|
||||
|
||||
/**
|
||||
* 游戏列表key
|
||||
*/
|
||||
private String gamesKey;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import com.alibaba.druid.filter.AutoLoad;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 获取游戏详细信息请求dto
|
||||
|
|
@ -9,6 +15,9 @@ import lombok.Data;
|
|||
* @date 2024/11/12
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
public class GetGameDetailRequestDTO extends GamesBaseRequestDTO {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 踢成员全部dto
|
||||
|
|
@ -9,7 +15,14 @@ import lombok.Data;
|
|||
* @date 2024/11/12
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
public class KickMemberAllDTO extends GamesBaseRequestDTO {
|
||||
private Long gameId;
|
||||
|
||||
/**
|
||||
* 游戏id
|
||||
*/
|
||||
private Integer gameId;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
package com.ff.game.api.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 踢会员请求dto
|
||||
|
|
@ -9,6 +13,9 @@ import lombok.Data;
|
|||
* @date 2024/11/12
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
public class KickMemberRequestDTO extends GamesBaseRequestDTO {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package com.ff.game.api.xk.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 MyXKAddressSource implements AddressSource {
|
||||
|
||||
@Resource
|
||||
private ISysConfigService configService;
|
||||
|
||||
|
||||
@Override
|
||||
public ForestAddress getAddress(ForestRequest request) {
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
return new ForestAddress("https",apiBaseUrl, 443,"api");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package com.ff.game.api.xk.client;
|
||||
|
||||
import com.dtflys.forest.annotation.*;
|
||||
import com.ff.game.api.jili.address.MyJILIAddressSource;
|
||||
import com.ff.game.api.jili.dto.*;
|
||||
import com.ff.game.api.xk.address.MyXKAddressSource;
|
||||
import com.ff.game.api.xk.dto.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* xk 请求
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/10
|
||||
*/
|
||||
@Address(source = MyXKAddressSource.class)
|
||||
public interface XKClient {
|
||||
/**
|
||||
* 创建成员
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link String }
|
||||
*/
|
||||
@Post("/createMember")
|
||||
XKCreateMemberResponseDTO createMember(@JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 获取会员信息
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link XKMemberInfoDTO }
|
||||
*/
|
||||
@Post("/getMemberInfo")
|
||||
XKMemberInfoDTO getMemberInfo(@JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 无重定向登录
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILILoginWithoutRedirectResponseDTO }
|
||||
*/
|
||||
@Post("/loginWithoutRedirect")
|
||||
XKLoginWithoutRedirectResponseDTO loginWithoutRedirect(@JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 获取游戏列表
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIGamesDTO }
|
||||
*/
|
||||
@Post("/getGameList")
|
||||
XKGamesDTO getGameList(@JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 按代理id进行交换转账
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIExchangeMoneyResponseDTO }
|
||||
*/
|
||||
@Post(url = "/exchangeTransferByAgentId")
|
||||
XKExchangeMoneyResponseDTO exchangeTransferByAgentId( @JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 按时间获取投注记录
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link XKBetRecordResponseDTO }
|
||||
*/
|
||||
@Post(url = "/getGameRecordByTime")
|
||||
XKBetRecordResponseDTO getBetRecordByTime( @JSONBody Map<String, Object> params);
|
||||
|
||||
|
||||
/**
|
||||
* 踢出队员
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIKickMemberDTO }
|
||||
*/
|
||||
@Post("/kickMember")
|
||||
XKKickMemberDTO kickMember(@JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 踢出所有队员
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIKickMemberAllDTO }
|
||||
*/
|
||||
@Get("/kickMemberAll")
|
||||
XKKickMemberAllDTO kickMemberAll(@JSONBody Map<String, Object> params);
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -17,8 +17,11 @@ import com.ff.base.utils.StringUtils;
|
|||
import com.ff.base.utils.http.HttpClientSslUtils;
|
||||
import com.ff.base.utils.sign.Md5Utils;
|
||||
import com.ff.base.utils.uuid.IdUtils;
|
||||
import com.ff.common.domain.TenantSecretKey;
|
||||
import com.ff.config.KeyConfig;
|
||||
import com.ff.game.api.IGamesService;
|
||||
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.service.*;
|
||||
|
|
@ -27,6 +30,7 @@ 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;
|
||||
|
||||
|
|
@ -66,8 +70,6 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
private IGameService gameService;
|
||||
|
||||
|
||||
|
||||
|
||||
@Resource
|
||||
private IMemberService memberService;
|
||||
|
||||
|
|
@ -75,6 +77,18 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
private IGameFreeRecordService gameFreeRecordService;
|
||||
@Resource
|
||||
private IGameSecretKeyService gameSecretKeyService;
|
||||
|
||||
@Resource
|
||||
private XKClient xkClient;
|
||||
|
||||
|
||||
@Resource
|
||||
private KeyConfig keyConfig;
|
||||
|
||||
@Resource
|
||||
private IGameBettingDetailsService gameBettingDetailsService;
|
||||
|
||||
|
||||
/**
|
||||
* 获得就是成功
|
||||
*
|
||||
|
|
@ -120,7 +134,6 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
public Boolean createMember(CreateMemberRequestDTO createMemberRequestDTO) {
|
||||
log.info("GamesXKServiceImpl [createMember] 请求参数 {}", createMemberRequestDTO);
|
||||
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("account", createMemberRequestDTO.getAccount());
|
||||
params.put("agentId", createMemberRequestDTO.getAgentId());
|
||||
|
|
@ -128,16 +141,13 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
createMemberRequestDTO.setQuery(query);
|
||||
String key = this.getKey(createMemberRequestDTO);
|
||||
params.put("key", key);
|
||||
try {
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/createMember", JsonUtil.objToPrettyString(params));
|
||||
XKCreateMemberResponseDTO xkCreateMemberResponseDTO = JsonUtil.stringToObj(result, XKCreateMemberResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
return !this.getIsSuccess(xkCreateMemberResponseDTO.getCode());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [createMember] 建立游戏账号,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.account.create.failed"));
|
||||
XKCreateMemberResponseDTO xkCreateMemberResponseDTO = xkClient.createMember(params);
|
||||
Boolean isSuccess = this.getIsSuccess(xkCreateMemberResponseDTO.getCode());
|
||||
if (!isSuccess) {
|
||||
throw new BaseException(xkCreateMemberResponseDTO.getMsg());
|
||||
}
|
||||
//判断是否获取成功
|
||||
return isSuccess;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -157,31 +167,21 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
memberInfoRequestDTO.setQuery(query);
|
||||
String key = this.getKey(memberInfoRequestDTO);
|
||||
params.put("key", key);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
try {
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/getMemberInfo", JsonUtil.objToPrettyString(params));
|
||||
XKMemberInfoDTO xkMemberInfoDTO = JsonUtil.stringToObj(result, XKMemberInfoDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkMemberInfoDTO.getCode())) {
|
||||
List<MemberInfoResponseDTO> memberInfoResponseDTOS = new ArrayList<>();
|
||||
xkMemberInfoDTO.getData().forEach(e -> {
|
||||
memberInfoResponseDTOS.add(MemberInfoResponseDTO.builder()
|
||||
.status(e.getStatus())
|
||||
.balance(e.getBalance())
|
||||
.account(e.getAccount())
|
||||
.build());
|
||||
});
|
||||
return memberInfoResponseDTOS.get(0);
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [getMemberInfo] 查询游戏账号信息失败,错误代码{},错误信息{}", xkMemberInfoDTO.getCode(), xkMemberInfoDTO.getMsg());
|
||||
throw new BaseException(MessageUtils.message("game.account.query.failed"));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [getMemberInfo] 查询游戏账号信息失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.account.query.failed"));
|
||||
XKMemberInfoDTO xkMemberInfoDTO = xkClient.getMemberInfo(params);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkMemberInfoDTO.getCode())) {
|
||||
List<MemberInfoResponseDTO> memberInfoResponseDTOS = new ArrayList<>();
|
||||
xkMemberInfoDTO.getData().forEach(e -> {
|
||||
memberInfoResponseDTOS.add(MemberInfoResponseDTO.builder()
|
||||
.status(e.getStatus())
|
||||
.balance(e.getBalance())
|
||||
.account(e.getAccount())
|
||||
.build());
|
||||
});
|
||||
return memberInfoResponseDTOS.get(0);
|
||||
} else {
|
||||
throw new BaseException(xkMemberInfoDTO.getMsg());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -206,21 +206,12 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
params.put("disableFullScreen", gamesLogin.getDisableFullScreen());
|
||||
params.put("homeUrl", gamesLogin.getHomeUrl());
|
||||
params.put("platform", gamesLogin.getPlatform());
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
try {
|
||||
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/loginWithoutRedirect", JsonUtil.objToPrettyString(params));
|
||||
XKLoginWithoutRedirectResponseDTO xkLoginWithoutRedirectResponseDTO = JsonUtil.stringToObj(result, XKLoginWithoutRedirectResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkLoginWithoutRedirectResponseDTO.getCode())) {
|
||||
return xkLoginWithoutRedirectResponseDTO.getData();
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [loginWithoutRedirect] 游戏登录失败,错误代码{},错误信息{}", xkLoginWithoutRedirectResponseDTO.getCode(), xkLoginWithoutRedirectResponseDTO.getMsg());
|
||||
throw new BaseException(MessageUtils.message("game.login.failed"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [loginWithoutRedirect] 游戏登录失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.login.failed"));
|
||||
XKLoginWithoutRedirectResponseDTO xkLoginWithoutRedirectResponseDTO = xkClient.loginWithoutRedirect(params);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkLoginWithoutRedirectResponseDTO.getCode())) {
|
||||
return xkLoginWithoutRedirectResponseDTO.getData();
|
||||
} else {
|
||||
throw new BaseException(xkLoginWithoutRedirectResponseDTO.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -234,81 +225,69 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
@Override
|
||||
public String getGameList(GamesBaseRequestDTO gamesBaseRequestDTO) {
|
||||
|
||||
List<XKGamesDTO.DataBean> gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES);
|
||||
if (!CollectionUtils.isEmpty(gamesDatas)) {
|
||||
return CacheConstants.XK_GAMES;
|
||||
}
|
||||
|
||||
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("agentId", gamesBaseRequestDTO.getAgentId());
|
||||
String query = JsonUtil.mapToQueryString(params);
|
||||
gamesBaseRequestDTO.setQuery(query);
|
||||
String key = this.getKey(gamesBaseRequestDTO);
|
||||
params.put("key", key);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
try {
|
||||
|
||||
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/getGameList", JsonUtil.objToPrettyString(params));
|
||||
XKGamesDTO xkGamesDTO = JsonUtil.stringToObj(result, XKGamesDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkGamesDTO.getCode())) {
|
||||
|
||||
Map<Long, GamePlatform> gamePlatformMap = new HashMap<>();
|
||||
|
||||
for (XKGamesDTO.DataBean gamesDataDTO : xkGamesDTO.getData()) {
|
||||
if (XKGameType.GAME_HALL.getCode().equals(gamesDataDTO.getGameCategoryId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
GamePlatform gamePlatform = GamePlatform.builder()
|
||||
.platformType(XKGameType.findSystemByCode(gamesDataDTO.getGameCategoryId()))
|
||||
.platformCode(GamePlatforms.XK.getCode())
|
||||
.build();
|
||||
List<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.XK.getInfo() + XKGameType.findInfoByCode(gamesDataDTO.getGameCategoryId()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}
|
||||
Game game = Game.builder()
|
||||
.platformId(gamePlatform.getId())
|
||||
.gameCode(gamesDataDTO.getGameId())
|
||||
.build();
|
||||
List<Game> games = gameService.selectGameList(game);
|
||||
//不存在这个游戏
|
||||
if (CollectionUtils.isEmpty(games)) {
|
||||
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());
|
||||
|
||||
XKGamesDTO xkGamesDTO = xkClient.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<GamePlatform> gamePlatforms = gamePlatformService.selectGamePlatformList(gamePlatform);
|
||||
//没有此平台就新增一个平台
|
||||
if (CollectionUtils.isEmpty(gamePlatforms)) {
|
||||
gamePlatform.setPlatformName(GamePlatforms.XK.getInfo() + XKGameType.findInfoByCode(gamesDataDTO.getGameCategoryId()));
|
||||
gamePlatform.setSortNo(gamePlatformService.selectMaxSortNo() + 1);
|
||||
gamePlatform.setCreateBy(Constants.SYSTEM);
|
||||
gamePlatformService.insertGamePlatform(gamePlatform);
|
||||
} else {
|
||||
gamePlatform = gamePlatforms.get(0);
|
||||
}
|
||||
Game game = Game.builder()
|
||||
.platformId(gamePlatform.getId())
|
||||
.gameCode(gamesDataDTO.getGameId())
|
||||
.build();
|
||||
List<Game> games = gameService.selectGameList(game);
|
||||
//不存在这个游戏
|
||||
if (CollectionUtils.isEmpty(games)) {
|
||||
game.setGameSourceType(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());
|
||||
|
||||
|
||||
|
||||
redisCache.deleteObject(CacheConstants.XK_GAMES);
|
||||
redisCache.setCacheList(CacheConstants.XK_GAMES, xkGamesDTO.getData());
|
||||
redisCache.expire(CacheConstants.XK_GAMES, 5L, TimeUnit.HOURS);
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [getGameList] 获取游戏列表失败,错误代码{},错误信息{}", xkGamesDTO.getCode(), xkGamesDTO.getMsg());
|
||||
throw new BaseException(MessageUtils.message("game.list.retrieve.failed"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [getGameList] 获取游戏列表失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.list.retrieve.failed"));
|
||||
|
||||
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.JILI_GAMES;
|
||||
|
||||
return CacheConstants.XK_GAMES;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -321,16 +300,28 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
@Transactional
|
||||
public String exchangeTransferByAgentId(ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO) {
|
||||
log.info("GamesXKServiceImpl [exchangeTransferByAgentId] 请求参数 {}", exchangeTransferMoneyRequestDTO);
|
||||
String systemByCode = gameSecretKeyService.findSystemByCode(exchangeTransferMoneyRequestDTO.getAgentId(),GamePlatforms.XK.getInfo());
|
||||
Member member = memberService.selectMemberByMemberAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String systemByCode = gameSecretKeyService.findSystemByCode(exchangeTransferMoneyRequestDTO.getAgentId(), GamePlatforms.XK.getInfo());
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.XK.getCode() + IdUtils.simpleUUID();
|
||||
TenantSecretKey tenantSecretKey = keyConfig.get();
|
||||
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
|
||||
GameExchangeMoney.builder()
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.orderId(exchangeTransferMoneyRequestDTO.getOrderId())
|
||||
.build()
|
||||
);
|
||||
Assert.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), "订单号重复");
|
||||
//获取下一个自增id
|
||||
GameExchangeMoney exchangeMoney = GameExchangeMoney
|
||||
.builder()
|
||||
.tenantKey(tenantSecretKey.getTenantKey())
|
||||
.quota(exchangeTransferMoneyRequestDTO.getQuota())
|
||||
.balance(exchangeTransferMoneyRequestDTO.getAmount())
|
||||
.exchangeType(exchangeTransferMoneyRequestDTO.getTransferType())
|
||||
.currencyCode(systemByCode)
|
||||
.memberId(member.getId())
|
||||
.transactionId(transactionId)
|
||||
.orderId(exchangeTransferMoneyRequestDTO.getOrderId())
|
||||
.platformCode(GamePlatforms.XK.getCode())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
|
|
@ -346,32 +337,24 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
exchangeTransferMoneyRequestDTO.setQuery(query);
|
||||
String key = this.getKey(exchangeTransferMoneyRequestDTO);
|
||||
params.put("key", key);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
try {
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/exchangeTransferByAgentId", JsonUtil.objToPrettyString(params));
|
||||
|
||||
XKExchangeMoneyResponseDTO exchangeMoneyResponse = JsonUtil.stringToObj(result, XKExchangeMoneyResponseDTO.class);
|
||||
//判断是否转移成功
|
||||
if (this.getIsSuccess(exchangeMoneyResponse.getCode())) {
|
||||
XKExchangeMoneyResponseDTO.DataBean exchangeMoneyResponseData = exchangeMoneyResponse.getData();
|
||||
//更新数据
|
||||
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(MessageUtils.message("game.account.balance.transfer.failed"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [exchangeTransferByAgentId] 金额转移失败,错误信息{}", e);
|
||||
XKExchangeMoneyResponseDTO exchangeMoneyResponse = xkClient.exchangeTransferByAgentId(params);
|
||||
//判断是否转移成功
|
||||
if (this.getIsSuccess(exchangeMoneyResponse.getCode())) {
|
||||
XKExchangeMoneyResponseDTO.DataBean exchangeMoneyResponseData = exchangeMoneyResponse.getData();
|
||||
//更新数据
|
||||
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(MessageUtils.message("game.account.balance.transfer.failed"));
|
||||
}
|
||||
|
||||
return exchangeMoney.getId().toString();
|
||||
return transactionId;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -382,7 +365,7 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
* @return {@link List }<{@link GameBettingDetails }>
|
||||
*/
|
||||
@Override
|
||||
public List<GameBettingDetails> getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
public Boolean getBetRecordByTime(BetRecordByTimeDTO betRecordByTimeDTO) {
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
//请求参数
|
||||
log.info("GamesXKServiceImpl [getBetRecordByTime] 请求参数 {}", betRecordByTimeDTO);
|
||||
|
|
@ -396,54 +379,37 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
betRecordByTimeDTO.setQuery(query);
|
||||
String key = this.getKey(betRecordByTimeDTO);
|
||||
params.put("key", key);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
String result = null;
|
||||
try {
|
||||
result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/getGameRecordByTime", JsonUtil.objToPrettyString(params));
|
||||
XKBetRecordResponseDTO xkBetRecordResponseDTO = xkClient.getBetRecordByTime(params);
|
||||
|
||||
XKBetRecordResponseDTO betRecordJILIResponse = JSON.parseObject(result, XKBetRecordResponseDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkBetRecordResponseDTO.getCode())) {
|
||||
//数据组装
|
||||
XKBetRecordResponseDTO.DataBean dataBean = xkBetRecordResponseDTO.getData();
|
||||
this.batchInsert(xkBetRecordResponseDTO);
|
||||
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(betRecordJILIResponse.getCode())) {
|
||||
//数据组装
|
||||
XKBetRecordResponseDTO.DataBean dataBean = betRecordJILIResponse.getData();
|
||||
for (XKBetRecordResponseDTO.DataBean.ResultBean bean : dataBean.getResult()) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).gamesKey(key).build());
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
|
||||
//获取下一页数据
|
||||
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);
|
||||
result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/getGameRecordByTime", JsonUtil.objToPrettyString(params));
|
||||
betRecordJILIResponse = JsonUtil.stringToObj(result, XKBetRecordResponseDTO.class);
|
||||
dataBean = betRecordJILIResponse.getData();
|
||||
for (XKBetRecordResponseDTO.DataBean.ResultBean bean : dataBean.getResult()) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).gamesKey(key).build());
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return gameBettingDetails;
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", betRecordJILIResponse.getCode(), betRecordJILIResponse.getMsg());
|
||||
throw new BaseException(MessageUtils.message("game.bet.record.retrieve.failed"));
|
||||
//获取下一页数据
|
||||
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 = xkClient.getBetRecordByTime(params);
|
||||
this.batchInsert(xkBetRecordResponseDTO);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [getBetRecordByTime] 获取投注记录失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.bet.record.retrieve.failed"));
|
||||
|
||||
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [getBetRecordByTime] 获取投注记录失败,错误代码{},错误信息{}", xkBetRecordResponseDTO.getCode(), xkBetRecordResponseDTO.getMsg());
|
||||
throw new BaseException(xkBetRecordResponseDTO.getMsg());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -486,22 +452,12 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
kickMemberRequestDTO.setQuery(query);
|
||||
String key = this.getKey(kickMemberRequestDTO);
|
||||
params.put("key", key);
|
||||
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
try {
|
||||
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/kickMember", JsonUtil.objToPrettyString(params));
|
||||
XKKickMemberDTO xkKickMemberDTO = JsonUtil.stringToObj(result, XKKickMemberDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkKickMemberDTO.getCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [kickMember] 强制会员从游戏注销失败,错误代码{},错误信息{}", xkKickMemberDTO.getCode(), xkKickMemberDTO.getMsg());
|
||||
throw new BaseException(MessageUtils.message("game.member.force.logout.failed"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [kickMember] 强制会员从游戏注销失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.member.force.logout.failed"));
|
||||
XKKickMemberDTO xkKickMemberDTO = xkClient.kickMember(params);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkKickMemberDTO.getCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
throw new BaseException(xkKickMemberDTO.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -513,33 +469,7 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean kickMemberAll(KickMemberAllDTO kickMemberAllDTO) {
|
||||
log.info("GamesXKServiceImpl [kickMemberAll] 请求参数 {}", kickMemberAllDTO);
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("agentId", kickMemberAllDTO.getAgentId());
|
||||
if (!ObjectUtils.isEmpty(kickMemberAllDTO.getGameId())) {
|
||||
params.put("gameId", kickMemberAllDTO.getGameId());
|
||||
}
|
||||
String query = JsonUtil.mapToQueryString(params);
|
||||
kickMemberAllDTO.setQuery(query);
|
||||
String key = this.getKey(kickMemberAllDTO);
|
||||
params.put("key", key);
|
||||
kickMemberAllDTO.setQuery(query);
|
||||
String apiBaseUrl = configService.selectConfigByKey(Constants.XK_API_BASE_URL);
|
||||
try {
|
||||
|
||||
String result = HttpClientSslUtils.doPost(apiBaseUrl + "/api/kickMemberAll", JsonUtil.objToPrettyString(params));
|
||||
XKKickMemberAllDTO xkKickMemberAllDTO = JsonUtil.stringToObj(result, XKKickMemberAllDTO.class);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(xkKickMemberAllDTO.getCode())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
log.error("GamesXKServiceImpl [kickMemberAll] 强制全部会员从游戏注销失败,错误代码{},错误信息{}", xkKickMemberAllDTO.getCode(), xkKickMemberAllDTO.getMsg());
|
||||
throw new BaseException(MessageUtils.message("game.members.force.logout.failed"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("GamesXKServiceImpl [kickMemberAll] 强制全部会员从游戏注销失败,错误信息{}", e);
|
||||
throw new BaseException(MessageUtils.message("game.members.force.logout.failed"));
|
||||
}
|
||||
throw new BaseException("当前平台不支持全部踢出");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -565,6 +495,38 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param xkBetRecordResponseDTO xk下注记录响应dto
|
||||
*/
|
||||
private void batchInsert(XKBetRecordResponseDTO xkBetRecordResponseDTO) {
|
||||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
List<Long> 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)) {
|
||||
gameBettingDetails.add(bettingDetails);
|
||||
}
|
||||
wagersIds.add(bean.getWagersId());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||
//查询重复数据id
|
||||
List<Long> removeWagersIds = gameBettingDetailsService.selectGameBettingDetailsByWagersId(wagersIds);
|
||||
//用steam流清除list中与wagersIds集合相同的数据
|
||||
gameBettingDetails = gameBettingDetails.stream()
|
||||
.filter(detail -> !removeWagersIds.contains(detail.getWagersId()))
|
||||
.collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(gameBettingDetails)) {
|
||||
gameBettingDetailsService.batchInsert(gameBettingDetails);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据构建
|
||||
*
|
||||
|
|
@ -575,16 +537,16 @@ public class GamesXKServiceImpl implements IGamesService {
|
|||
public GameBettingDetails dataBuild(GamesDataBuildDTO gamesDataBuildDTO) {
|
||||
//转化类
|
||||
XKBetRecordResponseDTO.DataBean.ResultBean resultBean = (XKBetRecordResponseDTO.DataBean.ResultBean) gamesDataBuildDTO.getData();
|
||||
String systemByCode = gameSecretKeyService.findSystemByCode(resultBean.getAgentId(),GamePlatforms.XK.getInfo());
|
||||
Member member = memberService.selectMemberByMemberAccount(resultBean.getAccount());
|
||||
String systemByCode = gameSecretKeyService.findSystemByCode(resultBean.getAgentId(), GamePlatforms.XK.getInfo());
|
||||
Member member = memberService.selectMemberByGameAccount(resultBean.getAccount());
|
||||
List<XKGamesDTO.DataBean> gamesDatas = redisCache.getCacheList(CacheConstants.XK_GAMES);
|
||||
Map<Integer, XKGamesDTO.DataBean> dataDTOMap = gamesDatas.stream().collect(Collectors.toMap(XKGamesDTO.DataBean::getGameId, e -> e));
|
||||
XKGamesDTO.DataBean gamesDataDTO = dataDTOMap.get(resultBean.getGameId());
|
||||
BigDecimal payoffAmount=BigDecimal.ZERO;
|
||||
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())){
|
||||
} else if (GameStatus.FAIL.getCode().equals(resultBean.getStatus())) {
|
||||
payoffAmount = NumberUtil.sub(resultBean.getPayoffAmount(), resultBean.getTurnover()).negate();
|
||||
}
|
||||
//数据构造
|
||||
|
|
|
|||
|
|
@ -1,24 +1,23 @@
|
|||
package com.ff.game.domain;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.ff.base.annotation.Excel;
|
||||
import com.ff.base.core.domain.BaseEntity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 免费赠送游戏记录对象 ff_game_free_record
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025-02-10
|
||||
* @date 2025-02-13
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
public class GameFreeRecord extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
|
@ -30,6 +29,10 @@ public class GameFreeRecord extends BaseEntity
|
|||
@Excel(name = "币种编码")
|
||||
private String currencyCode;
|
||||
|
||||
/** 平台代码 */
|
||||
@Excel(name = "平台代码")
|
||||
private String platformCode;
|
||||
|
||||
/** 免费局数序号(唯一标识符) */
|
||||
@Excel(name = "免费局数序号", readConverterExp = "唯=一标识符")
|
||||
private String referenceId;
|
||||
|
|
@ -51,8 +54,7 @@ public class GameFreeRecord extends BaseEntity
|
|||
private Long sendTime;
|
||||
|
||||
/** 免费局数过期时间 */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Excel(name = "免费局数过期时间", width = 30, dateFormat = "yyyy-MM-dd")
|
||||
@Excel(name = "免费局数过期时间")
|
||||
private Long expiredTime;
|
||||
|
||||
/** 免费局数记录更新时间 */
|
||||
|
|
|
|||
|
|
@ -2,7 +2,11 @@ package com.ff.game.domain;
|
|||
|
||||
import com.ff.base.annotation.Excel;
|
||||
import com.ff.base.core.domain.BaseEntity;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 游戏平台密钥管理对象 ff_game_secret_key
|
||||
*
|
||||
|
|
@ -10,6 +14,9 @@ import lombok.Data;
|
|||
* @date 2025-02-10
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class GameSecretKey extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.ff.game.mapper;
|
|||
|
||||
import java.util.List;
|
||||
import com.ff.game.domain.GameBettingDetails;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 会员投注细目Mapper接口
|
||||
|
|
@ -19,6 +20,16 @@ public interface GameBettingDetailsMapper
|
|||
*/
|
||||
GameBettingDetails selectGameBettingDetailsById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 按投注id选择游戏投注详细信息
|
||||
*
|
||||
* @param wagersIds 投注ID
|
||||
* @return {@link List }<{@link Long }>
|
||||
*/
|
||||
List<Long> selectGameBettingDetailsByWagersId(@Param("wagersIds") List<Long> wagersIds);
|
||||
|
||||
|
||||
/**
|
||||
* 查询会员投注细目列表
|
||||
*
|
||||
|
|
@ -58,4 +69,12 @@ public interface GameBettingDetailsMapper
|
|||
* @return 结果
|
||||
*/
|
||||
int deleteGameBettingDetailsByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param bettingDetails 投注详情
|
||||
* @return int
|
||||
*/
|
||||
int batchInsert(List<GameBettingDetails> bettingDetails);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.ff.game.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.ff.game.domain.Game;
|
||||
import com.ff.game.domain.GameBettingDetails;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 会员投注细目Service接口
|
||||
|
|
@ -19,6 +22,16 @@ public interface IGameBettingDetailsService
|
|||
*/
|
||||
GameBettingDetails selectGameBettingDetailsById(Long id);
|
||||
|
||||
/**
|
||||
* 按投注id选择游戏投注详细信息
|
||||
*
|
||||
* @param wagersIds 投注ID
|
||||
* @return {@link List }<{@link Long }>
|
||||
*/
|
||||
List<Long> selectGameBettingDetailsByWagersId(List<Long> wagersIds);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询会员投注细目列表
|
||||
*
|
||||
|
|
@ -35,6 +48,15 @@ public interface IGameBettingDetailsService
|
|||
*/
|
||||
int insertGameBettingDetails(GameBettingDetails gameBettingDetails);
|
||||
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param bettingDetails 投注详情
|
||||
* @return int
|
||||
*/
|
||||
int batchInsert(List<GameBettingDetails> bettingDetails);
|
||||
|
||||
/**
|
||||
* 修改会员投注细目
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ff.game.service.impl;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import com.ff.base.utils.DateUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -32,6 +33,17 @@ public class GameBettingDetailsServiceImpl implements IGameBettingDetailsService
|
|||
return gameBettingDetailsMapper.selectGameBettingDetailsById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按投注id选择游戏投注详细信息
|
||||
*
|
||||
* @param wagersIds 投注ID
|
||||
* @return {@link List }<{@link Long }>
|
||||
*/
|
||||
@Override
|
||||
public List<Long> selectGameBettingDetailsByWagersId(List<Long> wagersIds) {
|
||||
return gameBettingDetailsMapper.selectGameBettingDetailsByWagersId(wagersIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询会员投注细目列表
|
||||
*
|
||||
|
|
@ -57,6 +69,17 @@ public class GameBettingDetailsServiceImpl implements IGameBettingDetailsService
|
|||
return gameBettingDetailsMapper.insertGameBettingDetails(gameBettingDetails);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param bettingDetails 投注详情
|
||||
* @return int
|
||||
*/
|
||||
@Override
|
||||
public int batchInsert(List<GameBettingDetails> bettingDetails) {
|
||||
return gameBettingDetailsMapper.batchInsert(bettingDetails);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改会员投注细目
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,117 @@
|
|||
package com.ff.quartz.task;
|
||||
|
||||
import com.ff.base.constant.Constants;
|
||||
import com.ff.base.datasource.DynamicDataSourceContextHolder;
|
||||
import com.ff.base.enums.GamePlatforms;
|
||||
import com.ff.base.utils.DateUtils;
|
||||
import com.ff.game.api.IGamesService;
|
||||
import com.ff.game.api.request.BetRecordByTimeDTO;
|
||||
import com.ff.game.api.request.GamesBaseRequestDTO;
|
||||
import com.ff.game.api.request.GetFreeSpinDashflowRequestDTO;
|
||||
import com.ff.game.domain.GameSecretKey;
|
||||
import com.ff.game.service.IGameSecretKeyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.sql.DataSource;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* 游戏任务
|
||||
*
|
||||
* @author shi
|
||||
* @date 2024/10/22
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("gameTask")
|
||||
public class GameTask {
|
||||
|
||||
|
||||
@Autowired
|
||||
private Map<String, IGamesService> gamesService;
|
||||
|
||||
@Resource
|
||||
private IGameSecretKeyService gameSecretKeyService;
|
||||
|
||||
/**
|
||||
* 插入游戏投注详细信息
|
||||
*/
|
||||
|
||||
public void insertGameBettingDetails(Integer backTime) {
|
||||
|
||||
//捞取指定分钟前的数据
|
||||
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), backTime);
|
||||
Long endTime = DateUtils.getNowDate();
|
||||
|
||||
Map<Object, DataSource> resolvedDataSources = DynamicDataSourceContextHolder.getAllDataSource();
|
||||
for (Map.Entry<Object, DataSource> entry : resolvedDataSources.entrySet()) {
|
||||
Object key = entry.getKey();
|
||||
// 设置数据源类型
|
||||
DynamicDataSourceContextHolder.setDataSourceType(key.toString());
|
||||
for (String gameKey : gamesService.keySet()) {
|
||||
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(gameKey.replace(Constants.SERVICE, "")).build());
|
||||
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.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入免费游戏局数情况
|
||||
*/
|
||||
public void insertFreeSpinDashflow() {
|
||||
Map<Object, DataSource> resolvedDataSources = DynamicDataSourceContextHolder.getAllDataSource();
|
||||
for (Map.Entry<Object, DataSource> entry : resolvedDataSources.entrySet()) {
|
||||
Object key = entry.getKey();
|
||||
// 设置数据源类型
|
||||
DynamicDataSourceContextHolder.setDataSourceType(key.toString());
|
||||
Long startTime = DateUtils.addOrSubtractMinutes(DateUtils.getNowDate(), -70);
|
||||
for (String gameKey : gamesService.keySet()) {
|
||||
List<GameSecretKey> gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().platform(gameKey.replace(Constants.SERVICE, "")).build());
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package com.ff.validation;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 列表大小检查
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Constraint(validatedBy = ListSizeValidator.class)
|
||||
public @interface ListSizeCheck {
|
||||
|
||||
/**
|
||||
* 消息
|
||||
*
|
||||
* @return {@link String }
|
||||
*/
|
||||
String message() default "列表不能为空,且大小不得超过200";
|
||||
|
||||
/**
|
||||
* 组
|
||||
*
|
||||
* @return {@link Class }<{@link ? }>{@link [] }
|
||||
*/
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
/**
|
||||
* 有效载荷
|
||||
*
|
||||
* @return {@link Class }<{@link ? } {@link extends } {@link Payload }>{@link [] }
|
||||
*/
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
|
||||
/**
|
||||
* 最大尺寸
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int maxSize() default 200;
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.ff.validation;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 列表大小验证器
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/02/12
|
||||
*/
|
||||
public class ListSizeValidator implements ConstraintValidator<ListSizeCheck, List<?>> {
|
||||
|
||||
private int maxSize;
|
||||
|
||||
@Override
|
||||
public void initialize(ListSizeCheck constraintAnnotation) {
|
||||
// 从注解中获取最大值
|
||||
this.maxSize = constraintAnnotation.maxSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(List<?> value, ConstraintValidatorContext context) {
|
||||
if (value == null) {
|
||||
return true;
|
||||
}
|
||||
// 判断列表是否为空且大小不超过 maxSize
|
||||
return !value.isEmpty() && value.size() <= maxSize;
|
||||
}
|
||||
}
|
||||
|
|
@ -59,6 +59,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="turnover != null "> and turnover = #{turnover}</if>
|
||||
<if test="orderNo != null and orderNo != ''"> and order_no = #{orderNo}</if>
|
||||
<if test="settlementStatus != null "> and settlement_status = #{settlementStatus}</if>
|
||||
<if test="params.beginTime != null">
|
||||
AND wagers_time >= #{params.beginTime}
|
||||
</if>
|
||||
<if test="params.endTime != null">
|
||||
AND wagers_time <= #{params.endTime}
|
||||
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
|
@ -67,6 +74,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
where id = #{id}
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectGameBettingDetailsByWagersId" resultType="java.lang.Long">
|
||||
select wagers_id from ff_game_betting_details
|
||||
|
||||
where wagers_id in
|
||||
<foreach item="wagersId" collection="wagersIds" open="(" separator="," close=")">
|
||||
#{wagersId}
|
||||
</foreach>
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<insert id="insertGameBettingDetails" parameterType="GameBettingDetails" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into ff_game_betting_details
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
|
@ -164,4 +183,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into ff_game_betting_details
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
game_id, currency_code, member_id, game_code, game_type, platform_code,
|
||||
game_name, game_status, game_status_type, game_currency_code, account,
|
||||
wagers_id, wagers_time, bet_amount, payoff_time, payoff_amount,
|
||||
settlement_time, turnover, order_no, create_by, create_time
|
||||
</trim>
|
||||
values
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
#{item.gameId},
|
||||
#{item.currencyCode},
|
||||
#{item.memberId},
|
||||
#{item.gameCode},
|
||||
#{item.gameType},
|
||||
#{item.platformCode},
|
||||
#{item.gameName},
|
||||
#{item.gameStatus},
|
||||
#{item.gameStatusType},
|
||||
#{item.gameCurrencyCode},
|
||||
#{item.account},
|
||||
#{item.wagersId},
|
||||
#{item.wagersTime},
|
||||
#{item.betAmount},
|
||||
#{item.payoffTime},
|
||||
#{item.payoffAmount},
|
||||
#{item.settlementTime},
|
||||
#{item.turnover},
|
||||
#{item.orderNo},
|
||||
#{item.createBy},
|
||||
#{item.createTime}
|
||||
</trim>
|
||||
</foreach>
|
||||
</insert>
|
||||
</mapper>
|
||||
|
|
@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<resultMap type="GameFreeRecord" id="GameFreeRecordResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="currencyCode" column="currency_code" />
|
||||
<result property="platformCode" column="platform_code" />
|
||||
<result property="referenceId" column="reference_id" />
|
||||
<result property="memberId" column="member_id" />
|
||||
<result property="memberAccount" column="member_account" />
|
||||
|
|
@ -26,13 +27,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</resultMap>
|
||||
|
||||
<sql id="selectGameFreeRecordVo">
|
||||
select id, currency_code, reference_id, member_id, member_account, game_id, send_time, expired_time, free_update_time, send_game, send_amount, used_amount, unused_amount, free_status, create_by, create_time, update_by, update_time from ff_game_free_record
|
||||
select id, currency_code, platform_code, reference_id, member_id, member_account, game_id, send_time, expired_time, free_update_time, send_game, send_amount, used_amount, unused_amount, free_status, create_by, create_time, update_by, update_time from ff_game_free_record
|
||||
</sql>
|
||||
|
||||
<select id="selectGameFreeRecordList" parameterType="GameFreeRecord" resultMap="GameFreeRecordResult">
|
||||
<include refid="selectGameFreeRecordVo"/>
|
||||
<where>
|
||||
<if test="currencyCode != null and currencyCode != ''"> and currency_code = #{currencyCode}</if>
|
||||
<if test="platformCode != null and platformCode != ''"> and platform_code = #{platformCode}</if>
|
||||
<if test="referenceId != null and referenceId != ''"> and reference_id = #{referenceId}</if>
|
||||
<if test="memberId != null "> and member_id = #{memberId}</if>
|
||||
<if test="memberAccount != null and memberAccount != ''"> and member_account = #{memberAccount}</if>
|
||||
|
|
@ -57,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
insert into ff_game_free_record
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="currencyCode != null">currency_code,</if>
|
||||
<if test="platformCode != null">platform_code,</if>
|
||||
<if test="referenceId != null">reference_id,</if>
|
||||
<if test="memberId != null">member_id,</if>
|
||||
<if test="memberAccount != null">member_account,</if>
|
||||
|
|
@ -76,6 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="currencyCode != null">#{currencyCode},</if>
|
||||
<if test="platformCode != null">#{platformCode},</if>
|
||||
<if test="referenceId != null">#{referenceId},</if>
|
||||
<if test="memberId != null">#{memberId},</if>
|
||||
<if test="memberAccount != null">#{memberAccount},</if>
|
||||
|
|
@ -99,6 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
update ff_game_free_record
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="currencyCode != null">currency_code = #{currencyCode},</if>
|
||||
<if test="platformCode != null">platform_code = #{platformCode},</if>
|
||||
<if test="referenceId != null">reference_id = #{referenceId},</if>
|
||||
<if test="memberId != null">member_id = #{memberId},</if>
|
||||
<if test="memberAccount != null">member_account = #{memberAccount},</if>
|
||||
|
|
|
|||
|
|
@ -59,6 +59,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="turnover != null "> and turnover = #{turnover}</if>
|
||||
<if test="orderNo != null and orderNo != ''"> and order_no = #{orderNo}</if>
|
||||
<if test="settlementStatus != null "> and settlement_status = #{settlementStatus}</if>
|
||||
<if test="params.beginTime != null">
|
||||
AND wagers_time >= #{params.beginTime}
|
||||
</if>
|
||||
<if test="params.endTime != null">
|
||||
AND wagers_time <= #{params.endTime}
|
||||
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
|
@ -67,6 +74,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
where id = #{id}
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectGameBettingDetailsByWagersId" resultType="java.lang.Long">
|
||||
select wagers_id from ff_game_betting_details
|
||||
|
||||
where wagers_id in
|
||||
<foreach item="wagersId" collection="wagersIds" open="(" separator="," close=")">
|
||||
#{wagersId}
|
||||
</foreach>
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<insert id="insertGameBettingDetails" parameterType="GameBettingDetails" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into ff_game_betting_details
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
|
@ -164,4 +183,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into ff_game_betting_details
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
game_id, currency_code, member_id, game_code, game_type, platform_code,
|
||||
game_name, game_status, game_status_type, game_currency_code, account,
|
||||
wagers_id, wagers_time, bet_amount, payoff_time, payoff_amount,
|
||||
settlement_time, turnover, order_no, create_by, create_time
|
||||
</trim>
|
||||
values
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
#{item.gameId},
|
||||
#{item.currencyCode},
|
||||
#{item.memberId},
|
||||
#{item.gameCode},
|
||||
#{item.gameType},
|
||||
#{item.platformCode},
|
||||
#{item.gameName},
|
||||
#{item.gameStatus},
|
||||
#{item.gameStatusType},
|
||||
#{item.gameCurrencyCode},
|
||||
#{item.account},
|
||||
#{item.wagersId},
|
||||
#{item.wagersTime},
|
||||
#{item.betAmount},
|
||||
#{item.payoffTime},
|
||||
#{item.payoffAmount},
|
||||
#{item.settlementTime},
|
||||
#{item.turnover},
|
||||
#{item.orderNo},
|
||||
#{item.createBy},
|
||||
#{item.createTime}
|
||||
</trim>
|
||||
</foreach>
|
||||
</insert>
|
||||
</mapper>
|
||||
|
|
@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<resultMap type="GameFreeRecord" id="GameFreeRecordResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="currencyCode" column="currency_code" />
|
||||
<result property="platformCode" column="platform_code" />
|
||||
<result property="referenceId" column="reference_id" />
|
||||
<result property="memberId" column="member_id" />
|
||||
<result property="memberAccount" column="member_account" />
|
||||
|
|
@ -26,13 +27,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</resultMap>
|
||||
|
||||
<sql id="selectGameFreeRecordVo">
|
||||
select id, currency_code, reference_id, member_id, member_account, game_id, send_time, expired_time, free_update_time, send_game, send_amount, used_amount, unused_amount, free_status, create_by, create_time, update_by, update_time from ff_game_free_record
|
||||
select id, currency_code, platform_code, reference_id, member_id, member_account, game_id, send_time, expired_time, free_update_time, send_game, send_amount, used_amount, unused_amount, free_status, create_by, create_time, update_by, update_time from ff_game_free_record
|
||||
</sql>
|
||||
|
||||
<select id="selectGameFreeRecordList" parameterType="GameFreeRecord" resultMap="GameFreeRecordResult">
|
||||
<include refid="selectGameFreeRecordVo"/>
|
||||
<where>
|
||||
<if test="currencyCode != null and currencyCode != ''"> and currency_code = #{currencyCode}</if>
|
||||
<if test="platformCode != null and platformCode != ''"> and platform_code = #{platformCode}</if>
|
||||
<if test="referenceId != null and referenceId != ''"> and reference_id = #{referenceId}</if>
|
||||
<if test="memberId != null "> and member_id = #{memberId}</if>
|
||||
<if test="memberAccount != null and memberAccount != ''"> and member_account = #{memberAccount}</if>
|
||||
|
|
@ -57,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
insert into ff_game_free_record
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="currencyCode != null">currency_code,</if>
|
||||
<if test="platformCode != null">platform_code,</if>
|
||||
<if test="referenceId != null">reference_id,</if>
|
||||
<if test="memberId != null">member_id,</if>
|
||||
<if test="memberAccount != null">member_account,</if>
|
||||
|
|
@ -76,6 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="currencyCode != null">#{currencyCode},</if>
|
||||
<if test="platformCode != null">#{platformCode},</if>
|
||||
<if test="referenceId != null">#{referenceId},</if>
|
||||
<if test="memberId != null">#{memberId},</if>
|
||||
<if test="memberAccount != null">#{memberAccount},</if>
|
||||
|
|
@ -99,6 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
update ff_game_free_record
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="currencyCode != null">currency_code = #{currencyCode},</if>
|
||||
<if test="platformCode != null">platform_code = #{platformCode},</if>
|
||||
<if test="referenceId != null">reference_id = #{referenceId},</if>
|
||||
<if test="memberId != null">member_id = #{memberId},</if>
|
||||
<if test="memberAccount != null">member_account = #{memberAccount},</if>
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ public enum XKGameType {
|
|||
|
||||
ELECTRON(1, 1L,"电子"),
|
||||
CHESS(2, 2L,"棋牌"),
|
||||
GAME_HALL(3, 0L,"游戏大厅"),
|
||||
GAME_HALL(3, 3L,"游戏大厅"),
|
||||
CATCH_FISH(5, 4L,"捕鱼"),
|
||||
MACHINE(8, 2L,"棋牌")
|
||||
MACHINE(8, 5L,"押分机 (含宾果)")
|
||||
|
||||
;
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in New Issue