From 124a6178ae918de05886b52199b7755d4fa1ece3 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 18 三月 2026 17:06:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_宁夏_中盛建材' into dev_宁夏_中盛建材

---
 src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java |  216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 216 insertions(+), 0 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
new file mode 100644
index 0000000..5d77a0f
--- /dev/null
+++ b/src/main/java/com/ruoyi/appendix/service/impl/AppendixServiceImpl.java
@@ -0,0 +1,216 @@
+package com.ruoyi.appendix.service.impl;
+
+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.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.*;
+import com.ruoyi.productionPlan.dto.ProductionPlanDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <br>
+ * BOM-宸ヨ壓璺嚎闄勮〃Service鎺ュ彛瀹炵幇绫�
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/18 14:45
+ */
+@Slf4j
+@Service
+public class AppendixServiceImpl implements AppendixService {
+
+    @Resource
+    private ProcessRouteItemInstanceService processRouteItemInstanceService;
+
+    @Resource
+    private ProcessRouteItemParamInstanceService processRouteItemParamInstanceService;
+
+    @Resource
+    private ProductProcessParamInstanceService productProcessParamInstanceService;
+
+    @Resource
+    private ProductStructureInstanceService productStructureInstanceService;
+
+    @Resource
+    private ProcessRouteService processRouteService;
+
+    @Resource
+    private ProcessRouteItemService processRouteItemService;
+
+    @Resource
+    private ProcessRouteItemParamService processRouteItemParamService;
+
+    @Resource
+    private ProductProcessParamService productProcessParamService;
+
+    @Resource
+    private ProductStructureService productStructureService;
+
+    @Resource
+    private ProductOrderService productOrderService;
+
+    @Override
+    public Long populateBlocks(ProductionPlanDto productionPlanDto) {
+        if (productionPlanDto == null) {
+            throw new ServiceException("涓嬪彂鏁版嵁涓嶈兘涓虹┖");
+        }
+        if (StringUtils.isEmpty(productionPlanDto.getStrength())) {
+            throw new ServiceException("鐮屽潡鐨勪骇鍝佺被鍨嬩笉鑳戒负绌�");
+        }
+        ProcessRoute processRoute = processRouteService.latestTypeDate(productionPlanDto.getProductName(), productionPlanDto.getStrength());
+        if (processRoute == null) {
+            log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
+            return null;
+        }
+        migration(processRoute);
+        return processRoute.getId();
+    }
+
+    @Override
+    public Long populatePlates(ProductionPlanDto productionPlanDto) {
+        if (productionPlanDto == null) {
+            throw new ServiceException("涓嬪彂鏁版嵁涓嶈兘涓虹┖");
+        }
+        //  鏉挎潗涓嶅尯鍒嗗己搴︼紝strength浼爊ull
+        ProcessRoute processRoute = processRouteService.latestTypeDate(productionPlanDto.getProductName(), null);
+        if (processRoute == null) {
+            log.info("涓嬪彂浜у搧銆恵}銆戞湭鏌ヨ鍑哄伐鑹鸿矾绾�", productionPlanDto.getProductName());
+            return null;
+        }
+        migration(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;
+        }
+        migration(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));
+        }
+
+        //  鍒犻櫎宸ヨ壓璺嚎瀛愰泦闄勮〃
+        processRouteItemInstanceService.remove(
+                new LambdaQueryWrapper<ProcessRouteItemInstance>().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()));
+        }
+    }
+
+    /**
+     * 鏍规嵁宸ヨ壓璺嚎杩佺Щ鍥涘紶闄勮〃鏁版嵁
+     */
+    private void migration(ProcessRoute processRoute) {
+        //  杩佺Щ宸ヨ壓璺嚎瀛愰泦琛ㄦ暟鎹�
+        List<ProcessRouteItem> processRouteItemList = processRouteItemService.list(new LambdaQueryWrapper<ProcessRouteItem>().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+        migrationProcessRouteItem(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);
+
+                List<ProductProcessParam> processParamList = productProcessParamService.list(new LambdaQueryWrapper<ProductProcessParam>().eq(ProductProcessParam::getProcessId, item.getProcessId()));
+                migrationProductProcessParam(processParamList);
+            }
+        }
+
+        //  杩佺ЩBOM瀛愰泦琛ㄦ暟鎹�
+        if (processRoute.getBomId() != null) {
+            List<ProductStructure> structureList = productStructureService.list(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, processRoute.getBomId()));
+            migrationProductStructure(structureList);
+        }
+    }
+
+    private void migrationProcessRouteItem(List<ProcessRouteItem> list) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        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);
+            return instance;
+        }).collect(Collectors.toList());
+        processRouteItemInstanceService.saveBatch(instances);
+    }
+
+    private void migrationProcessRouteItemParam(List<ProcessRouteItemParam> list) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        List<ProcessRouteItemParamInstance> instances = list.stream().map(item -> {
+            ProcessRouteItemParamInstance instance = new ProcessRouteItemParamInstance();
+            BeanUtils.copyProperties(item, instance, "id");
+            return instance;
+        }).collect(Collectors.toList());
+        processRouteItemParamInstanceService.saveBatch(instances);
+    }
+
+    private void migrationProductProcessParam(List<ProductProcessParam> 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;
+        }
+        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);
+            return instance;
+        }).collect(Collectors.toList());
+        productStructureInstanceService.saveBatch(instances);
+    }
+}

--
Gitblit v1.9.3