From f350465db70d6f9db9494483ee0cec7793a9007b Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 19 八月 2026 17:47:57 +0800
Subject: [PATCH] feat(approve): 实现审批流程或签会签功能并优化数据库配置

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java |   97 +++++++++++++++++++++++++-----------------------
 1 files changed, 50 insertions(+), 47 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 b830a96..e8de010 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -18,6 +18,7 @@
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductProcessService;
 import com.ruoyi.production.service.ProductWorkOrderService;
+import com.ruoyi.production.service.ProductionProductMainService;
 import com.ruoyi.production.service.impl.ProductOrderServiceImpl;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
@@ -63,8 +64,10 @@
 
     private final ProductWorkOrderService productWorkOrderService;
     private final ProductProcessService productProcessService;
+    private ProductionProductMainService productionProductMainService;
     private SalesLedgerProductMapper salesLedgerProductMapper;
     private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+    private ProductionReportPersonMapper productionReportPersonMapper;
     private SalesLedgerMapper salesLedgerMapper;
     private PurchaseLedgerMapper purchaseLedgerMapper;
     private ProductOrderMapper productOrderMapper;
@@ -280,7 +283,7 @@
         productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
         productOrder.setProductModelId(salesLedgerProduct.getProductModelId());
         productOrder.setSaleLedgerProductId(salesLedgerProduct.getId());
-        String string = productOrderServiceImpl.generateNextOrderByContractNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")), salesLedger.getSalesContractNo());
+        String string = productOrderServiceImpl.generateNextOrderByContractNo(salesLedger.getSalesContractNo());
         productOrder.setNpsNo(string);
         productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
         productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
@@ -316,6 +319,7 @@
                 productProcessRouteItem.setProductOrderId(productOrder.getId());
                 productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
                 productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+                productProcessRouteItem.setIsQuality(processRouteItem.getIsQuality());
                 int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                 if (insert > 0) {
                     ProductWorkOrder productWorkOrder = new ProductWorkOrder();
@@ -329,6 +333,8 @@
                 }
 
             }
+            // 鎺掍骇涓嬭揪鍚庤嚜鍔ㄨЕ鍙戠涓�閬撻渶璐ㄦ宸ュ簭鐨勮繃绋嬫楠�
+            productionProductMainService.preGenerateQualityInspectForOrder(productOrder.getId());
             productOrder.setRouteId(processRoute.getId());
             productOrderMapper.updateById(productOrder);
         }
@@ -363,59 +369,56 @@
                 // 鏌ヨ鍏宠仈鐨勫伐鍗旾D
                 List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList(
                         new LambdaQueryWrapper<ProductWorkOrder>()
-                                .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)
+                                .in(ProductWorkOrder::getProductOrderId, orderIds)
                 );
-                if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(workOrders)) {
-                    List<Long> workOrderIds = workOrders.stream()
-                            .map(ProductWorkOrder::getId)
-                            .collect(Collectors.toList());
+                List<Long> workOrderIds = workOrders.stream()
+                        .map(ProductWorkOrder::getId)
+                        .collect(Collectors.toList());
 
-                    // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
-                    List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
-                            new LambdaQueryWrapper<ProductionProductMain>()
-                                    .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+                // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
+                List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
+                        new LambdaQueryWrapper<ProductionProductMain>()
+                                .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+                );
+                List<Long> productMainIds = productMains.stream()
+                        .map(ProductionProductMain::getId)
+                        .collect(Collectors.toList());
+
+                // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
+                if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
+                    productionProductOutputMapper.deleteByProductMainIds(productMainIds);
+                    productionProductInputMapper.deleteByProductMainIds(productMainIds);
+                    List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+                            new LambdaQueryWrapper<QualityInspect>()
+                                    .in(QualityInspect::getProductMainId, productMainIds)
                     );
-                    List<Long> productMainIds = productMains.stream()
-                            .map(ProductionProductMain::getId)
-                            .collect(Collectors.toList());
-
-                    // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
-                    if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
-                        productionProductOutputMapper.deleteByProductMainIds(productMainIds);
-                        productionProductInputMapper.deleteByProductMainIds(productMainIds);
-                        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
-                                new LambdaQueryWrapper<QualityInspect>()
-                                        .in(QualityInspect::getProductMainId, productMainIds)
-                        );
-                        //鍒犻櫎鍑哄簱璁板綍
-                        for (Long productMainId : productMainIds) {
-                            //鍒犻櫎鐢熶骇鍑哄簱璁板綍
-                            stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
-                            //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
-                            stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
+                    qualityInspects.forEach(qualityInspect -> {
+                        //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
+                        if (qualityInspect.getInspectState() == 1) {
+                            throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
                         }
-                        qualityInspects.forEach(qualityInspect -> {
-                            //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
-                            if (qualityInspect.getInspectState() == 1) {
-                                throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
-                            }
-                        });
-                        qualityInspectMapper.deleteByProductMainIds(productMainIds);
-                        salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
-                                .in(SalesLedgerProductionAccounting::getProductMainId, productMainIds));
+                    });
+                    //鍒犻櫎鍑哄叆搴撹褰�
+                    for (Long productMainId : productMainIds) {
+                        stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
+                        stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
                     }
-
-                    // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
-                    productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
-
-                    // 鍒犻櫎宸ュ崟鏁版嵁
-                    productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
-                            .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
+                    qualityInspectMapper.deleteByProductMainIds(productMainIds);
+                    salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+                            .in(SalesLedgerProductionAccounting::getProductMainId, productMainIds));
+                    productionReportPersonMapper.delete(new LambdaQueryWrapper<ProductionReportPerson>()
+                            .in(ProductionReportPerson::getProductMainId, productMainIds));
                 }
+
+                productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
+                // 娓呯悊鎺掍骇棰勭敓鎴愮殑璐ㄦ鍗�
+                productionProductMainService.cleanPreGeneratedQualityInspects(workOrderIds);
+
+                productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+                        .in(ProductWorkOrder::getProductOrderId, orderIds));
+                productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
+                        .in(ProductProcessRouteItem::getId, routeItemIds));
             }
-            // 鎵归噺鍒犻櫎processRouteItem
-            productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
-                    .in(ProductProcessRouteItem::getProductOrderId, orderIds));
 
             // 鎵归噺鍒犻櫎productProcessRoute
             productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()

--
Gitblit v1.9.3