From 6dc3d15ca7e4679e40bdb83525d6dc87d0784c67 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 03 二月 2026 09:31:49 +0800
Subject: [PATCH] feat(production): 添加工序质检控制功能

---
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                                 |   24 +++++--
 src/main/resources/mapper/production/ProductOrderMapper.xml                           |   14 ++++
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                           |    2 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |   75 +++++++++++++-----------
 src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java                  |    3 +
 src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java                         |    3 +
 src/main/java/com/ruoyi/production/pojo/ProductProcess.java                           |    3 +
 src/main/java/com/ruoyi/sales/pojo/SalesLedger.java                                   |    3 +
 8 files changed, 85 insertions(+), 42 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index 299cfd7..84539b0 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -54,4 +54,6 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate deliveryDate;
+
+    private Boolean isFh;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
index f2ebd44..973b29e 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
@@ -38,4 +38,7 @@
     private Integer dragSort;
 
 
+    @ApiModelProperty(value ="鏄惁璐ㄦ")
+    private Boolean isQuality;
+
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
index d25f9cf..5903783 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
@@ -71,4 +71,7 @@
     private Long tenantId;
 
 
+    private Boolean isQuality;
+
+
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
index 4b6762c..d84a7ce 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -38,4 +38,7 @@
     @ApiModelProperty(value ="鎷栧姩鎺掑簭")
     private Integer dragSort;
 
+    @ApiModelProperty(value ="鏄惁璐ㄦ")
+    private Boolean isQuality;
+
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index c69017f..8ac0c7e 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -163,41 +163,46 @@
         //鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
         if (productQty.compareTo(BigDecimal.ZERO) > 0) {
             /*鏂板璐ㄦ*/
-            //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
             List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-            int inspectType = 1;
-            String process = productProcess.getName();//宸ュ簭
-            if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
-                //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
-                inspectType = 2;
-                process = null;
-            }
-            Product product = productMapper.selectById(productModel.getProductId());
-            QualityInspect qualityInspect = new QualityInspect();
-            qualityInspect.setProductId(product.getId());
-            qualityInspect.setProductName(product.getProductName());
-            qualityInspect.setModel(productModel.getModel());
-            qualityInspect.setUnit(productModel.getUnit());
-            qualityInspect.setQuantity(productQty);
-            qualityInspect.setProcess(process);
-            qualityInspect.setInspectState(0);
-            qualityInspect.setInspectType(inspectType);
-            qualityInspect.setProductMainId(productionProductMain.getId());
-            qualityInspect.setProductModelId(productModel.getId());
-            qualityInspectMapper.insert(qualityInspect);
-            List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
-            if (qualityTestStandard.size() > 0) {
-                qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
-                qualityInspectMapper.updateById(qualityInspect);
-                qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
-                                .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//榛樿鑾峰彇鏈�鏂扮殑
-                        .forEach(qualityTestStandardParam -> {
-                            QualityInspectParam param = new QualityInspectParam();
-                            BeanUtils.copyProperties(qualityTestStandardParam, param);
-                            param.setId(null);
-                            param.setInspectId(qualityInspect.getId());
-                            qualityInspectParamMapper.insert(param);
-                        });
+            if (productProcessRouteItem.getIsQuality()) {
+                //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
+                int inspectType = 1;
+                String process = productProcess.getName();//宸ュ簭
+                if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+                    //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
+                    inspectType = 2;
+                    process = null;
+                }
+                Product product = productMapper.selectById(productModel.getProductId());
+                QualityInspect qualityInspect = new QualityInspect();
+                qualityInspect.setProductId(product.getId());
+                qualityInspect.setProductName(product.getProductName());
+                qualityInspect.setModel(productModel.getModel());
+                qualityInspect.setUnit(productModel.getUnit());
+                qualityInspect.setQuantity(productQty);
+                qualityInspect.setProcess(process);
+                qualityInspect.setInspectState(0);
+                qualityInspect.setInspectType(inspectType);
+                qualityInspect.setProductMainId(productionProductMain.getId());
+                qualityInspect.setProductModelId(productModel.getId());
+                qualityInspectMapper.insert(qualityInspect);
+                List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
+                if (qualityTestStandard.size() > 0) {
+                    qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
+                    qualityInspectMapper.updateById(qualityInspect);
+                    qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+                                    .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//榛樿鑾峰彇鏈�鏂扮殑
+                            .forEach(qualityTestStandardParam -> {
+                                QualityInspectParam param = new QualityInspectParam();
+                                BeanUtils.copyProperties(qualityTestStandardParam, param);
+                                param.setId(null);
+                                param.setInspectId(qualityInspect.getId());
+                                qualityInspectParamMapper.insert(param);
+                            });
+                }
+            }else {
+                //鐩存帴鍏ュ簱
+                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productionProductOutput.getQuantity(), StockQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
             }
             /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
             ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
@@ -289,6 +294,8 @@
                 .eq(ProductionProductInput::getProductMainId, productionProductMain.getId()));
         //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
         stockUtils.deleteStockInRecord(productionProductMain.getId(), StockUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
+        //鍒犻櫎涓嶉渶瑕佽川妫�鐨勫悎鏍煎叆搴�
+        stockUtils.deleteStockInRecord(productionProductMain.getId(), StockQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
         //鍒犻櫎鎶曞叆瀵瑰簲鐨勫嚭搴撹褰�
         stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
         // 鍒犻櫎涓昏〃
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index 30097b4..695a17c 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -139,5 +139,8 @@
     @TableField(exist = false)
     @ApiModelProperty(value = "浜よ揣澶╂暟宸�")
     private Integer deliveryDaysDiff;
+
+    @TableField(exist = false)
+    private Boolean isFh;
 }
 
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 227e707..4837e64 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -23,9 +23,21 @@
         pb.bom_no,
         ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
         DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
-        sl.delivery_date
+        sl.delivery_date,
+        CASE
+        WHEN shipping_status_counts.total_count = 0 THEN false
+        WHEN shipping_status_counts.unshipped_count = 0 THEN true
+        ELSE false
+        END AS is_fh
         from product_order po
         left join sales_ledger sl on po.sales_ledger_id = sl.id
+        LEFT JOIN (
+        SELECT sales_ledger_id,
+        COUNT(*) as total_count,
+        SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
+        FROM shipping_info
+        GROUP BY sales_ledger_id
+        ) shipping_status_counts ON sl.id = shipping_status_counts.sales_ledger_id
         left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id
         left join product_process_route ppr on po.id = ppr.product_order_id
         left join product_bom pb on pb.id = ppr.bom_id
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 215f0a7..c5d7aed 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -43,8 +43,7 @@
     </select>
 
     <select id="selectSalesLedgerListPage" resultType="com.ruoyi.sales.pojo.SalesLedger">
-        SELECT
-        T1.id,
+        SELECT T1.id,
         T1.sales_contract_no,
         T1.customer_contract_no,
         T1.project_name,
@@ -57,15 +56,26 @@
         T1.attachment_materials,
         T1.tenant_id,
         T1.contract_amount,
-        T1.contract_amount as noInvoiceAmountTotal,
+        T1.contract_amount                    as noInvoiceAmountTotal,
         T1.execution_date,
-        T2.nick_name AS entry_person_name,
+        T2.nick_name                          AS entry_person_name,
         T1.payment_method,
         T1.delivery_date,
-        DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff
-        FROM
-        sales_ledger T1
+        DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff,
+        CASE
+        WHEN shipping_status_counts.total_count = 0 THEN false
+        WHEN shipping_status_counts.unshipped_count = 0 THEN true
+        ELSE false
+        END AS is_fh
+        FROM sales_ledger T1
         LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id
+        LEFT JOIN (
+        SELECT sales_ledger_id,
+        COUNT(*) as total_count,
+        SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
+        FROM shipping_info
+        GROUP BY sales_ledger_id
+        ) shipping_status_counts ON T1.id = shipping_status_counts.sales_ledger_id
         <where>
             <if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
                 AND  T1.customer_name LIKE CONCAT('%',#{salesLedgerDto.customerName},'%')

--
Gitblit v1.9.3