From 46fb72d69411232913605fe3c012e054db68be8a Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 25 十月 2024 17:36:33 +0800
Subject: [PATCH] add:提现管理

---
 src/main/java/com/mzl/flower/dto/response/wallet/WalletWithdrawRecordVO.java          |   18 ++++++++
 src/main/java/com/mzl/flower/constant/Constants.java                                  |   14 +++++++
 src/main/java/com/mzl/flower/service/impl/wallet/WalletWithdrawRecordServiceImpl.java |   26 ++++--------
 src/main/java/com/mzl/flower/entity/wallet/WalletWithdrawRecordDO.java                |    6 +++
 src/main/java/com/mzl/flower/service/impl/wallet/WalletBillRecordServiceImpl.java     |   18 +++++++++
 src/main/java/com/mzl/flower/web/v2/wallet/WalletWithdrawRecordController.java        |   18 ++++++--
 src/main/java/com/mzl/flower/entity/wallet/WalletBillRecordDO.java                    |    3 +
 7 files changed, 80 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/mzl/flower/constant/Constants.java b/src/main/java/com/mzl/flower/constant/Constants.java
index 62c9958..3419ef4 100644
--- a/src/main/java/com/mzl/flower/constant/Constants.java
+++ b/src/main/java/com/mzl/flower/constant/Constants.java
@@ -645,4 +645,18 @@
         }
     }
 
+    public enum WALLET_WITHDRAW_TYPE {
+        BALANCE("余额提现");
+
+        WALLET_WITHDRAW_TYPE(String desc) {
+            this.desc = desc;
+        }
+
+        private String desc;
+
+        public String getDesc() {
+            return desc;
+        }
+    }
+
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/wallet/WalletWithdrawRecordVO.java b/src/main/java/com/mzl/flower/dto/response/wallet/WalletWithdrawRecordVO.java
index f5114db..7d19754 100644
--- a/src/main/java/com/mzl/flower/dto/response/wallet/WalletWithdrawRecordVO.java
+++ b/src/main/java/com/mzl/flower/dto/response/wallet/WalletWithdrawRecordVO.java
@@ -1,6 +1,7 @@
 package com.mzl.flower.dto.response.wallet;
 
 import com.mzl.flower.base.AbstractTransDTO;
+import com.mzl.flower.base.annotation.DictTrans;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -23,11 +24,23 @@
     @ApiModelProperty(value = "提现金额")
     private BigDecimal onceWithdrawAmount;
 
+    @ApiModelProperty(value = "提现类型")
+    @DictTrans(target = "withdrawTypeStr", codeType = "WALLET_WITHDRAW_TYPE")
+    private String withdrawType;
+
+    private String withdrawTypeStr;
+
     @ApiModelProperty(value = "提现状态(提现中、提现成功、提现失败)")
-    private Integer withdrawState;
+    @DictTrans(target = "withdrawStateStr", codeType = "WALLET_WITHDRAW_STATE")
+    private String withdrawState;
+
+    private String withdrawStateStr;
 
     @ApiModelProperty(value = "提现方式(微信)")
+    @DictTrans(target = "methodStr", codeType = "WALLET_WITHDRAW_METHOD")
     private String method;
+
+    private String methodStr;
 
     @ApiModelProperty(value = "审核人")
     private String approveBy;
@@ -36,8 +49,11 @@
     private LocalDateTime approveTime;
 
     @ApiModelProperty(value = "审核状态(待审核、已通过、已拒绝)")
+    @DictTrans(target = "approveStateStr", codeType = "WALLET_APPROVE_STATE")
     private String approveState;
 
+    private String approveStateStr;
+
     @ApiModelProperty(value = "不通过原因")
     private String rejectReason;
 
diff --git a/src/main/java/com/mzl/flower/entity/wallet/WalletBillRecordDO.java b/src/main/java/com/mzl/flower/entity/wallet/WalletBillRecordDO.java
index 5a732f0..b0f3d29 100644
--- a/src/main/java/com/mzl/flower/entity/wallet/WalletBillRecordDO.java
+++ b/src/main/java/com/mzl/flower/entity/wallet/WalletBillRecordDO.java
@@ -58,4 +58,7 @@
     @ApiModelProperty(value = "openId")
     private String openId;
 
+    @ApiModelProperty(value = "提现记录表ID")
+    private Long withdrawRecordId;
+
 }
diff --git a/src/main/java/com/mzl/flower/entity/wallet/WalletWithdrawRecordDO.java b/src/main/java/com/mzl/flower/entity/wallet/WalletWithdrawRecordDO.java
index 8da704f..663c459 100644
--- a/src/main/java/com/mzl/flower/entity/wallet/WalletWithdrawRecordDO.java
+++ b/src/main/java/com/mzl/flower/entity/wallet/WalletWithdrawRecordDO.java
@@ -40,6 +40,12 @@
     private BigDecimal onceWithdrawAmount;
 
     /**
+     * 提现类型
+     */
+    @ApiModelProperty(value = "提现类型")
+    private String withdrawType;
+
+    /**
      * 提现状态
      */
     @ApiModelProperty(value = "提现状态(提现中、提现成功、提现失败)")
diff --git a/src/main/java/com/mzl/flower/service/impl/wallet/WalletBillRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/wallet/WalletBillRecordServiceImpl.java
index d22cb11..7d1aa37 100644
--- a/src/main/java/com/mzl/flower/service/impl/wallet/WalletBillRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/wallet/WalletBillRecordServiceImpl.java
@@ -7,15 +7,18 @@
 import com.mzl.flower.entity.payment.TransferDetail;
 import com.mzl.flower.entity.wallet.WalletBillRecordDO;
 import com.mzl.flower.entity.wallet.WalletDO;
+import com.mzl.flower.entity.wallet.WalletWithdrawRecordDO;
 import com.mzl.flower.mapper.payment.TransferDetailMapper;
 import com.mzl.flower.mapper.payment.TransferMapper;
 import com.mzl.flower.mapper.wallet.WalletBillRecordMapper;
 import com.mzl.flower.mapper.wallet.WalletMapper;
+import com.mzl.flower.mapper.wallet.WalletWithdrawRecordMapper;
 import com.mzl.flower.service.wallet.WalletBillRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mzl.flower.service.wallet.WalletService;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 
@@ -44,6 +47,9 @@
 
     @Resource
     private WalletMapper walletMapper;
+
+    @Resource
+    private WalletWithdrawRecordMapper walletWithdrawRecordMapper;
     @Override
     public void create(CreateWalletBillRecordDTO dto) {
 
@@ -77,6 +83,12 @@
                     walletDO.setWithdrawnAmount(walletDO.getWithdrawnAmount().add(walletBillRecordDO.getChangeAmount()));
                     walletMapper.updateById(walletDO);
                 }
+                //回写提现状态
+                if (StringUtils.isEmpty(walletBillRecordDO.getWithdrawRecordId())) {
+                    WalletWithdrawRecordDO withdrawRecordDO = walletWithdrawRecordMapper.selectById(walletBillRecordDO.getWithdrawRecordId());
+                    withdrawRecordDO.setWithdrawState(Constants.WALLET_WITHDRAW_STATE.SUCCESS.name());
+                    walletWithdrawRecordMapper.updateById(withdrawRecordDO);
+                }
 
             } else if ("FAIL".equals(dStatus)) {
                 walletBillRecordDO.setTransferState(Constants.SETTLEMENT_STATUS.FAILED.name());
@@ -90,6 +102,12 @@
                     walletDO.setWithdrawableAmount(walletDO.getWithdrawableAmount().add(walletBillRecordDO.getChangeAmount()));
                     walletMapper.updateById(walletDO);
                 }
+                //回写提现状态
+                if (StringUtils.isEmpty(walletBillRecordDO.getWithdrawRecordId())) {
+                    WalletWithdrawRecordDO withdrawRecordDO = walletWithdrawRecordMapper.selectById(walletBillRecordDO.getWithdrawRecordId());
+                    withdrawRecordDO.setWithdrawState(Constants.WALLET_WITHDRAW_STATE.FAILURE.name());
+                    walletWithdrawRecordMapper.updateById(withdrawRecordDO);
+                }
             }
         }
     }
diff --git a/src/main/java/com/mzl/flower/service/impl/wallet/WalletWithdrawRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/wallet/WalletWithdrawRecordServiceImpl.java
index b377744..e6dd65d 100644
--- a/src/main/java/com/mzl/flower/service/impl/wallet/WalletWithdrawRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/wallet/WalletWithdrawRecordServiceImpl.java
@@ -121,25 +121,11 @@
                     withdrawRecordDO.setSupplierId(supplierDTO.getId());
                     withdrawRecordDO.setWithdrawState(Constants.WALLET_WITHDRAW_STATE.WAITING.name());
                     withdrawRecordDO.setMethod(Constants.WALLET_WITHDRAW_METHOD.WEIXIN.name());
+                    withdrawRecordDO.setWithdrawType(Constants.WALLET_WITHDRAW_TYPE.BALANCE.name());
                     withdrawRecordDO.create(SecurityUtils.getUserId());
                     // 保存余额提现记录
                     save(withdrawRecordDO);
 
-                    /*
-                    // 2.新增一条账单明细
-                    WalletBillRecordDO walletBillRecordDO=new WalletBillRecordDO();
-                    walletBillRecordDO.setSupplierId(supplierDTO.getId());
-                    walletBillRecordDO.setWalletId(walletDO.getId());
-                    // 提现
-                    walletBillRecordDO.setType(Constants.BILL_CHANGE_TYPE.withdraw.name());
-                    walletBillRecordDO.setMethod(Constants.BILL_CHANGE_METHOD.add.name());
-                    walletBillRecordDO.setOriginalAmount(walletDO.getWithdrawableAmount());
-                    walletBillRecordDO.setChangeAmount(dto.getAmount());
-                    walletBillRecordDO.setBalance(walletDO.getWithdrawableAmount().subtract(dto.getAmount()));
-
-                    // 保存账单明细
-                    walletBillRecordService.save(walletBillRecordDO);
-*/
 
                     // 3. 钱包更新
                     // 钱包可提现的钱等于当前钱包可提现的钱-提现的钱
@@ -192,6 +178,10 @@
         withdrawRecordDO.setApproveState(walletWithdrawRecordDTO.getApproveState());
         withdrawRecordDO.setApproveBy(SecurityUtils.getUserId());
         withdrawRecordDO.setApproveTime(LocalDateTime.now());
+        if(Constants.WALLET_APPROVE_STATE.REJECT.name().equals(walletWithdrawRecordDTO.getApproveState())){
+            //如果拒绝直接提现失败
+            withdrawRecordDO.setWithdrawState(Constants.WALLET_WITHDRAW_STATE.FAILURE.name());
+        }
         walletWithdrawRecordMapper.updateById(withdrawRecordDO);
 
         //审批通过之后写转账信息
@@ -202,7 +192,7 @@
             UserWechat wechat = wechatMapper.selectOne(new QueryWrapper<UserWechat>().eq("user_id", s.getUserId()));
 
             if (wechat == null) {
-                String msg = name + "未绑定账号无法结算";
+                String msg = name + "未绑定账号无法提现";
                 log.error(msg);
                 throw new ValidationException(msg);
             }
@@ -222,7 +212,9 @@
             walletBillRecordDO.setSupplierId(s.getId());
             walletBillRecordDO.setType(Constants.BILL_CHANGE_TYPE.withdraw.name());
             walletBillRecordDO.setMethod(Constants.BILL_CHANGE_METHOD.reduce.name());
-            walletBillRecordDO.setTransferId(transferReqDTO.getAppId());
+            walletBillRecordDO.setTransferId(transferReqDTO.getId());
+            walletBillRecordDO.setWithdrawRecordId(withdrawRecordDO.getId());
+            walletBillRecordDO.create();
             //提现金额
             BigDecimal withdrawAmount = withdrawRecordDO.getAmount();
 
diff --git a/src/main/java/com/mzl/flower/web/v2/wallet/WalletWithdrawRecordController.java b/src/main/java/com/mzl/flower/web/v2/wallet/WalletWithdrawRecordController.java
index d402fe2..c7e5eec 100644
--- a/src/main/java/com/mzl/flower/web/v2/wallet/WalletWithdrawRecordController.java
+++ b/src/main/java/com/mzl/flower/web/v2/wallet/WalletWithdrawRecordController.java
@@ -5,6 +5,7 @@
 import com.mzl.flower.base.BaseController;
 import com.mzl.flower.base.R;
 import com.mzl.flower.base.ReturnDataDTO;
+import com.mzl.flower.constant.Constants;
 import com.mzl.flower.dto.request.wallet.QueryWalletWithdrawDTO;
 import com.mzl.flower.dto.request.wallet.WalletWithdrawRecordDTO;
 import com.mzl.flower.dto.response.wallet.WalletWithdrawRecordVO;
@@ -26,10 +27,7 @@
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestParam;
 import com.mzl.flower.entity.wallet.WalletWithdrawRecordDO;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.Max;
 import javax.validation.constraints.Positive;
 
 /**
@@ -56,13 +54,23 @@
         return returnData(R.SUCCESS.getCode(), walletWithdrawRecordService.queryPage(dto, page));
     }
 
-    @PostMapping(value = "/edit")
-    @ApiOperation(value = "修改", httpMethod = "POST")
+    @PostMapping(value = "/pass")
+    @ApiOperation(value = "通过", httpMethod = "POST")
     public ResponseEntity update(@RequestBody WalletWithdrawRecordDTO walletWithdrawRecordDTO) {
+        walletWithdrawRecordDTO.setApproveState(Constants.WALLET_APPROVE_STATE.APPROVE.name());
         walletWithdrawRecordService.updateWallet(walletWithdrawRecordDTO);
         return returnData(R.SUCCESS.getCode(), null);
     }
 
+    @PostMapping(value = "/refuse")
+    @ApiOperation(value = "拒绝", httpMethod = "POST")
+    public ResponseEntity refuse(@RequestBody WalletWithdrawRecordDTO walletWithdrawRecordDTO) {
+        walletWithdrawRecordDTO.setApproveState(Constants.WALLET_APPROVE_STATE.REJECT.name());
+        walletWithdrawRecordService.updateWallet(walletWithdrawRecordDTO);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+
     @PostMapping("")
     public ResponseEntity<ReturnDataDTO> create(@Validated @RequestBody CreateWalletWithdrawRecordDTO walletWithdrawRecordDTO) {
 

--
Gitblit v1.9.3