From f43cbe675407f42f72945e901f34b44d494129f3 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 25 四月 2026 11:01:50 +0800
Subject: [PATCH] feat(technology): 添加工艺路线工序排序功能

---
 src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationService.java               |    2 +
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java |   35 +++++++++--------
 src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java         |    7 +++
 src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java      |   34 +++++++++++++++++
 4 files changed, 62 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
index 37868f8..eea52a0 100644
--- a/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
+++ b/src/main/java/com/ruoyi/technology/controller/TechnologyRoutingOperationController.java
@@ -7,6 +7,7 @@
 import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo;
 import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
 import com.ruoyi.technology.service.TechnologyRoutingOperationService;
+import io.swagger.annotations.ApiOperation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
@@ -57,4 +58,10 @@
     public R remove(@PathVariable("id") Long id) {
         return R.ok(technologyRoutingOperationService.removeTechnologyRoutingOperation(id));
     }
+
+    @PostMapping ("/sort")
+    @Operation(summary = "鎺掑簭宸ヨ壓璺嚎宸ュ簭")
+    public R sort(@RequestBody TechnologyRoutingOperation technologyRoutingOperation) {
+        return R.ok(technologyRoutingOperationService.sort(technologyRoutingOperation));
+    }
 }
diff --git a/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationService.java b/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationService.java
index 25b468f..40c8710 100644
--- a/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationService.java
+++ b/src/main/java/com/ruoyi/technology/service/TechnologyRoutingOperationService.java
@@ -21,4 +21,6 @@
     boolean saveTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation);
 
     boolean removeTechnologyRoutingOperation(Long id);
+
+    int sort(TechnologyRoutingOperation technologyRoutingOperation);
 }
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 2db55b4..9f270fa 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
@@ -3,6 +3,7 @@
 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.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -90,23 +91,25 @@
             );
         }
         int successCount = 0;
-        for (TechnologyOperationParam operationParam : operationParamList) {
-            boolean exists = technologyRoutingOperationParamMapper.selectCount(
-                    Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
-                            .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
-                            .eq(TechnologyRoutingOperationParam::getTechnologyOperationParamId, operationParam.getId())
-            ) > 0;
-            if (!replaceExisting && exists) {
-                continue;
+        if (CollectionUtils.isNotEmpty(operationParamList)) {
+            for (TechnologyOperationParam operationParam : operationParamList) {
+                boolean exists = technologyRoutingOperationParamMapper.selectCount(
+                        Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+                                .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+                                .eq(TechnologyRoutingOperationParam::getTechnologyOperationParamId, operationParam.getId())
+                ) > 0;
+                if (!replaceExisting && exists) {
+                    continue;
+                }
+                TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
+                snapshot.setTechnologyRoutingOperationId(routingOperation.getId());
+                snapshot.setTechnologyOperationParamId(operationParam.getId());
+                snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
+                snapshot.setStandardValue(operationParam.getStandardValue());
+                fillFromOperationParam(snapshot, routingOperation);
+                technologyRoutingOperationParamMapper.insert(snapshot);
+                successCount++;
             }
-            TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
-            snapshot.setTechnologyRoutingOperationId(routingOperation.getId());
-            snapshot.setTechnologyOperationParamId(operationParam.getId());
-            snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
-            snapshot.setStandardValue(operationParam.getStandardValue());
-            fillFromOperationParam(snapshot, routingOperation);
-            technologyRoutingOperationParamMapper.insert(snapshot);
-            successCount++;
         }
         return successCount;
     }
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 1daf6dc..bff3a44 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
@@ -76,6 +76,40 @@
         return removed;
     }
 
+    @Override
+    public int sort(TechnologyRoutingOperation technologyRoutingOperation) {
+        //鏌ヨ琚敼鍔ㄧ殑杩欐潯鏁版嵁
+        TechnologyRoutingOperation oldtechnologyRoutingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperation.getId());
+        //鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
+        List<TechnologyRoutingOperation> technologyRouteOperations = technologyRoutingOperationMapper.selectList(Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+                .eq(TechnologyRoutingOperation::getTechnologyRoutingId, oldtechnologyRoutingOperation.getTechnologyRoutingId())
+                .orderByAsc(TechnologyRoutingOperation::getDragSort));
+        // 鑾峰彇鐩爣浣嶇疆锛堢Щ鍔ㄥ埌绗嚑涓箣鍚庯級
+        Integer targetPosition = technologyRoutingOperation.getDragSort();
+        if (targetPosition != null && targetPosition >= 0) {
+            // 绉诲姩鍏冪礌鍒版柊鐨勪綅缃�
+            technologyRouteOperations.remove(oldtechnologyRoutingOperation);
+            technologyRouteOperations.add(targetPosition-1, oldtechnologyRoutingOperation);
+            // 鏇存柊鎵�鏈夊彈褰卞搷鐨勬帓搴忓瓧娈�
+            for (int i = 0; i < technologyRouteOperations.size(); i++) {
+                TechnologyRoutingOperation item = technologyRouteOperations.get(i);
+                if (!item.getId().equals(oldtechnologyRoutingOperation.getId())) {
+                    // 妫�鏌ユ槸鍚﹂渶瑕佹洿鏂版帓搴忓��
+                    if (item.getDragSort() != i+1) {
+                        item.setDragSort(i+1);
+                        technologyRoutingOperationMapper.updateById(item);
+                    }
+                } else {
+                    // 鏇存柊鍘熻褰曠殑鏂版帓搴忎綅缃�
+                    oldtechnologyRoutingOperation.setDragSort(targetPosition);
+                    technologyRoutingOperationMapper.updateById(oldtechnologyRoutingOperation);
+                }
+            }
+            return 1;
+        }
+        return 0;
+    }
+
     private Integer nextDragSort(Long technologyRoutingId) {
         TechnologyRoutingOperation lastOperation = technologyRoutingOperationMapper.selectOne(
                 Wrappers.<TechnologyRoutingOperation>lambdaQuery()

--
Gitblit v1.9.3