From 196dec5ffae084f772dffc0fb1fc4441839f7952 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期三, 22 四月 2026 13:59:03 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' of http://114.132.189.42:9002/r/product-inventory-management-after into dev_New_pro

---
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java |   83 ++++++++-----
 src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingOperationVo.java                    |   16 ++
 src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java    |    2 
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java      |   42 ++----
 src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml                       |   87 ++++++++++++++
 src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperationParam.java                    |   19 +--
 src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java         |    2 
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java               |   61 +++++++++
 src/main/resources/mapper/technology/TechnologyRoutingOperationParamMapper.xml                  |    2 
 src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingOperationMapper.java                 |   13 ++
 src/main/resources/application-dev.yml                                                          |    2 
 src/main/java/com/ruoyi/technology/controller/TechnologyOperationParamController.java           |    2 
 src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingOperationDto.java                  |    4 
 src/main/java/com/ruoyi/technology/controller/TechnologyOperationController.java                |    2 
 14 files changed, 256 insertions(+), 81 deletions(-)

diff --git a/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingOperationDto.java b/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingOperationDto.java
index c310931..f2d9c90 100644
--- a/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingOperationDto.java
+++ b/src/main/java/com/ruoyi/technology/bean/dto/TechnologyRoutingOperationDto.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -9,4 +10,7 @@
 @Data
 @ApiModel(value = "TechnologyRoutingOperationDto瀵硅薄", description = "宸ヨ壓璺嚎宸ュ簭鏌ヨ鍙傛暟")
 public class TechnologyRoutingOperationDto extends TechnologyRoutingOperation {
+
+    @ApiModelProperty("宸ヨ壓璺嚎id锛堝吋瀹规棫鍙傛暟 routeId锛�")
+    private Long routeId;
 }
diff --git a/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingOperationVo.java b/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingOperationVo.java
index a5d8ef2..5d27f2a 100644
--- a/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingOperationVo.java
+++ b/src/main/java/com/ruoyi/technology/bean/vo/TechnologyRoutingOperationVo.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -9,4 +10,19 @@
 @Data
 @ApiModel(value = "TechnologyRoutingOperationVo瀵硅薄", description = "宸ヨ壓璺嚎宸ュ簭杩斿洖瀵硅薄")
 public class TechnologyRoutingOperationVo extends TechnologyRoutingOperation {
+
+    @ApiModelProperty("宸ュ簭鍚嶇О")
+    private String technologyOperationName;
+
+    @ApiModelProperty("浜у搧鍚嶇О")
+    private String productName;
+
+    @ApiModelProperty("瑙勬牸鍚嶇О")
+    private String model;
+
+    @ApiModelProperty("瑙勬牸鍚嶇О")
+    private String specificationName;
+
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
 }
diff --git a/src/main/java/com/ruoyi/technology/controller/TechnologyOperationController.java b/src/main/java/com/ruoyi/technology/controller/TechnologyOperationController.java
index 367366d..f730aae 100644
--- a/src/main/java/com/ruoyi/technology/controller/TechnologyOperationController.java
+++ b/src/main/java/com/ruoyi/technology/controller/TechnologyOperationController.java
@@ -30,7 +30,7 @@
         return R.ok(technologyOperationService.listPage(page, technologyOperationDto));
     }
 
-    @PostMapping
+    @PostMapping("/add")
     @Log(title = "Add technology operation", businessType = BusinessType.INSERT)
     @ApiOperation("鏂板宸ュ簭")
     public R add(@RequestBody TechnologyOperationDto technologyOperationDto) {
diff --git a/src/main/java/com/ruoyi/technology/controller/TechnologyOperationParamController.java b/src/main/java/com/ruoyi/technology/controller/TechnologyOperationParamController.java
index e3552b5..c9eff23 100644
--- a/src/main/java/com/ruoyi/technology/controller/TechnologyOperationParamController.java
+++ b/src/main/java/com/ruoyi/technology/controller/TechnologyOperationParamController.java
@@ -29,7 +29,7 @@
         return R.ok(technologyOperationParamService.listOperationParam(technologyOperationParamDto));
     }
 
-    @PostMapping
+    @PostMapping("/")
     @ApiOperation("鏂板鎴栦慨鏀瑰伐搴忓弬鏁�")
     public R addOrUpdate(@RequestBody TechnologyOperationParam technologyOperationParam) {
         return R.ok(technologyOperationParamService.saveTechnologyOperationParam(technologyOperationParam));
diff --git a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
index c07541c..d8cc6a2 100644
--- a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
+++ b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
@@ -40,7 +40,7 @@
         return R.ok(technologyRoutingOperationService.getTechnologyRoutingOperationInfo(id));
     }
 
-    @PostMapping
+    @PostMapping("/add")
     @ApiOperation("鏂板宸ヨ壓璺嚎宸ュ簭")
     public R add(@RequestBody TechnologyRoutingOperation technologyRoutingOperation) {
         return R.ok(technologyRoutingOperationService.saveTechnologyRoutingOperation(technologyRoutingOperation));
diff --git a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java
index 9a17e82..568d96a 100644
--- a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java
+++ b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationParamController.java
@@ -42,7 +42,7 @@
         return R.ok(technologyRoutingOperationParamService.getTechnologyRoutingOperationParamInfo(id));
     }
 
-    @PostMapping
+    @PostMapping("/add")
     @ApiOperation("鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟")
     public R<Boolean> add(@RequestBody TechnologyRoutingOperationParam technologyRoutingOperationParam) {
         return R.ok(technologyRoutingOperationParamService.saveTechnologyRoutingOperationParam(technologyRoutingOperationParam));
diff --git a/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingOperationMapper.java b/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingOperationMapper.java
index ff95e6d..890b8f8 100644
--- a/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingOperationMapper.java
+++ b/src/main/java/com/ruoyi/technology/mapper/TechnologyRoutingOperationMapper.java
@@ -1,8 +1,15 @@
 package com.ruoyi.technology.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,5 +21,11 @@
  */
 @Mapper
 public interface TechnologyRoutingOperationMapper extends BaseMapper<TechnologyRoutingOperation> {
+    IPage<TechnologyRoutingOperationVo> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperationDto> page,
+                                                                       @Param("c") TechnologyRoutingOperationDto dto);
+
+    List<TechnologyRoutingOperationVo> listTechnologyRoutingOperation(@Param("c") TechnologyRoutingOperationDto dto);
+
+    TechnologyRoutingOperationVo getTechnologyRoutingOperationInfo(@Param("id") Long id);
 
 }
diff --git a/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperationParam.java b/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperationParam.java
index 1f14947..0e33d2f 100644
--- a/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperationParam.java
+++ b/src/main/java/com/ruoyi/technology/pojo/TechnologyRoutingOperationParam.java
@@ -1,6 +1,10 @@
 package com.ruoyi.technology.pojo;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -8,17 +12,9 @@
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
-/**
- * <p>
- * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-20 10:22:16
- */
 @Data
 @TableName("technology_routing_operation_param")
-@ApiModel(value = "TechnologyRoutingOperationParam瀵硅薄", description = "鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛�")
+@ApiModel(value = "TechnologyRoutingOperationParam瀵硅薄", description = "宸ヨ壓璺嚎宸ュ簭鍙傛暟琛�")
 public class TechnologyRoutingOperationParam implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -26,9 +22,6 @@
     @ApiModelProperty("id")
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
-
-    @ApiModelProperty("宸ヨ壓璺嚎宸ュ簭鍙傛暟琛╥d")
-    private Long technologyRoutingOperationParamId;
 
     @ApiModelProperty("鍙傛暟缂栫爜(鍞竴鏍囪瘑)")
     private String paramCode;
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
index 44b59ed..2db55b4 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
@@ -38,7 +38,7 @@
 
     @Override
     public IPage<TechnologyRoutingOperationParamVo> pageTechnologyRoutingOperationParam(Page<TechnologyRoutingOperationParamDto> page,
-                                                                                        TechnologyRoutingOperationParamDto dto) {
+                                                                                         TechnologyRoutingOperationParamDto dto) {
         Page<TechnologyRoutingOperationParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
         return this.page(entityPage, buildQueryWrapper(dto))
                 .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationParamVo.class));
@@ -62,7 +62,6 @@
     public boolean saveTechnologyRoutingOperationParam(TechnologyRoutingOperationParam item) {
         TechnologyRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
         fillFromOperationParam(item, routingOperation);
-        validateManualFields(item);
         checkDuplicate(item);
         return this.saveOrUpdate(item);
     }
@@ -75,7 +74,7 @@
     @Override
     public int syncTechnologyRoutingOperationParam(TechnologyRoutingOperationParamSyncDto syncDto) {
         if (syncDto == null || syncDto.getTechnologyRoutingOperationId() == null) {
-            throw new ServiceException("technologyRoutingOperationId is required");
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭ID涓嶈兘涓虹┖");
         }
         TechnologyRoutingOperation routingOperation = getRoutingOperation(syncDto.getTechnologyRoutingOperationId());
         List<TechnologyOperationParam> operationParamList = technologyOperationParamMapper.selectList(
@@ -134,11 +133,11 @@
 
     private TechnologyRoutingOperation getRoutingOperation(Long technologyRoutingOperationId) {
         if (technologyRoutingOperationId == null) {
-            throw new ServiceException("technologyRoutingOperationId is required");
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭ID涓嶈兘涓虹┖");
         }
         TechnologyRoutingOperation routingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperationId);
         if (routingOperation == null) {
-            throw new ServiceException("Technology routing operation not found");
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭涓嶅瓨鍦�");
         }
         return routingOperation;
     }
@@ -147,22 +146,54 @@
         if (item.getTechnologyOperationId() == null) {
             item.setTechnologyOperationId(routingOperation.getTechnologyOperationId());
         } else if (!item.getTechnologyOperationId().equals(routingOperation.getTechnologyOperationId())) {
-            throw new ServiceException("technologyOperationId does not match routing operation");
+            throw new ServiceException("宸ュ簭ID涓庡伐鑹鸿矾绾垮伐搴忎笉鍖归厤");
         }
-        if (item.getTechnologyOperationParamId() == null) {
+
+        if (item.getTechnologyOperationParamId() != null) {
+            TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
+            if (operationParam == null) {
+                throw new ServiceException("宸ュ簭鍙傛暟涓嶅瓨鍦�");
+            }
+            if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
+                throw new ServiceException("宸ュ簭鍙傛暟涓嶅睘浜庡綋鍓嶅伐鑹鸿矾绾垮伐搴�");
+            }
+            TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
+            if (technologyParam == null) {
+                throw new ServiceException("鍩虹鍙傛暟涓嶅瓨鍦�");
+            }
+            fillFromTechnologyParam(item, technologyParam);
+            if (item.getStandardValue() == null) {
+                item.setStandardValue(operationParam.getStandardValue());
+            }
             return;
         }
-        TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
-        if (operationParam == null) {
-            throw new ServiceException("Technology operation param not found");
+
+        if (item.getParamId() != null) {
+            TechnologyParam technologyParam = technologyParamMapper.selectById(item.getParamId());
+            if (technologyParam == null) {
+                throw new ServiceException("鍩虹鍙傛暟涓嶅瓨鍦�");
+            }
+            fillFromTechnologyParam(item, technologyParam);
+            TechnologyOperationParam operationParam = technologyOperationParamMapper.selectOne(
+                    Wrappers.<TechnologyOperationParam>lambdaQuery()
+                            .eq(TechnologyOperationParam::getTechnologyOperationId, routingOperation.getTechnologyOperationId())
+                            .eq(TechnologyOperationParam::getTechnologyParamId, item.getParamId())
+                            .orderByAsc(TechnologyOperationParam::getId)
+                            .last("limit 1")
+            );
+            if (operationParam != null) {
+                item.setTechnologyOperationParamId(operationParam.getId());
+                if (item.getStandardValue() == null) {
+                    item.setStandardValue(operationParam.getStandardValue());
+                }
+            }
+            return;
         }
-        if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
-            throw new ServiceException("Operation param does not belong to routing operation");
-        }
-        TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
-        if (technologyParam == null) {
-            throw new ServiceException("Technology param not found");
-        }
+
+        throw new ServiceException("paramId鎴杢echnologyOperationParamId涓嶈兘涓虹┖");
+    }
+
+    private void fillFromTechnologyParam(TechnologyRoutingOperationParam item, TechnologyParam technologyParam) {
         item.setParamId(technologyParam.getId());
         item.setParamCode(technologyParam.getParamCode());
         item.setParamName(technologyParam.getParamName());
@@ -173,18 +204,6 @@
         if (item.getRemark() == null || item.getRemark().trim().isEmpty()) {
             item.setRemark(technologyParam.getRemark());
         }
-        if (item.getStandardValue() == null) {
-            item.setStandardValue(operationParam.getStandardValue());
-        }
-    }
-
-    private void validateManualFields(TechnologyRoutingOperationParam item) {
-        if (item.getParamCode() == null || item.getParamCode().trim().isEmpty()) {
-            throw new ServiceException("paramCode is required");
-        }
-        if (item.getParamName() == null || item.getParamName().trim().isEmpty()) {
-            throw new ServiceException("paramName is required");
-        }
     }
 
     private void checkDuplicate(TechnologyRoutingOperationParam item) {
@@ -193,12 +212,14 @@
                         .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, item.getTechnologyRoutingOperationId())
                         .eq(item.getTechnologyOperationParamId() != null,
                                 TechnologyRoutingOperationParam::getTechnologyOperationParamId, item.getTechnologyOperationParamId())
-                        .eq(item.getTechnologyOperationParamId() == null && item.getParamCode() != null,
+                        .eq(item.getTechnologyOperationParamId() == null && item.getParamId() != null,
+                                TechnologyRoutingOperationParam::getParamId, item.getParamId())
+                        .eq(item.getTechnologyOperationParamId() == null && item.getParamId() == null && item.getParamCode() != null,
                                 TechnologyRoutingOperationParam::getParamCode, item.getParamCode())
                         .ne(item.getId() != null, TechnologyRoutingOperationParam::getId, item.getId())
         ) > 0;
         if (duplicate) {
-            throw new ServiceException("Duplicate routing operation param");
+            throw new ServiceException("宸ヨ壓璺嚎宸ュ簭鍙傛暟閲嶅");
         }
     }
 }
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
index 15fd9e8..1daf6dc 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
@@ -1,16 +1,16 @@
 package com.ruoyi.technology.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationDto;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto;
 import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo;
 import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
+import com.ruoyi.technology.service.TechnologyRoutingOperationParamService;
 import com.ruoyi.technology.service.TechnologyRoutingOperationService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -26,27 +26,22 @@
     private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
 
     private final TechnologyRoutingMapper technologyRoutingMapper;
+    private final TechnologyRoutingOperationParamService technologyRoutingOperationParamService;
 
     @Override
     public IPage<TechnologyRoutingOperationVo> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperationDto> page,
                                                                               TechnologyRoutingOperationDto technologyRoutingOperationDto) {
-        Page<TechnologyRoutingOperation> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
-        return this.page(entityPage, buildQueryWrapper(technologyRoutingOperationDto))
-                .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationVo.class));
+        return technologyRoutingOperationMapper.pageTechnologyRoutingOperation(page, technologyRoutingOperationDto);
     }
 
     @Override
     public List<TechnologyRoutingOperationVo> listTechnologyRoutingOperation(TechnologyRoutingOperationDto technologyRoutingOperationDto) {
-        return BeanUtil.copyToList(this.list(buildQueryWrapper(technologyRoutingOperationDto)), TechnologyRoutingOperationVo.class);
+        return technologyRoutingOperationMapper.listTechnologyRoutingOperation(technologyRoutingOperationDto);
     }
 
     @Override
     public TechnologyRoutingOperationVo getTechnologyRoutingOperationInfo(Long id) {
-        TechnologyRoutingOperation technologyRoutingOperation = this.getById(id);
-        if (technologyRoutingOperation == null) {
-            return null;
-        }
-        return BeanUtil.copyProperties(technologyRoutingOperation, TechnologyRoutingOperationVo.class);
+        return technologyRoutingOperationMapper.getTechnologyRoutingOperationInfo(id);
     }
 
     @Override
@@ -58,7 +53,14 @@
         if (technologyRoutingOperation.getDragSort() == null || technologyRoutingOperation.getDragSort() <= 0) {
             technologyRoutingOperation.setDragSort(nextDragSort(technologyRoutingOperation.getTechnologyRoutingId()));
         }
-        return this.save(technologyRoutingOperation);
+        boolean saved = this.save(technologyRoutingOperation);
+        if (saved) {
+            TechnologyRoutingOperationParamSyncDto syncDto = new TechnologyRoutingOperationParamSyncDto();
+            syncDto.setTechnologyRoutingOperationId(technologyRoutingOperation.getId());
+            syncDto.setReplaceExisting(true);
+            technologyRoutingOperationParamService.syncTechnologyRoutingOperationParam(syncDto);
+        }
+        return saved;
     }
 
     @Override
@@ -72,22 +74,6 @@
             resetDragSort(technologyRoutingOperation.getTechnologyRoutingId());
         }
         return removed;
-    }
-
-    private LambdaQueryWrapper<TechnologyRoutingOperation> buildQueryWrapper(TechnologyRoutingOperationDto technologyRoutingOperation) {
-        LambdaQueryWrapper<TechnologyRoutingOperation> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(technologyRoutingOperation.getId() != null, TechnologyRoutingOperation::getId, technologyRoutingOperation.getId())
-                .eq(technologyRoutingOperation.getTechnologyRoutingId() != null,
-                        TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingOperation.getTechnologyRoutingId())
-                .eq(technologyRoutingOperation.getProductModelId() != null,
-                        TechnologyRoutingOperation::getProductModelId, technologyRoutingOperation.getProductModelId())
-                .eq(technologyRoutingOperation.getTechnologyOperationId() != null,
-                        TechnologyRoutingOperation::getTechnologyOperationId, technologyRoutingOperation.getTechnologyOperationId())
-                .eq(technologyRoutingOperation.getIsQuality() != null,
-                        TechnologyRoutingOperation::getIsQuality, technologyRoutingOperation.getIsQuality())
-                .orderByAsc(TechnologyRoutingOperation::getDragSort)
-                .orderByAsc(TechnologyRoutingOperation::getId);
-        return queryWrapper;
     }
 
     private Integer nextDragSort(Long technologyRoutingId) {
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
index 6066cb7..d225f7c 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingServiceImpl.java
@@ -12,12 +12,18 @@
 import com.ruoyi.technology.bean.vo.TechnologyRoutingVo;
 import com.ruoyi.technology.mapper.TechnologyBomStructureMapper;
 import com.ruoyi.technology.mapper.TechnologyOperationMapper;
+import com.ruoyi.technology.mapper.TechnologyOperationParamMapper;
+import com.ruoyi.technology.mapper.TechnologyParamMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
 import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
 import com.ruoyi.technology.pojo.TechnologyBomStructure;
 import com.ruoyi.technology.pojo.TechnologyOperation;
+import com.ruoyi.technology.pojo.TechnologyOperationParam;
+import com.ruoyi.technology.pojo.TechnologyParam;
 import com.ruoyi.technology.pojo.TechnologyRouting;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
 import com.ruoyi.technology.service.TechnologyRoutingService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -28,6 +34,7 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 @Transactional(rollbackFor = Exception.class)
@@ -41,6 +48,9 @@
     private final TechnologyBomStructureMapper technologyBomStructureMapper;
 
     private final TechnologyOperationMapper technologyOperationMapper;
+    private final TechnologyOperationParamMapper technologyOperationParamMapper;
+    private final TechnologyParamMapper technologyParamMapper;
+    private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
 
     @Override
     public IPage<TechnologyRoutingVo> pageTechnologyRouting(Page<TechnologyRoutingDto> page, TechnologyRoutingDto technologyRoutingDto) {
@@ -81,6 +91,14 @@
         if (ids == null || ids.isEmpty()) {
             return false;
         }
+        List<TechnologyRoutingOperation> routingOperationList = technologyRoutingOperationMapper.selectList(
+                Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+                        .in(TechnologyRoutingOperation::getTechnologyRoutingId, ids));
+        if (!routingOperationList.isEmpty()) {
+            List<Long> routingOperationIdList = routingOperationList.stream().map(TechnologyRoutingOperation::getId).collect(Collectors.toList());
+            technologyRoutingOperationParamMapper.delete(Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                    .in(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperationIdList));
+        }
         technologyRoutingOperationMapper.delete(Wrappers.<TechnologyRoutingOperation>lambdaQuery()
                 .in(TechnologyRoutingOperation::getTechnologyRoutingId, ids));
         return this.removeByIds(ids);
@@ -93,8 +111,16 @@
      * 3. 鎸� BOM 鍑虹幇椤哄簭鍘婚噸鍚庨噸鏂板啓鍏ュ伐鑹鸿矾绾垮伐搴忚〃
      */
     private void syncRoutingOperationsByBom(TechnologyRouting technologyRouting) {
-        technologyRoutingOperationMapper.delete(Wrappers.<TechnologyRoutingOperation>lambdaQuery()
-                .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRouting.getId()));
+        List<TechnologyRoutingOperation> oldRoutingOperationList = technologyRoutingOperationMapper.selectList(
+                Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+                        .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRouting.getId()));
+        if (!oldRoutingOperationList.isEmpty()) {
+            List<Long> oldRoutingOperationIdList = oldRoutingOperationList.stream().map(TechnologyRoutingOperation::getId).collect(Collectors.toList());
+            technologyRoutingOperationParamMapper.delete(Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                    .in(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, oldRoutingOperationIdList));
+            technologyRoutingOperationMapper.delete(Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+                    .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRouting.getId()));
+        }
         if (technologyRouting.getBomId() == null) {
             return;
         }
@@ -123,6 +149,37 @@
             routingOperation.setDragSort(dragSort++);
             routingOperation.setIsQuality(getOperationQuality(bomStructure.getOperationId()));
             technologyRoutingOperationMapper.insert(routingOperation);
+            syncRoutingOperationParams(routingOperation.getId(), bomStructure.getOperationId());
+        }
+    }
+
+    private void syncRoutingOperationParams(Long technologyRoutingOperationId, Long technologyOperationId) {
+        List<TechnologyOperationParam> operationParamList = technologyOperationParamMapper.selectList(
+                Wrappers.<TechnologyOperationParam>lambdaQuery()
+                        .eq(TechnologyOperationParam::getTechnologyOperationId, technologyOperationId)
+                        .orderByAsc(TechnologyOperationParam::getId));
+        if (operationParamList.isEmpty()) {
+            return;
+        }
+        for (TechnologyOperationParam operationParam : operationParamList) {
+            TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
+            if (technologyParam == null) {
+                continue;
+            }
+            TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
+            snapshot.setTechnologyRoutingOperationId(technologyRoutingOperationId);
+            snapshot.setTechnologyOperationParamId(operationParam.getId());
+            snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
+            snapshot.setParamId(technologyParam.getId());
+            snapshot.setParamCode(technologyParam.getParamCode());
+            snapshot.setParamName(technologyParam.getParamName());
+            snapshot.setParamType(technologyParam.getParamType());
+            snapshot.setParamFormat(technologyParam.getParamFormat());
+            snapshot.setUnit(technologyParam.getUnit());
+            snapshot.setIsRequired(technologyParam.getIsRequired());
+            snapshot.setRemark(technologyParam.getRemark());
+            snapshot.setStandardValue(operationParam.getStandardValue());
+            technologyRoutingOperationParamMapper.insert(snapshot);
         }
     }
 
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index a99516f..887a72c 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -199,7 +199,7 @@
   # 浠ょ墝鑷畾涔夋爣璇�
   header: Authorization
   # 浠ょ墝瀵嗛挜
-  secret: abcdefghijklmnopqrstuvwxyz
+  secret: xpAVjhCjQDaDB7mjPAzMDSbQWXNu2zYkTdDNUsPMS5Xx8QMmQVYN7n74eZrYJxDJ
   # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
   expireTime: 450
 
diff --git a/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml b/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml
index 6797e1a..1bbb25c 100644
--- a/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml
+++ b/src/main/resources/mapper/technology/TechnologyRoutingOperationMapper.xml
@@ -16,4 +16,91 @@
         <result column="dept_id" property="deptId" />
     </resultMap>
 
+    <select id="pageTechnologyRoutingOperation" resultType="com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo">
+        select tro.*,
+               top2.name as technologyOperationName,
+               p.product_name as productName,
+               pm.model,
+               pm.model as specificationName,
+               pm.unit
+        from technology_routing_operation tro
+                 left join technology_operation top2 on tro.technology_operation_id = top2.id
+                 left join product_model pm on tro.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        <where>
+            <if test="c != null">
+                <if test="c.id != null">
+                    and tro.id = #{c.id}
+                </if>
+                <if test="c.technologyRoutingId != null">
+                    and tro.technology_routing_id = #{c.technologyRoutingId}
+                </if>
+                <if test="c.routeId != null">
+                    and tro.technology_routing_id = #{c.routeId}
+                </if>
+                <if test="c.productModelId != null">
+                    and tro.product_model_id = #{c.productModelId}
+                </if>
+                <if test="c.technologyOperationId != null">
+                    and tro.technology_operation_id = #{c.technologyOperationId}
+                </if>
+                <if test="c.isQuality != null">
+                    and tro.is_quality = #{c.isQuality}
+                </if>
+            </if>
+        </where>
+        order by tro.drag_sort asc, tro.id asc
+    </select>
+
+    <select id="listTechnologyRoutingOperation" resultType="com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo">
+        select tro.*,
+               top2.name as technologyOperationName,
+               p.product_name as productName,
+               pm.model,
+               pm.model as specificationName,
+               pm.unit
+        from technology_routing_operation tro
+                 left join technology_operation top2 on tro.technology_operation_id = top2.id
+                 left join product_model pm on tro.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        <where>
+            <if test="c != null">
+                <if test="c.id != null">
+                    and tro.id = #{c.id}
+                </if>
+                <if test="c.technologyRoutingId != null">
+                    and tro.technology_routing_id = #{c.technologyRoutingId}
+                </if>
+                <if test="c.routeId != null">
+                    and tro.technology_routing_id = #{c.routeId}
+                </if>
+                <if test="c.productModelId != null">
+                    and tro.product_model_id = #{c.productModelId}
+                </if>
+                <if test="c.technologyOperationId != null">
+                    and tro.technology_operation_id = #{c.technologyOperationId}
+                </if>
+                <if test="c.isQuality != null">
+                    and tro.is_quality = #{c.isQuality}
+                </if>
+            </if>
+        </where>
+        order by tro.drag_sort asc, tro.id asc
+    </select>
+
+    <select id="getTechnologyRoutingOperationInfo" resultType="com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo">
+        select tro.*,
+               top2.name as technologyOperationName,
+               p.product_name as productName,
+               pm.model,
+               pm.model as specificationName,
+               pm.unit
+        from technology_routing_operation tro
+                 left join technology_operation top2 on tro.technology_operation_id = top2.id
+                 left join product_model pm on tro.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        where tro.id = #{id}
+        limit 1
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/technology/TechnologyRoutingOperationParamMapper.xml b/src/main/resources/mapper/technology/TechnologyRoutingOperationParamMapper.xml
index e4a99ca..1a82456 100644
--- a/src/main/resources/mapper/technology/TechnologyRoutingOperationParamMapper.xml
+++ b/src/main/resources/mapper/technology/TechnologyRoutingOperationParamMapper.xml
@@ -2,10 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper">
 
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
     <resultMap id="BaseResultMap" type="com.ruoyi.technology.pojo.TechnologyRoutingOperationParam">
         <id column="id" property="id" />
-        <result column="technology_routing_operation_param_id" property="technologyRoutingOperationParamId" />
         <result column="param_code" property="paramCode" />
         <result column="param_name" property="paramName" />
         <result column="param_type" property="paramType" />

--
Gitblit v1.9.3