2025-02-11 15:27:15 +08:00
|
|
|
|
package com.ff.api.controller;
|
|
|
|
|
|
|
|
|
|
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import com.ff.annotation.CheckHeader;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
import com.ff.api.request.*;
|
2025-02-18 11:24:27 +08:00
|
|
|
|
import com.ff.api.response.*;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import com.ff.base.constant.Constants;
|
|
|
|
|
import com.ff.base.core.controller.BaseController;
|
|
|
|
|
import com.ff.base.core.domain.AjaxResult;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
import com.ff.base.core.page.TableDataInfo;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import com.ff.base.enums.*;
|
2025-02-19 16:41:44 +08:00
|
|
|
|
import com.ff.base.exception.base.ApiException;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import com.ff.base.manager.AsyncManager;
|
2025-04-03 14:34:49 +08:00
|
|
|
|
import com.ff.base.system.domain.TenantSecretKey;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import com.ff.base.utils.StringUtils;
|
2025-02-13 16:52:54 +08:00
|
|
|
|
import com.ff.base.utils.bean.BeanUtils;
|
2025-02-21 14:39:21 +08:00
|
|
|
|
import com.ff.common.dto.GameBalanceExchange;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import com.ff.config.KeyConfig;
|
|
|
|
|
import com.ff.game.api.IGamesService;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import com.ff.game.api.exchange.StepProcessorFactory;
|
|
|
|
|
import com.ff.game.api.exchange.dto.GameExchangeDTO;
|
2025-02-12 13:42:52 +08:00
|
|
|
|
import com.ff.game.api.request.*;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
import com.ff.game.domain.*;
|
2025-03-24 14:00:45 +08:00
|
|
|
|
import com.ff.game.dto.GameBettingDetailsDTO;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
import com.ff.game.service.*;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import com.ff.member.domain.Member;
|
|
|
|
|
import com.ff.member.service.IMemberService;
|
2025-04-12 14:35:41 +08:00
|
|
|
|
import com.ff.tenant.service.ITenantGameQuotaBiz;
|
|
|
|
|
import com.ff.tenant.service.ITenantGameQuotaService;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
import com.github.pagehelper.PageHelper;
|
2025-04-03 14:34:49 +08:00
|
|
|
|
import lombok.Data;
|
2025-02-14 17:31:52 +08:00
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
2025-02-14 17:31:52 +08:00
|
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import org.springframework.http.ResponseEntity;
|
2025-02-14 17:31:52 +08:00
|
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
2025-02-12 13:42:52 +08:00
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import org.springframework.util.Assert;
|
2025-03-14 17:40:09 +08:00
|
|
|
|
import org.springframework.util.CollectionUtils;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
import org.springframework.util.ObjectUtils;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import org.springframework.web.context.request.async.DeferredResult;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
2025-02-12 13:42:52 +08:00
|
|
|
|
import java.math.BigDecimal;
|
2025-04-03 14:34:49 +08:00
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
2025-04-11 10:52:17 +08:00
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* api控制器
|
|
|
|
|
*
|
|
|
|
|
* @author shi
|
|
|
|
|
* @date 2025/02/10
|
|
|
|
|
*/
|
|
|
|
|
@RestController
|
|
|
|
|
@CheckHeader
|
|
|
|
|
@RequestMapping("/api/game")
|
2025-02-14 17:31:52 +08:00
|
|
|
|
@Slf4j
|
2025-02-11 15:27:15 +08:00
|
|
|
|
public class ApiGameController extends BaseController {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private Map<String, IGamesService> gamesService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private IGameService gameService;
|
2025-04-12 14:35:41 +08:00
|
|
|
|
@Resource
|
|
|
|
|
private IGameBiz gameBiz;
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private KeyConfig keyConfig;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private IMemberService memberService;
|
|
|
|
|
|
2025-02-12 13:42:52 +08:00
|
|
|
|
@Resource
|
2025-04-12 15:06:38 +08:00
|
|
|
|
private ITenantGameQuotaBiz tenantGameQuotaService;
|
2025-04-12 14:35:41 +08:00
|
|
|
|
@Resource
|
|
|
|
|
private ITenantGameQuotaBiz tenantGameQuotaBiz;
|
2025-02-12 13:42:52 +08:00
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
@Resource
|
|
|
|
|
private IGameBettingDetailsService gameBettingDetailsService;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private IGameFreeRecordService gameFreeRecordService;
|
2025-02-13 16:52:54 +08:00
|
|
|
|
@Resource
|
|
|
|
|
private IGameExchangeMoneyService gameExchangeMoneyService;
|
2025-02-12 13:42:52 +08:00
|
|
|
|
|
2025-02-14 17:31:52 +08:00
|
|
|
|
@Autowired
|
|
|
|
|
@Qualifier("threadPoolTaskExecutor")
|
|
|
|
|
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
|
|
|
|
|
2025-04-12 14:35:41 +08:00
|
|
|
|
@Resource
|
|
|
|
|
private IPlatformBiz platformBiz;
|
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
@Resource
|
|
|
|
|
private IPlatformService platformService;
|
2025-02-17 11:28:17 +08:00
|
|
|
|
|
2025-04-11 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StepProcessorFactory stepProcessorFactory;
|
|
|
|
|
|
2025-02-17 11:28:17 +08:00
|
|
|
|
/**
|
|
|
|
|
* 列表
|
|
|
|
|
*
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/list")
|
|
|
|
|
public AjaxResult list() {
|
2025-04-12 14:35:41 +08:00
|
|
|
|
List<GameResponse> gameResponses = gameBiz.selectGameResponseList();
|
2025-04-03 14:34:49 +08:00
|
|
|
|
for (GameResponse gameResponse : gameResponses) {
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(gameResponse.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
if (null == platform) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<String> currencyCode = new ArrayList<>(platform.getCurrencyInfo().keySet());
|
|
|
|
|
gameResponse.setCurrencyCode(currencyCode);
|
2025-04-08 17:12:40 +08:00
|
|
|
|
|
2025-02-17 11:28:17 +08:00
|
|
|
|
}
|
|
|
|
|
return AjaxResult.success(gameResponses);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-02-11 15:27:15 +08:00
|
|
|
|
/**
|
|
|
|
|
* 登录
|
|
|
|
|
*
|
2025-04-03 14:34:49 +08:00
|
|
|
|
* @param loginRequest 登入游戏
|
2025-02-11 15:27:15 +08:00
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/login")
|
2025-04-03 14:34:49 +08:00
|
|
|
|
public AjaxResult login(@Validated @RequestBody GameLoginRequest loginRequest) {
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
2025-04-08 17:12:40 +08:00
|
|
|
|
Game game = gameService.selectGameByGameId(loginRequest.getGameId());
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(game, ErrorCode.GAME_NOT_EXIST.getCode());
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(game.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
IGamesService iGamesService = gamesService.get(platform.getPlatformCode() + Constants.SERVICE);
|
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(loginRequest.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(loginRequest.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(loginRequest.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
String targetLang = platform.getLangInfo().get(loginRequest.getLangCode());
|
|
|
|
|
ApiException.notNull(targetLang, ErrorCode.LANG_NOT_EXIST.getCode());
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
Member member = memberService.selectMemberByAccount(loginRequest.getAccount(), loginRequest.getCurrencyCode(), platform.getPlatformCode());
|
2025-03-25 17:04:25 +08:00
|
|
|
|
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
|
|
|
|
GamesLogin gamesLogin = GamesLogin.builder()
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
2025-02-11 15:27:15 +08:00
|
|
|
|
.account(member.getGameAccount())
|
2025-03-12 17:55:57 +08:00
|
|
|
|
.gameType(game.getGameSourceType())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.currency(/*secretKeyCurrencyDTO.getCurrency()*/targetCurrency)
|
2025-02-11 15:27:15 +08:00
|
|
|
|
.gameId(game.getGameCode())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.homeUrl(loginRequest.getHomeUrl())
|
|
|
|
|
.betLimit(loginRequest.getBetLimit())
|
|
|
|
|
.platform(loginRequest.getPlatform())
|
|
|
|
|
.disableFullScreen(loginRequest.getDisableFullScreen())
|
|
|
|
|
.lang(/*gameSecretKeyLangDTO.getLang()*/ targetLang)
|
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(loginRequest.getCurrencyCode())
|
|
|
|
|
|
2025-02-11 15:27:15 +08:00
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
String login = iGamesService.loginWithoutRedirect(gamesLogin);
|
|
|
|
|
|
2025-02-17 11:28:17 +08:00
|
|
|
|
return AjaxResult.success("操作成功", login);
|
2025-02-11 15:27:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-02-12 13:42:52 +08:00
|
|
|
|
/**
|
|
|
|
|
* 汇兑差额
|
|
|
|
|
*
|
|
|
|
|
* @param gameExchangeBalanceRequest 游戏兑换余额请求
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/exchange/balance")
|
2025-04-11 10:52:17 +08:00
|
|
|
|
public DeferredResult<AjaxResult> exchangeBalance(@Validated @RequestBody GameExchangeBalanceRequest gameExchangeBalanceRequest) {
|
2025-02-12 13:42:52 +08:00
|
|
|
|
|
|
|
|
|
IGamesService iGamesService = gamesService.get(gameExchangeBalanceRequest.getPlatformCode() + Constants.SERVICE);
|
2025-02-21 14:39:21 +08:00
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
2025-02-12 13:42:52 +08:00
|
|
|
|
TenantSecretKey tenantSecretKey = keyConfig.get();
|
2025-02-21 14:39:21 +08:00
|
|
|
|
|
2025-03-14 13:31:17 +08:00
|
|
|
|
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(gameExchangeBalanceRequest.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(gameExchangeBalanceRequest.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(gameExchangeBalanceRequest.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(gameExchangeBalanceRequest.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-04-08 17:12:40 +08:00
|
|
|
|
BigDecimal quota = BigDecimal.ZERO;
|
|
|
|
|
//如果是扣钱提前扣
|
|
|
|
|
if (TransferType.GAMES.getCode().equals(gameExchangeBalanceRequest.getTransferType())) {
|
2025-04-12 14:50:20 +08:00
|
|
|
|
quota = tenantGameQuotaService.gameBalanceExchange(GameBalanceExchange.builder()
|
2025-04-08 17:12:40 +08:00
|
|
|
|
.platformCode(gameExchangeBalanceRequest.getPlatformCode())
|
|
|
|
|
.sourceId(gameExchangeBalanceRequest.getOrderId())
|
|
|
|
|
.currencyCode(gameExchangeBalanceRequest.getCurrencyCode())
|
|
|
|
|
.currency(targetCurrency)
|
|
|
|
|
.transferType(gameExchangeBalanceRequest.getTransferType())
|
|
|
|
|
.amount(gameExchangeBalanceRequest.getAmount())
|
|
|
|
|
.account(gameExchangeBalanceRequest.getAccount())
|
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
|
|
|
|
.systemCurrency(gameExchangeBalanceRequest.getCurrencyCode())
|
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
|
|
|
|
.build());
|
|
|
|
|
}
|
2025-02-12 13:42:52 +08:00
|
|
|
|
|
|
|
|
|
|
2025-02-21 14:39:21 +08:00
|
|
|
|
// 获取用户信息
|
2025-03-17 14:10:02 +08:00
|
|
|
|
Member member = memberService.selectMemberByAccount(gameExchangeBalanceRequest.getAccount(), gameExchangeBalanceRequest.getCurrencyCode(), gameExchangeBalanceRequest.getPlatformCode());
|
|
|
|
|
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
2025-02-12 13:42:52 +08:00
|
|
|
|
|
2025-04-11 10:52:17 +08:00
|
|
|
|
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(
|
|
|
|
|
GameExchangeMoney.builder()
|
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
|
|
|
|
.orderId(gameExchangeBalanceRequest.getOrderId())
|
|
|
|
|
.build()
|
|
|
|
|
);
|
2025-02-21 14:39:21 +08:00
|
|
|
|
|
2025-04-11 10:52:17 +08:00
|
|
|
|
ApiException.isTrue(CollectionUtils.isEmpty(gameExchangeMonies), ErrorCode.DUPLICATE_ORDER_ID.getCode());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Long gameExchangeMoneyId = IdUtil.getSnowflakeNextId();
|
|
|
|
|
GameExchangeDTO exchangeMoney = GameExchangeDTO.builder()
|
|
|
|
|
.id(gameExchangeMoneyId)
|
2025-02-14 17:31:52 +08:00
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
2025-04-11 10:52:17 +08:00
|
|
|
|
.memberId(member.getId())
|
|
|
|
|
.gameAccount(member.getGameAccount())
|
|
|
|
|
.memberAccount(member.getMemberAccount())
|
|
|
|
|
.exchangeType(gameExchangeBalanceRequest.getTransferType())
|
|
|
|
|
.currencyCode(gameExchangeBalanceRequest.getCurrencyCode())
|
|
|
|
|
.orderId(gameExchangeBalanceRequest.getOrderId())
|
|
|
|
|
.balance(gameExchangeBalanceRequest.getAmount())
|
|
|
|
|
.triggerType(TriggerType.MANUAL.getCode())
|
|
|
|
|
.platformCode(gameExchangeBalanceRequest.getPlatformCode()).build();
|
2025-04-07 10:15:35 +08:00
|
|
|
|
|
2025-04-11 10:52:17 +08:00
|
|
|
|
|
|
|
|
|
//转出设置转出金额为0
|
|
|
|
|
if (TransferType.ALL.getCode().equals(gameExchangeBalanceRequest.getTransferType())){
|
|
|
|
|
exchangeMoney.setBalance(BigDecimal.ZERO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ExtInfo extInfo = platform.getExtInfo();
|
|
|
|
|
Long timeout = 5000L;
|
|
|
|
|
if (extInfo != null) {
|
|
|
|
|
timeout = extInfo.getTimeout(TimeOutType.GAME_EXCHANGE_MONEY.getCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DeferredResult<AjaxResult> output = new DeferredResult<>(timeout);
|
|
|
|
|
AsyncManager.me().executeOrdered(
|
|
|
|
|
exchangeMoney.getOrderId(),
|
|
|
|
|
() -> {
|
|
|
|
|
try {
|
|
|
|
|
stepProcessorFactory.getStepProcessor(GameExchangeStep.CREATE_ORDER).process(exchangeMoney);
|
|
|
|
|
|
|
|
|
|
GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(gameExchangeMoneyId);
|
|
|
|
|
GameExchangeBalanceResponse gameExchangeBalanceResponse = new GameExchangeBalanceResponse();
|
|
|
|
|
BeanUtils.copyProperties(gameExchangeMoney, gameExchangeBalanceResponse);
|
|
|
|
|
output.setResult(AjaxResult.success(gameExchangeBalanceResponse));
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("ApiGameController [exchangeBalance] 余额转移失败 gameExchangeMoneyId {}", gameExchangeMoneyId,e);
|
|
|
|
|
stepProcessorFactory.getStepProcessor(GameExchangeStep.getByCode(exchangeMoney.getStep())).rollBack(exchangeMoney);
|
|
|
|
|
output.setErrorResult(AjaxResult.error(ErrorCode.BALANCE_TRANSFER_FAILED.getCode(), ErrorCode.BALANCE_TRANSFER_FAILED.getMessage()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
// 超时时间处理逻辑
|
|
|
|
|
output.onTimeout(() -> {
|
|
|
|
|
GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(gameExchangeMoneyId);
|
|
|
|
|
GameExchangeBalanceResponse gameExchangeBalanceResponse = new GameExchangeBalanceResponse();
|
|
|
|
|
BeanUtils.copyProperties(gameExchangeMoney, gameExchangeBalanceResponse);
|
|
|
|
|
output.setErrorResult(AjaxResult.success(gameExchangeBalanceResponse));
|
|
|
|
|
});
|
|
|
|
|
return output;
|
2025-02-12 13:42:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-11 15:27:15 +08:00
|
|
|
|
|
2025-03-14 17:40:09 +08:00
|
|
|
|
/**
|
|
|
|
|
* 交换状态
|
|
|
|
|
*
|
|
|
|
|
* @param gameExchangeStateRequest 游戏兑换余额状态请求
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/exchange/state")
|
|
|
|
|
@Transactional
|
|
|
|
|
public AjaxResult exchangeState(@Validated @RequestBody GameExchangeStateRequest gameExchangeStateRequest) {
|
|
|
|
|
TenantSecretKey tenantSecretKey = keyConfig.get();
|
|
|
|
|
GameExchangeMoney gameExchangeMoney = GameExchangeMoney.builder()
|
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
|
|
|
|
.orderId(gameExchangeStateRequest.getOrderId())
|
|
|
|
|
.build();
|
|
|
|
|
List<GameExchangeMoney> gameExchangeMonies = gameExchangeMoneyService.selectGameExchangeMoneyList(gameExchangeMoney);
|
|
|
|
|
ApiException.isTrue(!CollectionUtils.isEmpty(gameExchangeMonies), ErrorCode.ORDER_NOT_EXIST.getCode());
|
|
|
|
|
GameExchangeBalanceResponse gameExchangeBalanceResponse = new GameExchangeBalanceResponse();
|
|
|
|
|
BeanUtils.copyProperties(gameExchangeMonies.get(0), gameExchangeBalanceResponse);
|
|
|
|
|
return AjaxResult.success(gameExchangeBalanceResponse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
/**
|
|
|
|
|
* 赠送免费局数
|
|
|
|
|
*
|
|
|
|
|
* @param gameCreateFreeSpinRequest 游戏创建免费旋转请求
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/create/free/spin")
|
|
|
|
|
public AjaxResult createFreeSpin(@Validated @RequestBody GameCreateFreeSpinRequest gameCreateFreeSpinRequest) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IGamesService iGamesService = gamesService.get(gameCreateFreeSpinRequest.getPlatformCode() + Constants.SERVICE);
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
|
|
|
|
|
2025-04-12 14:50:20 +08:00
|
|
|
|
Platform platform = platformBiz.get(gameCreateFreeSpinRequest.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(gameCreateFreeSpinRequest.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(gameCreateFreeSpinRequest.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(gameCreateFreeSpinRequest.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-03-17 14:10:02 +08:00
|
|
|
|
|
|
|
|
|
Member member = memberService.selectMemberByAccount(gameCreateFreeSpinRequest.getAccount(), gameCreateFreeSpinRequest.getCurrencyCode(), gameCreateFreeSpinRequest.getPlatformCode());
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
2025-03-17 14:10:02 +08:00
|
|
|
|
|
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
CreateFreeSpinRequestDTO createFreeSpinRequestDTO = CreateFreeSpinRequestDTO.builder()
|
|
|
|
|
.account(member.getGameAccount())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.currency(/*gameCreateFreeSpinRequest.getCurrencyCode()*/targetCurrency)
|
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.referenceId(gameCreateFreeSpinRequest.getReferenceId())
|
|
|
|
|
.freeSpinValidity(gameCreateFreeSpinRequest.getFreeSpinValidity())
|
|
|
|
|
.numberOfRounds(gameCreateFreeSpinRequest.getNumberOfRounds())
|
|
|
|
|
.gameIds(gameCreateFreeSpinRequest.getGameIds())
|
|
|
|
|
.betValue(gameCreateFreeSpinRequest.getBetValue())
|
|
|
|
|
.startTime(gameCreateFreeSpinRequest.getStartTime())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(gameCreateFreeSpinRequest.getCurrencyCode())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return AjaxResult.success(iGamesService.createFreeSpin(createFreeSpinRequestDTO));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取投注记录
|
|
|
|
|
*
|
|
|
|
|
* @param gameCreateFreeSpinRequest 游戏创建免费旋转请求
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/get/bet/record")
|
2025-02-14 17:31:52 +08:00
|
|
|
|
public TableDataInfo getBetRecord(@Validated @RequestBody GameGetBetRecordRequest gameCreateFreeSpinRequest) {
|
2025-02-17 15:03:59 +08:00
|
|
|
|
TenantSecretKey tenantSecretKey = keyConfig.get();
|
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
startPage();
|
|
|
|
|
PageHelper.startPage(gameCreateFreeSpinRequest.getPageNo(), gameCreateFreeSpinRequest.getPageSize(), "wagers_time desc");
|
2025-03-24 14:00:45 +08:00
|
|
|
|
GameBettingDetailsDTO gameBettingDetails = GameBettingDetailsDTO.builder()
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.platformCode(gameCreateFreeSpinRequest.getPlatformCode())
|
|
|
|
|
.currencyCode(gameCreateFreeSpinRequest.getCurrencyCode())
|
2025-02-17 15:03:59 +08:00
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
2025-03-24 14:00:45 +08:00
|
|
|
|
.timeType(gameCreateFreeSpinRequest.getTimeType())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.build();
|
|
|
|
|
Map<String, Object> params = gameBettingDetails.getParams();
|
|
|
|
|
params.put("beginTime", gameCreateFreeSpinRequest.getBeginTime());
|
|
|
|
|
params.put("endTime", gameCreateFreeSpinRequest.getEndTime());
|
|
|
|
|
List<GameBettingDetails> bettingDetails = gameBettingDetailsService.selectGameBettingDetailsList(gameBettingDetails);
|
2025-02-17 15:03:59 +08:00
|
|
|
|
TableDataInfo dataTable = getDataTable(bettingDetails);
|
2025-02-21 14:39:21 +08:00
|
|
|
|
List<GameBettingDetailsResponse> result = new ArrayList<>();
|
2025-02-17 15:03:59 +08:00
|
|
|
|
for (GameBettingDetails row : (List<GameBettingDetails>) dataTable.getRows()) {
|
2025-02-21 14:39:21 +08:00
|
|
|
|
GameBettingDetailsResponse gameBettingDetailsResponse = new GameBettingDetailsResponse();
|
2025-02-17 15:03:59 +08:00
|
|
|
|
BeanUtils.copyProperties(row, gameBettingDetailsResponse);
|
|
|
|
|
Member member = memberService.selectMemberById(row.getMemberId());
|
|
|
|
|
gameBettingDetailsResponse.setAccount(member.getMemberAccount());
|
|
|
|
|
result.add(gameBettingDetailsResponse);
|
|
|
|
|
}
|
|
|
|
|
dataTable.setRows(result);
|
|
|
|
|
|
|
|
|
|
return dataTable;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取详细信息
|
|
|
|
|
*
|
|
|
|
|
* @param gameGetDetailRequest 游戏获取详细信息请求
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/get/detail")
|
|
|
|
|
public AjaxResult getDetail(@Validated @RequestBody GameGetDetailRequest gameGetDetailRequest) {
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(gameGetDetailRequest.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(gameGetDetailRequest.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(gameGetDetailRequest.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(gameGetDetailRequest.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
String targetLang = platform.getLangInfo().get(gameGetDetailRequest.getLangCode());
|
|
|
|
|
ApiException.notNull(targetLang, ErrorCode.LANG_NOT_EXIST.getCode());
|
2025-02-18 11:24:27 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
|
|
|
|
// .platformCode(gameGetDetailRequest.getPlatformCode())
|
|
|
|
|
// .systemCurrency(gameGetDetailRequest.getCurrencyCode()).build());
|
2025-03-14 13:31:17 +08:00
|
|
|
|
|
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IGamesService iGamesService = gamesService.get(gameGetDetailRequest.getPlatformCode() + Constants.SERVICE);
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
2025-03-14 13:31:17 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// GameSecretKeyLangDTO gameSecretKeyLang = gameSecretKeyLangService.findGameSecretKeyLangDTO(GameSecretKeyLangDTO.builder()
|
|
|
|
|
// .platformCode(gameGetDetailRequest.getPlatformCode())
|
|
|
|
|
// .systemLangCode(gameGetDetailRequest.getLangCode())
|
|
|
|
|
// .build());
|
|
|
|
|
// ApiException.notNull(gameSecretKeyLang, ErrorCode.LANG_NOT_EXIST.getCode());
|
2025-03-14 13:31:17 +08:00
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
|
|
|
|
GetGameDetailResponseDTO gameDetail = iGamesService.getGameDetail(GetGameDetailRequestDTO.builder()
|
|
|
|
|
.wagersId(gameGetDetailRequest.getWagersId())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.lang(/*gameSecretKeyLang.getLang()*/targetLang)
|
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(gameGetDetailRequest.getCurrencyCode())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.build());
|
|
|
|
|
return AjaxResult.success(gameDetail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 踢腿队员
|
|
|
|
|
*
|
|
|
|
|
* @param gameKickMemeberRequest 游戏踢迷请求
|
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/kick/member")
|
|
|
|
|
public AjaxResult kickMember(@Validated @RequestBody GameKickMemeberRequest gameKickMemeberRequest) {
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
|
|
|
|
// .platformCode(gameKickMemeberRequest.getPlatformCode())
|
|
|
|
|
// .systemCurrency(gameKickMemeberRequest.getCurrencyCode()).build());
|
|
|
|
|
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(gameKickMemeberRequest.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(gameKickMemeberRequest.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(gameKickMemeberRequest.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(gameKickMemeberRequest.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
2025-03-17 14:10:02 +08:00
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
IGamesService iGamesService = gamesService.get(gameKickMemeberRequest.getPlatformCode() + Constants.SERVICE);
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
Member member = memberService.selectMemberByAccount(gameKickMemeberRequest.getAccount(), gameKickMemeberRequest.getCurrencyCode(), gameKickMemeberRequest.getPlatformCode());
|
|
|
|
|
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
return AjaxResult.success(iGamesService.kickMember(KickMemberRequestDTO.builder()
|
|
|
|
|
.account(member.getGameAccount())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.currency(targetCurrency)
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(gameKickMemeberRequest.getCurrencyCode())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.build()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@PostMapping("/kick/member/all")
|
|
|
|
|
public AjaxResult kickMemberAll(@Validated @RequestBody GameKickMemeberAllRequest gameKickMemeberAllRequest) {
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
|
|
|
|
// .platformCode(gameKickMemeberAllRequest.getPlatformCode())
|
|
|
|
|
// .systemCurrency(gameKickMemeberAllRequest.getCurrencyCode()).build());
|
|
|
|
|
//
|
|
|
|
|
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(gameKickMemeberAllRequest.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(gameKickMemeberAllRequest.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(gameKickMemeberAllRequest.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(gameKickMemeberAllRequest.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
|
|
|
|
IGamesService iGamesService = gamesService.get(gameKickMemeberAllRequest.getPlatformCode() + Constants.SERVICE);
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
2025-03-25 17:04:25 +08:00
|
|
|
|
|
2025-02-13 15:43:13 +08:00
|
|
|
|
KickMemberAllDTO kickMemberAllDTO = KickMemberAllDTO.builder()
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
|
|
|
|
.currency(/*gameSecretKey.getCurrency()*/targetCurrency)
|
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(gameKickMemeberAllRequest.getCurrencyCode())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.build();
|
|
|
|
|
if (!ObjectUtils.isEmpty(gameKickMemeberAllRequest.getGameId())) {
|
|
|
|
|
Game game = gameService.selectGameById(gameKickMemeberAllRequest.getGameId());
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(game, ErrorCode.GAME_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
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");
|
2025-02-18 11:24:27 +08:00
|
|
|
|
GameFreeRecord gameFreeRecord = GameFreeRecord.builder()
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.gameId(gameGetFreeSpinDashflowRequest.getGameId())
|
|
|
|
|
.platformCode(gameGetFreeSpinDashflowRequest.getPlatformCode())
|
|
|
|
|
.currencyCode(gameGetFreeSpinDashflowRequest.getCurrencyCode())
|
2025-02-18 11:24:27 +08:00
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
Map<String, Object> params = gameFreeRecord.getParams();
|
|
|
|
|
params.put("beginTime", gameGetFreeSpinDashflowRequest.getBeginTime());
|
|
|
|
|
params.put("endTime", gameGetFreeSpinDashflowRequest.getEndTime());
|
|
|
|
|
List<GameFreeRecord> gameFreeRecords = gameFreeRecordService.selectGameFreeRecordList(gameFreeRecord);
|
|
|
|
|
TableDataInfo dataTable = getDataTable(gameFreeRecords);
|
2025-02-21 14:39:21 +08:00
|
|
|
|
List<GameFreeRecordResponse> result = new ArrayList<>();
|
2025-02-18 11:24:27 +08:00
|
|
|
|
for (GameFreeRecord row : (List<GameFreeRecord>) dataTable.getRows()) {
|
2025-02-21 14:39:21 +08:00
|
|
|
|
GameFreeRecordResponse gameFreeRecordResponse = new GameFreeRecordResponse();
|
2025-02-18 11:24:27 +08:00
|
|
|
|
BeanUtils.copyProperties(row, gameFreeRecordResponse);
|
|
|
|
|
Member member = memberService.selectMemberById(row.getMemberId());
|
|
|
|
|
gameFreeRecordResponse.setMemberAccount(member.getMemberAccount());
|
|
|
|
|
result.add(gameFreeRecordResponse);
|
|
|
|
|
}
|
|
|
|
|
dataTable.setRows(result);
|
|
|
|
|
return dataTable;
|
2025-02-13 15:43:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 取消自由旋转
|
|
|
|
|
*
|
2025-04-03 14:34:49 +08:00
|
|
|
|
* @param request 游戏获得免费旋转dashflow请求
|
2025-02-13 15:43:13 +08:00
|
|
|
|
* @return {@link TableDataInfo }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/cancel/free/spin")
|
2025-04-03 14:34:49 +08:00
|
|
|
|
public AjaxResult cancelFreeSpin(@Validated @RequestBody GameCancelFreeSpinRequest request) {
|
|
|
|
|
// GameSecretKeyCurrencyDTO gameSecretKey = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTO(GameSecretKeyCurrencyDTO.builder()
|
|
|
|
|
// .platformCode(gameGetFreeSpinDashflowRequest.getPlatformCode())
|
|
|
|
|
// .systemCurrency(gameGetFreeSpinDashflowRequest.getCurrencyCode()).build());
|
|
|
|
|
// ApiException.notNull(gameSecretKey, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(request.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(request.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(request.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(request.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
IGamesService iGamesService = gamesService.get(request.getPlatformCode() + Constants.SERVICE);
|
2025-02-19 16:41:44 +08:00
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-02-13 15:43:13 +08:00
|
|
|
|
|
|
|
|
|
Boolean cancelFreeSpin = iGamesService.cancelFreeSpin(CancelFreeSpinRequestDTO.builder()
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.agentId(keyInfo.getCode())
|
|
|
|
|
.agentKey(keyInfo.getKey())
|
|
|
|
|
.referenceId(request.getReferenceId())
|
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(request.getCurrencyCode())
|
2025-02-13 15:43:13 +08:00
|
|
|
|
.build());
|
|
|
|
|
return AjaxResult.success(cancelFreeSpin);
|
|
|
|
|
}
|
2025-02-14 17:31:52 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 信息全部
|
|
|
|
|
*
|
2025-04-03 14:34:49 +08:00
|
|
|
|
* @param request 成员信息所有api请求
|
2025-02-14 17:31:52 +08:00
|
|
|
|
* @return {@link AjaxResult }
|
2025-04-07 15:22:04 +08:00
|
|
|
|
*//*
|
2025-02-14 17:31:52 +08:00
|
|
|
|
@PostMapping("/exchange/balance/all")
|
2025-04-03 14:34:49 +08:00
|
|
|
|
public AjaxResult exchangeBalanceAll(@Validated @RequestBody GameExchangeBalanceAllRequest request) {
|
2025-02-14 17:31:52 +08:00
|
|
|
|
|
|
|
|
|
TenantSecretKey tenantSecretKey = keyConfig.get();
|
2025-03-17 14:10:02 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// List<GameSecretKeyCurrencyDTO> gameSecretKeys = gameSecretKeyCurrencyService.findByGameSecretKeyCurrencyDTOList(GameSecretKeyCurrencyDTO.builder()
|
|
|
|
|
// .systemCurrency(gameExchangeBalanceAllRequest.getCurrencyCode()).build());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Key> keys = new ArrayList<>();
|
|
|
|
|
for (GamePlatforms platformEnum : GamePlatforms.values()) {
|
2025-02-14 17:31:52 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
Platform platform = platformService.get(platformEnum.getCode());
|
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(request.getCurrencyCode());
|
|
|
|
|
if (StringUtils.isEmpty(targetCurrency)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(request.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(request.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (null == keyInfo) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Key key = new Key();
|
|
|
|
|
key.setPlatformCode(platform.getPlatformCode());
|
|
|
|
|
key.setCode(keyInfo.getCode());
|
|
|
|
|
key.setKey(keyInfo.getKey());
|
|
|
|
|
key.setCurrency(targetCurrency);
|
|
|
|
|
key.setPlatform(platform);
|
|
|
|
|
key.setKeyInfo(keyInfo);
|
2025-04-07 10:15:35 +08:00
|
|
|
|
key.setSystemCurrency(request.getCurrencyCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
keys.add(key);
|
|
|
|
|
}
|
2025-02-14 17:31:52 +08:00
|
|
|
|
|
|
|
|
|
// 创建线程池
|
|
|
|
|
Map<String, BigDecimal> balanceMap = new LinkedHashMap<>();
|
2025-04-03 14:34:49 +08:00
|
|
|
|
CountDownLatch latch = new CountDownLatch(keys.size());
|
2025-02-14 17:31:52 +08:00
|
|
|
|
|
|
|
|
|
// 使用List存储Future对象,用于获取异步执行的结果
|
|
|
|
|
List<Future<Long>> futures = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
// 提交异步任务到线程池
|
2025-04-03 14:34:49 +08:00
|
|
|
|
// for (GameSecretKeyCurrencyDTO gameSecretKeyCurrencyDTO : gameSecretKeys) {
|
|
|
|
|
for (Key key : keys) {
|
2025-02-14 17:31:52 +08:00
|
|
|
|
futures.add(threadPoolTaskExecutor.submit(() -> {
|
|
|
|
|
try {
|
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
IGamesService iGamesService = gamesService.get(key.getPlatformCode() + Constants.SERVICE);
|
2025-03-17 14:10:02 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
Member member = memberService.selectMemberByAccount(request.getAccount(), request.getCurrencyCode(), key.getPlatformCode());
|
2025-03-17 14:10:02 +08:00
|
|
|
|
ApiException.notNull(member, ErrorCode.ACCOUNT_NOT_EXIST.getCode());
|
|
|
|
|
|
2025-02-14 17:31:52 +08:00
|
|
|
|
//操作第三方钱包
|
|
|
|
|
ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO = ExchangeTransferMoneyRequestDTO.builder()
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.agentId(key.getCode())
|
|
|
|
|
.agentKey(key.getKey())
|
|
|
|
|
.orderId(request.getOrderId())
|
2025-02-14 17:31:52 +08:00
|
|
|
|
.amount(BigDecimal.ONE)
|
2025-04-07 15:22:04 +08:00
|
|
|
|
.currency(*//*gameSecretKeyCurrencyDTO.getCurrency()*//*key.currency)
|
2025-02-14 17:31:52 +08:00
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
|
|
|
|
.account(member.getGameAccount())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.vendor(key.getPlatform())
|
|
|
|
|
.keyInfo(key.getKeyInfo())
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(key.systemCurrency)
|
2025-02-14 17:31:52 +08:00
|
|
|
|
.transferType(TransferType.ALL.getCode())
|
|
|
|
|
.build();
|
|
|
|
|
return iGamesService.exchangeTransferByAgentId(exchangeTransferMoneyRequestDTO);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return 0L;
|
|
|
|
|
} finally {
|
|
|
|
|
latch.countDown(); // 任务完成后减少计数
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BigDecimal balanceAll = BigDecimal.ZERO;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// 等待所有线程执行完毕
|
|
|
|
|
latch.await();
|
|
|
|
|
// 获取每个Future的结果
|
|
|
|
|
for (Future<Long> future : futures) {
|
|
|
|
|
// 汇总结果
|
|
|
|
|
Long id = future.get();
|
|
|
|
|
GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(id);
|
|
|
|
|
if (ObjectUtils.isEmpty(gameExchangeMoney)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2025-03-17 14:10:02 +08:00
|
|
|
|
Member member = memberService.selectMemberById(gameExchangeMoney.getMemberId());
|
2025-02-14 17:31:52 +08:00
|
|
|
|
balanceMap.put(gameExchangeMoney.getPlatformCode(), gameExchangeMoney.getBalance());
|
|
|
|
|
BigDecimal balance = gameExchangeMoney.getBalance();
|
|
|
|
|
balanceAll = NumberUtil.add(balanceAll, balance);
|
|
|
|
|
|
2025-02-27 16:26:02 +08:00
|
|
|
|
//操作租户额度
|
2025-02-21 14:39:21 +08:00
|
|
|
|
tenantGameQuotaService.gameBalanceExchange(GameBalanceExchange.builder()
|
|
|
|
|
.platformCode(gameExchangeMoney.getPlatformCode())
|
|
|
|
|
.currencyCode(gameExchangeMoney.getCurrencyCode())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.sourceId(request.getOrderId())
|
2025-02-21 14:39:21 +08:00
|
|
|
|
.transferType(TransferType.ALL.getCode())
|
|
|
|
|
.amount(gameExchangeMoney.getBalance())
|
|
|
|
|
.account(member.getMemberAccount())
|
2025-02-14 17:31:52 +08:00
|
|
|
|
.tenantKey(tenantSecretKey.getTenantKey())
|
2025-04-07 15:22:04 +08:00
|
|
|
|
.currency()
|
|
|
|
|
.systemCurrency(gameExchangeMoney.getCurrencyCode())
|
|
|
|
|
.agentId()
|
|
|
|
|
.agentKey()
|
2025-02-14 17:31:52 +08:00
|
|
|
|
.build());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("拉回用户余额失败", e);
|
|
|
|
|
throw new BaseException("拉回用户余额失败");
|
|
|
|
|
}
|
|
|
|
|
balanceMap.put("balanceAll", balanceAll);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return AjaxResult.success(balanceMap);
|
2025-04-07 15:22:04 +08:00
|
|
|
|
}*/
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 演示登录
|
|
|
|
|
*
|
2025-04-03 14:34:49 +08:00
|
|
|
|
* @param request 游戏演示登录请求
|
2025-04-03 09:50:51 +08:00
|
|
|
|
* @return {@link AjaxResult }
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/demo/login")
|
2025-04-03 14:34:49 +08:00
|
|
|
|
public AjaxResult demoLogin(@Validated @RequestBody GameDemoLoginRequest request) {
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
Game game = gameService.selectGameById(request.getGameId());
|
2025-04-03 09:50:51 +08:00
|
|
|
|
ApiException.notNull(game, ErrorCode.GAME_NOT_EXIST.getCode());
|
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
//GamePlatform gamePlatform = gamePlatformService.selectGamePlatformById(game.getPlatformId());
|
|
|
|
|
//ApiException.notNull(gamePlatform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
2025-04-12 14:35:41 +08:00
|
|
|
|
Platform platform = platformBiz.get(game.getPlatformCode());
|
2025-04-03 14:34:49 +08:00
|
|
|
|
ApiException.notNull(platform, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
IGamesService iGamesService = gamesService.get(platform.getPlatformCode() + Constants.SERVICE);
|
|
|
|
|
ApiException.notNull(iGamesService, ErrorCode.PLATFORM_NOT_EXIST.getCode());
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
String targetCurrency = platform.getCurrencyInfo().get(request.getCurrencyCode());
|
|
|
|
|
ApiException.notNull(targetCurrency, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
2025-04-03 14:34:49 +08:00
|
|
|
|
KeyInfo keyInfo = null;
|
|
|
|
|
for (KeyInfo keyData : platform.getKeyInfo()) {
|
|
|
|
|
if (StringUtils.isNotEmpty(request.getCurrencyCode())) {
|
|
|
|
|
if (keyData.getCurrency().equalsIgnoreCase(request.getCurrencyCode())) {
|
|
|
|
|
keyInfo = keyData;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ApiException.notNull(keyInfo, ErrorCode.CURRENCY_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
String targetLang = platform.getLangInfo().get(request.getLangCode());
|
|
|
|
|
ApiException.notNull(targetLang, ErrorCode.LANG_NOT_EXIST.getCode());
|
|
|
|
|
|
|
|
|
|
// GameSecretKeyLangDTO gameSecretKeyLangDTO = gameSecretKeyLangService.findGameSecretKeyLangDTO(GameSecretKeyLangDTO.builder()
|
|
|
|
|
// .platformCode(gamePlatform.getPlatformCode())
|
|
|
|
|
// .systemLangCode(gameDemoLoginRequest.getLangCode())
|
|
|
|
|
// .build());
|
|
|
|
|
// ApiException.notNull(gameSecretKeyLangDTO, ErrorCode.LANG_NOT_EXIST.getCode());
|
2025-04-03 09:50:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GameDemoLoginRequestDTO gamesLogin = GameDemoLoginRequestDTO.builder()
|
|
|
|
|
.gameId(game.getGameCode())
|
|
|
|
|
.gameType(game.getGameSourceType())
|
2025-04-03 14:34:49 +08:00
|
|
|
|
.lang(/*gameSecretKeyLangDTO.getLang()*/targetLang)
|
|
|
|
|
.vendor(platform)
|
|
|
|
|
.keyInfo(keyInfo)
|
2025-04-07 10:15:35 +08:00
|
|
|
|
.systemCurrency(request.getCurrencyCode())
|
2025-04-03 09:50:51 +08:00
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
GameDemoLoginResponseDTO gameDemoLoginResponseDTO = iGamesService.gameDemoLogin(gamesLogin);
|
|
|
|
|
GameDemoLoginResponse gameDemoLoginResponse = new GameDemoLoginResponse();
|
|
|
|
|
BeanUtils.copyProperties(gameDemoLoginResponseDTO, gameDemoLoginResponse);
|
|
|
|
|
return AjaxResult.success(gameDemoLoginResponse);
|
|
|
|
|
}
|
2025-04-03 14:34:49 +08:00
|
|
|
|
|
|
|
|
|
@Data
|
|
|
|
|
class Key {
|
|
|
|
|
private String platformCode;
|
|
|
|
|
private String code;
|
|
|
|
|
private String currency;
|
|
|
|
|
private String key;
|
|
|
|
|
private Platform platform;
|
|
|
|
|
private KeyInfo keyInfo;
|
2025-04-07 10:15:35 +08:00
|
|
|
|
private String systemCurrency;
|
2025-04-03 14:34:49 +08:00
|
|
|
|
}
|
2025-02-11 15:27:15 +08:00
|
|
|
|
}
|