From 0debf5b7bb0246eaef1397975cdb16f4adb9e8d9 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 29 十月 2026 14:36:31 +0800
Subject: [PATCH] refactor(inspection-order): 1.检验委托单绑定机制支持多次下单 2.合格率统计口径调整 3.外购铜导体推送入库MES增加米重 4.报告英文字段调整

---
 inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml |   64 ++++++++++++++++++++++++--------
 1 files changed, 48 insertions(+), 16 deletions(-)

diff --git a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
index aaec27f..5950330 100644
--- a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
+++ b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -2,6 +2,16 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ruoyi.inspect.mapper.DataAnalysisMapper">
 
+    <!-- 鏈夐潪绌虹櫧鎻忚堪涓旂鍚堝師鏈� OA 鏉′欢鐨勫鐞嗚褰曪紝鎵嶄綔涓轰笉鍚堟牸渚濇嵁銆� -->
+    <sql id="countableUnqualifiedBatch">
+        SELECT inventory_quantity_id, 1 AS has_unqualified
+        FROM ins_unqualified_handler
+        WHERE oa_state IS NOT NULL
+          AND oa_state != 4
+          AND unqualified_desc REGEXP '[^[:space:]銆�]'
+        GROUP BY inventory_quantity_id
+    </sql>
+
     <!-- 鑾峰彇鏈湀鐨勭墿鏂欏睘鎬т俊鎭� -->
     <!-- 鑾峰彇鏈湀鐨勭墿鏂欏睘鎬т俊鎭紙鎸夊ぉ锛岃ˉ鍏ㄦ棩鏈燂級 -->
     <select id="getRawPassRateByBarChartByDay" resultType="java.util.Map">
@@ -25,17 +35,21 @@
         SELECT
         DATE(report_time) AS day,
         COUNT(*) AS total,
-        SUM(CASE WHEN inspect_status = 1 and (iuh_id is null) THEN 1 ELSE 0 END) AS qualified,
-        SUM(CASE WHEN inspect_status != 1 or (iuh_id is not null) THEN 1 ELSE 0 END) AS unQualified
+        SUM(CASE WHEN has_unqualified = 0 THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN has_unqualified = 1 THEN 1 ELSE 0 END) AS unQualified
         FROM (SELECT
         IFNULL(iuh.feedback_time,io1.send_time) report_time,
         iuh.id AS iuh_id,
+        COALESCE(counted_iuh.has_unqualified, 0) AS has_unqualified,
         iiq.inspect_status
         FROM ifs_inventory_quantity iiq
         LEFT JOIN ins_order io1
         ON io1.ifs_inventory_id = iiq.id
         AND io1.order_type = #{dto.orderType}
         AND io1.state != -1
+        LEFT JOIN (
+        <include refid="countableUnqualifiedBatch"/>
+        ) counted_iuh ON counted_iuh.inventory_quantity_id = iiq.id
         LEFT JOIN (
         SELECT
         MAX(iuh.id) AS id,
@@ -111,18 +125,22 @@
         SELECT
             MONTH(report_time) AS month,
             COUNT(*) AS total,
-            SUM(CASE WHEN inspect_status = 1 and (iuh_id is null) THEN 1 ELSE 0 END) AS qualified,
-            SUM(CASE WHEN inspect_status != 1 or (iuh_id is not null) THEN 1 ELSE 0 END) AS unQualified
+            SUM(CASE WHEN has_unqualified = 0 THEN 1 ELSE 0 END) AS qualified,
+            SUM(CASE WHEN has_unqualified = 1 THEN 1 ELSE 0 END) AS unQualified
         FROM (
         SELECT
         IFNULL(iuh.feedback_time,io1.send_time) report_time,
         iuh.id AS iuh_id,
+        COALESCE(counted_iuh.has_unqualified, 0) AS has_unqualified,
         iiq.inspect_status
         FROM ifs_inventory_quantity iiq
         LEFT JOIN ins_order io1
         ON io1.ifs_inventory_id = iiq.id
         AND io1.order_type = #{dto.orderType}
         AND io1.state != -1
+        LEFT JOIN (
+        <include refid="countableUnqualifiedBatch"/>
+        ) counted_iuh ON counted_iuh.inventory_quantity_id = iiq.id
         LEFT JOIN (
         SELECT
         MAX(iuh.id) AS id,
@@ -168,16 +186,19 @@
         SELECT
             COUNT(*) AS sum,
             /* 鍚堟牸 */
-            SUM(CASE WHEN inspect_status = 1 and (iuh_id is null) THEN 1 ELSE 0 END) AS qualified,
+            SUM(CASE WHEN has_unqualified = 0 THEN 1 ELSE 0 END) AS qualified,
             /* 涓嶅悎鏍� */
-            SUM(CASE WHEN inspect_status != 1 or (iuh_id is not null) THEN 1 ELSE 0 END) AS unQualified
+            SUM(CASE WHEN has_unqualified = 1 THEN 1 ELSE 0 END) AS unQualified
         FROM (
         SELECT
         iiq.inspect_status,
-        iuh.id AS iuh_id
+        COALESCE(counted_iuh.has_unqualified, 0) AS has_unqualified
         FROM ifs_inventory_quantity iiq
         INNER JOIN ins_order io1
         ON io1.ifs_inventory_id = iiq.id
+        LEFT JOIN (
+        <include refid="countableUnqualifiedBatch"/>
+        ) counted_iuh ON counted_iuh.inventory_quantity_id = iiq.id
         LEFT JOIN (
         SELECT
         MAX(iuh.id) AS id,
@@ -224,20 +245,23 @@
         SELECT
             supplier_name,
             COUNT(id) AS totalBatch,
-            SUM(CASE WHEN inspect_status != 1 or (iuh_id is not null) THEN 1 ELSE 0 END) AS unqualifiedBatch,
-            ROUND(SUM(CASE WHEN inspect_status = 1 and iuh_id is null THEN 1 ELSE 0 END) / COUNT(*)* 100, 2 ) AS passRate
+            SUM(CASE WHEN has_unqualified = 1 THEN 1 ELSE 0 END) AS unqualifiedBatch,
+            ROUND(SUM(CASE WHEN has_unqualified = 0 THEN 1 ELSE 0 END) / COUNT(*)* 100, 2 ) AS passRate
         FROM
         (
             SELECT
                 iiq.supplier_name,
                 iiq.id,
-                iuh.id AS iuh_id,
+                COALESCE(counted_iuh.has_unqualified, 0) AS has_unqualified,
                 iiq.inspect_status
             FROM ifs_inventory_quantity iiq
             INNER JOIN ins_order io1
             ON io1.ifs_inventory_id = iiq.id
             AND io1.order_type = #{dto.orderType}
             AND io1.state != -1
+            LEFT JOIN (
+                <include refid="countableUnqualifiedBatch"/>
+            ) counted_iuh ON counted_iuh.inventory_quantity_id = iiq.id
             LEFT JOIN (
             SELECT
                 MAX(iuh.id) AS id,
@@ -382,13 +406,17 @@
     <!-- 鏌ヨ鏈湀涓庝笂鏈堝悎鏍肩巼瀵规瘮 -->
     <select id="getRawUpMonth" resultType="java.util.Map">
         select DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') as                           month,
-               (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
-                             100,
-                             2) passRate
+               (select ROUND(
+                            SUM(CASE WHEN counted_iuh.has_unqualified IS NULL THEN 1 ELSE 0 END) / COUNT(*) *
+                            100,
+                            2) passRate
                 from ifs_inventory_quantity iiq
                          LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
                     and io1.order_type = '杩涘巶妫�楠�'
                     and io1.state != -1
+                LEFT JOIN (
+                    <include refid="countableUnqualifiedBatch"/>
+                ) counted_iuh ON counted_iuh.inventory_quantity_id = iiq.id
                 where iiq.is_finish = 1
                   and iiq.inspect_status not in (0, 3)
                   and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH),
@@ -396,13 +424,17 @@
                     and DATE_FORMAT(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), '%Y-%m-%d 23:59:59'))) passRate
         UNION ALL
         select DATE_FORMAT(CURRENT_DATE, '%Y-%m') as                            month,
-               (select ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) *
-                             100,
-                             2) passRate
+               (select ROUND(
+                            SUM(CASE WHEN counted_iuh.has_unqualified IS NULL THEN 1 ELSE 0 END) / COUNT(*) *
+                            100,
+                            2) passRate
                 from ifs_inventory_quantity iiq
                          LEFT JOIN ins_order io1 on io1.ifs_inventory_id = iiq.id
                     and io1.order_type = '杩涘巶妫�楠�'
                     and io1.state != -1
+                LEFT JOIN (
+                    <include refid="countableUnqualifiedBatch"/>
+                ) counted_iuh ON counted_iuh.inventory_quantity_id = iiq.id
                 where iiq.is_finish = 1
                   and iiq.inspect_status not in (0, 3)
                   and (io1.send_time between

--
Gitblit v1.9.3