Commit 887594ec2eb5a63ddda3d1378742efe5c4be4344

Authored by YunaiV
1 parent 5c4fedb6

fix: 【mall】兼容纯积分订单的退款逻辑

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) {