From ac2e2b5af3726ee64dc37c3ebf26989a0346f22a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 07 十一月 2026 19:16:05 +0800
Subject: [PATCH] feat(feedback): 优化报工审批流程并增加报工人校验

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java |   49 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
index 18bdd6d..3c5be77 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -16,6 +16,7 @@
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptMapper;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
+import cn.iocoder.yudao.module.mes.enums.qc.MesQcCheckResultEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmItemReceiptStatusEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
 import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService;
@@ -341,17 +342,16 @@
                 }
             }
         } else if (receipt.getNoticeId() != null) {
-            // 鍏滃簳锛氬叆搴撹涓虹┖鏃讹紝浠庡埌璐ч�氱煡鍗曡鍥炲啓鍏ュ簱鏁伴噺
+            // 鍏滃簳锛氬叆搴撹涓虹┖鏃讹紝浠庡埌璐ч�氱煡鍗曚腑鍙叆搴撶殑琛屽洖鍐欏叆搴撴暟閲�
             List<MesWmArrivalNoticeLineDO> noticeLines = arrivalNoticeLineService
                     .getArrivalNoticeLineListByNoticeId(receipt.getNoticeId());
             for (MesWmArrivalNoticeLineDO noticeLine : noticeLines) {
-                if (noticeLine.getPurchaseOrderItemId() != null) {
-                    // 浣跨敤鍚堟牸鏁伴噺锛堟湁 IQC 鏃朵负鍚堟牸鏁伴噺锛屽惁鍒欎负鍒拌揣鏁伴噺锛�
-                    BigDecimal qty = noticeLine.getQualifiedQuantity() != null
-                            ? noticeLine.getQualifiedQuantity() : noticeLine.getArrivalQuantity();
-                    if (qty != null && qty.compareTo(BigDecimal.ZERO) > 0) {
-                        purchaseOrderApi.updateOrderItemInCount(noticeLine.getPurchaseOrderItemId(), qty);
-                    }
+                if (noticeLine.getPurchaseOrderItemId() == null) {
+                    continue;
+                }
+                BigDecimal qty = calculateInboundQuantity(noticeLine);
+                if (qty != null && qty.compareTo(BigDecimal.ZERO) > 0) {
+                    purchaseOrderApi.updateOrderItemInCount(noticeLine.getPurchaseOrderItemId(), qty);
                 }
             }
         }
@@ -475,10 +475,20 @@
             throw exception(WM_ITEM_RECEIPT_ALREADY_EXISTS);
         }
 
-        // 3. 鑾峰彇鍒拌揣閫氱煡鍗曡
+        // 3. 鑾峰彇鍒拌揣閫氱煡鍗曡锛屼粎淇濈暀鍙叆搴撶殑琛岋紙鏈惎鐢ㄦ潵鏂欐楠岀殑琛屾寜鍒拌揣鏁伴噺鍏ュ簱锛涙楠岃椤诲悎鏍兼垨鐗归噰锛�
         List<MesWmArrivalNoticeLineDO> lines = arrivalNoticeLineService.getArrivalNoticeLineListByNoticeId(arrivalNoticeId);
         if (CollUtil.isEmpty(lines)) {
             throw exception(WM_ARRIVAL_NOTICE_NO_LINE);
+        }
+        List<MesWmArrivalNoticeLineDO> inboundLines = new ArrayList<>();
+        for (MesWmArrivalNoticeLineDO line : lines) {
+            BigDecimal inboundQuantity = calculateInboundQuantity(line);
+            if (inboundQuantity != null && inboundQuantity.compareTo(BigDecimal.ZERO) > 0) {
+                inboundLines.add(line);
+            }
+        }
+        if (CollUtil.isEmpty(inboundLines)) {
+            throw exception(WM_ARRIVAL_NOTICE_NO_INBOUND_LINE);
         }
 
         // 4. 鐢熸垚鍏ュ簱鍗曠紪鐮�
@@ -496,15 +506,15 @@
         receipt.setStatus(MesWmItemReceiptStatusEnum.PREPARE.getStatus());
         itemReceiptMapper.insert(receipt);
 
-        // 6. 閬嶅巻琛屽垱寤哄叆搴撳崟琛�
-        for (MesWmArrivalNoticeLineDO noticeLine : lines) {
+        // 6. 閬嶅巻鍙叆搴撶殑琛屽垱寤哄叆搴撳崟琛�
+        for (MesWmArrivalNoticeLineDO noticeLine : inboundLines) {
             MesWmItemReceiptLineDO receiptLine = new MesWmItemReceiptLineDO();
             receiptLine.setReceiptId(receipt.getId());
             receiptLine.setArrivalNoticeLineId(noticeLine.getId());
             receiptLine.setPurchaseOrderItemId(noticeLine.getPurchaseOrderItemId());
             receiptLine.setItemId(noticeLine.getItemId());
             // 浣跨敤鍚堟牸鏁伴噺锛堝鏋滄湁 IQC 鍒欐槸鍚堟牸鏁伴噺锛屽惁鍒欐槸鍒拌揣鏁伴噺锛�
-            receiptLine.setReceivedQuantity(noticeLine.getQualifiedQuantity() != null ? noticeLine.getQualifiedQuantity() : noticeLine.getArrivalQuantity());
+            receiptLine.setReceivedQuantity(calculateInboundQuantity(noticeLine));
             itemReceiptLineService.createItemReceiptLineFromArrivalNoticeLine(receiptLine);
         }
 
@@ -512,6 +522,21 @@
     }
 
     /**
+     * 璁$畻鍒拌揣閫氱煡鍗曡鐨勫彲鍏ュ簱鏁伴噺
+     *
+     * <p>鏈惎鐢ㄦ潵鏂欐楠岀殑琛屾寜鍒拌揣鏁伴噺鍏ュ簱锛涘惎鐢ㄦ潵鏂欐楠岀殑琛屽彧鏈夊悎鏍�/鐗归噰鎵嶅彲鍏ュ簱锛�
+     * 閫�璐�/鎶ュ簾杩斿洖 {@code null}锛岄伩鍏嶇敓鎴愰浂鏁伴噺鎴栭敊璇暟閲忕殑鍏ュ簱鍗曡銆�
+     */
+    private BigDecimal calculateInboundQuantity(MesWmArrivalNoticeLineDO noticeLine) {
+        if (Boolean.TRUE.equals(noticeLine.getIqcCheckFlag())
+                && !MesQcCheckResultEnum.canInbound(noticeLine.getIqcCheckResult())) {
+            return null;
+        }
+        return noticeLine.getQualifiedQuantity() != null
+                ? noticeLine.getQualifiedQuantity() : noticeLine.getArrivalQuantity();
+    }
+
+    /**
      * 鐢熸垚鍏ュ簱鍗曠紪鐮�
      */
     private String generateItemReceiptCode() {

--
Gitblit v1.9.3