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/arrivalnotice/MesWmArrivalNoticeServiceImpl.java |   45 ++++++++++++++++++++++++---------------------
 1 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
index b085553..c5ac05f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java
@@ -48,6 +48,9 @@
 public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService {
 
     @Resource
+    private cn.iocoder.yudao.module.mes.service.qc.ncr.MesQcArrivalDispositionService arrivalDispositionService;
+
+    @Resource
     private MesWmArrivalNoticeMapper arrivalNoticeMapper;
 
     @Resource
@@ -78,6 +81,7 @@
 
         // 鎻掑叆
         MesWmArrivalNoticeDO notice = BeanUtils.toBean(createReqVO, MesWmArrivalNoticeDO.class);
+        fillContractNoFromPurchaseOrder(notice);
         notice.setStatus(MesWmArrivalNoticeStatusEnum.PREPARE.getStatus());
         arrivalNoticeMapper.insert(notice);
         return notice.getId();
@@ -92,7 +96,21 @@
 
         // 鏇存柊
         MesWmArrivalNoticeDO updateObj = BeanUtils.toBean(updateReqVO, MesWmArrivalNoticeDO.class);
+        fillContractNoFromPurchaseOrder(updateObj);
         arrivalNoticeMapper.updateById(updateObj);
+    }
+
+    /**
+     * 閲囪喘鍚堝悓鍙锋湭鏄惧紡浼犲叆鏃讹紝浠庡叧鑱旂殑閲囪喘璁㈠崟甯﹀叆锛堟崲璐у埌璐у繀椤昏兘杩芥函鍒板師閲囪喘鍚堝悓锛�
+     */
+    private void fillContractNoFromPurchaseOrder(MesWmArrivalNoticeDO notice) {
+        if (notice.getPurchaseOrderId() == null || cn.hutool.core.util.StrUtil.isNotBlank(notice.getContractNo())) {
+            return;
+        }
+        ErpPurchaseOrderRespDTO purchaseOrder = purchaseOrderApi.getPurchaseOrder(notice.getPurchaseOrderId()).getCheckedData();
+        if (purchaseOrder != null) {
+            notice.setContractNo(purchaseOrder.getContractNo());
+        }
     }
 
     private void validateArrivalNoticeSaveData(MesWmArrivalNoticeSaveReqVO reqVO) {
@@ -186,27 +204,8 @@
         // 2. 鏇存柊鍒拌揣閫氱煡鍗曡锛氱粦瀹� iqcId + 璐ㄦ缁撴灉 + 鍚堟牸鏁伴噺
         arrivalNoticeLineService.updateArrivalNoticeLineWhenIqcFinish(lineId, iqcId, checkResult, qualifiedQuantity);
 
-        // 3.1 鍒ゆ柇鏄惁鎵�鏈夐渶妫�琛岄兘宸插畬鎴愯川妫�
-        List<MesWmArrivalNoticeLineDO> lines = arrivalNoticeLineService.getArrivalNoticeLineListByNoticeId(id);
-        boolean hasUnchecked = CollectionUtils.anyMatch(lines,
-                line -> Boolean.TRUE.equals(line.getIqcCheckFlag()) && line.getIqcCheckResult() == null);
-        if (hasUnchecked) {
-            log.info("[updateArrivalNoticeWhenIqcFinish][鍒拌揣閫氱煡鍗�({}) 杩樻湁鏈畬鎴愭楠岀殑琛岋紝鏆備笉鏇存柊鐘舵�乚", id);
-            return;
-        }
-
-        // 3.2 鍒ゆ柇鏄惁鎵�鏈夐渶妫�琛岄兘鍙互鍏ュ簱锛堝悎鏍兼垨鐗归噰锛�
-        boolean hasNonInbound = CollectionUtils.anyMatch(lines,
-                line -> Boolean.TRUE.equals(line.getIqcCheckFlag())
-                        && !MesQcCheckResultEnum.canInbound(line.getIqcCheckResult()));
-        if (hasNonInbound) {
-            log.info("[updateArrivalNoticeWhenIqcFinish][鍒拌揣閫氱煡鍗�({}) 瀛樺湪涓嶅彲鍏ュ簱鐨勮锛堥��璐�/鎶ュ簾锛夛紝鐘舵�佷繚鎸佸緟璐ㄦ]", id);
-            return;
-        }
-
-        // 3.3 鎵�鏈夎妫�楠屽畬鎴愪笖鍙叆搴擄紝鏇存柊涓昏〃鐘舵�� PENDING_QC 鈫� PENDING_RECEIPT
-        arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO()
-                .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus()));
+        // 鍚屾椂璁ゅ彲浠撳簱宸茬‘璁ょ殑鏉ユ枡閫�璐э紱淇濈暀鍘熷涓嶅悎鏍肩粨璁恒��
+        arrivalDispositionService.refresh(id);
     }
 
     @Override
@@ -336,6 +335,7 @@
         notice.setName(purchaseOrder.getNo() + "鍒拌揣閫氱煡");
         notice.setPurchaseOrderId(purchaseOrderId);
         notice.setPurchaseOrderCode(purchaseOrder.getNo());
+        notice.setContractNo(purchaseOrder.getContractNo());
         notice.setVendorId(purchaseOrder.getSupplierId());
         notice.setArrivalDate(java.time.LocalDateTime.now()); // 鍒拌揣鏃堕棿涓哄綋鍓嶆椂闂�
         notice.setStatus(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus());
@@ -414,6 +414,9 @@
         notice.setName(returnVendor.getCode() + "鎹㈣揣鍒拌揣");
         notice.setPurchaseOrderId(returnVendor.getPurchaseOrderId());
         notice.setPurchaseOrderCode(returnVendor.getPurchaseOrderCode());
+        // 鎹㈣揣閲嶆柊鍏宠仈鍘熼噰璐悎鍚屽彿锛氫紭鍏堝彇閫�璐у崟蹇収锛岄��璐у崟鏈揩鐓ф椂鍥炲~閲囪喘璁㈠崟鍚堝悓鍙�
+        notice.setContractNo(returnVendor.getContractNo());
+        fillContractNoFromPurchaseOrder(notice);
         notice.setVendorId(returnVendor.getVendorId());
         notice.setArrivalDate(java.time.LocalDateTime.now());
         notice.setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus());

--
Gitblit v1.9.3