feat(game): 更新 DG 平台相关功能
- 修改会员游戏账号生成逻辑,支持 DG 平台 - 实现 DG 平台的踢人和踢出所有人的功能 - 更新 DG 平台的注单记录获取逻辑 - 优化 DG 客户端的接口调用main-dg
parent
41a9e3dee4
commit
d293f638bf
|
@ -29,4 +29,23 @@ public class RandomGeneratorUtils {
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成 5-8 之间的随机长度,只包含大写字母和数字
|
||||
*
|
||||
* @return {@link String }
|
||||
*/
|
||||
public static String generateRandomAccountUpper() {
|
||||
int length = 5 + RANDOM.nextInt(4);
|
||||
StringBuilder sb = new StringBuilder(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
char randomChar = CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()));
|
||||
// 转换为大写字母或保持数字
|
||||
if (Character.isLetter(randomChar)) {
|
||||
sb.append(Character.toUpperCase(randomChar));
|
||||
} else {
|
||||
sb.append(randomChar); // 保持数字
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
|
@ -104,7 +104,7 @@ public class ApiMemberController extends BaseController {
|
|||
|
||||
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
||||
|
||||
String gameAccount = StringUtils.addSuffix(memberService.getMemberGameAccount(), tenantSecretKey.getTenantSn());
|
||||
String gameAccount = StringUtils.addSuffix(memberService.getMemberGameAccount(memberCreateApiRequest.getPlatformCode()), tenantSecretKey.getTenantSn());
|
||||
|
||||
|
||||
// 获取用户信息
|
||||
|
|
|
@ -22,7 +22,6 @@ public class MemberCreateApiRequest implements Serializable{
|
|||
|
||||
@NotBlank(message = "account不能为空")
|
||||
@Length(max = 64, message = "account长度不能超过64个字符")
|
||||
@Pattern(regexp = "^[a-z0-9]+$", message = "account只能包含小写字母和数字")
|
||||
private String account;
|
||||
|
||||
/** 平台编码 */
|
||||
|
|
|
@ -45,14 +45,6 @@ public interface DGClient {
|
|||
@Post("/v2/api/login")
|
||||
DGLoginWithoutRedirectResponse loginWithoutRedirect(@JSONBody Map<String, Object> params, @Header Map<String, Object> header);
|
||||
|
||||
/**
|
||||
* 获取游戏列表
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIGamesDTO }
|
||||
*/
|
||||
@Post("/getGameList")
|
||||
XKGamesDTO getGameList(@JSONBody Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 按代理id进行交换转账
|
||||
|
@ -87,19 +79,28 @@ public interface DGClient {
|
|||
* 踢出队员
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIKickMemberDTO }
|
||||
* @return {@link DGResponse }
|
||||
*/
|
||||
@Post("/kickMember")
|
||||
XKKickMemberDTO kickMember(@JSONBody Map<String, Object> params);
|
||||
@Post("/v2/api/offline")
|
||||
DGResponse kickMember(@JSONBody Map<String, Object> params, @Header Map<String, Object> header);
|
||||
|
||||
|
||||
@Post("/v2/api/offlineAll")
|
||||
DGResponse kickMemberAll(@JSONBody Map<String, Object> params, @Header Map<String, Object> header);
|
||||
|
||||
/**
|
||||
* 踢出所有队员
|
||||
* 会员在线
|
||||
*
|
||||
* @param params 参数
|
||||
* @return {@link JILIKickMemberAllDTO }
|
||||
* @return {@link DGUserListResponseDTO }
|
||||
*/
|
||||
@Get("/kickMemberAll")
|
||||
XKKickMemberAllDTO kickMemberAll(@JSONBody Map<String, Object> params);
|
||||
@Post(url ="/v2/api/online",
|
||||
headers = {
|
||||
"Content-type: application/x-www-form-urlencoded"
|
||||
})
|
||||
DGUserListResponseDTO memberOnlines(@Header Map<String, Object> params);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -25,8 +25,8 @@ public class DGBetRecordResponseDTO {
|
|||
private String msg;
|
||||
|
||||
/** 注单报告 */
|
||||
@JsonProperty("report")
|
||||
private List<ReportDTO> report;
|
||||
@JsonProperty("list")
|
||||
private List<ReportDTO> list;
|
||||
|
||||
/**
|
||||
* 注单报告类
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
package com.ff.game.api.dg.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户列表响应类
|
||||
*
|
||||
* @author shi
|
||||
* @date 2025/03/27
|
||||
*/
|
||||
@Data
|
||||
public class DGUserListResponseDTO {
|
||||
|
||||
/**
|
||||
* 响应的代码ID。
|
||||
*/
|
||||
@JsonProperty("codeId")
|
||||
private int codeId;
|
||||
|
||||
/**
|
||||
* 响应的消息。
|
||||
*/
|
||||
@JsonProperty("msg")
|
||||
private String msg;
|
||||
/** 用户列表 */
|
||||
@JsonProperty("list")
|
||||
private List<UserDTO> list;
|
||||
|
||||
/**
|
||||
* 用户信息类
|
||||
*/
|
||||
@Data
|
||||
public static class UserDTO {
|
||||
|
||||
/** 用户名 */
|
||||
@JsonProperty("username")
|
||||
private String username;
|
||||
|
||||
/** 昵称 */
|
||||
@JsonProperty("nickname")
|
||||
private String nickname;
|
||||
|
||||
/** 币种名称 */
|
||||
@JsonProperty("currencyName")
|
||||
private String currencyName;
|
||||
|
||||
/** 用户IP */
|
||||
@JsonProperty("ip")
|
||||
private String ip;
|
||||
|
||||
/** 用户设备 */
|
||||
@JsonProperty("device")
|
||||
private String device;
|
||||
|
||||
/** 登录时间 */
|
||||
@JsonProperty("login")
|
||||
private String login;
|
||||
|
||||
/** 会员ID */
|
||||
@JsonProperty("memberId")
|
||||
private Long memberId;
|
||||
|
||||
/** 用户余额 */
|
||||
@JsonProperty("balance")
|
||||
private Double balance;
|
||||
}
|
||||
}
|
|
@ -280,7 +280,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
.build());
|
||||
|
||||
Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount());
|
||||
String transactionId = GamePlatforms.DG.getCode() + IdUtils.simpleUUID();
|
||||
String transactionId = GamePlatforms.DG.getInfo() + IdUtils.simpleUUID();
|
||||
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
|
||||
GameExchangeMoney.builder()
|
||||
.tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey())
|
||||
|
@ -300,7 +300,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
.currencyCode(currencyDTO.getSystemCurrency())
|
||||
.memberId(member.getId())
|
||||
.transactionId(transactionId)
|
||||
.platformCode(GamePlatforms.DG.getCode())
|
||||
.platformCode(GamePlatforms.DG.getInfo())
|
||||
.build();
|
||||
exchangeMoney.setCreateBy(Constants.SYSTEM);
|
||||
|
||||
|
@ -369,7 +369,6 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
Map<String, Object> key = this.getKey(betRecordByTimeDTO);
|
||||
DGBetRecordResponseDTO betRecordByTime = DGClient.getBetRecordByTime(key);
|
||||
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(betRecordByTime.getCodeId())) {
|
||||
this.batchInsert(betRecordByTime,betRecordByTimeDTO);
|
||||
|
||||
|
@ -424,7 +423,35 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean kickMember(KickMemberRequestDTO kickMemberRequestDTO) {
|
||||
return null;
|
||||
log.info("GamesDGServiceImpl [kickMember] 请求参数 {}", kickMemberRequestDTO);
|
||||
Map<String, Object> key = this.getKey(kickMemberRequestDTO);
|
||||
DGUserListResponseDTO userListResponseDTO = DGClient.memberOnlines(key);
|
||||
if (!this.getIsSuccess(userListResponseDTO.getCodeId())) {
|
||||
throw new ApiException(ErrorCode.KICK_OUT_AILED.getCode());
|
||||
}
|
||||
if (CollectionUtils.isEmpty(userListResponseDTO.getList())){
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
DGUserListResponseDTO.UserDTO userDTO = userListResponseDTO.getList().stream()
|
||||
.filter(user -> user.getUsername().equals(kickMemberRequestDTO.getAccount()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (Objects.isNull(userDTO)){
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
|
||||
List<Long> memberIds = new ArrayList<>();
|
||||
memberIds.add(userDTO.getMemberId());
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("list",memberIds);
|
||||
DGResponse dgResponse = DGClient.kickMember(params, key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(dgResponse.getCodeId())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
throw new BaseException(dgResponse.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -435,7 +462,29 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
*/
|
||||
@Override
|
||||
public Boolean kickMemberAll(KickMemberAllDTO kickMemberAllDTO) {
|
||||
throw new ApiException(ErrorCode.PLATFORM_NOT_METHODS.getCode());
|
||||
log.info("GamesDGServiceImpl [kickMemberAll] 请求参数 {}", kickMemberAllDTO);
|
||||
Map<String, Object> key = this.getKey(kickMemberAllDTO);
|
||||
DGUserListResponseDTO userListResponseDTO = DGClient.memberOnlines(key);
|
||||
if (!this.getIsSuccess(userListResponseDTO.getCodeId())) {
|
||||
throw new ApiException(ErrorCode.KICK_OUT_AILED.getCode());
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(userListResponseDTO.getList())){
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
List<Long> memberIds = userListResponseDTO.getList().stream().map(DGUserListResponseDTO.UserDTO::getMemberId).collect(Collectors.toList());
|
||||
|
||||
|
||||
Map<String, Object> params = new LinkedHashMap<>();
|
||||
params.put("list",memberIds);
|
||||
DGResponse dgResponse = DGClient.kickMember(params, key);
|
||||
//判断是否获取成功
|
||||
if (this.getIsSuccess(dgResponse.getCodeId())) {
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
throw new BaseException(dgResponse.getMsg());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -470,7 +519,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
List<GameBettingDetails> gameBettingDetails = new ArrayList<>();
|
||||
List<String> wagersIds = new ArrayList<>();
|
||||
//数据组装
|
||||
List<DGBetRecordResponseDTO.ReportDTO> report = dgBetRecordResponseDTO.getReport();
|
||||
List<DGBetRecordResponseDTO.ReportDTO> report = dgBetRecordResponseDTO.getList();
|
||||
//数据转化
|
||||
for (DGBetRecordResponseDTO.ReportDTO bean : report) {
|
||||
GameBettingDetails bettingDetails = this.dataBuild(GamesDataBuildDTO.builder().data(bean).build());
|
||||
|
@ -536,6 +585,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
payoffAmount = NumberUtil.sub(resultBean.getWinOrLoss(), resultBean.getBetPoints()).negate();
|
||||
gameStatus = GameStatus.FAIL.getCode();
|
||||
}
|
||||
Game game = gameService.selectGameById(GAME_ID);
|
||||
|
||||
|
||||
//数据构造
|
||||
|
@ -546,9 +596,9 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
.memberId(member.getId())
|
||||
.gameCode(String.valueOf(resultBean.getGameId()))
|
||||
.gameType(PlatformType.CARD_GAME.getCode())
|
||||
.platformCode(GamePlatforms.SA.getCode())
|
||||
.platformCode(GamePlatforms.DG.getInfo())
|
||||
.gameId(GAME_ID)
|
||||
.gameName(String.valueOf(resultBean.getGameId()))
|
||||
.gameName(game.getGameName())
|
||||
.gameStatus(gameStatus)
|
||||
.gameStatusType(resultBean.getGameType())
|
||||
.gameCurrencyCode(currencyDTO.getCurrency())
|
||||
|
@ -556,6 +606,7 @@ public class GamesDGServiceImpl implements IGamesService {
|
|||
.wagersId(String.valueOf(resultBean.getId()))
|
||||
.wagersTime(resultBean.getBetTime().getTime())
|
||||
.betAmount(resultBean.getBetPoints())
|
||||
.betContent(resultBean.getBetDetail())
|
||||
.payoffTime(resultBean.getCalTime().getTime())
|
||||
.payoffAmount(payoffAmount)
|
||||
.settlementTime(resultBean.getCalTime().getTime())
|
||||
|
|
|
@ -32,7 +32,7 @@ public interface IMemberService
|
|||
*
|
||||
* @return {@link String }
|
||||
*/
|
||||
String getMemberGameAccount();
|
||||
String getMemberGameAccount(String platformCode);
|
||||
|
||||
/**
|
||||
* 新增会员
|
||||
|
|
|
@ -3,6 +3,8 @@ package com.ff.member.service.impl;
|
|||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.ff.base.enums.GamePlatforms;
|
||||
import com.ff.base.enums.PlatformType;
|
||||
import com.ff.base.utils.DateUtils;
|
||||
import com.ff.base.utils.RandomGeneratorUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -19,8 +21,7 @@ import org.springframework.util.ObjectUtils;
|
|||
* @date 2025-02-10
|
||||
*/
|
||||
@Service
|
||||
public class MemberServiceImpl implements IMemberService
|
||||
{
|
||||
public class MemberServiceImpl implements IMemberService {
|
||||
@Autowired
|
||||
private MemberMapper memberMapper;
|
||||
|
||||
|
@ -31,8 +32,7 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return 会员
|
||||
*/
|
||||
@Override
|
||||
public Member selectMemberById(Long id)
|
||||
{
|
||||
public Member selectMemberById(Long id) {
|
||||
return memberMapper.selectMemberById(id);
|
||||
}
|
||||
|
||||
|
@ -43,8 +43,7 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return 会员
|
||||
*/
|
||||
@Override
|
||||
public List<Member> selectMemberList(Member member)
|
||||
{
|
||||
public List<Member> selectMemberList(Member member) {
|
||||
return memberMapper.selectMemberList(member);
|
||||
}
|
||||
|
||||
|
@ -54,12 +53,19 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return {@link String }
|
||||
*/
|
||||
@Override
|
||||
public synchronized String getMemberGameAccount() {
|
||||
|
||||
String gameAccount = RandomGeneratorUtils.generateRandomAccount();
|
||||
while (!ObjectUtils.isEmpty(memberMapper.selectMemberByGameAccount(gameAccount))){
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccount();
|
||||
public synchronized String getMemberGameAccount(String platformCode) {
|
||||
String gameAccount = null;
|
||||
if (GamePlatforms.DG.getInfo().equals(platformCode)) {
|
||||
do {
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccountUpper();
|
||||
} while (!ObjectUtils.isEmpty(memberMapper.selectMemberByGameAccount(gameAccount)));
|
||||
} else {
|
||||
do {
|
||||
gameAccount = RandomGeneratorUtils.generateRandomAccount();
|
||||
} while (!ObjectUtils.isEmpty(memberMapper.selectMemberByGameAccount(gameAccount)));
|
||||
}
|
||||
|
||||
|
||||
return gameAccount;
|
||||
}
|
||||
|
||||
|
@ -70,8 +76,7 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertMember(Member member)
|
||||
{
|
||||
public int insertMember(Member member) {
|
||||
member.setId(IdUtil.getSnowflakeNextId());
|
||||
member.setCreateTime(DateUtils.getNowDate());
|
||||
return memberMapper.insertMember(member);
|
||||
|
@ -84,8 +89,7 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateMember(Member member)
|
||||
{
|
||||
public int updateMember(Member member) {
|
||||
member.setUpdateTime(DateUtils.getNowDate());
|
||||
return memberMapper.updateMember(member);
|
||||
}
|
||||
|
@ -97,8 +101,7 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteMemberByIds(Long[] ids)
|
||||
{
|
||||
public int deleteMemberByIds(Long[] ids) {
|
||||
return memberMapper.deleteMemberByIds(ids);
|
||||
}
|
||||
|
||||
|
@ -109,13 +112,11 @@ public class MemberServiceImpl implements IMemberService
|
|||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteMemberById(Long id)
|
||||
{
|
||||
public int deleteMemberById(Long id) {
|
||||
return memberMapper.deleteMemberById(id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 按游戏帐户选择成员
|
||||
*
|
||||
|
@ -137,6 +138,6 @@ public class MemberServiceImpl implements IMemberService
|
|||
*/
|
||||
@Override
|
||||
public Member selectMemberByAccount(String account, String currencyCode, String platformCode) {
|
||||
return memberMapper.selectMemberByAccount(account,currencyCode,platformCode);
|
||||
return memberMapper.selectMemberByAccount(account, currencyCode, platformCode);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue