From 7cce9e212894b69f5539d768bfd372360df05904 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 28 四月 2026 16:39:40 +0800
Subject: [PATCH] 合格率统计调整:不合格处理OA状态为退回的不纳入合格率统计

---
 inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml                 |    1 
 cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml          |    1 
 inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml                          |   80 ++++++++++++++++++++++----
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java |   79 --------------------------
 4 files changed, 71 insertions(+), 90 deletions(-)

diff --git a/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
index c62d196..03f17da 100644
--- a/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
+++ b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
@@ -22,6 +22,7 @@
                 AND cprpr.reward_punish_time BETWEEN #{dto.startTime} AND #{dto.endTime}
             </if>
         </where>
+        ORDER BY cprpr.id DESC
     </select>
 
     <select id="rewardPunishmentExport" resultType="com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel">
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
index fd7181d..809de5b 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DataAnalysisServiceImpl.java
@@ -65,36 +65,10 @@
             dataAnalysisDto.setBeginDate(startDate.atTime(LocalTime.MIN).format(dateTimeFormatter));
             dataAnalysisDto.setEndDate(endDate.atTime(LocalTime.MAX).format(dateTimeFormatter));
         }
-//        if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) {
-//            return dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto);
-//        } else
-//            if (dataAnalysisDto.getDateType().equals("1")) {
-////            // 鑾峰彇鏈懆鐨勫紑濮嬫椂闂达紙鍛ㄤ竴 00:00:00锛�
-////            DateTime beginOfWeek = DateUtil.beginOfWeek(now);
-////            // 鑾峰彇鏈懆鐨勭粨鏉熸椂闂达紙鍛ㄦ棩 23:59:59锛�
-////            // 鑾峰彇鏈懆鐨勭粨鏉熸椂闂达紙鍛ㄦ棩 23:59:59锛�
-////            DateTime endOfWeek = DateUtil.endOfWeek(now);
-////            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
-////            dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
-//            List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByWeek(dataAnalysisDto);
-//            return maps;
-//        } else
-            if (Arrays.asList("1","2").contains(dataAnalysisDto.getDateType())) {
-//            // 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂达紙姣忔湀1鍙� 00:00:00锛�
-//            DateTime beginOfMonth = DateUtil.beginOfMonth(now);
-//            // 鑾峰彇褰撳墠鏈堢殑缁撴潫鏃堕棿锛堟湰鏈堟渶鍚庝竴澶� 23:59:59锛�
-//            DateTime endOfMonth = DateUtil.endOfMonth(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
+        if (Arrays.asList("1","2").contains(dataAnalysisDto.getDateType())) {
             List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByDay(dataAnalysisDto);
             return maps;
         } else if (dataAnalysisDto.getDateType().equals("3")) {
-//            // 鑾峰彇褰撳墠骞寸殑寮�濮嬫椂闂达紙姣忓勾1鏈�1鏃� 00:00:00锛�
-//            DateTime beginOfYear = DateUtil.beginOfYear(now);
-//            // 鑾峰彇褰撳墠骞寸殑缁撴潫鏃堕棿锛堟瘡骞�12鏈�31鏃� 23:59:59锛�
-//            DateTime endOfYear = DateUtil.endOfYear(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
             List<Map<String, Object>> maps = dataAnalysisMapper.getRawPassRateByBarChartByYear(dataAnalysisDto);
             return maps;
         }
@@ -123,32 +97,6 @@
             dataAnalysisDto.setBeginDate(startDate.atTime(LocalTime.MIN).format(dateTimeFormatter));
             dataAnalysisDto.setEndDate(endDate.atTime(LocalTime.MAX).format(dateTimeFormatter));
         }
-//        DateTime now = DateUtil.date();
-//        if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) {
-//
-//        } else
-//            if (dataAnalysisDto.getDateType().equals("1")) {
-//            // 鑾峰彇鏈懆鐨勫紑濮嬫椂闂达紙鍛ㄤ竴 00:00:00锛�
-//            DateTime beginOfWeek = DateUtil.beginOfWeek(now);
-//            // 鑾峰彇鏈懆鐨勭粨鏉熸椂闂达紙鍛ㄦ棩 23:59:59锛�
-//            DateTime endOfWeek = DateUtil.endOfWeek(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
-//        } else if (dataAnalysisDto.getDateType().equals("2")) {
-//            // 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂达紙姣忔湀1鍙� 00:00:00锛�
-//            DateTime beginOfMonth = DateUtil.beginOfMonth(now);
-//            // 鑾峰彇褰撳墠鏈堢殑缁撴潫鏃堕棿锛堟湰鏈堟渶鍚庝竴澶� 23:59:59锛�
-//            DateTime endOfMonth = DateUtil.endOfMonth(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
-//        } else if (dataAnalysisDto.getDateType().equals("3")) {
-//            // 鑾峰彇褰撳墠骞寸殑寮�濮嬫椂闂达紙姣忓勾1鏈�1鏃� 00:00:00锛�
-//            DateTime beginOfYear = DateUtil.beginOfYear(now);
-//            // 鑾峰彇褰撳墠骞寸殑缁撴潫鏃堕棿锛堟瘡骞�12鏈�31鏃� 23:59:59锛�
-//            DateTime endOfYear = DateUtil.endOfYear(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
-//        }
         return dataAnalysisMapper.getRawPassRateByCake(dataAnalysisDto);
     }
 
@@ -165,31 +113,6 @@
             dataAnalysisDto.setBeginDate(startDate.atTime(LocalTime.MIN).format(dateTimeFormatter));
             dataAnalysisDto.setEndDate(endDate.atTime(LocalTime.MAX).format(dateTimeFormatter));
         }
-//        if (StrUtil.isNotBlank(dataAnalysisDto.getBeginDate()) && StrUtil.isNotBlank(dataAnalysisDto.getEndDate())) {
-//
-//        } else if (dataAnalysisDto.getDateType().equals("1")) {
-//            // 鑾峰彇鏈懆鐨勫紑濮嬫椂闂达紙鍛ㄤ竴 00:00:00锛�
-//            DateTime beginOfWeek = DateUtil.beginOfWeek(now);
-//            // 鑾峰彇鏈懆鐨勭粨鏉熸椂闂达紙鍛ㄦ棩 23:59:59锛�
-//            DateTime endOfWeek = DateUtil.endOfWeek(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfWeek, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfWeek, "yyyy-MM-dd HH:mm:ss"));
-//        } else if (dataAnalysisDto.getDateType().equals("2")) {
-//            // 鑾峰彇褰撳墠鏈堢殑寮�濮嬫椂闂达紙姣忔湀1鍙� 00:00:00锛�
-//            DateTime beginOfMonth = DateUtil.beginOfMonth(now);
-//            // 鑾峰彇褰撳墠鏈堢殑缁撴潫鏃堕棿锛堟湰鏈堟渶鍚庝竴澶� 23:59:59锛�
-//            DateTime endOfMonth = DateUtil.endOfMonth(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfMonth, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfMonth, "yyyy-MM-dd HH:mm:ss"));
-//        } else if (dataAnalysisDto.getDateType().equals("3")) {
-//            // 鑾峰彇褰撳墠骞寸殑寮�濮嬫椂闂达紙姣忓勾1鏈�1鏃� 00:00:00锛�
-//            DateTime beginOfYear = DateUtil.beginOfYear(now);
-//            // 鑾峰彇褰撳墠骞寸殑缁撴潫鏃堕棿锛堟瘡骞�12鏈�31鏃� 23:59:59锛�
-//            DateTime endOfYear = DateUtil.endOfYear(now);
-//            dataAnalysisDto.setBeginDate(DateUtil.format(beginOfYear, "yyyy-MM-dd HH:mm:ss"));
-//            dataAnalysisDto.setEndDate(DateUtil.format(endOfYear, "yyyy-MM-dd HH:mm:ss"));
-//        }
-
         return dataAnalysisMapper.getMaterialPropTable(dataAnalysisDto);
     }
 
diff --git a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
index d678343..dac3f18 100644
--- a/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
+++ b/inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -85,15 +85,29 @@
         SELECT
         DATE(io1.send_time) AS day,
         COUNT(*) AS total,
-        SUM(CASE WHEN iiq.inspect_status = 1 or (iiq.inspect_status = 4 AND iuh.id is null) THEN 1 ELSE 0 END) AS qualified,
-        SUM(CASE WHEN iiq.inspect_status = 2 or (iiq.inspect_status = 4 AND iuh.id is not null) THEN 1 ELSE 0 END) AS unQualified
+        SUM(CASE WHEN iiq.inspect_status = 1 or (iuh.id is null) THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN iiq.inspect_status = 2 or (iuh.id is not null) THEN 1 ELSE 0 END) AS unQualified
         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
         AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
-        LEFT JOIN ins_unqualified_handler iuh ON iiq.id = iuh.inventory_quantity_id
+        LEFT JOIN (
+            SELECT
+                iuh.id,
+                coa.operation,
+                iuh.inventory_quantity_id
+            FROM ins_unqualified_handler iuh
+            LEFT JOIN (
+            SELECT
+            *,
+            ROW_NUMBER() OVER (PARTITION BY workflow_id ORDER BY approval_date DESC,approval_time DESC, id DESC) AS rn
+            FROM
+            common_oa
+            ) AS coa ON iuh.request_id = coa.workflow_id AND coa.rn = 1
+            WHERE coa.operation !='閫�鍥�' AND coa.operation is not null
+        ) iuh ON iiq.id = iuh.inventory_quantity_id
         LEFT JOIN (
         SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
         FROM ins_sample
@@ -160,15 +174,29 @@
         SELECT
         MONTH(io1.send_time) AS month,
         COUNT(*) AS total,
-        SUM(CASE WHEN iiq.inspect_status = 1 or (iiq.inspect_status = 4 AND iuh.id is null) THEN 1 ELSE 0 END) AS qualified,
-        SUM(CASE WHEN iiq.inspect_status = 2 or (iiq.inspect_status = 4 AND iuh.id is not null) THEN 1 ELSE 0 END) AS unQualified
+        SUM(CASE WHEN iiq.inspect_status = 1 or (iuh.id is null) THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN iiq.inspect_status = 2 or (iuh.id is not null) THEN 1 ELSE 0 END) AS unQualified
         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
         AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
-        LEFT JOIN ins_unqualified_handler iuh ON iiq.id = iuh.inventory_quantity_id
+        LEFT JOIN (
+            SELECT
+            iuh.id,
+            coa.operation,
+            iuh.inventory_quantity_id
+            FROM ins_unqualified_handler iuh
+            LEFT JOIN (
+            SELECT
+            *,
+            ROW_NUMBER() OVER (PARTITION BY workflow_id ORDER BY approval_date DESC,approval_time DESC, id DESC) AS rn
+            FROM
+            common_oa
+            ) AS coa ON iuh.request_id = coa.workflow_id AND coa.rn = 1
+            WHERE coa.operation !='閫�鍥�' AND coa.operation is not null
+        ) iuh ON iiq.id = iuh.inventory_quantity_id
         LEFT JOIN (
         SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
         FROM ins_sample
@@ -204,13 +232,27 @@
         SELECT
         COUNT(*) AS sum,
         /* 鍚堟牸 */
-        SUM(CASE WHEN iiq.inspect_status = 1 or (iiq.inspect_status = 4 AND iuh.id is null) THEN 1 ELSE 0 END) AS qualified,
+        SUM(CASE WHEN iiq.inspect_status = 1 or (iuh.id is null) THEN 1 ELSE 0 END) AS qualified,
         /* 涓嶅悎鏍� */
-        SUM(CASE WHEN iiq.inspect_status = 2 or (iiq.inspect_status = 4 AND iuh.id is not null) THEN 1 ELSE 0 END) AS unQualified
+        SUM(CASE WHEN iiq.inspect_status = 2 or (iuh.id is not null) THEN 1 ELSE 0 END) AS unQualified
         FROM ifs_inventory_quantity iiq
         INNER JOIN ins_order io1
         ON io1.ifs_inventory_id = iiq.id
-        LEFT JOIN ins_unqualified_handler iuh ON iiq.id = iuh.inventory_quantity_id
+        LEFT JOIN (
+            SELECT
+            iuh.id,
+            coa.operation,
+            iuh.inventory_quantity_id
+            FROM ins_unqualified_handler iuh
+            LEFT JOIN (
+            SELECT
+            *,
+            ROW_NUMBER() OVER (PARTITION BY workflow_id ORDER BY approval_date DESC,approval_time DESC, id DESC) AS rn
+            FROM
+            common_oa
+            ) AS coa ON iuh.request_id = coa.workflow_id AND coa.rn = 1
+            WHERE coa.operation !='閫�鍥�' AND coa.operation is not null
+        ) iuh ON iiq.id = iuh.inventory_quantity_id
         LEFT JOIN (
         SELECT
         is2.ins_order_id,
@@ -248,15 +290,29 @@
         SELECT
         iiq.supplier_name AS supplierName,
         COUNT(iiq.id) AS totalBatch,
-        SUM(CASE WHEN iiq.inspect_status = 2 or (iiq.inspect_status = 4 AND iuh.id is not null) THEN 1 ELSE 0 END) AS unqualifiedBatch,
-        ROUND(SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) / COUNT(*)* 100, 2 ) AS passRate
+        SUM(CASE WHEN iiq.inspect_status = 2 or (iuh.id is not null) THEN 1 ELSE 0 END) AS unqualifiedBatch,
+        ROUND(SUM(CASE WHEN iiq.inspect_status = 1 and iuh.id is null THEN 1 ELSE 0 END) / COUNT(*)* 100, 2 ) AS passRate
         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
         AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
-        LEFT JOIN ins_unqualified_handler iuh ON iiq.id = iuh.inventory_quantity_id
+        LEFT JOIN (
+            SELECT
+            iuh.id,
+            coa.operation,
+            iuh.inventory_quantity_id
+            FROM ins_unqualified_handler iuh
+            LEFT JOIN (
+            SELECT
+            *,
+            ROW_NUMBER() OVER (PARTITION BY workflow_id ORDER BY approval_date DESC,approval_time DESC, id DESC) AS rn
+            FROM
+            common_oa
+            ) AS coa ON iuh.request_id = coa.workflow_id AND coa.rn = 1
+            WHERE coa.operation !='閫�鍥�' AND coa.operation is not null
+        ) iuh ON iiq.id = iuh.inventory_quantity_id
         LEFT JOIN (
         SELECT
         ins_order_id,
diff --git a/inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml b/inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml
index 08eb596..cb4bee9 100644
--- a/inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsUnqualifiedHandlerMapper.xml
@@ -93,6 +93,7 @@
                 iuh.request_id,
                 iuh.file_url,
                 iuh.headline,
+                iuh.ins_order_id,
                 coa.operation
             from
                 ins_unqualified_handler iuh

--
Gitblit v1.9.3