From 14c80fbd16a51a355138345ecf69df9ca37746bf Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期五, 06 十一月 2026 09:18:32 +0800
Subject: [PATCH] 完善售后退货联动和订单作废保护
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
index d56b908..1d77b1a 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
@@ -14,16 +14,20 @@
import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
+import cn.iocoder.yudao.module.aftersales.api.AfterSaleTicketApi;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.invalidParamException;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.MD_ITEM_BATCH_REQUIRED;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_LINE_NOT_EXISTS;
@@ -49,6 +53,8 @@
@Resource
@Lazy
private MesWmReturnSalesDetailService returnSalesDetailService;
+ @Resource
+ private ObjectProvider<AfterSaleTicketApi> afterSaleTicketApiProvider;
@Override
public Long createReturnSalesLine(MesWmReturnSalesLineSaveReqVO createReqVO) {
@@ -169,6 +175,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void updateReturnSalesLineWhenRqcFinish(Long sourceLineId, Long sourceDocId, Integer checkResult,
BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity) {
MesWmReturnSalesLineDO sourceLine = validateReturnSalesLineExists(sourceLineId);
@@ -207,10 +214,21 @@
// 2. 妫�鏌ラ��璐у崟涓嬫槸鍚﹁繕鏈夊緟妫�楠岀殑琛岋紝鑻ュ叏妫�瀹屽垯灏嗛��璐у崟鐘舵�佽涓�"寰呬笂鏋�"
if (sourceDocId != null) {
List<MesWmReturnSalesLineDO> allLines = returnSalesLineMapper.selectListByReturnId(sourceDocId);
- boolean allInspected = !CollUtil.contains(allLines,
- line -> Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PENDING.getStatus()));
+ boolean allInspected = CollUtil.isNotEmpty(allLines) && allLines.stream().allMatch(line ->
+ Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PASS.getStatus())
+ || Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.FAIL.getStatus()));
if (allInspected) {
returnSalesService.updateReturnSalesStatus(sourceDocId, MesWmReturnSalesStatusEnum.APPROVING.getStatus());
+ MesWmReturnSalesDO source = returnSalesService.validateReturnSalesExists(sourceDocId);
+ if (source.getAfterSaleReturnId() != null) {
+ AfterSaleTicketApi api = afterSaleTicketApiProvider.getIfAvailable();
+ if (api == null) throw invalidParamException("鍞悗鏈嶅姟涓嶅彲鐢紝鏃犳硶鍚屾閫�璐ф楠岀粨鏋�");
+ boolean hasFailed = allLines.stream().anyMatch(line ->
+ Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.FAIL.getStatus()));
+ var response = api.onReturnQualityFinished(source.getAfterSaleReturnId(), hasFailed ? "瀛樺湪涓嶅悎鏍�" : "鍚堟牸", null);
+ if (response == null || !Boolean.TRUE.equals(response.getCheckedData()))
+ throw invalidParamException("鍞悗閫�璐ф楠岀粨鏋滃悓姝ュけ璐�");
+ }
}
}
}
--
Gitblit v1.9.3