From 5526ad34c5f112dd5359d029a887ef570f390202 Mon Sep 17 00:00:00 2001 From: shi Date: Fri, 14 Feb 2025 17:31:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(api):=20=E6=B7=BB=E5=8A=A0=E4=BC=9A?= =?UTF-8?q?=E5=91=98=E4=BF=A1=E6=81=AF=E5=85=A8=E9=83=A8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ApiGameController 中的 exchangeBalanceAll 方法 - 新增 ApiMemberController 中的 infoAll 方法 - 新增 ApiTenantController 类和 info 方法 - 添加相关请求和响应对象 - 修改 GameExchangeMoney 类和相关 mapper- 更新 HeaderCheckAspect 中的检查逻辑 --- .../com/ff/annotation/HeaderCheckAspect.java | 2 + .../ff/api/controller/ApiGameController.java | 134 +++++++++++++++++- .../api/controller/ApiMemberController.java | 111 +++++++++++++-- .../api/controller/ApiTenantController.java | 87 ++++++++++++ .../GameExchangeBalanceAllRequest.java | 42 ++++++ .../request/GameExchangeBalanceRequest.java | 6 - .../api/request/MemberInfoAllApiRequest.java | 34 +++++ .../api/response/MemberInfoAllResponse.java | 50 +++++++ .../ff/api/response/MemberInfoResponse.java | 42 ++++++ .../ff/api/response/TenantInfoResponse.java | 30 ++++ .../com/ff/common/domain/TenantGameQuota.java | 8 +- .../com/ff/common/domain/TenantSecretKey.java | 18 ++- .../common/mapper/TenantGameQuotaMapper.java | 35 ++--- .../service/ITenantGameQuotaService.java | 10 ++ .../impl/TenantGameQuotaServiceImpl.java | 57 +++++--- .../service/impl/GamesJILIServiceImpl.java | 13 +- .../ExchangeTransferMoneyRequestDTO.java | 9 +- .../xk/service/impl/GamesXKServiceImpl.java | 11 +- .../com/ff/game/domain/GameExchangeMoney.java | 4 +- .../common/TenantGameQuotaFlowMapper.xml | 2 +- .../mapper/common/TenantGameQuotaMapper.xml | 43 +++--- .../mapper/common/TenantSecretKeyMapper.xml | 31 ++-- .../mapper/game/GameExchangeMoneyMapper.xml | 7 +- .../mapper/game/GameExchangeMoneyMapper.xml | 7 +- .../com/ff/base/enums/TenantQuotaType.java | 28 ++++ .../java/com/ff/base/enums/TenantType.java | 28 ++++ .../java/com/ff/base/enums/TransferType.java | 30 ++++ 27 files changed, 741 insertions(+), 138 deletions(-) create mode 100644 ff-admin/src/main/java/com/ff/api/controller/ApiTenantController.java create mode 100644 ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceAllRequest.java create mode 100644 ff-admin/src/main/java/com/ff/api/request/MemberInfoAllApiRequest.java create mode 100644 ff-admin/src/main/java/com/ff/api/response/MemberInfoAllResponse.java create mode 100644 ff-admin/src/main/java/com/ff/api/response/MemberInfoResponse.java create mode 100644 ff-admin/src/main/java/com/ff/api/response/TenantInfoResponse.java create mode 100644 ff-base/src/main/java/com/ff/base/enums/TenantQuotaType.java create mode 100644 ff-base/src/main/java/com/ff/base/enums/TenantType.java create mode 100644 ff-base/src/main/java/com/ff/base/enums/TransferType.java diff --git a/ff-admin/src/main/java/com/ff/annotation/HeaderCheckAspect.java b/ff-admin/src/main/java/com/ff/annotation/HeaderCheckAspect.java index 4d605b3..a1ce566 100644 --- a/ff-admin/src/main/java/com/ff/annotation/HeaderCheckAspect.java +++ b/ff-admin/src/main/java/com/ff/annotation/HeaderCheckAspect.java @@ -61,6 +61,8 @@ public class HeaderCheckAspect { TenantSecretKey tenantSecretKey = tenantSecretKeyService.selectTenantSecretKeyByTenantKey(key); Assert.notNull(tenantSecretKey, "key不存在"); + Assert.isTrue(tenantSecretKey.getTenantStatus(), "当前租户已停用"); + String keyG = Md5Utils.md5New(random + key + tenantSecretKey.getTenantSecret()); Assert.isTrue(keyG.equals(sign), "签名错误"); //保存 diff --git a/ff-admin/src/main/java/com/ff/api/controller/ApiGameController.java b/ff-admin/src/main/java/com/ff/api/controller/ApiGameController.java index f5b908b..1cc7d0e 100644 --- a/ff-admin/src/main/java/com/ff/api/controller/ApiGameController.java +++ b/ff-admin/src/main/java/com/ff/api/controller/ApiGameController.java @@ -7,11 +7,14 @@ import com.dtflys.forest.annotation.Post; import com.ff.annotation.CheckHeader; import com.ff.api.request.*; import com.ff.api.response.GameExchangeBalanceResponse; +import com.ff.api.response.MemberInfoAllResponse; 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.enums.TransferType; +import com.ff.base.exception.base.BaseException; import com.ff.base.utils.StringUtils; import com.ff.base.utils.bean.BeanUtils; import com.ff.common.domain.TenantGameQuotaFlow; @@ -27,7 +30,10 @@ import com.ff.game.service.*; import com.ff.member.domain.Member; import com.ff.member.service.IMemberService; import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; @@ -39,8 +45,11 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; /** * api控制器 @@ -51,6 +60,7 @@ import java.util.Map; @RestController @CheckHeader @RequestMapping("/api/game") +@Slf4j public class ApiGameController extends BaseController { @@ -89,6 +99,10 @@ public class ApiGameController extends BaseController { @Resource private IGameExchangeMoneyService gameExchangeMoneyService; + @Autowired + @Qualifier("threadPoolTaskExecutor") + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + /** * 登录 * @@ -187,7 +201,7 @@ public class ApiGameController extends BaseController { balanceRequestAmount = NumberUtil.sub(balanceOut, balanceInto); } } - //余额扣除 + //租户余额操作 tenantGameQuotaService.balanceChanges(BalanceChangesDTO.builder() .isOut(isOut) .tenantKey(tenantSecretKey.getTenantKey()) @@ -202,15 +216,15 @@ public class ApiGameController extends BaseController { .agentId(gameSecretKey.getCode()) .agentKey(gameSecretKey.getKey()) .account(member.getGameAccount()) + .tenantKey(tenantSecretKey.getTenantKey()) .quota(balanceRequestAmount) .amount(gameExchangeBalanceRequest.getAmount()) .transferType(gameExchangeBalanceRequest.getTransferType()) - .orderId(gameExchangeBalanceRequest.getOrderId()) .build(); Long exchangeTransferId = iGamesService.exchangeTransferByAgentId(exchangeTransferMoneyRequestDTO); GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(exchangeTransferId); - GameExchangeBalanceResponse gameExchangeBalanceResponse=new GameExchangeBalanceResponse(); - BeanUtils.copyProperties(gameExchangeMoney,gameExchangeBalanceResponse); + GameExchangeBalanceResponse gameExchangeBalanceResponse = new GameExchangeBalanceResponse(); + BeanUtils.copyProperties(gameExchangeMoney, gameExchangeBalanceResponse); return AjaxResult.success(gameExchangeBalanceResponse); } @@ -261,7 +275,7 @@ public class ApiGameController extends BaseController { * @return {@link AjaxResult } */ @PostMapping("/get/bet/record") - public TableDataInfo createFreeSpin(@Validated @RequestBody GameGetBetRecordRequest gameCreateFreeSpinRequest) { + public TableDataInfo getBetRecord(@Validated @RequestBody GameGetBetRecordRequest gameCreateFreeSpinRequest) { startPage(); PageHelper.startPage(gameCreateFreeSpinRequest.getPageNo(), gameCreateFreeSpinRequest.getPageSize(), "wagers_time desc"); GameBettingDetails gameBettingDetails = GameBettingDetails.builder() @@ -393,4 +407,110 @@ public class ApiGameController extends BaseController { .build()); return AjaxResult.success(cancelFreeSpin); } + + /** + * 信息全部 + * + * @param gameExchangeBalanceAllRequest 成员信息所有api请求 + * @return {@link AjaxResult } + */ + @PostMapping("/exchange/balance/all") + public AjaxResult exchangeBalanceAll(@Validated @RequestBody GameExchangeBalanceAllRequest gameExchangeBalanceAllRequest) { + + TenantSecretKey tenantSecretKey = keyConfig.get(); + Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(gameExchangeBalanceAllRequest.getAccount(), gameExchangeBalanceAllRequest.getCurrencyCode() + tenantSecretKey.getTenantSn())); + Assert.notNull(member, "会员不存在"); + + + List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().systemCode(gameExchangeBalanceAllRequest.getCurrencyCode()).build()); + + + // 创建线程池 + Map balanceMap = new LinkedHashMap<>(); + CountDownLatch latch = new CountDownLatch(gameSecretKeys.size()); + + // 使用List存储Future对象,用于获取异步执行的结果 + List> futures = new ArrayList<>(); + + // 提交异步任务到线程池 + for (GameSecretKey gameSecretKey : gameSecretKeys) { + futures.add(threadPoolTaskExecutor.submit(() -> { + try { + + IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatform() + Constants.SERVICE); + //操作第三方钱包 + ExchangeTransferMoneyRequestDTO exchangeTransferMoneyRequestDTO = ExchangeTransferMoneyRequestDTO.builder() + .agentId(gameSecretKey.getCode()) + .agentKey(gameSecretKey.getKey()) + .amount(BigDecimal.ONE) + .tenantKey(tenantSecretKey.getTenantKey()) + .account(member.getGameAccount()) + .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 future : futures) { + // 汇总结果 + Long id = future.get(); + GameExchangeMoney gameExchangeMoney = gameExchangeMoneyService.selectGameExchangeMoneyById(id); + if (ObjectUtils.isEmpty(gameExchangeMoney)) { + continue; + } + balanceMap.put(gameExchangeMoney.getPlatformCode(), gameExchangeMoney.getBalance()); + BigDecimal balance = gameExchangeMoney.getBalance(); + balanceAll = NumberUtil.add(balanceAll, balance); + //转入金额 + BigDecimal balanceInto = tenantGameQuotaFlowService.getBalanceByMemberId(TenantGameQuotaFlow.builder() + .isOut(Boolean.TRUE) + .tenantKey(tenantSecretKey.getTenantKey()) + .memberId(member.getId()) + .build()); + //转出金额 + BigDecimal balanceOut = tenantGameQuotaFlowService.getBalanceByMemberId(TenantGameQuotaFlow.builder() + .isOut(Boolean.FALSE) + .tenantKey(tenantSecretKey.getTenantKey()) + .memberId(member.getId()) + .build()); + //如果转入金额+本次转入金额 大于转出额度则取差值 + if (NumberUtil.add(balanceInto, balance).compareTo(NumberUtil.add(balanceOut, BigDecimal.ZERO)) > 0) { + balance = NumberUtil.sub(balanceOut, balanceInto); + } + //更新租户额度 + gameExchangeMoney.setQuota(balance); + gameExchangeMoneyService.updateGameExchangeMoney(gameExchangeMoney); + + //余额扣除 + tenantGameQuotaService.balanceChanges(BalanceChangesDTO.builder() + .isOut(Boolean.TRUE) + .tenantKey(tenantSecretKey.getTenantKey()) + .balance(balance) + .memberId(member.getId()) + .operationType(OperationType.API_BALANCE.getCode()) + .remark(OperationType.API_BALANCE.getDescription()) + .build()); + + } + } catch (Exception e) { + log.error("拉回用户余额失败", e); + throw new BaseException("拉回用户余额失败"); + } + balanceMap.put("balanceAll", balanceAll); + + + return AjaxResult.success(balanceMap); + } } diff --git a/ff-admin/src/main/java/com/ff/api/controller/ApiMemberController.java b/ff-admin/src/main/java/com/ff/api/controller/ApiMemberController.java index 92470ca..9e683c3 100644 --- a/ff-admin/src/main/java/com/ff/api/controller/ApiMemberController.java +++ b/ff-admin/src/main/java/com/ff/api/controller/ApiMemberController.java @@ -1,32 +1,47 @@ package com.ff.api.controller; +import cn.hutool.core.bean.BeanUtil; import com.ff.annotation.CheckHeader; import com.ff.api.request.MemberCreateApiRequest; +import com.ff.api.request.MemberInfoAllApiRequest; +import com.ff.api.request.MemberInfoApiRequest; +import com.ff.api.response.MemberInfoAllResponse; +import com.ff.api.response.MemberInfoResponse; import com.ff.base.constant.Constants; import com.ff.base.core.controller.BaseController; import com.ff.base.core.domain.AjaxResult; +import com.ff.base.exception.base.BaseException; +import com.ff.base.manager.AsyncManager; import com.ff.base.utils.StringUtils; import com.ff.common.domain.TenantSecretKey; import com.ff.config.KeyConfig; import com.ff.game.api.IGamesService; -import com.ff.game.api.request.CreateMemberRequestDTO; -import com.ff.game.api.request.GamesBaseRequestDTO; -import com.ff.game.api.request.MemberInfoRequestDTO; +import com.ff.game.api.request.*; import com.ff.game.domain.GameSecretKey; import com.ff.game.service.IGameSecretKeyService; import com.ff.game.service.IGameService; import com.ff.member.domain.Member; import com.ff.member.service.IMemberService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 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.math.BigDecimal; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Future; /** * api控制器 @@ -37,6 +52,7 @@ import java.util.Map; @RestController @CheckHeader @RequestMapping("/api/member") +@Slf4j public class ApiMemberController extends BaseController { @@ -58,6 +74,10 @@ public class ApiMemberController extends BaseController { private IMemberService memberService; + @Autowired + @Qualifier("threadPoolTaskExecutor") + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + /** * 创建成员 * @@ -106,20 +126,20 @@ public class ApiMemberController extends BaseController { /** * 获取会员信息 * - * @param memberCreateApiRequest 成员创建api请求 + * @param memberInfoApiRequest 成员信息api请求 * @return {@link AjaxResult } */ @PostMapping("/info") - public AjaxResult getMemberInfo(@Validated @RequestBody MemberCreateApiRequest memberCreateApiRequest) { - IGamesService iGamesService = gamesService.get(memberCreateApiRequest.getPlatformCode() + Constants.SERVICE); + public AjaxResult getMemberInfo(@Validated @RequestBody MemberInfoApiRequest memberInfoApiRequest) { + IGamesService iGamesService = gamesService.get(memberInfoApiRequest.getPlatformCode() + Constants.SERVICE); Assert.notNull(iGamesService, "平台不存在"); TenantSecretKey tenantSecretKey = keyConfig.get(); - GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(memberCreateApiRequest.getPlatformCode(), memberCreateApiRequest.getCurrencyCode()); + GameSecretKey gameSecretKey = gameSecretKeyService.findSecretKeyByPlatformAndSystemCode(memberInfoApiRequest.getPlatformCode(), memberInfoApiRequest.getCurrencyCode()); Assert.notNull(gameSecretKey, "货币游戏平台不存在"); - Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberCreateApiRequest.getAccount(), memberCreateApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn())); + Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberInfoApiRequest.getAccount(), memberInfoApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn())); Assert.notNull(member, "会员不存在"); //向第三方查询账号 @@ -128,8 +148,81 @@ public class ApiMemberController extends BaseController { .agentId(gameSecretKey.getCode()) .agentKey(gameSecretKey.getKey()) .build(); - return AjaxResult.success(iGamesService.getMemberInfo(gamesBaseRequestDTO)); + MemberInfoResponseDTO memberInfo = iGamesService.getMemberInfo(gamesBaseRequestDTO); + MemberInfoResponse memberInfoResponse=new MemberInfoResponse(); + BeanUtils.copyProperties(memberInfo,memberInfoResponse); + return AjaxResult.success(memberInfoResponse); } + /** + * 信息全部 + * + * @param memberInfoAllApiRequest 成员信息所有api请求 + * @return {@link AjaxResult } + */ + @PostMapping("/info/all") + public AjaxResult infoAll(@Validated @RequestBody MemberInfoAllApiRequest memberInfoAllApiRequest) { + + TenantSecretKey tenantSecretKey = keyConfig.get(); + Member member = memberService.selectMemberByGameAccount(StringUtils.addSuffix(memberInfoAllApiRequest.getAccount(), memberInfoAllApiRequest.getCurrencyCode() + tenantSecretKey.getTenantSn())); + Assert.notNull(member, "会员不存在"); + + + List gameSecretKeys = gameSecretKeyService.selectGameSecretKeyList(GameSecretKey.builder().systemCode(memberInfoAllApiRequest.getCurrencyCode()).build()); + + + // 创建线程池 + Map balanceMap = new LinkedHashMap<>(); + CountDownLatch latch = new CountDownLatch(gameSecretKeys.size()); + + // 使用List存储Future对象,用于获取异步执行的结果 + List> futures = new ArrayList<>(); + + // 提交异步任务到线程池 + for (GameSecretKey gameSecretKey : gameSecretKeys) { + futures.add(threadPoolTaskExecutor.submit(() -> { + try { + IGamesService iGamesService = gamesService.get(gameSecretKey.getPlatform() + Constants.SERVICE); + MemberInfoRequestDTO gamesBaseRequestDTO = MemberInfoRequestDTO.builder() + .accounts(member.getGameAccount()) + .agentId(gameSecretKey.getCode()) + .agentKey(gameSecretKey.getKey()) + .build(); + //查询余额 + MemberInfoResponseDTO memberInfo = iGamesService.getMemberInfo(gamesBaseRequestDTO); + return MemberInfoAllResponse.builder() + .account(member.getGameAccount()) + .balance(memberInfo.getBalance()) + .status(memberInfo.getStatus()) + .platformCode(gameSecretKey.getPlatform()) + .build(); + } finally { + latch.countDown(); // 任务完成后减少计数 + } + })); + } + + + // 等待所有线程执行完毕 + try { + latch.await(); + // 获取每个Future的结果 + for (Future future : futures) { + // 汇总结果 + MemberInfoAllResponse memberInfoAllResponse = future.get(); + balanceMap.put(memberInfoAllResponse.getPlatformCode(), memberInfoAllResponse.getBalance()); + } + } catch (Exception e) { + log.error("获取会员信息失败", e); + throw new BaseException("获取会员信息失败"); + } + + + return AjaxResult.success(balanceMap); + } + + + + } diff --git a/ff-admin/src/main/java/com/ff/api/controller/ApiTenantController.java b/ff-admin/src/main/java/com/ff/api/controller/ApiTenantController.java new file mode 100644 index 0000000..3014cd9 --- /dev/null +++ b/ff-admin/src/main/java/com/ff/api/controller/ApiTenantController.java @@ -0,0 +1,87 @@ +package com.ff.api.controller; + + +import cn.hutool.core.util.NumberUtil; +import com.ff.annotation.CheckHeader; +import com.ff.api.request.*; +import com.ff.api.response.GameExchangeBalanceResponse; +import com.ff.api.response.TenantInfoResponse; +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.enums.TenantQuotaType; +import com.ff.base.enums.TransferType; +import com.ff.base.exception.base.BaseException; +import com.ff.base.utils.StringUtils; +import com.ff.base.utils.bean.BeanUtils; +import com.ff.common.domain.TenantGameQuota; +import com.ff.common.domain.TenantGameQuotaFlow; +import com.ff.common.domain.TenantSecretKey; +import com.ff.common.dto.BalanceChangesDTO; +import com.ff.common.service.ITenantGameQuotaFlowService; +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.*; +import com.ff.game.service.*; +import com.ff.member.domain.Member; +import com.ff.member.service.IMemberService; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +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; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Future; + +/** + * api控制器 + * + * @author shi + * @date 2025/02/10 + */ +@RestController +@CheckHeader +@RequestMapping("/api/tenant") +@Slf4j +public class ApiTenantController extends BaseController { + + + @Resource + private ITenantGameQuotaService tenantGameQuotaService; + @Resource + private KeyConfig keyConfig; + + /** + * 信息 + * + * @return {@link AjaxResult } + */ + @PostMapping("/info") + public AjaxResult info() { + TenantSecretKey tenantSecretKey = keyConfig.get(); + TenantGameQuota tenantGameQuota = tenantGameQuotaService.selectTenantGameQuotaByTenantKey(tenantSecretKey.getTenantKey(), TenantQuotaType.BALANCE.getCode()); + TenantInfoResponse tenantInfoResponse= new TenantInfoResponse(); + BeanUtils.copyProperties(tenantGameQuota,tenantInfoResponse); + return AjaxResult.success(tenantInfoResponse); + } + +} diff --git a/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceAllRequest.java b/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceAllRequest.java new file mode 100644 index 0000000..408d24e --- /dev/null +++ b/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceAllRequest.java @@ -0,0 +1,42 @@ +package com.ff.api.request; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; + + +/** + * 游戏兑换余额请求 + * + * @author shi + * @date 2025/02/11 + */ +@Data +public class GameExchangeBalanceAllRequest implements Serializable { + private final static long serialVersionUID = -881298930995538038L; + + + /** + * 账户 + */ + @NotBlank(message = "account不能为空") + private String account; + + + + + + /** 币种编码 */ + @NotBlank(message = "currencyCode不能为空") + private String currencyCode; + + + + +} diff --git a/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceRequest.java b/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceRequest.java index 0942b78..f27711a 100644 --- a/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceRequest.java +++ b/ff-admin/src/main/java/com/ff/api/request/GameExchangeBalanceRequest.java @@ -57,12 +57,6 @@ public class GameExchangeBalanceRequest implements Serializable { @Max(value = 2, message = "transferType最大值为2") private Integer transferType; - /** - * 订单id - */ - @NotBlank(message = "orderId不能为空") - @Length(min = 32,max = 32, message = "orderId长度不能超过32个字符") - private String orderId; } diff --git a/ff-admin/src/main/java/com/ff/api/request/MemberInfoAllApiRequest.java b/ff-admin/src/main/java/com/ff/api/request/MemberInfoAllApiRequest.java new file mode 100644 index 0000000..fb5ef8e --- /dev/null +++ b/ff-admin/src/main/java/com/ff/api/request/MemberInfoAllApiRequest.java @@ -0,0 +1,34 @@ +package com.ff.api.request; + + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 创建成员请求 + * + * @author shi + * @date 2025/02/10 + */ +@Data +public class MemberInfoAllApiRequest implements Serializable{ + + private static final long serialVersionUID = 8071608271351542925L; + + /** + * 账户 + */ + @NotBlank(message = "account不能为空") + private String account; + + /** + * 货币代码 + */ + @NotBlank(message = "currencyCode不能为空") + private String currencyCode; + + + +} diff --git a/ff-admin/src/main/java/com/ff/api/response/MemberInfoAllResponse.java b/ff-admin/src/main/java/com/ff/api/response/MemberInfoAllResponse.java new file mode 100644 index 0000000..8979911 --- /dev/null +++ b/ff-admin/src/main/java/com/ff/api/response/MemberInfoAllResponse.java @@ -0,0 +1,50 @@ +package com.ff.api.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 会员金额转移记录对象 ff_game_exchange_money + * + * @author shi + * @date 2025-02-12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MemberInfoAllResponse implements Serializable +{ + private static final long serialVersionUID = 1L; + + + + + /** + * 账户 + */ + private String account; + /** + * 余额 + */ + private BigDecimal balance; + /** + * 状态: + * 1: 在线 + * 2: 脱机 + * 3: 账号不存在 + */ + private Integer status; + + /** + * 平台代码 + */ + private String platformCode; + + +} diff --git a/ff-admin/src/main/java/com/ff/api/response/MemberInfoResponse.java b/ff-admin/src/main/java/com/ff/api/response/MemberInfoResponse.java new file mode 100644 index 0000000..f2d377a --- /dev/null +++ b/ff-admin/src/main/java/com/ff/api/response/MemberInfoResponse.java @@ -0,0 +1,42 @@ +package com.ff.api.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 会员金额转移记录对象 ff_game_exchange_money + * + * @author shi + * @date 2025-02-12 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MemberInfoResponse implements Serializable +{ + private static final long serialVersionUID = 1L; + + + + + /** + * 余额 + */ + private BigDecimal balance; + /** + * 状态: + * 1: 在线 + * 2: 脱机 + * 3: 账号不存在 + */ + private Integer status; + + + +} diff --git a/ff-admin/src/main/java/com/ff/api/response/TenantInfoResponse.java b/ff-admin/src/main/java/com/ff/api/response/TenantInfoResponse.java new file mode 100644 index 0000000..20d4913 --- /dev/null +++ b/ff-admin/src/main/java/com/ff/api/response/TenantInfoResponse.java @@ -0,0 +1,30 @@ +package com.ff.api.response; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 租户信息 + * + * @author shi + * @date 2025/02/14 + */ +@Data +public class TenantInfoResponse implements Serializable { + + + /** + * 租户密钥 + */ + private String tenantKey; + + + /** + * 余额 + */ + private BigDecimal balance; + +} diff --git a/ff-admin/src/main/java/com/ff/common/domain/TenantGameQuota.java b/ff-admin/src/main/java/com/ff/common/domain/TenantGameQuota.java index 5b6f7d6..4ca8349 100644 --- a/ff-admin/src/main/java/com/ff/common/domain/TenantGameQuota.java +++ b/ff-admin/src/main/java/com/ff/common/domain/TenantGameQuota.java @@ -8,13 +8,11 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotNull; - /** * 租户游戏配额对象 ff_tenant_game_quota * * @author shi - * @date 2025-02-12 + * @date 2025-02-14 */ @Data @AllArgsConstructor @@ -35,7 +33,9 @@ public class TenantGameQuota extends BaseEntity @Excel(name = "游戏额度") private BigDecimal balance; - + /** 额度类型 TenantQuotaType 枚举 */ + @Excel(name = "额度类型 TenantQuotaType 枚举") + private Integer quotaType; /** 版本号 */ @Excel(name = "版本号") diff --git a/ff-admin/src/main/java/com/ff/common/domain/TenantSecretKey.java b/ff-admin/src/main/java/com/ff/common/domain/TenantSecretKey.java index 15e313d..75973de 100644 --- a/ff-admin/src/main/java/com/ff/common/domain/TenantSecretKey.java +++ b/ff-admin/src/main/java/com/ff/common/domain/TenantSecretKey.java @@ -2,14 +2,21 @@ package com.ff.common.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_tenant_secret_key * * @author shi - * @date 2025-02-11 + * @date 2025-02-14 */ @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class TenantSecretKey extends BaseEntity { private static final long serialVersionUID = 1L; @@ -29,9 +36,12 @@ public class TenantSecretKey extends BaseEntity @Excel(name = "租户密钥") private String tenantSecret; - /** 租户状态(0正常 1停用) */ - @Excel(name = "租户状态", readConverterExp = "0=正常,1=停用") - private String tenantStatus; + /** 租户状态 1正常 0停用 */ + private Boolean tenantStatus; + + /** 租户类型 TenantType 枚举 */ + @Excel(name = "租户类型 TenantType 枚举") + private Integer tenantType; } diff --git a/ff-admin/src/main/java/com/ff/common/mapper/TenantGameQuotaMapper.java b/ff-admin/src/main/java/com/ff/common/mapper/TenantGameQuotaMapper.java index ebefb12..6b81a9e 100644 --- a/ff-admin/src/main/java/com/ff/common/mapper/TenantGameQuotaMapper.java +++ b/ff-admin/src/main/java/com/ff/common/mapper/TenantGameQuotaMapper.java @@ -1,56 +1,57 @@ package com.ff.common.mapper; import java.util.List; + import com.ff.common.domain.TenantGameQuota; +import org.apache.ibatis.annotations.Param; /** * 租户游戏配额Mapper接口 - * + * * @author shi * @date 2025-02-12 */ -public interface TenantGameQuotaMapper -{ +public interface TenantGameQuotaMapper { /** * 查询租户游戏配额 - * + * * @param id 租户游戏配额主键 * @return 租户游戏配额 */ - TenantGameQuota selectTenantGameQuotaById(Long id); + TenantGameQuota selectTenantGameQuotaById(Long id); - /** + /** * 查询租户游戏配额 * * @param tenantKey 租户游戏配额主键 * @return 租户游戏配额 */ - TenantGameQuota selectTenantGameQuotaByTenantKey(String tenantKey); + TenantGameQuota selectTenantGameQuotaByTenantKey(@Param("tenantKey") String tenantKey,@Param("quotaType") Integer quotaType); /** * 查询租户游戏配额列表 - * + * * @param tenantGameQuota 租户游戏配额 * @return 租户游戏配额集合 */ - List selectTenantGameQuotaList(TenantGameQuota tenantGameQuota); + List selectTenantGameQuotaList(TenantGameQuota tenantGameQuota); /** * 新增租户游戏配额 - * + * * @param tenantGameQuota 租户游戏配额 * @return 结果 */ - int insertTenantGameQuota(TenantGameQuota tenantGameQuota); + int insertTenantGameQuota(TenantGameQuota tenantGameQuota); /** * 修改租户游戏配额 - * + * * @param tenantGameQuota 租户游戏配额 * @return 结果 */ - int updateTenantGameQuota(TenantGameQuota tenantGameQuota); + int updateTenantGameQuota(TenantGameQuota tenantGameQuota); /** @@ -63,17 +64,17 @@ public interface TenantGameQuotaMapper /** * 删除租户游戏配额 - * + * * @param id 租户游戏配额主键 * @return 结果 */ - int deleteTenantGameQuotaById(Long id); + int deleteTenantGameQuotaById(Long id); /** * 批量删除租户游戏配额 - * + * * @param ids 需要删除的数据主键集合 * @return 结果 */ - int deleteTenantGameQuotaByIds(Long[] ids); + int deleteTenantGameQuotaByIds(Long[] ids); } diff --git a/ff-admin/src/main/java/com/ff/common/service/ITenantGameQuotaService.java b/ff-admin/src/main/java/com/ff/common/service/ITenantGameQuotaService.java index 3623a2f..debc673 100644 --- a/ff-admin/src/main/java/com/ff/common/service/ITenantGameQuotaService.java +++ b/ff-admin/src/main/java/com/ff/common/service/ITenantGameQuotaService.java @@ -3,6 +3,7 @@ package com.ff.common.service; import java.util.List; import com.ff.common.domain.TenantGameQuota; import com.ff.common.dto.BalanceChangesDTO; +import org.apache.ibatis.annotations.Param; /** * 租户游戏配额Service接口 @@ -67,4 +68,13 @@ public interface ITenantGameQuotaService * @return {@link Boolean } */ Boolean balanceChanges(BalanceChangesDTO balanceChangesDTO); + + + /** + * 查询租户游戏配额 + * + * @param tenantKey 租户游戏配额主键 + * @return 租户游戏配额 + */ + TenantGameQuota selectTenantGameQuotaByTenantKey(String tenantKey, Integer quotaType); } diff --git a/ff-admin/src/main/java/com/ff/common/service/impl/TenantGameQuotaServiceImpl.java b/ff-admin/src/main/java/com/ff/common/service/impl/TenantGameQuotaServiceImpl.java index d03ed26..446c372 100644 --- a/ff-admin/src/main/java/com/ff/common/service/impl/TenantGameQuotaServiceImpl.java +++ b/ff-admin/src/main/java/com/ff/common/service/impl/TenantGameQuotaServiceImpl.java @@ -5,10 +5,13 @@ import java.util.List; import cn.hutool.core.util.NumberUtil; import com.ff.base.constant.Constants; +import com.ff.base.enums.TenantQuotaType; +import com.ff.base.enums.TenantType; import com.ff.base.utils.DateUtils; import com.ff.base.utils.MessageUtils; import com.ff.base.utils.SecurityUtils; import com.ff.common.domain.TenantGameQuotaFlow; +import com.ff.common.domain.TenantSecretKey; import com.ff.common.dto.BalanceChangesDTO; import com.ff.common.mapper.TenantGameQuotaFlowMapper; import com.ff.common.service.ITenantGameQuotaFlowService; @@ -30,8 +33,7 @@ import javax.annotation.Resource; * @date 2025-02-12 */ @Service -public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService -{ +public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService { @Autowired private TenantGameQuotaMapper tenantGameQuotaMapper; @@ -39,6 +41,8 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService @Resource private ITenantGameQuotaFlowService tenantGameQuotaFlowService; + @Resource + private ITenantSecretKeyService tenantSecretKeyService; /** * 查询租户游戏配额 @@ -47,8 +51,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService * @return 租户游戏配额 */ @Override - public TenantGameQuota selectTenantGameQuotaById(Long id) - { + public TenantGameQuota selectTenantGameQuotaById(Long id) { return tenantGameQuotaMapper.selectTenantGameQuotaById(id); } @@ -59,8 +62,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService * @return 租户游戏配额 */ @Override - public List selectTenantGameQuotaList(TenantGameQuota tenantGameQuota) - { + public List selectTenantGameQuotaList(TenantGameQuota tenantGameQuota) { return tenantGameQuotaMapper.selectTenantGameQuotaList(tenantGameQuota); } @@ -71,8 +73,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService * @return 结果 */ @Override - public int insertTenantGameQuota(TenantGameQuota tenantGameQuota) - { + public int insertTenantGameQuota(TenantGameQuota tenantGameQuota) { tenantGameQuota.setCreateTime(DateUtils.getNowDate()); return tenantGameQuotaMapper.insertTenantGameQuota(tenantGameQuota); } @@ -84,8 +85,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService * @return 结果 */ @Override - public int updateTenantGameQuota(TenantGameQuota tenantGameQuota) - { + public int updateTenantGameQuota(TenantGameQuota tenantGameQuota) { tenantGameQuota.setUpdateTime(DateUtils.getNowDate()); return tenantGameQuotaMapper.updateTenantGameQuota(tenantGameQuota); } @@ -97,8 +97,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService * @return 结果 */ @Override - public int deleteTenantGameQuotaByIds(Long[] ids) - { + public int deleteTenantGameQuotaByIds(Long[] ids) { return tenantGameQuotaMapper.deleteTenantGameQuotaByIds(ids); } @@ -109,8 +108,7 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService * @return 结果 */ @Override - public int deleteTenantGameQuotaById(Long id) - { + public int deleteTenantGameQuotaById(Long id) { return tenantGameQuotaMapper.deleteTenantGameQuotaById(id); } @@ -122,11 +120,12 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService */ @Override public Boolean balanceChanges(BalanceChangesDTO balanceChangesDTO) { - TenantGameQuota tenantGameQuota = tenantGameQuotaMapper.selectTenantGameQuotaByTenantKey(balanceChangesDTO.getTenantKey()); + TenantGameQuota tenantGameQuota = tenantGameQuotaMapper.selectTenantGameQuotaByTenantKey(balanceChangesDTO.getTenantKey(), TenantQuotaType.BALANCE.getCode()); + Assert.isTrue(!ObjectUtils.isEmpty(tenantGameQuota), "余额额度不足"); BigDecimal balanceBefore = tenantGameQuota.getBalance(); - BigDecimal balance =balanceChangesDTO.getBalance(); + BigDecimal balance = balanceChangesDTO.getBalance(); if (BigDecimal.ZERO.compareTo(balance) >= 0) { return Boolean.TRUE; } @@ -138,11 +137,23 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService balanceAfter = NumberUtil.sub(balanceBefore, balance); } //判断剩余额度是否大于0 - Assert.isTrue(balanceAfter.compareTo(BigDecimal.ZERO)>=0, "余额额度不足"); + TenantSecretKey tenantSecretKey = tenantSecretKeyService.selectTenantSecretKeyByTenantKey(balanceChangesDTO.getTenantKey()); + if (TenantType.DEPOSIT.getCode().equals(tenantSecretKey.getTenantType())) { + TenantGameQuota depositQuota = tenantGameQuotaMapper.selectTenantGameQuotaByTenantKey(balanceChangesDTO.getTenantKey(), TenantQuotaType.DEPOSIT.getCode()); + + //判断剩余额度是否大于0 + Assert.isTrue(balanceAfter.compareTo(depositQuota.getBalance().negate()) >= 0, "余额额度不足"); + } else { + //判断剩余额度是否大于0 + Assert.isTrue(balanceAfter.compareTo(BigDecimal.ZERO) >= 0, "余额额度不足"); + } + + //修改余额 Boolean changedBalanceResult = tenantGameQuotaMapper.changeBalance(TenantGameQuota.builder() .tenantKey(balanceChangesDTO.getTenantKey()) .balance(balanceAfter) + .quotaType(TenantQuotaType.BALANCE.getCode()) .version(tenantGameQuota.getVersion()) .build()); Assert.isTrue(changedBalanceResult, "租户游戏额度操作失败"); @@ -163,4 +174,16 @@ public class TenantGameQuotaServiceImpl implements ITenantGameQuotaService tenantGameQuotaFlowService.insertTenantGameQuotaFlow(tenantGameQuotaFlow); return changedBalanceResult; } + + /** + * 按租户密钥选择租户游戏配额 + * + * @param tenantKey 租户密钥 + * @param quotaType 配额类型 + * @return {@link TenantGameQuota } + */ + @Override + public TenantGameQuota selectTenantGameQuotaByTenantKey(String tenantKey, Integer quotaType) { + return tenantGameQuotaMapper.selectTenantGameQuotaByTenantKey(tenantKey, quotaType); + } } diff --git a/ff-admin/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java b/ff-admin/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java index 2c7e1c2..943f4f0 100644 --- a/ff-admin/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java +++ b/ff-admin/src/main/java/com/ff/game/api/jili/service/impl/GamesJILIServiceImpl.java @@ -293,27 +293,20 @@ public class GamesJILIServiceImpl implements IGamesService { String systemByCode = gameSecretKeyService.findSystemByCode(exchangeTransferMoneyRequestDTO.getAgentId(), GamePlatforms.JILI.getInfo()); Member member = memberService.selectMemberByGameAccount(exchangeTransferMoneyRequestDTO.getAccount()); String transactionId = GamePlatforms.JILI.getCode() + IdUtils.simpleUUID(); - TenantSecretKey tenantSecretKey = keyConfig.get(); - List 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()) + .tenantKey(exchangeTransferMoneyRequestDTO.getTenantKey()) .quota(exchangeTransferMoneyRequestDTO.getQuota()) .balance(exchangeTransferMoneyRequestDTO.getAmount()) .exchangeType(exchangeTransferMoneyRequestDTO.getTransferType()) .currencyCode(systemByCode) .memberId(member.getId()) .transactionId(transactionId) - .orderId(exchangeTransferMoneyRequestDTO.getOrderId()) .platformCode(GamePlatforms.JILI.getCode()) .build(); exchangeMoney.setCreateBy(Constants.SYSTEM); diff --git a/ff-admin/src/main/java/com/ff/game/api/request/ExchangeTransferMoneyRequestDTO.java b/ff-admin/src/main/java/com/ff/game/api/request/ExchangeTransferMoneyRequestDTO.java index b9657df..3142f4d 100644 --- a/ff-admin/src/main/java/com/ff/game/api/request/ExchangeTransferMoneyRequestDTO.java +++ b/ff-admin/src/main/java/com/ff/game/api/request/ExchangeTransferMoneyRequestDTO.java @@ -27,7 +27,10 @@ public class ExchangeTransferMoneyRequestDTO extends GamesBaseRequestDTO { */ private String account; - + /** + * 租户密钥 + */ + private String tenantKey; /** @@ -51,8 +54,4 @@ public class ExchangeTransferMoneyRequestDTO extends GamesBaseRequestDTO { */ private Integer transferType; - /** - * 交易id - */ - private String orderId; } diff --git a/ff-admin/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java b/ff-admin/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java index 6df492f..0e18a76 100644 --- a/ff-admin/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java +++ b/ff-admin/src/main/java/com/ff/game/api/xk/service/impl/GamesXKServiceImpl.java @@ -303,25 +303,16 @@ public class GamesXKServiceImpl implements IGamesService { 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 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()) + .tenantKey(exchangeTransferMoneyRequestDTO.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); diff --git a/ff-admin/src/main/java/com/ff/game/domain/GameExchangeMoney.java b/ff-admin/src/main/java/com/ff/game/domain/GameExchangeMoney.java index d84c7b1..c7d60d2 100644 --- a/ff-admin/src/main/java/com/ff/game/domain/GameExchangeMoney.java +++ b/ff-admin/src/main/java/com/ff/game/domain/GameExchangeMoney.java @@ -69,9 +69,7 @@ public class GameExchangeMoney extends BaseEntity @Excel(name = "转账后金额(指定货币)") private BigDecimal currencyAfter; - /** 系统订单id */ - @Excel(name = "系统订单id") - private String orderId; + /** 转出类型 1游戏商转入到用户全部转出 2 用户转移到游戏商 3 游戏商转移额度到平台商 */ @Excel(name = "转出类型 1游戏商转入到用户全部转出 2 用户转移到游戏商 3 游戏商转移额度到平台商") diff --git a/ff-admin/src/main/resources/mapper/common/TenantGameQuotaFlowMapper.xml b/ff-admin/src/main/resources/mapper/common/TenantGameQuotaFlowMapper.xml index fef0349..db19465 100644 --- a/ff-admin/src/main/resources/mapper/common/TenantGameQuotaFlowMapper.xml +++ b/ff-admin/src/main/resources/mapper/common/TenantGameQuotaFlowMapper.xml @@ -105,7 +105,7 @@ + + where tenant_key = #{tenantKey} and quota_type = #{quotaType} + + - + - + + update ff_tenant_game_quota set balance = #{balance},version =version+1 + where tenant_key = #{tenantKey} and quota_type = #{quotaType} and version = #{version} + insert into ff_tenant_game_quota tenant_key, balance, + quota_type, version, create_by, create_time, update_by, update_time, - + #{tenantKey}, #{balance}, + #{quotaType}, #{version}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, - + @@ -65,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" tenant_key = #{tenantKey}, balance = #{balance}, + quota_type = #{quotaType}, version = #{version}, create_by = #{createBy}, create_time = #{createTime}, @@ -74,19 +84,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} - - - update ff_tenant_game_quota set balance = #{balance},version =version+1 - where tenant_key = #{tenantKey} and version = #{version} - - - delete from ff_tenant_game_quota where id = #{id} - delete from ff_tenant_game_quota where id in + delete from ff_tenant_game_quota where id in #{id} diff --git a/ff-admin/src/main/resources/mapper/common/TenantSecretKeyMapper.xml b/ff-admin/src/main/resources/mapper/common/TenantSecretKeyMapper.xml index 839ebc0..cb18bfe 100644 --- a/ff-admin/src/main/resources/mapper/common/TenantSecretKeyMapper.xml +++ b/ff-admin/src/main/resources/mapper/common/TenantSecretKeyMapper.xml @@ -1,15 +1,16 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + @@ -17,19 +18,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, tenant_key, tenant_sn, tenant_secret, tenant_status, create_by, create_time, update_by, update_time from ff_tenant_secret_key + select id, tenant_key, tenant_sn, tenant_secret, tenant_status, tenant_type, create_by, create_time, update_by, update_time from ff_tenant_secret_key - + @@ -44,7 +43,6 @@ and coin_after = #{coinAfter} and currency_before = #{currencyBefore} and currency_after = #{currencyAfter} - and order_id = #{orderId} and exchange_type = #{exchangeType} and status = #{status} @@ -69,7 +67,6 @@ coin_after, currency_before, currency_after, - order_id, exchange_type, status, create_by, @@ -89,7 +86,6 @@ #{coinAfter}, #{currencyBefore}, #{currencyAfter}, - #{orderId}, #{exchangeType}, #{status}, #{createBy}, @@ -113,7 +109,6 @@ coin_after = #{coinAfter}, currency_before = #{currencyBefore}, currency_after = #{currencyAfter}, - order_id = #{orderId}, exchange_type = #{exchangeType}, status = #{status}, create_by = #{createBy}, diff --git a/ff-admin/target/classes/mapper/game/GameExchangeMoneyMapper.xml b/ff-admin/target/classes/mapper/game/GameExchangeMoneyMapper.xml index 1e2b8e1..5c2d9b2 100644 --- a/ff-admin/target/classes/mapper/game/GameExchangeMoneyMapper.xml +++ b/ff-admin/target/classes/mapper/game/GameExchangeMoneyMapper.xml @@ -17,7 +17,6 @@ - @@ -27,7 +26,7 @@ - select id, tenant_key, currency_code, transaction_id, member_id, platform_code, balance, quota, coin_before, coin_after, currency_before, currency_after, order_id, exchange_type, status, create_by, create_time, update_by, update_time from ff_game_exchange_money + select id, tenant_key, currency_code, transaction_id, member_id, platform_code, balance, quota, coin_before, coin_after, currency_before, currency_after, exchange_type, status, create_by, create_time, update_by, update_time from ff_game_exchange_money