From a497406167f500741ac6cc1d24e086589972eb49 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 19 三月 2026 18:03:54 +0800
Subject: [PATCH] fix: 工艺路线工序参数表取消绑定基础参数表

---
 src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java |  143 ++++++++++++++++++++++++++---------------------
 1 files changed, 78 insertions(+), 65 deletions(-)

diff --git a/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java b/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
index 5d77a0f..890785d 100644
--- a/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
+++ b/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
@@ -3,9 +3,9 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.appendix.pojo.ProcessRouteItemInstance;
 import com.ruoyi.appendix.pojo.ProcessRouteItemParamInstance;
-import com.ruoyi.appendix.pojo.ProductProcessParamInstance;
 import com.ruoyi.appendix.pojo.ProductStructureInstance;
 import com.ruoyi.appendix.service.*;
+import com.ruoyi.basic.service.BaseParamService;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.production.pojo.*;
@@ -16,7 +16,9 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -39,10 +41,10 @@
     private ProcessRouteItemParamInstanceService processRouteItemParamInstanceService;
 
     @Resource
-    private ProductProcessParamInstanceService productProcessParamInstanceService;
+    private ProductStructureInstanceService productStructureInstanceService;
 
     @Resource
-    private ProductStructureInstanceService productStructureInstanceService;
+    private BaseParamService baseParamService;
 
     @Resource
     private ProcessRouteService processRouteService;
@@ -54,16 +56,13 @@
     private ProcessRouteItemParamService processRouteItemParamService;
 
     @Resource
-    private ProductProcessParamService productProcessParamService;
-
-    @Resource
     private ProductStructureService productStructureService;
 
     @Resource
     private ProductOrderService productOrderService;
 
     @Override
-    public Long populateBlocks(ProductionPlanDto productionPlanDto) {
+    public Long populateBlocks(Long orderId, ProductionPlanDto productionPlanDto) {
         if (productionPlanDto == null) {
             throw new ServiceException("涓嬪彂鏁版嵁涓嶈兘涓虹┖");
         }
@@ -75,12 +74,12 @@
             log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
             return null;
         }
-        migration(processRoute);
+        migration(orderId, processRoute);
         return processRoute.getId();
     }
 
     @Override
-    public Long populatePlates(ProductionPlanDto productionPlanDto) {
+    public Long populatePlates(Long orderId, ProductionPlanDto productionPlanDto) {
         if (productionPlanDto == null) {
             throw new ServiceException("涓嬪彂鏁版嵁涓嶈兘涓虹┖");
         }
@@ -90,127 +89,141 @@
             log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
             return null;
         }
-        migration(processRoute);
+        migration(orderId, processRoute);
         return processRoute.getId();
     }
 
     @Override
-    public void populateData(Long productOrderId, Long processRouteId) {
-        ProcessRoute processRoute = processRouteService.getById(processRouteId);
-        if (processRoute == null) {
-            log.info("鐢熶骇璁㈠崟銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾裤�恵}銆�", productOrderId, processRouteId);
-            return;
+    public void populateData(ProductOrder productOrder) {
+        if (productOrder == null) {
+            throw new ServiceException("缁戝畾澶辫触.鏁版嵁涓嶈兘涓虹┖");
         }
-        migration(processRoute);
+        if (productOrder.getId() == null || productOrder.getRouteId() == null) {
+            throw new ServiceException("缁戝畾澶辫触,鐢熶骇璁㈠崟鎴栧伐鑹鸿矾绾夸笉鑳戒负绌�");
+        }
+        ProcessRoute processRoute = processRouteService.getById(productOrder.getRouteId());
+        if (processRoute == null) {
+            throw new ServiceException("璇ュ伐鑹鸿矾绾夸笉瀛樺湪,缁戝畾澶辫触");
+        }
+        migration(productOrder.getId(), processRoute);
 
         //  鍥炲啓宸ヨ壓璺嚎id鍒扮敓浜ц鍗�
-        ProductOrder productOrder = new ProductOrder();
-        productOrder.setId(productOrderId);
-        productOrder.setRouteId(processRouteId);
         productOrderService.updateById(productOrder);
     }
 
     @Override
-    public void deleteData(Long processRouteId) {
-        //  鏌ュ嚭宸ヨ壓璺嚎瀛愰泦锛岀敤浜庡叧鑱斿垹闄ゅ弬鏁伴檮琛�
-        List<ProcessRouteItem> itemList = processRouteItemService.list(new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRouteId));
-
-        if (itemList != null && !itemList.isEmpty()) {
-            List<Long> itemIds = itemList.stream().map(ProcessRouteItem::getId).collect(Collectors.toList());
-            List<Long> processIds = itemList.stream().map(ProcessRouteItem::getProcessId).collect(Collectors.toList());
-
-            //  鍒犻櫎宸ヨ壓璺嚎宸ュ簭鍙傛暟闄勮〃
-            processRouteItemParamInstanceService.remove(new LambdaQueryWrapper<ProcessRouteItemParamInstance>().in(ProcessRouteItemParamInstance::getRouteItemId, itemIds));
-
-            //  鍒犻櫎宸ュ簭缁戝畾鍙傛暟闄勮〃
-            productProcessParamInstanceService.remove(new LambdaQueryWrapper<ProductProcessParamInstance>().in(ProductProcessParamInstance::getProcessId, processIds));
-        }
+    public void deleteData(Long orderId, Long processRouteId) {
+        //  鍒犻櫎宸ヨ壓璺嚎宸ュ簭鍙傛暟闄勮〃
+        processRouteItemParamInstanceService.remove(new LambdaQueryWrapper<ProcessRouteItemParamInstance>()
+                .eq(ProcessRouteItemParamInstance::getOrderId, orderId));
 
         //  鍒犻櫎宸ヨ壓璺嚎瀛愰泦闄勮〃
-        processRouteItemInstanceService.remove(
-                new LambdaQueryWrapper<ProcessRouteItemInstance>().eq(ProcessRouteItemInstance::getRouteId, processRouteId));
+        processRouteItemInstanceService.remove(new LambdaQueryWrapper<ProcessRouteItemInstance>()
+                .eq(ProcessRouteItemInstance::getOrderId, orderId)
+                .eq(ProcessRouteItemInstance::getRouteId, processRouteId));
 
         //  鍒犻櫎BOM瀛愰泦闄勮〃
         ProcessRoute processRoute = processRouteService.getById(processRouteId);
         if (processRoute != null && processRoute.getBomId() != null) {
-            productStructureInstanceService.remove(new LambdaQueryWrapper<ProductStructureInstance>().eq(ProductStructureInstance::getBomId, processRoute.getBomId()));
+            productStructureInstanceService.remove(new LambdaQueryWrapper<ProductStructureInstance>()
+                    .eq(ProductStructureInstance::getOrderId, orderId)
+                    .eq(ProductStructureInstance::getBomId, processRoute.getBomId()));
         }
     }
 
     /**
-     * 鏍规嵁宸ヨ壓璺嚎杩佺Щ鍥涘紶闄勮〃鏁版嵁
+     * 鏍规嵁宸ヨ壓璺嚎杩佺Щ闄勮〃鏁版嵁
      */
-    private void migration(ProcessRoute processRoute) {
-        //  杩佺Щ宸ヨ壓璺嚎瀛愰泦琛ㄦ暟鎹�
-        List<ProcessRouteItem> processRouteItemList = processRouteItemService.list(new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
-        migrationProcessRouteItem(processRouteItemList);
+    private void migration(Long orderId, ProcessRoute processRoute) {
+        //  杩佺Щ宸ヨ壓璺嚎瀛愰泦琛ㄦ暟鎹紝杩斿洖鏃d->鏂癷nstance鏄犲皠
+        List<ProcessRouteItem> processRouteItemList = processRouteItemService.list(
+                new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+        Map<Long, ProcessRouteItemInstance> routeItemOldIdMap = migrationProcessRouteItem(orderId, processRouteItemList);
 
-        //  杩佺Щ宸ヨ壓璺嚎鍐呯粦瀹氱殑宸ュ簭鍙婂伐搴忓弬鏁�
+        //  杩佺Щ宸ヨ壓璺嚎鍐呯粦瀹氱殑宸ュ簭鍙傛暟
         if (processRouteItemList != null && !processRouteItemList.isEmpty()) {
             for (ProcessRouteItem item : processRouteItemList) {
-                List<ProcessRouteItemParam> paramList = processRouteItemParamService.list(new LambdaQueryWrapper<ProcessRouteItemParam>().eq(ProcessRouteItemParam::getRouteItemId, item.getId()));
-                migrationProcessRouteItemParam(paramList);
+                ProcessRouteItemInstance newInstance = routeItemOldIdMap.get(item.getId());
+                Long newRouteItemInstanceId = newInstance != null ? newInstance.getId() : item.getId();
 
-                List<ProductProcessParam> processParamList = productProcessParamService.list(new LambdaQueryWrapper<ProductProcessParam>().eq(ProductProcessParam::getProcessId, item.getProcessId()));
-                migrationProductProcessParam(processParamList);
+                List<ProcessRouteItemParam> paramList = processRouteItemParamService.list(
+                        new LambdaQueryWrapper<ProcessRouteItemParam>().eq(ProcessRouteItemParam::getRouteItemId, item.getId()));
+                migrationProcessRouteItemParam(orderId, paramList, newRouteItemInstanceId);
             }
         }
 
         //  杩佺ЩBOM瀛愰泦琛ㄦ暟鎹�
         if (processRoute.getBomId() != null) {
-            List<ProductStructure> structureList = productStructureService.list(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, processRoute.getBomId()));
-            migrationProductStructure(structureList);
+            List<ProductStructure> structureList = productStructureService.list(
+                    new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, processRoute.getBomId()));
+            migrationProductStructure(orderId, structureList);
         }
     }
 
-    private void migrationProcessRouteItem(List<ProcessRouteItem> list) {
+    private Map<Long, ProcessRouteItemInstance> migrationProcessRouteItem(Long orderId, List<ProcessRouteItem> list) {
+        Map<Long, ProcessRouteItemInstance> oldIdMap = new HashMap<>();
         if (list == null || list.isEmpty()) {
-            return;
+            return oldIdMap;
         }
         List<ProcessRouteItemInstance> instances = list.stream().map(item -> {
             ProcessRouteItemInstance instance = new ProcessRouteItemInstance();
             BeanUtils.copyProperties(item, instance, "id");
             instance.setIsQuality(item.getIsQuality() != null && item.getIsQuality() ? 1 : 0);
+            instance.setOrderId(orderId);
+            if (item.getId() != null) {
+                oldIdMap.put(item.getId(), instance);
+            }
             return instance;
         }).collect(Collectors.toList());
         processRouteItemInstanceService.saveBatch(instances);
+        return oldIdMap;
     }
 
-    private void migrationProcessRouteItemParam(List<ProcessRouteItemParam> list) {
+    private void migrationProcessRouteItemParam(Long orderId, List<ProcessRouteItemParam> list, Long newRouteItemInstanceId) {
         if (list == null || list.isEmpty()) {
             return;
         }
         List<ProcessRouteItemParamInstance> instances = list.stream().map(item -> {
             ProcessRouteItemParamInstance instance = new ProcessRouteItemParamInstance();
             BeanUtils.copyProperties(item, instance, "id");
+            instance.setOrderId(orderId);
+            instance.setRouteItemId(newRouteItemInstanceId);
             return instance;
         }).collect(Collectors.toList());
         processRouteItemParamInstanceService.saveBatch(instances);
     }
 
-    private void migrationProductProcessParam(List<ProductProcessParam> list) {
+    private void migrationProductStructure(Long orderId, List<ProductStructure> list) {
         if (list == null || list.isEmpty()) {
             return;
         }
-        List<ProductProcessParamInstance> instances = list.stream().map(item -> {
-            ProductProcessParamInstance instance = new ProductProcessParamInstance();
-            BeanUtils.copyProperties(item, instance, "id");
-            instance.setIsRequired(item.getIsRequired() != null && item.getIsRequired() == 1);
-            return instance;
-        }).collect(Collectors.toList());
-        productProcessParamInstanceService.saveBatch(instances);
-    }
-
-    private void migrationProductStructure(List<ProductStructure> list) {
-        if (list == null || list.isEmpty()) {
-            return;
-        }
+        Map<Long, ProductStructureInstance> oldIdMap = new HashMap<>();
         List<ProductStructureInstance> instances = list.stream().map(item -> {
             ProductStructureInstance instance = new ProductStructureInstance();
             BeanUtils.copyProperties(item, instance, "id");
             instance.setBomId(item.getBomId() != null ? item.getBomId().longValue() : null);
+            instance.setOrderId(orderId);
+            if (item.getId() != null) {
+                oldIdMap.put(item.getId(), instance);
+            }
             return instance;
         }).collect(Collectors.toList());
         productStructureInstanceService.saveBatch(instances);
+
+        //  鏂板鍚庢湁id锛屾棫id->鏂癷d锛屼慨姝arentId
+        Map<Long, Long> oldToNewId = new HashMap<>();
+        list.forEach(item -> {
+            if (item.getId() != null && oldIdMap.containsKey(item.getId())) {
+                oldToNewId.put(item.getId(), oldIdMap.get(item.getId()).getId());
+            }
+        });
+
+        List<ProductStructureInstance> toUpdate = instances.stream()
+                .filter(i -> i.getParentId() != null && oldToNewId.containsKey(i.getParentId()))
+                .peek(i -> i.setParentId(oldToNewId.get(i.getParentId())))
+                .collect(Collectors.toList());
+        if (!toUpdate.isEmpty()) {
+            productStructureInstanceService.updateBatchById(toUpdate);
+        }
     }
 }

--
Gitblit v1.9.3