From f02d0df2f1dfc7a8b775cf50d45375e57628a5ef Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 10 十一月 2026 11:26:22 +0800
Subject: [PATCH] feat(ncr): 完善NCR处置联动逻辑与关闭校验
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java | 38 +++++++++++++++++++++++++++++++-------
1 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
index 32f0981..7ac73d0 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
@@ -11,6 +11,7 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesDetailMapper;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
+import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
@@ -65,7 +66,11 @@
@Override
public void updateReturnSalesDetail(MesWmReturnSalesDetailSaveReqVO updateReqVO) {
// 鏍¢獙瀛樺湪
- validateReturnSalesDetailExists(updateReqVO.getId());
+ MesWmReturnSalesDetailDO oldDetail = validateReturnSalesDetailExists(updateReqVO.getId());
+ if (ObjUtil.notEqual(oldDetail.getLineId(), updateReqVO.getLineId())
+ || ObjUtil.notEqual(oldDetail.getReturnId(), updateReqVO.getReturnId())) {
+ throw exception(WM_RETURN_SALES_DETAIL_SOURCE_MISMATCH);
+ }
// 鏍¢獙淇濆瓨鏁版嵁
validateReturnSalesDetailSaveData(updateReqVO);
@@ -134,8 +139,17 @@
private void validateReturnSalesDetailSaveData(MesWmReturnSalesDetailSaveReqVO reqVO) {
// 鏍¢獙鐖舵暟鎹瓨鍦�
MesWmReturnSalesLineDO line = returnSalesLineService.validateReturnSalesLineExists(reqVO.getLineId());
+ if (ObjUtil.notEqual(line.getReturnId(), reqVO.getReturnId())
+ || ObjUtil.notEqual(line.getItemId(), reqVO.getItemId())) {
+ throw exception(WM_RETURN_SALES_DETAIL_SOURCE_MISMATCH);
+ }
// 鏍¢獙閫�璐у崟涓哄緟涓婃灦鐘舵��
validateReturnSalesStatusApproved(line.getReturnId());
+ if (ObjUtil.notEqual(line.getQualityStatus(), MesWmQualityStatusEnum.PASS.getStatus())) {
+ throw exception(WM_RETURN_SALES_LINE_NOT_QUALIFIED);
+ }
+ // 涓婃灦浣跨敤閫�璐ц鐨勬壒娆★紱鑻ヨ娌℃湁鎸囧畾鎵规锛屽厑璁告樉寮忛�夋嫨灞炰簬璇ョ墿鏂欑殑鎵规銆�
+ fillBatchId(reqVO, line);
// 鏍¢獙浠撳簱銆佸簱鍖恒�佸簱浣嶇殑鍏宠仈鍏崇郴
warehouseAreaService.validateWarehouseAreaExists(
reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId());
@@ -144,8 +158,6 @@
// 鏍¢獙鏄庣粏鎬绘暟閲忎笉瓒呰繃琛屾暟閲忥紙鎺掗櫎鑷韩锛�
validateDetailQuantityNotExceed(reqVO.getLineId(), reqVO.getQuantity(), reqVO.getId(), line);
- // 鏍规嵁 batchCode 瑙f瀽 batchId锛堝繀椤诲湪娣锋斁瑙勫垯鏍¢獙涔嬪墠锛屽洜涓哄畠渚濊禆 batchId锛�
- fillBatchId(reqVO);
}
/**
@@ -173,13 +185,25 @@
/**
* 鏍规嵁 batchCode 瑙f瀽骞跺洖濉� batchId
*/
- private void fillBatchId(MesWmReturnSalesDetailSaveReqVO reqVO) {
- if (StrUtil.isBlank(reqVO.getBatchCode())) {
- return;
+ private void fillBatchId(MesWmReturnSalesDetailSaveReqVO reqVO, MesWmReturnSalesLineDO line) {
+ MesWmBatchDO batch = null;
+ if (StrUtil.isNotBlank(reqVO.getBatchCode())) {
+ batch = batchService.getBatchByCode(reqVO.getBatchCode());
+ if (batch == null) throw exception(WM_BATCH_NOT_EXISTS);
+ if (reqVO.getBatchId() != null && ObjUtil.notEqual(batch.getId(), reqVO.getBatchId())) {
+ throw exception(WM_RETURN_SALES_DETAIL_BATCH_MISMATCH);
+ }
+ } else if (reqVO.getBatchId() != null || line.getBatchId() != null) {
+ batch = batchService.validateBatchExists(
+ reqVO.getBatchId() != null ? reqVO.getBatchId() : line.getBatchId(), reqVO.getItemId());
}
- MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode());
if (batch != null) {
+ if (ObjUtil.notEqual(batch.getItemId(), reqVO.getItemId())
+ || (line.getBatchId() != null && ObjUtil.notEqual(line.getBatchId(), batch.getId()))) {
+ throw exception(WM_RETURN_SALES_DETAIL_BATCH_MISMATCH);
+ }
reqVO.setBatchId(batch.getId());
+ reqVO.setBatchCode(batch.getCode());
}
}
--
Gitblit v1.9.3