Commit 887594ec2eb5a63ddda3d1378742efe5c4be4344
1 parent
5c4fedb6
fix: 【mall】兼容纯积分订单的退款逻辑
Showing
1 changed file
with
13 additions
and
4 deletions
yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceImpl.java
| 1 | package cn.iocoder.yudao.module.trade.service.aftersale; | 1 | package cn.iocoder.yudao.module.trade.service.aftersale; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.map.MapUtil; | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | +import cn.hutool.core.util.ObjUtil; | ||
| 4 | import cn.hutool.core.util.ObjectUtil; | 5 | import cn.hutool.core.util.ObjectUtil; |
| 5 | import cn.hutool.core.util.StrUtil; | 6 | import cn.hutool.core.util.StrUtil; |
| 6 | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | 7 | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| @@ -352,12 +353,20 @@ public class AfterSaleServiceImpl implements AfterSaleService { | @@ -352,12 +353,20 @@ public class AfterSaleServiceImpl implements AfterSaleService { | ||
| 352 | throw exception(AFTER_SALE_REFUND_FAIL_STATUS_NOT_WAIT_REFUND); | 353 | throw exception(AFTER_SALE_REFUND_FAIL_STATUS_NOT_WAIT_REFUND); |
| 353 | } | 354 | } |
| 354 | 355 | ||
| 355 | - // 发起退款单。注意,需要在事务提交后,再进行发起,避免重复发起 | ||
| 356 | - createPayRefund(userIp, afterSale); | 356 | + Integer newStatus; |
| 357 | + if (ObjUtil.equals(afterSale.getRefundPrice(), 0)) { | ||
| 358 | + // 特殊:退款为 0 的订单,直接标记为完成(积分商城)。关联案例:https://t.zsxq.com/AQEvL | ||
| 359 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.WAIT_REFUND.getStatus(), new AfterSaleDO() | ||
| 360 | + .setStatus(AfterSaleStatusEnum.COMPLETE.getStatus()).setRefundTime(LocalDateTime.now())); | ||
| 361 | + newStatus = AfterSaleStatusEnum.COMPLETE.getStatus(); | ||
| 362 | + } else { | ||
| 363 | + // 发起退款单。注意,需要在事务提交后,再进行发起,避免重复发起 | ||
| 364 | + createPayRefund(userIp, afterSale); | ||
| 365 | + newStatus = afterSale.getStatus(); // 特殊:这里状态不变,而是最终 updateAfterSaleRefunded 处理!!! | ||
| 366 | + } | ||
| 357 | 367 | ||
| 358 | // 记录售后日志 | 368 | // 记录售后日志 |
| 359 | - AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), | ||
| 360 | - afterSale.getStatus()); // 特殊:这里状态不变,而是最终 updateAfterSaleRefunded 处理!!! | 369 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), newStatus); |
| 361 | } | 370 | } |
| 362 | 371 | ||
| 363 | private void createPayRefund(String userIp, AfterSaleDO afterSale) { | 372 | private void createPayRefund(String userIp, AfterSaleDO afterSale) { |