From d54fbc9d4f8981fa0f7f613b33a28a8cd4f764ea Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 25 十月 2026 16:29:53 +0800
Subject: [PATCH] feat(system): 优化用户搜索功能并完善ERP和MES模块验证逻辑

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java |   35 ++++++++++++++++++++++++++++++-----
 1 files changed, 30 insertions(+), 5 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 273de0a..468a8c2 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
@@ -1,7 +1,6 @@
 package cn.iocoder.yudao.module.mes.service.pro.feedback;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -33,6 +32,7 @@
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
 import cn.iocoder.yudao.module.mes.service.wm.itemconsume.MesWmItemConsumeService;
+import cn.iocoder.yudao.module.mes.service.wm.productissue.MesWmProductIssueService;
 import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceLineService;
 import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceService;
 import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
@@ -92,6 +92,8 @@
     private MesProTaskService taskService;
     @Resource
     private MesWmItemConsumeService itemConsumeService;
+    @Resource
+    private MesWmProductIssueService productIssueService;
     @Resource
     private MesWmProductProduceService productProduceService;
     @Resource
@@ -235,7 +237,9 @@
     @Override
     public void rejectFeedback(Long id) {
         // 1. 鏍¢獙瀛樺湪 + 瀹℃壒涓姸鎬�
-        validateFeedbackStatusApproving(id);
+        MesProFeedbackDO feedback = validateFeedbackStatusApproving(id);
+        // 1.1 鏍¢獙褰撳墠鐧诲綍浜烘槸璇ユ姤宸ュ崟鐨勬寚瀹氬鏍镐汉
+        validateCurrentUserIsApprover(feedback);
 
         // 2. 鏇存柊鐘舵�佷负鑽夌
         feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
@@ -247,6 +251,8 @@
     public boolean approveFeedback(MesProFeedbackApproveReqVO reqVO) {
         // 1.1 鏍¢獙瀛樺湪 + 瀹℃壒涓姸鎬�
         MesProFeedbackDO feedback = validateFeedbackStatusApproving(reqVO.getId());
+        // 1.1.1 鏍¢獙褰撳墠鐧诲綍浜烘槸璇ユ姤宸ュ崟鐨勬寚瀹氬鏍镐汉
+        validateCurrentUserIsApprover(feedback);
         // 1.2 鏍¢獙鎶ュ伐鏁伴噺 > 0
         if (feedback.getFeedbackQuantity() == null
                 || feedback.getFeedbackQuantity().compareTo(BigDecimal.ZERO) <= 0) {
@@ -270,9 +276,9 @@
         // 3. 鐗╂枡娑堣�楋細鍊掑啿宸ュ簭鎸� BOM 鑷姩鎵f枡锛涢潪鍊掑啿宸ュ簭璺宠繃锛堢墿鏂欒蛋鎵嬪伐棰嗘枡/鎶曟枡锛�
         boolean backflushFlag = routeProcess != null && Boolean.TRUE.equals(routeProcess.getBackflushFlag());
         if (backflushFlag) {
-            // 3.1 鏍¢獙鍊掑啿宸ュ簭蹇呴』閰嶇疆 BOM 娑堣�楋紝閬垮厤闈欓粯涓嶆墸鏂�
-            List<MesProWorkOrderBomDO> boms = workOrderBomService.getWorkOrderBomListByWorkOrderId(
-                    feedback.getWorkOrderId());
+            // 3.1 鏍¢獙褰撳墠鍊掑啿宸ュ簭蹇呴』閰嶇疆鎶曟枡 BOM锛岄伩鍏嶉潤榛樹笉鎵f枡
+            List<MesProWorkOrderBomDO> boms = workOrderBomService.getWorkOrderBomListByWorkOrderIdAndProcessId(
+                    feedback.getWorkOrderId(), feedback.getProcessId());
             if (CollUtil.isEmpty(boms)) {
                 throw exception(PRO_FEEDBACK_BACKFLUSH_BOM_REQUIRED);
             }
@@ -280,6 +286,8 @@
             MesWmItemConsumeDO itemConsume = itemConsumeService.generateItemConsume(feedback);
             if (itemConsume != null) {
                 itemConsumeService.finishItemConsume(itemConsume.getId());
+                // 娑堣�楀崟璐熻矗瀹為檯鎵e簱锛涢鏂欏崟浠呬綔涓哄�掑啿涓氬姟鍑瘉锛岄伩鍏嶉噸澶嶆墸鍑忓簱瀛�
+                productIssueService.generateBackflushProductIssue(feedback, itemConsume);
             }
         }
 
@@ -412,6 +420,23 @@
     }
 
     /**
+     * 鏍¢獙褰撳墠鐧诲綍鐢ㄦ埛鏄惁涓烘姤宸ュ崟鎸囧畾鐨勫鏍镐汉
+     *
+     * 鎶ュ伐鍗曞垱寤烘椂蹇呴』鎸囧畾 approveUserId锛屽鎵归�氳繃/椹冲洖鍙兘鐢辫瀹℃牳浜烘搷浣滐紝
+     * 閬垮厤浠绘剰鎷ユ湁鑿滃崟鏉冮檺鐨勭敤鎴疯秺鏉冨鎵广��
+     *
+     * @param feedback 鎶ュ伐鍗�
+     */
+    private void validateCurrentUserIsApprover(MesProFeedbackDO feedback) {
+        if (feedback.getApproveUserId() == null) {
+            throw exception(PRO_FEEDBACK_APPROVER_NOT_CONFIGURED);
+        }
+        if (!feedback.getApproveUserId().equals(getLoginUserId())) {
+            throw exception(PRO_FEEDBACK_NOT_APPROVER);
+        }
+    }
+
+    /**
      * 鏍¢獙鎶ュ伐鍗曠殑涓氬姟鏁版嵁锛堝垱寤� & 淇敼鍏辩敤锛�
      *
      * <p>浠ョ敓浜т换鍔′负鏍稿績锛氬墠绔彧闇�浼� taskId锛寃orkOrderId銆乺outeId銆乸rocessId銆乮temId銆亀orkstationId

--
Gitblit v1.9.3