From 53ebaf2c56879a87f46fb936da8304be2cddbb30 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 24 Jun 2024 15:39:05 +0800
Subject: [PATCH] 充值提现

---
 src/main/java/cc/mrbird/febs/mall/dto/WithdrawalBalanceDto.java                   |    7 --
 src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java               |    1 
 src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java                      |   16 +++++
 src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java |   34 +++++++----
 src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java       |   29 +++++----
 src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java              |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java      |   33 ++++++++--
 src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java                            |    3 +
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java         |    7 ++
 src/main/java/cc/mrbird/febs/mall/dto/ApiChargeBalanceDto.java                    |    7 --
 src/main/java/cc/mrbird/febs/mall/vo/ApiStartGameVo.java                          |    3 +
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java            |    3 +
 src/main/java/cc/mrbird/febs/common/enumerates/GameFlowTypeEnum.java              |    2 
 13 files changed, 101 insertions(+), 46 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index ae59db1..d358127 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,9 +5,12 @@
 
 @Getter
 public enum DataDictionaryEnum {
+
     //充值金额
     USDT_PRICE("USDT_PRICE","USDT_PRICE"),
     //充值金额
+    WITHDRAW_AMOUNT_FEE("WITHDRAW_AMOUNT_FEE","WITHDRAW_AMOUNT_FEE"),
+    //充值金额
     WITHDRAW_AMOUNT("WITHDRAW_AMOUNT","WITHDRAW_AMOUNT"),
     //充值金额
     CHARGE_AMOUNT("CHARGE_AMOUNT","CHARGE_AMOUNT"),
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/GameFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/GameFlowTypeEnum.java
index 683dacd..a88d5ae 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/GameFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/GameFlowTypeEnum.java
@@ -9,6 +9,8 @@
  **/
 @Getter
 public enum GameFlowTypeEnum {
+    PLAYER_WITHDRAW_NO(6,"提现失败"),
+    PLAYER_WITHDRAW(5,"提现至:{},手续费:{}"),
     PLAYER_CHARGE(4,"充值"),
     OWNER_PERK(3,"开奖结果:{},{}"),
     PLAYER_PERK(2,"开奖结果:{},{},您的选择:{}"),
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
index 7b8609b..ffbeba9 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
@@ -4,9 +4,7 @@
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.common.enumerates.FlowTypeNewEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeNewEnum;
-import cc.mrbird.febs.common.enumerates.ProductEnum;
+import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.common.utils.ShareCodeUtil;
 import cc.mrbird.febs.common.utils.excl.ExcelSheetPO;
@@ -122,10 +120,17 @@
             }
             mallMemberWithdraw.setStatus(3);
             mallMemberWithdrawMapper.updateById(mallMemberWithdraw);
+            MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberWithdraw.getMemberId());
+            mallMemberWallet.setBalance(mallMemberWallet.getBalance().add(mallMemberWithdraw.getAmount().abs()));
+            mallMemberWalletMapper.updateBalanceWithVersion(mallMemberWallet);
 
-            MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(mallMemberWithdraw.getMemberId());
-            mallMemberAmount.setFcmCntAva(mallMemberAmount.getFcmCntAva().subtract(mallMemberWithdraw.getAmount()));
-            mallMemberAmountMapper.updateFcmCntAvaById(mallMemberAmount);
+            mallMoneyFlowService.addMoneyFlow(
+                    mallMemberWithdraw.getMemberId(),
+                    mallMemberWithdraw.getAmount().abs(),
+                    GameFlowTypeEnum.PLAYER_WITHDRAW_NO.getValue(),
+                    MallUtils.getOrderNum("TX"),
+                    GameFlowTypeEnum.PLAYER_WITHDRAW_NO.getDescrition());
+
         }
         return new FebsResponse().success();
     }
@@ -145,15 +150,15 @@
             mallMemberWithdraw.setStatus(2);
             mallMemberWithdrawMapper.updateById(mallMemberWithdraw);
 
-            String orderNo = MallUtils.getOrderNum("BF");
             mallMoneyFlowService.addMoneyFlow(
                     mallMemberWithdraw.getMemberId(),
                     mallMemberWithdraw.getAmount(),
-                    MoneyFlowTypeNewEnum.FCM_INSIDE_OUT.getValue(),
-                    orderNo,
-                    mallMemberWithdraw.getId(),
-                    FlowTypeNewEnum.FCM_COIN.getValue(),
-                    MoneyFlowTypeNewEnum.FCM_INSIDE_OUT.getDescrition());
+                    GameFlowTypeEnum.PLAYER_WITHDRAW.getValue(),
+                    MallUtils.getOrderNum("TX"),
+                    StrUtil.format(
+                            GameFlowTypeEnum.PLAYER_WITHDRAW.getDescrition(),
+                            mallMemberWithdraw.getRemark(),
+                            mallMemberWithdraw.getAmountFee()));
         }
         return new FebsResponse().success();
     }
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
index 1a6c9f6..41de6d5 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
@@ -45,6 +45,13 @@
         return memberService.findMemberInfo();
     }
 
+
+    @ApiOperation(value = "GUESS绑定充值提现地址", notes = "GUESS绑定充值提现地址")
+    @PostMapping(value = "/bindAddress")
+    public FebsResponse bindAddress(@RequestBody @Valid ApiBindAddressDto apiBindAddressDto) {
+        return memberService.bindAddress(apiBindAddressDto);
+    }
+
     @ApiOperation(value = "GUESS充值", notes = "GUESS充值")
     @PostMapping(value = "/chargeBalance")
     public FebsResponse chargeBalance(@RequestBody @Valid ApiChargeBalanceDto apiChargeBalanceDto) {
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java
new file mode 100644
index 0000000..e2c0c87
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiBindAddressDto.java
@@ -0,0 +1,16 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiAddCommentDtos", description = "参数接收类")
+public class ApiBindAddressDto {
+
+    @NotNull(message = "地址不能为空")
+    @ApiModelProperty(value = "地址", example = "1")
+    private String address;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiChargeBalanceDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiChargeBalanceDto.java
index 787eee5..141e8e1 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/ApiChargeBalanceDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiChargeBalanceDto.java
@@ -15,11 +15,4 @@
     @ApiModelProperty(value = "金额", example = "1")
     private BigDecimal amount;
 
-    @NotNull(message = "地址不能为空")
-    @ApiModelProperty(value = "地址", example = "1")
-    private String address;
-
-    @NotNull(message = "交易密码不能为空")
-    @ApiModelProperty(value = "交易密码", example = "1")
-    private String tradePassword;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalBalanceDto.java b/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalBalanceDto.java
index e0d6c8c..98b3c54 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalBalanceDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalBalanceDto.java
@@ -19,11 +19,4 @@
     @ApiModelProperty(value = "金额")
     private BigDecimal amount;
 
-    @NotBlank(message = "参数不能为空")
-    @ApiModelProperty(value = "交易密码")
-    private String tradePwd;
-
-    @NotBlank(message = "地址不能为空")
-    @ApiModelProperty(value = "地址")
-    private String address;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
index 99c31b3..5a6ff90 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -98,4 +98,6 @@
     FebsResponse moneyFlowInside(MoneyFlowDto moneyFlowDto);
 
     FebsResponse chargeBalance(ApiChargeBalanceDto apiChargeBalanceDto);
+
+    FebsResponse bindAddress(ApiBindAddressDto apiBindAddressDto);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index f4abe29..2e94d45 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -935,6 +935,10 @@
     public FebsResponse chargeBalance(ApiChargeBalanceDto apiChargeBalanceDto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
         MallMember mallMember = this.baseMapper.selectById(memberId);
+        if(ObjectUtil.isEmpty(mallMember.getBindPhone())){
+            throw new FebsException("请绑定充值提取地址");
+        }
+        String address = mallMember.getBindPhone();
         BigDecimal amount = apiChargeBalanceDto.getAmount();
         DataDictionaryCustom chargeAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                 DataDictionaryEnum.CHARGE_AMOUNT.getType(),
@@ -945,21 +949,34 @@
             throw new FebsException("充值金额需要大于"+chargeAmount);
         }
 
-        if (StrUtil.isBlank(mallMember.getTradePassword())) {
-            throw new FebsException("请设置交易密码");
-        }
-
-        if (!mallMember.getTradePassword().equals(SecureUtil.md5(apiChargeBalanceDto.getTradePassword()))) {
-            throw new FebsException("交易密码错误");
-        }
         MallMemberCharge mallMemberCharge = new MallMemberCharge();
         mallMemberCharge.setMemberId(memberId);
         mallMemberCharge.setAmount(amount);
-        mallMemberCharge.setAddress(apiChargeBalanceDto.getAddress());
+        mallMemberCharge.setAddress(address);
         mallMemberCharge.setState(1);
         mallMemberChargeMapper.insert(mallMemberCharge);
 
+        return new FebsResponse().success().message("操作成功");
+    }
 
+    @Override
+    public FebsResponse bindAddress(ApiBindAddressDto apiBindAddressDto) {
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+
+        MallMember mallMember = this.baseMapper.selectById(memberId);
+        if(ObjectUtil.isNotEmpty(mallMember.getBindPhone())){
+            throw new FebsException("账号已绑定,请勿重复提交");
+        }
+
+        String address = apiBindAddressDto.getAddress().toLowerCase();
+        QueryWrapper<MallMember> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("bind_phone",address);
+        List<MallMember> mallMembers = this.baseMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isNotEmpty(mallMembers)){
+            throw new FebsException("请使用未绑定的地址");
+        }
+        mallMember.setBindPhone(address);
+        this.baseMapper.updateById(mallMember);
         return new FebsResponse().success().message("操作成功");
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
index 8f347cc..6218867 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
@@ -197,6 +197,7 @@
         ApiStartGameVo apiStartGameVo = new ApiStartGameVo();
         apiStartGameVo.setRoomType(gameRoom.getRoomType());
         apiStartGameVo.setRoomId(gameRoom.getId());
+        apiStartGameVo.setGameId(gameGame.getId());
         apiStartGameVo.setPassword(gameRoom.getPassword());
         apiStartGameVo.setState(gameRoom.getState());
         apiStartGameVo.setCreatedTime(gameGame.getCreatedTime());
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java
index 1f51e8a..c0027a3 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java
@@ -183,11 +183,8 @@
     public void withdrawalBalance(WithdrawalBalanceDto withdrawalBalanceDto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
         MallMember mallMember = mallMemberService.getById(memberId);
-        if (StrUtil.isBlank(mallMember.getTradePassword())) {
-            throw new FebsException("未设置支付密码");
-        }
-        if (!mallMember.getTradePassword().equals(SecureUtil.md5(withdrawalBalanceDto.getTradePwd()))) {
-            throw new FebsException("支付密码错误");
+        if(ObjectUtil.isEmpty(mallMember.getBindPhone())){
+            throw new FebsException("请绑定充值提取地址");
         }
 
         DataDictionaryCustom withdrawAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
@@ -197,12 +194,26 @@
         BigDecimal amount = withdrawalBalanceDto.getAmount();
         BigDecimal withdrawAmount = new BigDecimal(withdrawAmountDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
         if(withdrawAmount.compareTo(amount) > 0){
-            throw new FebsException("至少为"+withdrawAmount);
+            throw new FebsException("最小金额:"+withdrawAmount);
         }
 
-        MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
-        mallMemberAmount.setFcmCntAva(mallMemberAmount.getFcmCntAva().subtract(amount));
-        mallMemberAmountMapper.updateFcmCntAvaById(mallMemberAmount);
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId());
+        BigDecimal balance = mallMemberWallet.getBalance();
+        if(amount.compareTo(balance) > 0){
+            throw new FebsException("账户余额不足");
+        }
+
+        DataDictionaryCustom feeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.WITHDRAW_AMOUNT_FEE.getType(),
+                DataDictionaryEnum.WITHDRAW_AMOUNT_FEE.getCode()
+        );
+        BigDecimal fee = new BigDecimal(feeDic.getValue())
+                .multiply(new BigDecimal("0.01"))
+                .multiply(amount)
+                .setScale(2, BigDecimal.ROUND_DOWN);
+
+        mallMemberWallet.setBalance(mallMemberWallet.getBalance().subtract(amount));
+        mallMemberWalletMapper.updateBalanceWithVersion(mallMemberWallet);
 
         String orderNo = MallUtils.getOrderNum("W");
         MallMemberWithdraw withdraw = new MallMemberWithdraw();
@@ -210,9 +221,8 @@
         withdraw.setMemberId(memberId);
         withdraw.setAmount(amount.negate());
         withdraw.setStatus(1);
-        withdraw.setAmountFee(BigDecimal.ZERO);
-        withdraw.setRemark(withdrawalBalanceDto.getAddress());
+        withdraw.setAmountFee(fee);
+        withdraw.setRemark(mallMember.getBindPhone());
         this.baseMapper.insert(withdraw);
-
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiStartGameVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiStartGameVo.java
index ed5b9ef..a4e4759 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiStartGameVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiStartGameVo.java
@@ -14,6 +14,9 @@
     @ApiModelProperty(value = "房间ID")
     private Long roomId;
 
+    @ApiModelProperty(value = "游戏ID")
+    private Long gameId;
+
     @ApiModelProperty(value = "房间类型 1-初级房2-土豪房3-尊爵房")
     private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
index 4dd994d..0665eda 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
@@ -25,6 +25,9 @@
     @ApiModelProperty(value = "邀请码")
     private String inviteId;
 
+    @ApiModelProperty(value = "绑定充值提现地址")
+    private String bindPhone;
+
     /**
      * 账户状态;1-正常 2-禁用
      */

--
Gitblit v1.9.1