From eee03bbfea8b15d1a56ab63bd09a35c6c861c4cb Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 09 十一月 2026 13:01:08 +0800
Subject: [PATCH] feat(mes): 不合格品处置联动入库与生产订单

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
index b097178..cb90136 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
@@ -352,21 +352,29 @@
                  reqVO.setLotNumber(reason);
                }
             }
-            approveFeedback(reqVO);
+            // BPM 鍥炶皟鏃舵祦绋嬪疄渚嬩粛鍦ㄨ繍琛岋紝蹇呴』璧板唴閮ㄦ柟娉曪紝涓嶈兘琚�屽凡鍙戣捣娴佺▼銆嶇殑鏍¢獙鎷︿綇
+            doApproveFeedback(reqVO, feedback, true);
         } else if (cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(bpmResult) ||
                    cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.CANCEL.getStatus().equals(bpmResult)) {
-            rejectFeedback(id);
+            doRejectFeedback(id);
         }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void rejectFeedback(Long id) {
-        equipmentService.lock();
         // 1. 鏍¢獙瀛樺湪 + 瀹℃壒涓姸鎬�
-        validateFeedbackStatusApproving(id);
+        MesProFeedbackDO feedback = validateFeedbackStatusApproving(id);
+        // 1.1 宸插彂璧峰鎵规祦绋嬬殑鎶ュ伐鍗曞彧鑳界敱瀹℃壒浜洪�氳繃銆屽緟鍔炰换鍔°�嶅鐞嗭紝閬垮厤涓氬姟鎺ュ彛缁曡繃娴佺▼
+        if (StrUtil.isNotBlank(feedback.getProcessInstanceId())) {
+            throw exception(PRO_FEEDBACK_APPROVAL_HANDLE_IN_BPM);
+        }
+        doRejectFeedback(id);
+    }
 
-        // 2. 鏇存柊鐘舵�佷负鑽夌
+    private void doRejectFeedback(Long id) {
+        equipmentService.lock();
+        // 1. 鏇存柊鐘舵�佷负鑽夌
         feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
                 .setStatus(MesProFeedbackStatusEnum.PREPARE.getStatus()));
     }
@@ -378,9 +386,18 @@
     }
 
     private boolean approveFeedback(MesProFeedbackApproveReqVO reqVO, boolean enforceQualityGate) {
-        equipmentService.lock();
         // 1.1 鏍¢獙瀛樺湪 + 瀹℃壒涓姸鎬�
         MesProFeedbackDO feedback = validateFeedbackStatusApproving(reqVO.getId());
+        // 1.2 宸插彂璧峰鎵规祦绋嬬殑鎶ュ伐鍗曞彧鑳界敱瀹℃壒浜洪�氳繃銆屽緟鍔炰换鍔°�嶅鐞嗭紝閬垮厤涓氬姟鎺ュ彛缁曡繃娴佺▼
+        if (StrUtil.isNotBlank(feedback.getProcessInstanceId())) {
+            throw exception(PRO_FEEDBACK_APPROVAL_HANDLE_IN_BPM);
+        }
+        return doApproveFeedback(reqVO, feedback, enforceQualityGate);
+    }
+
+    private boolean doApproveFeedback(MesProFeedbackApproveReqVO reqVO, MesProFeedbackDO feedback,
+                                      boolean enforceQualityGate) {
+        equipmentService.lock();
         equipmentService.validateApproval(feedback);
         try (var equipmentScope = equipmentService.beginApproval(feedback)) {
             return approveValidatedFeedback(reqVO, feedback, enforceQualityGate);

--
Gitblit v1.9.3