From 9d42afc9c2fd5ef2ba09b56ba3a5475801b9e4d5 Mon Sep 17 00:00:00 2001 From: Cui Zhi Feng <7426394+wuxixiaocui@user.noreply.gitee.com> Date: 星期二, 29 十月 2024 11:34:34 +0800 Subject: [PATCH] 统计 商品管理 用户管理 订单管理 --- src/main/java/com/mzl/flower/service/impl/wallet/WalletWithdrawRecordServiceImpl.java | 66 ++++++++++++++++++++++++-------- 1 files changed, 49 insertions(+), 17 deletions(-) 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 35abe09..46ccee8 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 @@ -23,6 +23,7 @@ import com.mzl.flower.mapper.supplier.SupplierMapper; import com.mzl.flower.mapper.system.UserWechatMapper; 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.payment.UserPaymentV3Service; import com.mzl.flower.service.supplier.SupplierService; @@ -38,6 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; @@ -72,6 +74,8 @@ private final WalletBillRecordMapper walletBillRecordMapper; private final WalletBillRecordService walletBillRecordService; + + private final WalletMapper walletMapper; @Autowired @@ -113,29 +117,25 @@ // 1.新增一条余额提现记录 WalletWithdrawRecordDO withdrawRecordDO = new WalletWithdrawRecordDO(); + //原金额 + withdrawRecordDO.setOriginalAmount(walletDO.getWithdrawableAmount()); + // 变动金额 + withdrawRecordDO.setChangeAmount(dto.getAmount()); + // 余额 + withdrawRecordDO.setBalance(walletDO.getWithdrawableAmount().subtract(dto.getAmount())); withdrawRecordDO.setAmount(dto.getAmount()); 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.setApproveState(Constants.WALLET_APPROVE_STATE.WAITING.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. 钱包更新 // 钱包可提现的钱等于当前钱包可提现的钱-提现的钱 @@ -188,6 +188,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); //审批通过之后写转账信息 @@ -198,7 +202,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); } @@ -218,7 +222,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(); @@ -241,9 +247,35 @@ paymentV3Service.doBatchTransfer(transferReqDTO, SecurityUtils.getUserId()); } + //记录转账状态,定时任务定时获取状态并更新钱包交易记录表信息 + walletBillRecordDO.setRemark("账户资金提现中"); walletBillRecordMapper.insert(walletBillRecordDO); //不需要更新结算单了,此时提现的金额和计算单上的金额不一致 + } + if (Constants.WALLET_APPROVE_STATE.REJECT.name().equals(walletWithdrawRecordDTO.getApproveState())) { + //更新钱包 + Supplier s = supplierMapper.selectById(withdrawRecordDO.getSupplierId()); + + WalletDO walletDO = walletService.getOrCreateBySupplierId(s.getId()); + 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)) { + //提现中金额:审核失败体现中金额扣减 + walletDO.setWithdrawingAmount(walletDO.getWithdrawingAmount().subtract(withdrawRecordDO.getAmount())); + //可提现金额:审核失败可提现金额增加 + walletDO.setWithdrawableAmount(walletDO.getWithdrawableAmount().add(withdrawRecordDO.getAmount())); + walletMapper.updateById(walletDO); + } + } finally { + lock.unlock(); + } + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } } public String format(LocalDateTime dateTime, String format) { -- Gitblit v1.9.3