From 15999f1d20063dec73abeeea435d6e0d5a55c491 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期二, 12 五月 2026 17:56:19 +0800
Subject: [PATCH] feat(production): 新增扩展字段并优化打印订单业务逻辑

---
 src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java |  204 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 201 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index 9fafe5f..ab8fae4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -1,20 +1,27 @@
 package com.ruoyi.production.service.impl;
 
 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.production.dto.ProcessRouteAnticlockwiseDto;
 import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
 import com.ruoyi.production.mapper.ProcessRouteMapper;
-import com.ruoyi.production.pojo.ProcessRoute;
-import com.ruoyi.production.service.ProcessRouteService;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
 
 @Service
 @AllArgsConstructor
@@ -23,6 +30,28 @@
 
     @Autowired
     private ProcessRouteMapper processRouteMapper;
+
+    @Autowired
+    private ProcessRouteItemMapper processRouteItemMapper;
+
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
+    @Autowired
+    private ProductStructureService productStructureService;
+    @Autowired
+    private ProcessRouteItemService processRouteItemService;
+    @Autowired
+    private ProductWorkOrderService productWorkOrderService;
+    @Autowired
+    private ProductBomService productBomService;
+    @Autowired
+    private ProductProcessRouteService productProcessRouteService;
+    @Autowired
+    private ProductProcessRouteItemService productProcessRouteItemService;
+    @Autowired
+    private ProductOrderService productOrderService;
+    @Autowired
+    private ProductProcessService productProcessService;
 
     @Override
     public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) {
@@ -35,9 +64,178 @@
         this.save(processRoute);
         String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
         String idStr = String.format("%06d", processRoute.getId());
-        String newProductCode = "GY" + dateStr + idStr;
+        String newProductCode = "GYLX" + dateStr + idStr;
         // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
         processRoute.setProcessRouteCode(newProductCode);
         return processRouteMapper.updateById(processRoute);
     }
+
+    @Override
+    public int batchDelete(List<Long> ids) {
+        //鍏堝垽鏂槸鍚﹀凡缁忓紩鐢ㄤ簡
+        List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
+        if (productOrders.size() > 0) {
+            throw new RuntimeException("璇ュ伐鑹鸿矾绾跨敓浜у凡寮曠敤锛屼笉鑳藉垹闄�");
+        }
+        //鍒犻櫎宸ヨ壓璺嚎璇︽儏
+        processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids));
+        return processRouteMapper.deleteBatchIds(ids);
+    }
+
+
+    /**
+     * 宸ヨ壓璺嚎鍙嶅悜鏂板  鏂板浜哹om bom瀛愯〃  宸ヨ壓璺嚎  宸ヨ壓璺嚎瀛愯〃 鐢熶骇宸ヨ壓璺嚎涓昏〃  鐢熶骇宸ヨ壓璺嚎瀛愯〃 宸ュ崟琛�
+     *
+     * @param processRouteAnticlockwiseDtos 宸ヨ壓瀛愯〃
+     * @param productModelId                鎴愬搧瑙勬牸鍨嬪彿id
+     * @param productOrderId                鐢熶骇璁㈠崟id
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Long processRouteAnticlockwise(List<ProcessRouteAnticlockwiseDto> processRouteAnticlockwiseDtos, Long productModelId, Long productOrderId) {
+        ProductOrder byId = productOrderService.getById(productOrderId);
+        // 1. 鏂板BOM
+        ProductBom productBom = createProductBom(productModelId);
+
+        // 2. 鏂板BOM瀛愯〃
+        List<ProductStructure> productStructures = buildProductStructures(processRouteAnticlockwiseDtos, productBom.getId());
+        productStructureService.saveBatch(productStructures);
+
+        // 3. 鏂板宸ヨ壓璺嚎
+        ProcessRoute processRoute = createProcessRoute(productModelId, productBom.getId());
+
+        // 4. 鏂板宸ヨ壓璺嚎瀛愯〃
+        List<ProcessRouteItem> processRouteItems = buildProcessRouteItems(processRouteAnticlockwiseDtos, processRoute.getId(), productModelId);
+        processRouteItemService.saveBatch(processRouteItems);
+
+        // 5. 鏂板鐢熶骇宸ヨ壓璺嚎
+        ProductProcessRoute productProcessRoute = createProductProcessRoute(productModelId, productOrderId, productBom.getId(), processRoute.getProcessRouteCode());
+
+        // 6. 鏂板鐢熶骇宸ヨ壓璺嚎瀛愯〃
+        buildProductProcessRouteItems(processRouteAnticlockwiseDtos, productProcessRoute.getId(), productModelId,productOrderId);
+        return processRoute.getId();
+    }
+
+    /**
+     * 鍒涘缓浜у搧BOM
+     */
+    private ProductBom createProductBom(Long productModelId) {
+        ProductBom productBom = new ProductBom();
+        productBom.setProductModelId(productModelId);
+        productBom.setVersion("1.0.0");
+        productBomService.save(productBom);
+
+        productBom.setBomNo("BM." + String.format("%05d", productBom.getId()));
+        productBomService.updateById(productBom);
+
+        return productBom;
+    }
+
+    /**
+     * 鏋勫缓浜у搧缁撴瀯鍒楄〃
+     */
+    private List<ProductStructure> buildProductStructures(List<ProcessRouteAnticlockwiseDto> dtos, Integer bomId) {
+        List<ProductStructure> structures = new ArrayList<>(dtos.size());
+        for (ProcessRouteAnticlockwiseDto dto : dtos) {
+            ProductStructure structure = new ProductStructure();
+            structure.setProductModelId(dto.getProductModelId());
+            structure.setProcessId(dto.getProcessId());
+            structure.setUnitQuantity(new BigDecimal(1));
+            structure.setProcessRouteOpenNum(dto.getProcessRouteOpenNum());
+            structure.setProcessRouteNum(dto.getProcessRouteNum());
+            structure.setProcessRouteAddNum(dto.getProcessRouteAddNum());
+            structure.setProcessRouteRequire(dto.getProcessRouteRequire());
+            structure.setBomId(bomId);
+            structure.setProcessRouteName(dto.getProcessRouteName());
+            structures.add(structure);
+        }
+        return structures;
+    }
+
+    /**
+     * 鍒涘缓宸ヨ壓璺嚎
+     */
+    private ProcessRoute createProcessRoute(Long productModelId, Integer bomId) {
+        ProcessRoute processRoute = new ProcessRoute();
+        processRoute.setProductModelId(productModelId);
+        processRoute.setBomId(bomId);
+        processRoute.setDescription("");
+        this.save(processRoute);
+
+        processRoute.setProcessRouteCode("GYLX." + String.format("%05d", processRoute.getId()));
+        this.updateById(processRoute);
+
+        return processRoute;
+    }
+
+    /**
+     * 鏋勫缓宸ヨ壓璺嚎瀛愰」鍒楄〃
+     */
+    private List<ProcessRouteItem> buildProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long routeId, Long productModelId) {
+        List<ProcessRouteItem> items = new ArrayList<>(dtos.size());
+        Integer num = 0;
+        for (ProcessRouteAnticlockwiseDto dto : dtos) {
+            ProcessRouteItem item = new ProcessRouteItem();
+            item.setRouteId(routeId);
+            item.setProcessId(dto.getProcessId());
+            item.setProductModelId(productModelId);
+            item.setProcessRouteName(dto.getProcessRouteName());
+            item.setProcessRouteOpenNum(dto.getProcessRouteOpenNum());
+            item.setProcessRouteNum(dto.getProcessRouteNum());
+            item.setProcessRouteAddNum(dto.getProcessRouteAddNum());
+            item.setProcessRouteRequire(dto.getProcessRouteRequire());
+            item.setDragSort(num++);
+            items.add(item);
+        }
+        return items;
+    }
+
+    /**
+     * 鍒涘缓鐢熶骇宸ヨ壓璺嚎
+     */
+    private ProductProcessRoute createProductProcessRoute(Long productModelId, Long productOrderId, Integer bomId, String processRouteCode) {
+        ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+        productProcessRoute.setProductModelId(productModelId);
+        productProcessRoute.setProductOrderId(productOrderId);
+        productProcessRoute.setBomId(bomId);
+        productProcessRoute.setProcessRouteCode(processRouteCode);
+        productProcessRouteService.save(productProcessRoute);
+
+        return productProcessRoute;
+    }
+
+    /**
+     * 鏋勫缓鐢熶骇宸ヨ壓璺嚎瀛愰」鍒楄〃
+     */
+    private void buildProductProcessRouteItems(List<ProcessRouteAnticlockwiseDto> dtos, Long productRouteId, Long productModelId,Long productOrderId) {
+        ProductOrder byId = productOrderService.getById(productOrderId);
+        Integer num = 0;
+        for (ProcessRouteAnticlockwiseDto dto : dtos) {
+            ProductProcessRouteItem item = new ProductProcessRouteItem();
+            item.setProductRouteId(productRouteId);
+            item.setProcessId(dto.getProcessId());
+            item.setProductModelId(dto.getProductModelId());
+            item.setProcessRouteName(dto.getProcessRouteName());
+            item.setProcessRouteOpenNum(dto.getProcessRouteOpenNum());
+            item.setProcessRouteNum(dto.getProcessRouteNum());
+            item.setProcessRouteAddNum(dto.getProcessRouteAddNum());
+            item.setProcessRouteRequire(dto.getProcessRouteRequire());
+            item.setDragSort(num++);
+            item.setUuid(dto.getUuid());
+            productProcessRouteItemService.save(item);
+            ProductProcess productProcess = productProcessService.getById(item.getProcessId());
+            //鍚屾鏂板鐢熶骇宸ュ崟
+            ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+            productWorkOrder.setProductProcessRouteItemId(item.getId());
+            productWorkOrder.setProductOrderId(productOrderId);
+            productWorkOrder.setPlanQuantity(new BigDecimal(dto.getProcessRouteNum()));
+            productWorkOrder.setDeviceId(dto.getDeviceId());
+            productWorkOrder.setUserIds(dto.getUserIds());
+            productWorkOrder.setUserNames(dto.getUserNames());
+            productWorkOrder.setWorkOrderNo(productWorkOrderService.generateProductWorkOrder( productProcess.getName(), byId.getNpsNo()));
+            productWorkOrder.setStatus(1);
+            productWorkOrderService.save(productWorkOrder);
+        }
+    }
 }

--
Gitblit v1.9.3