From 263b034b4058bb7a36c709278abdc88ca1ba26c1 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 30 三月 2026 18:01:25 +0800
Subject: [PATCH] feat: 生产成本导入数据入库

---
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderAppendixServiceImpl.java |   56 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 42 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderAppendixServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderAppendixServiceImpl.java
index bc6d03e..65b79bb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderAppendixServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderAppendixServiceImpl.java
@@ -57,6 +57,9 @@
     @Resource
     private ProductOrderService productOrderService;
 
+    @Resource
+    private IProductionOrderRouteService productionOrderRouteService;
+
     @Override
     public Long populateBlocks(Long orderId, ProductionPlanDto productionPlanDto) {
         if (productionPlanDto == null) {
@@ -70,8 +73,12 @@
             log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
             return null;
         }
-        migration(orderId, processRoute);
-        return processRoute.getId();
+
+        //  鍒涘缓宸ヨ壓璺嚎
+        ProductionOrderRoute productionOrderRoute = createOrderRouteSnapshot(orderId, processRoute);
+        migration(orderId, processRoute, productionOrderRoute.getId());
+
+        return productionOrderRoute.getId();
     }
 
     @Override
@@ -85,8 +92,12 @@
             log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
             return null;
         }
-        migration(orderId, processRoute);
-        return processRoute.getId();
+
+        //  鍒涘缓宸ヨ壓璺嚎
+        ProductionOrderRoute productionOrderRoute = createOrderRouteSnapshot(orderId, processRoute);
+        migration(orderId, processRoute, productionOrderRoute.getId());
+
+        return productionOrderRoute.getId();
     }
 
     @Override
@@ -101,14 +112,27 @@
         if (processRoute == null) {
             throw new ServiceException("璇ュ伐鑹鸿矾绾夸笉瀛樺湪,缁戝畾澶辫触");
         }
-        migration(productOrder.getId(), processRoute);
 
-        //  鍥炲啓宸ヨ壓璺嚎id鍒扮敓浜ц鍗�
+        //  鍒涘缓宸ヨ壓璺嚎
+        ProductionOrderRoute productionOrderRoute = createOrderRouteSnapshot(productOrder.getId(), processRoute);
+        migration(productOrder.getId(), processRoute, productionOrderRoute.getId());
+
+        //  鍥炲啓鏂扮殑宸ヨ壓璺嚎ID鍒扮敓浜ц鍗�
+        productOrder.setRouteId(productionOrderRoute.getId());
         productOrderService.updateById(productOrder);
     }
 
+    private ProductionOrderRoute createOrderRouteSnapshot(Long orderId, ProcessRoute processRoute) {
+        ProductionOrderRoute snapshot = new ProductionOrderRoute();
+        BeanUtils.copyProperties(processRoute, snapshot, "id", "createTime", "updateTime", "tenantId");
+        snapshot.setOrderId(orderId);
+        snapshot.setProcessRouteId(processRoute.getId());
+        productionOrderRouteService.save(snapshot);
+        return snapshot;
+    }
+
     @Override
-    public void deleteData(Long orderId, Long processRouteId) {
+    public void deleteData(Long orderId, Long snapshotRouteId) {
         //  鍒犻櫎宸ヨ壓璺嚎宸ュ簭鍙傛暟闄勮〃
         productionOrderRouteItemParamService.remove(new LambdaQueryWrapper<ProductionOrderRouteItemParam>()
                 .eq(ProductionOrderRouteItemParam::getOrderId, orderId));
@@ -116,25 +140,28 @@
         //  鍒犻櫎宸ヨ壓璺嚎瀛愰泦闄勮〃
         productionOrderRouteItemService.remove(new LambdaQueryWrapper<ProductionOrderRouteItem>()
                 .eq(ProductionOrderRouteItem::getOrderId, orderId)
-                .eq(ProductionOrderRouteItem::getRouteId, processRouteId));
+                .eq(ProductionOrderRouteItem::getRouteId, snapshotRouteId));
+
+        //  鍒犻櫎宸ヨ壓璺嚎
+        productionOrderRouteService.removeById(snapshotRouteId);
 
         //  鍒犻櫎BOM瀛愰泦闄勮〃
-        ProcessRoute processRoute = processRouteService.getById(processRouteId);
-        if (processRoute != null && processRoute.getBomId() != null) {
+        ProductionOrderRoute snapshot = productionOrderRouteService.getById(snapshotRouteId);
+        if (snapshot != null && snapshot.getBomId() != null) {
             productionOrderStructureService.remove(new LambdaQueryWrapper<ProductionOrderStructure>()
                     .eq(ProductionOrderStructure::getOrderId, orderId)
-                    .eq(ProductionOrderStructure::getBomId, processRoute.getBomId()));
+                    .eq(ProductionOrderStructure::getBomId, snapshot.getBomId().longValue()));
         }
     }
 
     /**
      * 鏍规嵁宸ヨ壓璺嚎杩佺Щ闄勮〃鏁版嵁
      */
-    private void migration(Long orderId, ProcessRoute processRoute) {
+    private void migration(Long orderId, ProcessRoute processRoute, Long newRouteId) {
         //  杩佺Щ宸ヨ壓璺嚎瀛愰泦琛ㄦ暟鎹紝杩斿洖鏃d->鏂癷nstance鏄犲皠
         List<ProcessRouteItem> processRouteItemList = processRouteItemService.list(
                 new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
-        Map<Long, ProductionOrderRouteItem> routeItemOldIdMap = migrationProcessRouteItem(orderId, processRouteItemList);
+        Map<Long, ProductionOrderRouteItem> routeItemOldIdMap = migrationProcessRouteItem(orderId, newRouteId, processRouteItemList);
 
         //  杩佺Щ宸ヨ壓璺嚎鍐呯粦瀹氱殑宸ュ簭鍙傛暟
         if (processRouteItemList != null && !processRouteItemList.isEmpty()) {
@@ -156,7 +183,7 @@
         }
     }
 
-    private Map<Long, ProductionOrderRouteItem> migrationProcessRouteItem(Long orderId, List<ProcessRouteItem> list) {
+    private Map<Long, ProductionOrderRouteItem> migrationProcessRouteItem(Long orderId, Long newRouteId, List<ProcessRouteItem> list) {
         Map<Long, ProductionOrderRouteItem> oldIdMap = new HashMap<>();
         if (list == null || list.isEmpty()) {
             return oldIdMap;
@@ -166,6 +193,7 @@
             BeanUtils.copyProperties(item, instance, "id");
             instance.setIsQuality(item.getIsQuality() != null && item.getIsQuality() ? 1 : 0);
             instance.setOrderId(orderId);
+            instance.setRouteId(newRouteId);
             if (item.getId() != null) {
                 oldIdMap.put(item.getId(), instance);
             }

--
Gitblit v1.9.3