From e73d51df2fc2fc369c02eff3571a76f75b98a8ba Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 01 十一月 2024 13:14:08 +0800
Subject: [PATCH] Merge branch 'master-v4' of http://47.96.225.205:8888/r/flowerbackend-v2 into master-v4

---
 src/main/java/com/mzl/flower/service/impl/wallet/WalletBillRecordServiceImpl.java |   69 ++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 8 deletions(-)

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 fab1396..0420cbe 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
@@ -3,11 +3,13 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mzl.flower.config.security.SecurityUtils;
 import com.mzl.flower.constant.Constants;
 import com.mzl.flower.constant.LockConstants;
 import com.mzl.flower.dto.request.wallet.CreateWalletBillRecordDTO;
 import com.mzl.flower.dto.request.wallet.QueryWalletBillRecordDTO;
 import com.mzl.flower.dto.response.wallet.WalletBillRecordVO;
+import com.mzl.flower.dto.request.wallet.QueryWalletBillDTO;
 import com.mzl.flower.entity.payment.Transfer;
 import com.mzl.flower.entity.payment.TransferDetail;
 import com.mzl.flower.entity.wallet.WalletBillRecordDO;
@@ -21,9 +23,9 @@
 import com.mzl.flower.service.wallet.WalletBillRecordService;
 import com.mzl.flower.service.wallet.WalletService;
 import com.mzl.flower.utils.ExcelExportUtil;
+import com.mzl.flower.utils.UUIDGenerator;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
@@ -31,6 +33,7 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
@@ -69,6 +72,9 @@
     @Resource
     RedissonClient redissonClient;
 
+    @Resource
+    WalletBillRecordService walletBillRecordService;
+
     @Override
     public void create(CreateWalletBillRecordDTO dto) {
 
@@ -94,12 +100,27 @@
                 walletBillRecordDO.update("sys");
                 walletBillRecordMapper.updateById(walletBillRecordDO);
                 //更新钱包
-                WalletDO walletDO = walletService.getBySupplierId(walletBillRecordDO.getWalletId());
+                WalletDO walletDO = walletService.getOrCreateBySupplierId(walletBillRecordDO.getWalletId());
                 RLock lock = redissonClient.getLock(String.format(LockConstants.WALLET_ID_KEY, walletDO.getId()));
                 try {
                     if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
                         try {
                             if (!ObjectUtils.isEmpty(walletDO)) {
+                                WalletBillRecordDO walletBillRecordDO2 = new WalletBillRecordDO();
+                                walletBillRecordDO2.setId(UUIDGenerator.getUUID());
+                                walletBillRecordDO2.setSupplierId(walletDO.getSupplierId());
+                                walletBillRecordDO2.setWalletId(walletDO.getId());
+                                walletBillRecordDO2.setType(Constants.BILL_CHANGE_TYPE.withdraw.name());
+                                // 发起提现
+                                walletBillRecordDO2.setWithdrawType(Constants.BILL_WITHDRAW_TYPE.success.name());
+                                walletBillRecordDO2.setMethod(Constants.BILL_CHANGE_METHOD.reduce.name());
+                                walletBillRecordDO2.setOriginalAmount(walletDO.getWithdrawableAmount());
+                                walletBillRecordDO2.setChangeAmount(BigDecimal.ZERO);
+                                walletBillRecordDO2.setBalance(walletDO.getWithdrawableAmount());
+                                walletBillRecordDO2.create(SecurityUtils.getUserId());
+                                walletBillRecordDO.setId(UUIDGenerator.getUUID());
+                                // 保存账单明细
+                                walletBillRecordService.save(walletBillRecordDO);
                                 //提现中金额:减少提现中金额
                                 walletDO.setWithdrawingAmount(walletDO.getWithdrawingAmount().subtract(walletBillRecordDO.getChangeAmount()));
                                 //已提现金额:增加已提现金额
@@ -116,7 +137,8 @@
                 //回写提现状态
                 if (StringUtils.isEmpty(walletBillRecordDO.getWithdrawRecordId())) {
                     WalletWithdrawRecordDO withdrawRecordDO = walletWithdrawRecordMapper.selectById(walletBillRecordDO.getWithdrawRecordId());
-                    withdrawRecordDO.setWithdrawState(Constants.WALLET_WITHDRAW_STATE.SUCCESS.name());
+                    withdrawRecordDO.setWithdrawState(Constants.BILL_WITHDRAW_TYPE.success.name());
+                    walletBillRecordDO.setRemark("账户资金提现完成");
                     walletWithdrawRecordMapper.updateById(withdrawRecordDO);
                 }
 
@@ -124,16 +146,32 @@
                 walletBillRecordDO.setTransferState(Constants.SETTLEMENT_STATUS.FAILED.name());
                 walletBillRecordDO.update("sys");
                 walletBillRecordMapper.updateById(walletBillRecordDO);
-                WalletDO walletDO = walletService.getBySupplierId(walletBillRecordDO.getWalletId());
+                WalletDO walletDO = walletService.getOrCreateBySupplierId(walletBillRecordDO.getWalletId());
                 RLock lock = redissonClient.getLock(String.format(LockConstants.WALLET_ID_KEY, walletDO.getId()));
                 try {
                     if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
                         try {
                             if (!ObjectUtils.isEmpty(walletDO)) {
+                                // 2.新增一条账单明细
+                                WalletBillRecordDO walletBillRecordDO2 = new WalletBillRecordDO();
+                                walletBillRecordDO2.setId(UUIDGenerator.getUUID());
+                                walletBillRecordDO2.setSupplierId(walletDO.getSupplierId());
+                                walletBillRecordDO2.setWalletId(walletDO.getId());
+                                walletBillRecordDO2.setType(Constants.BILL_CHANGE_TYPE.withdraw.name());
+                                // 发起提现
+                                walletBillRecordDO2.setWithdrawType(Constants.BILL_WITHDRAW_TYPE.fail.name());
+                                walletBillRecordDO2.setMethod(Constants.BILL_CHANGE_METHOD.add.name());
+                                walletBillRecordDO2.setOriginalAmount(walletDO.getWithdrawableAmount());
+                                walletBillRecordDO2.setChangeAmount(walletBillRecordDO.getActualTransferAmount());
+                                walletBillRecordDO2.setBalance(walletDO.getWithdrawableAmount().add(walletBillRecordDO.getActualTransferAmount()));
+                                walletBillRecordDO2.create(SecurityUtils.getUserId());
+                                walletBillRecordDO.setId(UUIDGenerator.getUUID());
+                                // 保存账单明细
+                                walletBillRecordService.save(walletBillRecordDO);
                                 //提现中金额:减少提现中金额
-                                walletDO.setWithdrawingAmount(walletDO.getWithdrawingAmount().subtract(walletBillRecordDO.getChangeAmount()));
+                                walletDO.setWithdrawingAmount(walletDO.getWithdrawingAmount().subtract(walletBillRecordDO.getActualTransferAmount()));
                                 //可提现金额:增加可提现金额
-                                walletDO.setWithdrawableAmount(walletDO.getWithdrawableAmount().add(walletBillRecordDO.getChangeAmount()));
+                                walletDO.setWithdrawableAmount(walletDO.getWithdrawableAmount().add(walletBillRecordDO.getActualTransferAmount()));
                                 walletMapper.updateById(walletDO);
                             }
                         } finally {
@@ -146,7 +184,8 @@
                 //回写提现状态
                 if (StringUtils.isEmpty(walletBillRecordDO.getWithdrawRecordId())) {
                     WalletWithdrawRecordDO withdrawRecordDO = walletWithdrawRecordMapper.selectById(walletBillRecordDO.getWithdrawRecordId());
-                    withdrawRecordDO.setWithdrawState(Constants.WALLET_WITHDRAW_STATE.FAILURE.name());
+                    withdrawRecordDO.setWithdrawState(Constants.BILL_WITHDRAW_TYPE.fail.name());
+                    walletBillRecordDO.setRemark("账户资金提现失败");
                     walletWithdrawRecordMapper.updateById(withdrawRecordDO);
                 }
             }
@@ -172,7 +211,7 @@
             int a = 0;
             objs[a++] = sn; // 序号
             objs[a++] = o.getSupplierName()+":"+o.getSupplierId(); // 供应商信息
-            objs[a++] = o.getTypeStr(); // 变动类型
+            objs[a++] = o.getTypeName(); // 变动类型
             objs[a++] = o.getOriginalAmount(); // 原金额
             objs[a++] = o.getChangeAmount(); // 变动金额
             objs[a++] = o.getBalance(); //现余额
@@ -192,4 +231,18 @@
             log.error(e.getMessage(), e);
         }
     }
+
+    @Override
+    public Page<WalletBillRecordVO> getPage(Page page, QueryWalletBillDTO dto) {
+        List<WalletBillRecordVO> list = walletBillRecordMapper.getPage(page,dto);
+        page.setRecords(list);
+        return page;
+    }
+
+    @Override
+    public Page<WalletBillRecordVO> getPageByDesc(Page page, QueryWalletBillDTO dto) {
+        List<WalletBillRecordVO> list = walletBillRecordMapper.getPageByDesc(page,dto);
+        page.setRecords(list);
+        return page;
+    }
 }

--
Gitblit v1.9.3