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(*) *
               (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(*) *
               (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