From 26094cffde1b85f3d627f9038594b39c32203b76 Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期三, 26 八月 2026 17:13:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderParamRecordServiceImpl.java |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 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 c202af7..baea293 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
@@ -53,6 +53,42 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public Long createTaskParamRecord(Long taskId, Long templateId) {
+        MesProTaskDO task = mesProTaskService.getTask(taskId);
+        if (task == null || templateId == null) {
+            return null;
+        }
+        MesProWorkOrderDO workOrder = mesProWorkOrderService.getWorkOrder(task.getWorkOrderId());
+        MesPdProcessParamTemplateDO template = templateService.validateProcessParamTemplateExists(templateId);
+        List<MesPdProcessParamTemplateDetailDO> details = templateService.getProcessParamTemplateDetailListByTemplateId(templateId);
+        if (CollUtil.isEmpty(details)) {
+            throw exception(PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL);
+        }
+        MesProWorkOrderParamRecordDO record = MesProWorkOrderParamRecordDO.builder()
+                .workOrderId(workOrder != null ? workOrder.getId() : task.getWorkOrderId())
+                .taskId(taskId)
+                .templateId(template.getId())
+                .templateCode(template.getTemplateCode())
+                .templateName(template.getTemplateName())
+                .recordNo("TASK-" + taskId)
+                .remark("鐢熶骇浠诲姟鎺掍骇鏃剁敓鎴愮殑鍙傛暟蹇収")
+                .build();
+        paramRecordMapper.insert(record);
+        paramRecordDetailMapper.insertBatch(details.stream().map(detail -> MesProWorkOrderParamRecordDetailDO.builder()
+                .recordId(record.getId())
+                .templateDetailId(detail.getId())
+                .paramCode(detail.getParamCode())
+                .paramName(detail.getParamName())
+                .paramType(detail.getParamType())
+                .unitMeasureId(detail.getUnitMeasureId())
+                .paramValue(null)
+                .remark(detail.getRemark())
+                .build()).toList());
+        return record.getId();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public Long createParamRecord(Long taskId, MesProWorkOrderParamRecordSaveReqVO createReqVO) {
         // 1. 鏍¢獙宸ュ崟瀛樺湪
 
@@ -191,6 +227,29 @@
         return paramRecordMapper.selectListByWorkOrderId(workOrderId);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateTaskParamValues(Long taskId, List<Long> detailIds, List<String> values) {
+        if (CollUtil.isEmpty(detailIds)) {
+            return;
+        }
+        MesProWorkOrderParamRecordDO record = paramRecordMapper.selectFirstByTaskId(taskId);
+        if (record == null) {
+            return;
+        }
+        List<MesProWorkOrderParamRecordDetailDO> details = paramRecordDetailMapper.selectListByRecordId(record.getId());
+        Map<Long, MesProWorkOrderParamRecordDetailDO> detailMap = details.stream()
+                .collect(Collectors.toMap(MesProWorkOrderParamRecordDetailDO::getId, d -> d));
+        for (int i = 0; i < detailIds.size(); i++) {
+            MesProWorkOrderParamRecordDetailDO detail = detailMap.get(detailIds.get(i));
+            if (detail == null) {
+                throw exception(PRO_WORK_ORDER_PARAM_RECORD_DETAIL_NOT_IN_TEMPLATE);
+            }
+            detail.setParamValue(values != null && values.size() > i ? values.get(i) : null);
+            paramRecordDetailMapper.updateById(detail);
+        }
+    }
+
     // ==================== 鏍¢獙鏂规硶 ====================
 
     private MesProWorkOrderParamRecordDO validateParamRecordExists(Long id) {

--
Gitblit v1.9.3