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