refactor(ff-game): 优化游戏结果状态处理逻辑

- 新增游戏状态判断逻辑,根据结算金额确定游戏结果
- 修改 gameStatus 字段赋值方式,提高代码可读性和维护性
main-p
shi 2025-03-17 18:16:42 +08:00
parent c3f21c9b49
commit 0fcf4d0593
4 changed files with 44 additions and 21 deletions

View File

@ -16,12 +16,12 @@ public class RandomGeneratorUtils {
/** /**
* 5-9 * 5-8
* *
* @return {@link String } * @return {@link String }
*/ */
public static String generateRandomAccount() { public static String generateRandomAccount() {
int length = 5 + RANDOM.nextInt(5); int length = 5 + RANDOM.nextInt(4);
StringBuilder sb = new StringBuilder(length); StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
sb.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length()))); sb.append(CHARACTERS.charAt(RANDOM.nextInt(CHARACTERS.length())));

View File

@ -33,6 +33,7 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -106,9 +107,15 @@ public class ApiMemberController extends BaseController {
String gameAccount = StringUtils.addSuffix(memberService.getMemberGameAccount(), tenantSecretKey.getTenantSn()); String gameAccount = StringUtils.addSuffix(memberService.getMemberGameAccount(), tenantSecretKey.getTenantSn());
List<Member> members = memberService.selectMemberList(Member.builder() // 获取用户信息
.tenantKey(tenantSecretKey.getTenantKey()).gameAccount(gameAccount).build()); Member gameMember = memberService.selectMemberByAccount(memberCreateApiRequest.getAccount(), memberCreateApiRequest.getCurrencyCode(), memberCreateApiRequest.getPlatformCode());
if (CollectionUtils.isEmpty(members)) { if (!ObjectUtils.isEmpty(gameMember)){
throw new ApiException(ErrorCode.GAME_ACCOUNT_CREATION_FAILED.getCode());
}
//注册本地账号 //注册本地账号
Member member = Member.builder() Member member = Member.builder()
.tenantKey(tenantSecretKey.getTenantKey()) .tenantKey(tenantSecretKey.getTenantKey())
@ -119,7 +126,7 @@ public class ApiMemberController extends BaseController {
.build(); .build();
int insertMember = memberService.insertMember(member); int insertMember = memberService.insertMember(member);
Assert.isTrue(insertMember > 0, "建立游戏账号失败"); Assert.isTrue(insertMember > 0, "建立游戏账号失败");
}
//向第三方注册账号 //向第三方注册账号
CreateMemberRequestDTO gamesBaseRequestDTO = CreateMemberRequestDTO.builder() CreateMemberRequestDTO gamesBaseRequestDTO = CreateMemberRequestDTO.builder()
.account(gameAccount) .account(gameAccount)
@ -153,9 +160,13 @@ public class ApiMemberController extends BaseController {
ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode()); ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberInfoApiRequest.getAccount(), memberInfoApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
// 获取用户信息
Member member = memberService.selectMemberByAccount(memberInfoApiRequest.getAccount(), memberInfoApiRequest.getCurrencyCode(), memberInfoApiRequest.getPlatformCode());
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode()); ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
//向第三方查询账号 //向第三方查询账号
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder() MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
.accounts(member.getGameAccount()) .accounts(member.getGameAccount())
@ -179,9 +190,8 @@ public class ApiMemberController extends BaseController {
@PostMapping("/info/all") @PostMapping("/info/all")
public AjaxResult infoAll(@Validated @RequestBody MemberInfoAllApiRequest memberInfoAllApiRequest) { public AjaxResult infoAll(@Validated @RequestBody MemberInfoAllApiRequest memberInfoAllApiRequest) {
TenantSecretKey tenantSecretKey = keyConfig.get();
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberInfoAllApiRequest.getAccount(), memberInfoAllApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn()));
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
List<GameSecretKeyCurrencyDTO> gameSecretKeys = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder() List<GameSecretKeyCurrencyDTO> gameSecretKeys = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder()
@ -199,6 +209,12 @@ public class ApiMemberController extends BaseController {
futures.add(threadPoolTaskExecutor.submit(() -> { futures.add(threadPoolTaskExecutor.submit(() -> {
try { try {
IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatformCode() + Constants.SERVICE); IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatformCode() + Constants.SERVICE);
// 获取用户信息
Member member = memberService.selectMemberByAccount(memberInfoAllApiRequest.getAccount(), memberInfoAllApiRequest.getCurrencyCode(), gameSecretKey.getPlatformCode());
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder() MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder()
.accounts(member.getGameAccount()) .accounts(member.getGameAccount())
.agentId(gameSecretKey.getCode()) .agentId(gameSecretKey.getCode())

View File

@ -313,8 +313,14 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService {
ApiException.notNull(tenantPlatform, ErrorCode.PLATFORM_NOT_EXIST.getCode()); ApiException.notNull(tenantPlatform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
// 获取用户信息 // 获取用户信息
Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(gameBalanceExchange.getAccount(), gameBalanceExchange.getCurrencyCode() + tenantSecretKey.getTenantSn())); Member member = memberService.selectMemberByAccount(gameBalanceExchange.getAccount(), gameBalanceExchange.getCurrencyCode(), gameBalanceExchange.getPlatformCode());
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
// 检查用户是否存在,否则抛出异常 // 检查用户是否存在,否则抛出异常
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode()); ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());

View File

@ -99,6 +99,7 @@
<select id="selectMemberByAccount" parameterType="String" resultMap="MemberResult"> <select id="selectMemberByAccount" parameterType="String" resultMap="MemberResult">
<include refid="selectMemberVo"/> <include refid="selectMemberVo"/>
where game_account = #{gameAccount} and platform_code = #{platformCode} and currency_code = #{currencyCode} where member_account = #{account} and platform_code = #{platformCode} and currency_code = #{currencyCode}
limit 1
</select> </select>
</mapper> </mapper>