From d3a5c4420a7daf89bc9832f22ca8ed9d7e1adaf9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 27 三月 2026 17:34:32 +0800
Subject: [PATCH] yys 1.完善销售下单,生成生产订单

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |  134 +++++++++++++++++++++++++++-----------------
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java  |    1 
 2 files changed, 83 insertions(+), 52 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 6e87d5d..39c4591 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -138,7 +138,6 @@
                 ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                 productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                 productWorkOrder.setProductOrderId(productOrder.getId());
-                ProductOrder order = productOrderMapper.selectById(productOrder.getId());
                 productWorkOrder.setPlanQuantity(BigDecimal.valueOf(productProcessRouteItem.getPlanNum()));
                 productWorkOrder.setWorkOrderNo(workOrderNoStr);
                 productWorkOrder.setPlanStartTime(productProcessRouteItem.getPlanStartTime());
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 96dfd7f..1970897 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -6,6 +6,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
 import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
@@ -18,6 +20,7 @@
 import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.impl.ProductBomServiceImpl;
 import com.ruoyi.production.service.impl.ProductOrderServiceImpl;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
@@ -36,6 +39,7 @@
 import com.ruoyi.stock.mapper.StockInventoryMapper;
 import com.ruoyi.stock.pojo.StockInventory;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -103,6 +107,12 @@
     private StockInventoryMapper stockInventoryMapper;
     @Autowired
     private ProductOrderServiceImpl productOrderServiceImpl;
+    @Autowired
+    private ProductModelMapper productModelMapper;
+    @Autowired
+    private ProductBomMapper productBomMapper;
+    @Autowired
+    private ProductBomServiceImpl productBomServiceImpl;
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -283,62 +293,84 @@
         productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
         productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
         productOrderMapper.insert(productOrder);
-
-        List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
-                .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
-                .orderByDesc(ProcessRoute::getCreateTime));
-        if (processRoutes.size()>0){
-            ProcessRoute processRoute = processRoutes.get(0);
-            //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
-            ProductProcessRoute productProcessRoute = new ProductProcessRoute();
-            productProcessRoute.setProductModelId(processRoute.getProductModelId());
-            productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
-            productProcessRoute.setProductOrderId(productOrder.getId());
-            productProcessRoute.setBomId(processRoute.getBomId());
-            productProcessRouteMapper.insert(productProcessRoute);
-            //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
-            List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
-            // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
-            String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
-            for (ProcessRouteItem processRouteItem : processRouteItems) {
-                ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
-                productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
-                productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
-                productProcessRouteItem.setProductOrderId(productOrder.getId());
-                productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
-                productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
-                int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
-                if (insert > 0) {
-                    // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
-                    ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
-                    int sequenceNumber = 1; // 榛樿搴忓彿
-                    if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
-                        String lastNo = lastWorkOrder.getWorkOrderNo().toString();
-                        if (lastNo.startsWith(datePrefix)) {
-                            String seqStr = lastNo.substring(datePrefix.length());
-                            try {
-                                sequenceNumber = Integer.parseInt(seqStr) + 1;
-                            } catch (NumberFormatException e) {
-                                sequenceNumber = 1;
-                            }
-                        }
+        // 鏌ヨ宸ヨ壓璺嚎id
+        ProductModel productModel = productModelMapper.selectById(salesLedgerProduct.getProductModelId());
+        if (productModel != null) {
+            ProcessRoute processRoute = processRouteMapper.selectById(productModel.getRouteId());
+            if (processRoute != null) {
+                //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+                ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+                productProcessRoute.setProductModelId(processRoute.getProductModelId());
+                productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+                productProcessRoute.setProductOrderId(productOrder.getId());
+                productProcessRoute.setBomId(processRoute.getBomId());
+                productProcessRouteMapper.insert(productProcessRoute);
+                // 缁戝畾鐢熶骇bom娓呭崟
+                List<ProductBom> productBoms = productBomMapper.selectList(new LambdaQueryWrapper<ProductBom>()
+                        .eq(ProductBom::getProductModelId, processRoute.getProductModelId())
+                        .orderByDesc(ProductBom::getId));
+                if(com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(productBoms)){
+                    ProductBom productBom = productBoms.get(0);
+                    // 鑾峰彇bom瀛愯〃淇℃伅
+                    List<ProductStructure> productStructures = productStructureMapper.selectList(new LambdaQueryWrapper<ProductStructure>()
+                            .eq(ProductStructure::getBomId, productBom.getId()));
+                    if(com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(productStructures)){
+                        productStructures.forEach(item ->{
+                            ProductStructureRecord item1 = new ProductStructureRecord();
+                            BeanUtils.copyProperties(item, item1);
+                            item1.setProductOrderId(productOrder.getId());
+                            item1.setDemandedQuantity(item.getUnitQuantity().add(productOrder.getQuantity()));
+                            item1.setBomId(Long.valueOf(productBom.getId()));
+                            productStructureRecordMapper.insert(item1);
+                        });
                     }
-                    // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
-                    String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
-                    ProductWorkOrder productWorkOrder = new ProductWorkOrder();
-                    productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
-                    productWorkOrder.setProductOrderId(productOrder.getId());
-                    productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
-                    productWorkOrder.setWorkOrderNo(workOrderNoStr);
-                    productWorkOrder.setStatus(1);
-
-                    productWorkOrderMapper.insert(productWorkOrder);
                 }
 
+                //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
+                List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+                // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+                String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+                for (ProcessRouteItem processRouteItem : processRouteItems) {
+                    ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+                    productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
+                    productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+                    productProcessRouteItem.setProductOrderId(productOrder.getId());
+                    productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+                    productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+                    int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+                    if (insert > 0) {
+                        // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
+                        ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
+                        int sequenceNumber = 1; // 榛樿搴忓彿
+                        if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+                            String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+                            if (lastNo.startsWith(datePrefix)) {
+                                String seqStr = lastNo.substring(datePrefix.length());
+                                try {
+                                    sequenceNumber = Integer.parseInt(seqStr) + 1;
+                                } catch (NumberFormatException e) {
+                                    sequenceNumber = 1;
+                                }
+                            }
+                        }
+                        // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+                        String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
+                        ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+                        productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+                        productWorkOrder.setProductOrderId(productOrder.getId());
+                        productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+                        productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                        productWorkOrder.setStatus(1);
+                        productWorkOrder.setUserPower(productProcessRouteItem.getUserPower());
+                        productWorkOrderMapper.insert(productWorkOrder);
+                    }
+
+                }
+                productOrder.setRouteId(processRoute.getId());
+                productOrderMapper.updateById(productOrder);
             }
-            productOrder.setRouteId(processRoute.getId());
-            productOrderMapper.updateById(productOrder);
         }
+
     }
 
     /**

--
Gitblit v1.9.3