gongchunyi
2 天以前 544afa4dabaccb0248bf0b6fcfdc7b9b6c2ea9f2
inspect-server/src/main/resources/mapper/DataAnalysisMapper.xml
@@ -1,14 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!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">
    <!-- 获取本周的原材料信息 -->
    <!-- 获取本周的物料属性信息 -->
    <select id="getRawPassRateByBarChartByWeek" resultType="java.util.Map">
        WITH RECURSIVE AllWeeks AS (SELECT 1 AS week
        WITH RECURSIVE AllWeeks AS (
        SELECT 1 AS week
                                     UNION ALL
                                     SELECT week + 1
                                     FROM AllWeeks
                                     WHERE week &lt; 7)
        SELECT COALESCE(sub.sum, 0)      AS sum,
        SELECT week + 1 FROM AllWeeks WHERE week &lt; 7
        )
        SELECT
        COALESCE(sub.qualified, 0) AS qualified,
        COALESCE(sub.unQualified, 0) AS unQualified,
               CASE am.week
                   WHEN 1 THEN '星期日'
                   WHEN 2 THEN '星期一'
@@ -17,83 +20,118 @@
                   WHEN 5 THEN '星期四'
                   WHEN 6 THEN '星期五'
                   WHEN 7 THEN '星期六'
                END                   AS searchTime,
               COALESCE(sub.passRate, 0) AS passRate
        END AS searchTime
        FROM AllWeeks am
                 LEFT JOIN (select COUNT(*)                 sum,
                                   DAYOFWEEK(io1.send_time) searchTime,
                                   ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) 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 = #{dto.orderType}
                                and io1.state != -1
                                     left join (select is2.ins_order_id,
                                                       is2.sample_type,
                                                       is2.model,
                                                       is2.sample
                                                from ins_sample is2
                                                group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
                            where iiq.is_finish = 1
                              and iiq.inspect_status not in (0, 3)
                              and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
        LEFT JOIN (
        SELECT
        DAYOFWEEK(io1.send_time) AS week,
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        SUM(CASE WHEN iiq.inspect_status = 2 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 (
        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1, 2)
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        <if test="dto.materialProp != null and dto.materialProp.trim() != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
        <if test="dto.sampleName != null and dto.sampleName.trim() != ''">
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
        <if test="dto.modelName != null and dto.modelName.trim() != ''">
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName.trim() != ''">
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
                            GROUP BY DAYOFWEEK(io1.send_time)
                            having searchTime is not null) sub ON am.week = sub.searchTime
        WHERE am.week BETWEEN 1 AND 7
        ) sub ON am.week = sub.week
        ORDER BY am.week
    </select>
    <!-- 获取本月的原材料信息 -->
    <!-- 获取本月的物料属性信息 -->
    <!-- 获取本月的物料属性信息(按天,补全日期) -->
    <select id="getRawPassRateByBarChartByDay" resultType="java.util.Map">
        select COUNT(*)                         sum,
               DATE_FORMAT(io1.send_time, '%Y-%m-%d') searchTime,
               ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) 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 = #{dto.orderType}
            and io1.state != -1
                 left join (select is2.ins_order_id,
                                   is2.sample_type,
                                   is2.model,
                                   is2.sample
                            from ins_sample is2
                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
        where iiq.is_finish = 1
          and iiq.inspect_status not in (0, 3)
        and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        WITH RECURSIVE AllDays AS (
        SELECT DATE(#{dto.beginDate}) AS day
        UNION ALL
        SELECT DATE_ADD(day, INTERVAL 1 DAY)
        FROM AllDays
        WHERE day &lt; DATE(#{dto.endDate})
        )
        SELECT
        DATE_FORMAT(ad.day,'%Y-%m-%d') AS searchTime,
        COALESCE(sub.qualified,0) AS qualified,
        COALESCE(sub.unQualified,0) AS unQualified,
        CASE
        WHEN COALESCE(sub.total,0) = 0 THEN 0
        ELSE ROUND(sub.qualified / sub.total * 100, 2)
        END AS passRate
        FROM AllDays ad
        LEFT JOIN (
        SELECT
        DATE(io1.send_time) AS day,
        COUNT(*) AS total,
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        SUM(CASE WHEN iiq.inspect_status = 2 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 (
        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1,2)
        <if test="dto.materialProp != null and dto.materialProp != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
        GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m-%d')
        having searchTime is not null
        order by searchTime
        GROUP BY DATE(io1.send_time)
        ) sub ON ad.day = sub.day
        ORDER BY ad.day
    </select>
    <!-- 获取本年的原材料信息 -->
    <!-- 获取本年的物料属性信息 -->
    <!-- 获取本年的物料属性信息 -->
    <select id="getRawPassRateByBarChartByYear" resultType="java.util.Map">
        WITH RECURSIVE AllMonths AS (SELECT 1 AS month
        WITH RECURSIVE AllMonths AS (
        SELECT 1 AS month
                                     UNION ALL
                                     SELECT month + 1
                                     FROM AllMonths
                                     WHERE month &lt; 12)
        SELECT COALESCE(sub.sum, 0)      AS sum,
        SELECT month + 1 FROM AllMonths WHERE month
        &lt;
        12
        )
        SELECT
               CASE am.month
                   WHEN 1 THEN '1月'
                   WHEN 2 THEN '2月'
@@ -108,70 +146,141 @@
                   WHEN 11 THEN '11月'
                   WHEN 12 THEN '12月'
                END                   AS searchTime,
               COALESCE(sub.passRate, 0) AS passRate
        COALESCE(sub.qualified,0) AS qualified,
        COALESCE(sub.unQualified,0) AS unQualified,
        CASE
        WHEN COALESCE(sub.total,0) = 0 THEN 0
        ELSE ROUND(sub.qualified / sub.total * 100, 2)
        END AS passRate
        FROM AllMonths am
                 LEFT JOIN (select COUNT(*)                         sum,
                                   DATE_FORMAT(io1.send_time, '%m') searchTime,
                                   ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) 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 = #{dto.orderType}
                                and io1.state != -1
                                     left join (select is2.ins_order_id,
                                                       is2.sample_type,
                                                       is2.model,
                                                       is2.sample
                                                from ins_sample is2
                                                group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
                            where iiq.is_finish = 1
                              and iiq.inspect_status not in (0, 3)
                              and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        LEFT JOIN (
        SELECT
        MONTH(io1.send_time) AS month,
        COUNT(*) AS total,
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        SUM(CASE WHEN iiq.inspect_status = 2 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 (
        SELECT ins_order_id, MAX(sample) AS sample, MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1,2)
        <if test="dto.materialProp != null and dto.materialProp != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
                            GROUP BY DATE_FORMAT(io1.send_time, '%Y-%m')
                            having searchTime is not null) sub ON am.month = sub.searchTime
        WHERE am.month BETWEEN 1 AND 12
        GROUP BY MONTH(io1.send_time)
        ) sub ON am.month = sub.month
        ORDER BY am.month
    </select>
    <!-- 查看原材料饼状图 -->
    <!-- 查看物料属性饼状图 -->
    <select id="getRawPassRateByCake" resultType="java.util.Map">
        select COUNT(*)                                                                                             sum,
               (COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END))                               qualified,
               (COUNT(*) - SUM(CASE WHEN inspect_status = 1 THEN 1 ELSE 0 END))                                     unQualified,
               ROUND((COUNT(*) - SUM(CASE WHEN inspect_status in (2, 4) THEN 1 ELSE 0 END)) / COUNT(*) * 100,
                     2) AS passRate
        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 (select is2.ins_order_id,
                                   is2.sample_type,
                                   is2.model,
                                   is2.sample
                            from ins_sample is2
                            group by is2.ins_order_id) ins on ins.ins_order_id = io1.id
        where iiq.is_finish = 1
          and iiq.inspect_status not in (0, 3)
          and (io1.send_time between #{dto.beginDate} and #{dto.endDate})
        SELECT
        COUNT(*) AS sum,
        /* 合格 */
        SUM(CASE WHEN iiq.inspect_status = 1 THEN 1 ELSE 0 END) AS qualified,
        /* 不合格 */
        SUM(CASE WHEN iiq.inspect_status = 2 THEN 1 ELSE 0 END) AS unQualified,
        ROUND(
        SUM(CASE WHEN iiq.inspect_status = 1 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
        LEFT JOIN (
        SELECT
        is2.ins_order_id,
        MAX(is2.sample_type) AS sample_type,
        MAX(is2.model) AS model,
        MAX(is2.sample) AS sample
        FROM ins_sample is2
        GROUP BY is2.ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1, 2)
        AND io1.order_type = #{dto.orderType}
        AND io1.state != -1
        AND io1.send_time BETWEEN #{dto.beginDate} AND #{dto.endDate}
        <if test="dto.materialProp != null and dto.materialProp.trim() != ''">
            AND IFNULL(iiq.material_prop, '') LIKE CONCAT('%', #{dto.materialProp}, '%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName.trim() != ''">
            AND IFNULL(ins.sample, '') LIKE CONCAT('%', #{dto.sampleName}, '%')
        </if>
        <if test="dto.modelName != null and dto.modelName.trim() != ''">
            AND IFNULL(ins.model, '') LIKE CONCAT('%', #{dto.modelName}, '%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName.trim() != ''">
            AND IFNULL(iiq.supplier_name, '') LIKE CONCAT('%', #{dto.supplierName}, '%')
        </if>
    </select>
    <select id="getMaterialPropTable" resultType="com.ruoyi.inspect.dto.MaterialPropTableDTO">
        SELECT
        iiq.update_batch_no AS updateBatchNo, -- 修改后批次号
        iiq.qty_arrived AS qtyArrived, -- 抵达的采购数量
        iiq.part_desc AS partDesc, -- 零件描述
        iiq.inspect_status AS inspectStatus, -- 合格状态
        io1.send_time AS sendTime -- 下发时间
        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 (
        SELECT
        ins_order_id,
        MAX(sample) AS sample,
        MAX(model) AS model
        FROM ins_sample
        GROUP BY ins_order_id
        ) ins ON ins.ins_order_id = io1.id
        WHERE
        iiq.is_finish = 1
        AND iiq.inspect_status IN (1,2)
        <if test="dto.materialProp != null and dto.materialProp != ''">
            AND IFNULL(iiq.material_prop,'') LIKE CONCAT('%',#{dto.materialProp},'%')
        </if>
        <if test="dto.sampleName != null and dto.sampleName != ''">
            and ins.sample like concat('%', #{dto.sampleName}, '%')
            AND IFNULL(ins.sample,'') LIKE CONCAT('%',#{dto.sampleName},'%')
        </if>
        <if test="dto.modelName != null and dto.modelName != ''">
            and ins.model like concat('%', #{dto.modelName}, '%')
            AND IFNULL(ins.model,'') LIKE CONCAT('%',#{dto.modelName},'%')
        </if>
        <if test="dto.supplierName != null and dto.supplierName != ''">
            and iiq.supplier_name like concat('%', #{dto.supplierName}, '%')
            AND IFNULL(iiq.supplier_name,'') LIKE CONCAT('%',#{dto.supplierName},'%')
        </if>
        ORDER BY io1.send_time DESC
    </select>
    <select id="getRawProductAnalysisAllSample" resultType="com.ruoyi.basic.dto.IfsInventoryQuantitySupplierDto">
@@ -282,7 +391,8 @@
                    and io1.state != -1
                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), '%Y-%m-%d %H:%i:%s')
                  and (io1.send_time between DATE_FORMAT(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH),
                                                         '%Y-%m-%d %H:%i:%s')
                    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,