From 60761f72f43b1c805e5e788f7f7a2be2c9991f64 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 17 四月 2026 09:31:38 +0800
Subject: [PATCH] feat: 销售订单新增的生产订单移除工艺路线与BOM,改为查询对应的部件类型

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |  100 +++++++++++++++++++++++++------------------------
 1 files changed, 51 insertions(+), 49 deletions(-)

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 68b52cb..e4eb0f3 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -73,6 +73,7 @@
 
     private ProcessRouteMapper processRouteMapper;
     private ProductProcessRouteMapper productProcessRouteMapper;
+    private ProductProcessMapper productProcessMapper;
 
     private ProductWorkOrderMapper productWorkOrderMapper;
     private ProductionProductMainMapper productionProductMainMapper;
@@ -83,7 +84,6 @@
     private ShippingInfoServiceImpl shippingInfoService;
 
     private StockUtils stockUtils;
-
 
 
     @Autowired
@@ -104,14 +104,14 @@
 //        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
 //                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
-        if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+        if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
             salesLedgerProducts.forEach(item -> {
                 // 鍙戣揣淇℃伅
                 ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
                         .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
                         .orderByDesc(ShippingInfo::getCreateTime)
                         .last("limit 1"));
-                if(shippingInfo != null){
+                if (shippingInfo != null) {
                     item.setShippingDate(shippingInfo.getShippingDate());
                     item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
                     item.setShippingStatus(shippingInfo.getStatus());
@@ -131,8 +131,8 @@
                     BigDecimal noInvoiceNum = BigDecimal.ZERO;
                     BigDecimal noInvoiceAmount = BigDecimal.ZERO;
                     for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
-                        if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
-                            invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
+                        if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
+                            invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
                         }
                     }
@@ -166,7 +166,7 @@
         //鍒犻櫎鍙戣揣淇℃伅
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                 .in(ShippingInfo::getSalesLedgerProductId, Arrays.asList(ids)));
-        if(!CollectionUtils.isEmpty(shippingInfos)){
+        if (!CollectionUtils.isEmpty(shippingInfos)) {
             shippingInfoService.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
         }
 
@@ -203,12 +203,12 @@
     @Transactional(rollbackFor = Exception.class)
     public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
         // 寰呭洖娆撅紝浠樻
-        if(salesLedgerProduct.getType().equals(1)){
+        if (salesLedgerProduct.getType().equals(1)) {
             salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal()));
             //鏈紑绁ㄦ暟閲�+閲戦
             salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
             salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
-        }else{
+        } else {
             salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal()));
             // 鏈潵绁ㄦ暟閲�+閲戦
             salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
@@ -276,60 +276,61 @@
         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);
-            //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+        // 鏌ヨ璇ヤ骇鍝佸瀷鍙峰搴旂殑宸ュ簭
+        List<ProductProcess> productProcesses = productProcessMapper.selectList(new QueryWrapper<ProductProcess>().lambda()
+                .eq(ProductProcess::getProductModelId, salesLedgerProduct.getProductModelId())
+                .orderByAsc(ProductProcess::getId));
+        if (!CollectionUtils.isEmpty(productProcesses)) {
             ProductProcessRoute productProcessRoute = new ProductProcessRoute();
-            productProcessRoute.setProductModelId(processRoute.getProductModelId());
-            productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+            productProcessRoute.setProductModelId(salesLedgerProduct.getProductModelId());
             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) {
+            // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿锛屼綔涓哄悗缁伐鍗曞彿鐨勮捣濮嬪簭鍙�
+            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;
+                    }
+                }
+            }
+
+            // 鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃 + 宸ュ崟
+            for (int i = 0; i < productProcesses.size(); i++) {
+                ProductProcess process = productProcesses.get(i);
+
                 ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
-                productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
-                productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+                productProcessRouteItem.setProductModelId(salesLedgerProduct.getProductModelId());
+                productProcessRouteItem.setProcessId(process.getId());
                 productProcessRouteItem.setProductOrderId(productOrder.getId());
                 productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
-                productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+                productProcessRouteItem.setDragSort(i + 1);
+                productProcessRouteItem.setIsQuality(process.getIsQuality());
+                productProcessRouteItem.setPlannedWorkHours(process.getSalaryQuota());
+
                 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);
+                    String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+                    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);
                 }
-
             }
-            productOrder.setRouteId(processRoute.getId());
-            productOrderMapper.updateById(productOrder);
         }
     }
 
@@ -431,9 +432,9 @@
         IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPage(page, salesLedgerProduct);
         salesLedgerProductDtoIPage.getRecords().forEach(item -> {
             // 鍒ゆ柇鐘舵��
-            if(item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0){
+            if (item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0) {
                 item.setStatusName("宸插畬鎴愪粯娆�");
-            }else{
+            } else {
                 item.setStatusName("鏈畬鎴愪粯娆�");
             }
         });
@@ -445,9 +446,9 @@
         IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPagePurchaseLedger(page, salesLedgerProduct);
         salesLedgerProductDtoIPage.getRecords().forEach(item -> {
             // 鍒ゆ柇鐘舵��
-            if(item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0){
+            if (item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0) {
                 item.setStatusName("宸插畬鎴愪粯娆�");
-            }else{
+            } else {
                 item.setStatusName("鏈畬鎴愪粯娆�");
             }
         });
@@ -488,6 +489,7 @@
             throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
         }
     }
+
     @Override
     public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
         //鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
@@ -506,7 +508,7 @@
 
             //鎵�闇�鏁伴噺
             BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
-            BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+            BigDecimal subtract = stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
             if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
                 count++;
                 stringBuffer.append(productStructureDto.getProductName())
@@ -517,9 +519,9 @@
                         .append(System.lineSeparator());
             }
         }
-        if (count>0) {
+        if (count > 0) {
             return R.fail(stringBuffer.toString());
-        }else {
+        } else {
             return R.ok();
         }
     }

--
Gitblit v1.9.3