From a4ed0f250009167453ca637ce042ef8e0b69f613 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 24 十月 2026 19:30:00 +0800
Subject: [PATCH] feat(aftersales): 增加售后退货流程管理功能
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java | 36 +++++++++++++++++++++++++++++-------
1 files changed, 29 insertions(+), 7 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 0aa1fd8..30b1ad6 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
@@ -6,16 +6,18 @@
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLineSaveReqVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
+import cn.iocoder.yudao.module.mes.api.event.MesReturnSalesProgressEvent;
+import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLineMapper;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
+import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
+import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -26,11 +28,12 @@
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
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;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_RQC_SOURCE_INVALID;
/**
* MES 閿�鍞��璐у崟琛� Service 瀹炵幇绫�
*
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@Service
@Validated
@@ -43,12 +46,14 @@
@Lazy
private MesWmReturnSalesService returnSalesService;
@Resource
- private MesMdItemService itemService;
+ private MesMdmItemService mdmItemService;
@Resource
private MesWmBatchService batchService;
@Resource
@Lazy
private MesWmReturnSalesDetailService returnSalesDetailService;
+ @Resource
+ private ApplicationEventPublisher eventPublisher;
@Override
public Long createReturnSalesLine(MesWmReturnSalesLineSaveReqVO createReqVO) {
@@ -155,9 +160,9 @@
* @param batchId 鎵规ID
*/
private void validateItemBatchManagement(Long returnId, Long itemId, Long batchId) {
- MesMdItemDO item = itemService.validateItemExistsAndEnable(itemId);
+ MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(itemId);
// 濡傛灉鐗╂枡鍚敤浜嗘壒娆$鐞嗭紝鍒欏繀椤婚�夋嫨鎵规
- if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) {
+ if (Boolean.TRUE.equals(item.getIsBatchManaged()) && batchId == null) {
throw exception(MD_ITEM_BATCH_REQUIRED);
}
// 鏍¢獙鎵规瀛樺湪涓斿睘浜庡綋鍓嶇墿鏂欏拰瀹㈡埛
@@ -172,6 +177,14 @@
public void updateReturnSalesLineWhenRqcFinish(Long sourceLineId, Long sourceDocId, Integer checkResult,
BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity) {
MesWmReturnSalesLineDO sourceLine = validateReturnSalesLineExists(sourceLineId);
+ if (sourceDocId != null) {
+ MesWmReturnSalesDO sourceDoc = returnSalesService.validateReturnSalesExists(sourceDocId);
+ if (!sourceDocId.equals(sourceLine.getReturnId())
+ || !MesWmReturnSalesStatusEnum.CONFIRMED.getStatus().equals(sourceDoc.getStatus())
+ || !MesWmQualityStatusEnum.PENDING.getStatus().equals(sourceLine.getQualityStatus())) {
+ throw exception(WM_RETURN_SALES_RQC_SOURCE_INVALID);
+ }
+ }
boolean hasUnqualified = unqualifiedQuantity != null && unqualifiedQuantity.compareTo(BigDecimal.ZERO) > 0;
boolean hasQualified = qualifiedQuantity != null && qualifiedQuantity.compareTo(BigDecimal.ZERO) > 0;
@@ -210,7 +223,16 @@
boolean allInspected = !CollUtil.contains(allLines,
line -> Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PENDING.getStatus()));
if (allInspected) {
- returnSalesService.updateReturnSalesStatus(sourceDocId, MesWmReturnSalesStatusEnum.APPROVING.getStatus());
+ MesWmReturnSalesDO returnSales = returnSalesService.validateReturnSalesExists(sourceDocId);
+ if (MesWmReturnSalesStatusEnum.CONFIRMED.getStatus().equals(returnSales.getStatus())) {
+ returnSalesService.updateReturnSalesStatus(sourceDocId, MesWmReturnSalesStatusEnum.APPROVING.getStatus());
+ if (returnSales.getAfterSaleReturnId() != null) {
+ boolean failed = CollUtil.contains(allLines,
+ line -> MesWmQualityStatusEnum.FAIL.getStatus().equals(line.getQualityStatus()));
+ eventPublisher.publishEvent(new MesReturnSalesProgressEvent(sourceDocId,
+ MesReturnSalesProgressEvent.Stage.QUALITY_FINISHED, failed ? "鍚笉鍚堟牸鍝�" : "鍚堟牸"));
+ }
+ }
}
}
}
--
Gitblit v1.9.3