From b12f232f5612f4fe37c78d26b06a1c04d6b22f30 Mon Sep 17 00:00:00 2001 From: ziin Date: Tue, 6 Jan 2026 19:40:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(service):=20=E6=8F=90=E7=8E=B0=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E6=97=B6=E5=90=8C=E6=AD=A5=E6=89=A3=E5=87=8F=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E5=86=BB=E7=BB=93=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...eyboardTenantWithdrawOrderServiceImpl.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/service/tenantwithdraworder/KeyboardTenantWithdrawOrderServiceImpl.java b/keyboard-server/src/main/java/com/yolo/keyboard/service/tenantwithdraworder/KeyboardTenantWithdrawOrderServiceImpl.java index 4d99f82..3d19e43 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/service/tenantwithdraworder/KeyboardTenantWithdrawOrderServiceImpl.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/service/tenantwithdraworder/KeyboardTenantWithdrawOrderServiceImpl.java @@ -3,7 +3,9 @@ package com.yolo.keyboard.service.tenantwithdraworder; import com.yolo.keyboard.controller.admin.tenantwithdraworder.vo.KeyboardTenantWithdrawOrderPageReqVO; import com.yolo.keyboard.controller.admin.tenantwithdraworder.vo.KeyboardTenantWithdrawOrderRespVO; import com.yolo.keyboard.controller.admin.tenantwithdraworder.vo.KeyboardTenantWithdrawOrderSaveReqVO; +import com.yolo.keyboard.dal.dataobject.tenantbalance.TenantBalanceDO; import com.yolo.keyboard.dal.dataobject.tenantwithdraworder.KeyboardTenantWithdrawOrderDO; +import com.yolo.keyboard.dal.mysql.tenantbalance.TenantBalanceMapper; import com.yolo.keyboard.dal.mysql.tenantwithdraworder.KeyboardTenantWithdrawOrderMapper; import com.yolo.keyboard.framework.common.pojo.PageResult; import com.yolo.keyboard.framework.common.util.object.BeanUtils; @@ -15,7 +17,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -39,6 +43,9 @@ public class KeyboardTenantWithdrawOrderServiceImpl implements KeyboardTenantWit @Resource private TenantMapper tenantMapper; + @Resource + private TenantBalanceMapper tenantBalanceMapper; + @Override public Long createTenantWithdrawOrder(KeyboardTenantWithdrawOrderSaveReqVO createReqVO) { // 插入 @@ -50,12 +57,36 @@ public class KeyboardTenantWithdrawOrderServiceImpl implements KeyboardTenantWit } @Override + @Transactional public void updateTenantWithdrawOrder(KeyboardTenantWithdrawOrderSaveReqVO updateReqVO) { // 校验存在 - validateTenantWithdrawOrderExists(updateReqVO.getId()); - // 更新 + KeyboardTenantWithdrawOrderDO existingOrder = tenantWithdrawOrderMapper.selectById(updateReqVO.getId()); + if (existingOrder == null) { + throw exception(TENANT_WITHDRAW_ORDER_NOT_EXISTS); + } + + // 更新订单 KeyboardTenantWithdrawOrderDO updateObj = BeanUtils.toBean(updateReqVO, KeyboardTenantWithdrawOrderDO.class); tenantWithdrawOrderMapper.updateById(updateObj); + + // 如果提现状态更新为成功(PAID),则扣除提现用户的冻结金额 + String newStatus = updateReqVO.getStatus(); + if ("PAID".equals(newStatus) && !"PAID".equals(existingOrder.getStatus())) { + // 获取提现用户的余额记录 + TenantBalanceDO balance = tenantBalanceMapper.selectById(existingOrder.getTenantId()); + if (balance != null) { + // 扣除冻结金额 + BigDecimal frozenAmt = balance.getFrozenAmt() != null ? balance.getFrozenAmt() : BigDecimal.ZERO; + BigDecimal withdrawAmount = existingOrder.getAmount(); + BigDecimal newFrozenAmt = frozenAmt.subtract(withdrawAmount); + // 确保冻结金额不为负数 + if (newFrozenAmt.compareTo(BigDecimal.ZERO) < 0) { + newFrozenAmt = BigDecimal.ZERO; + } + balance.setFrozenAmt(newFrozenAmt); + tenantBalanceMapper.updateById(balance); + } + } } @Override