From 481d8165f26fc7e37f0e87f6444ac0340bb563a3 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期二, 03 十一月 2026 18:53:22 +0800
Subject: [PATCH] fix: 移植长辉已验证的四类接口 500/体验问题(不含物料颜色字段)

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java |   59 ++++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 36 insertions(+), 23 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java
index aff5d5a..c1792b6 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java
@@ -32,7 +32,7 @@
 /**
  * MES 鐢熶骇宸ュ崟鍙傛暟璁板綍 Service 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Service
 @Validated
@@ -69,18 +69,9 @@
                 .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d));
 
         // 4. 鏍¢獙蹇呭~鍙傛暟閮芥湁鍊�
-        for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : createReqVO.getDetails()) {
-            MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId());
-            if (templateDetail == null) {
-                throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
-            }
-            if (Boolean.TRUE.equals(templateDetail.getRequired())
-                    && (item.getParamValue() == null || item.getParamValue().isBlank())) {
-                throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, templateDetail.getParamName());
-            }
-        }
-        MesProTaskDO task = mesProTaskService.getTask(taskId);
-        MesProWorkOrderDO workOrder = mesProWorkOrderService.getWorkOrder(task.getWorkOrderId());
+        validateParamDetails(templateDetails, createReqVO.getDetails());
+        MesProTaskDO task = mesProTaskService.validateTaskExists(taskId);
+        MesProWorkOrderDO workOrder = mesProWorkOrderService.validateWorkOrderExists(task.getWorkOrderId());
         // 5. 鎻掑叆涓昏〃锛堝揩鐓фā鏉跨紪鐮併�佸悕绉帮級
         MesProWorkOrderParamRecordDO record = MesProWorkOrderParamRecordDO.builder()
                 .workOrderId(workOrder.getId())
@@ -112,6 +103,37 @@
         return record.getId();
     }
 
+    /** 鏍¢獙妯℃澘涓殑鍏ㄩ儴蹇呭~椤癸紝涓嶈兘閫氳繃鐪佺暐鏄庣粏缁曡繃鏍¢獙銆� */
+    private void validateParamDetails(List<MesPdProcessParamTemplateDetailDO> templateDetails,
+                                      List<MesProWorkOrderParamRecordSaveReqVO.DetailItem> values) {
+        if (CollUtil.isEmpty(templateDetails)) {
+            throw exception(PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL);
+        }
+        Map<Long, MesPdProcessParamTemplateDetailDO> expected = templateDetails.stream()
+                .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d));
+        if (CollUtil.isEmpty(values)) {
+            throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
+        }
+        Map<Long, String> submitted = new java.util.HashMap<>();
+        if (values != null) {
+            for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : values) {
+                if (item == null || item.getTemplateDetailId() == null || !expected.containsKey(item.getTemplateDetailId())) {
+                    throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
+                }
+                if (submitted.containsKey(item.getTemplateDetailId())) {
+                    throw exception(PRO_WORK_ORDER_PARAM_RECORD_DUPLICATE_DETAIL);
+                }
+                submitted.put(item.getTemplateDetailId(), item.getParamValue());
+            }
+        }
+        for (MesPdProcessParamTemplateDetailDO detail : templateDetails) {
+            String value = submitted.get(detail.getId());
+            if (Boolean.TRUE.equals(detail.getRequired()) && (value == null || value.isBlank())) {
+                throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, detail.getParamName());
+            }
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateParamRecord(MesProWorkOrderParamRecordSaveReqVO updateReqVO) {
@@ -129,16 +151,7 @@
         Map<Long, MesPdProcessParamTemplateDetailDO> detailMap = templateDetails.stream()
                 .collect(Collectors.toMap(MesPdProcessParamTemplateDetailDO::getId, d -> d));
 
-        for (MesProWorkOrderParamRecordSaveReqVO.DetailItem item : updateReqVO.getDetails()) {
-            MesPdProcessParamTemplateDetailDO templateDetail = detailMap.get(item.getTemplateDetailId());
-            if (templateDetail == null) {
-                throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
-            }
-            if (Boolean.TRUE.equals(templateDetail.getRequired())
-                    && (item.getParamValue() == null || item.getParamValue().isBlank())) {
-                throw exception(PRO_WORK_ORDER_PARAM_RECORD_REQUIRED_PARAM_MISSING, templateDetail.getParamName());
-            }
-        }
+        validateParamDetails(templateDetails, updateReqVO.getDetails());
 
         // 4. 鏇存柊涓昏〃
         MesProWorkOrderParamRecordDO updateObj = new MesProWorkOrderParamRecordDO();

--
Gitblit v1.9.3