liding
2026-11-02 3728fa293e1faf4bf4f9bf41105b84ddb43dc82e
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -3,6 +3,27 @@
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsOrderMapper">
    <update id="updateInspectionOrderEntrustCode">
        UPDATE cnas_inspection_order
        SET entrust_code = #{entrustCode}
        WHERE ins_order_id = #{orderId}
    </update>
    <select id="selectQualityMonitorEvaluatorId" resultType="java.lang.Integer">
        SELECT cqmd.evaluator_user_id
        FROM ins_order io
        JOIN cnas_quality_monitor_details cqmd
          ON cqmd.quality_monitor_details_id = io.quality_monitor_details_id
        WHERE io.id = #{orderId}
    </select>
    <select id="selectQualityMonitorInspectorId" resultType="java.lang.Integer">
        SELECT cqmd.inspector_user_id
        FROM ins_order io
        JOIN cnas_quality_monitor_details cqmd
          ON cqmd.quality_monitor_details_id = io.quality_monitor_details_id
        WHERE io.id = #{orderId}
    </select>
    <resultMap id="selectSampleDefectsMap" type="com.ruoyi.inspect.vo.SampleDefectsFatherVo">
        <id column="id" property="id"/>
@@ -45,6 +66,46 @@
        ip.cable_tag
    </sql>
    <!-- 直绑订单按模板结论统计;传统订单按有效且非绑定的检验项目统计。 -->
    <sql id="inspectionProgressColumn">
        CONCAT(COALESCE(ROUND(
            CASE WHEN template_progress.total_count > 0
                THEN template_progress.completed_count * 100.0 / template_progress.total_count
                ELSE product_progress.completed_count * 100.0 / NULLIF(product_progress.total_count, 0)
            END, 2), 0), '%') AS insProgress
    </sql>
    <sql id="inspectionProgressJoins">
        LEFT JOIN (
            SELECT s.ins_order_id, COUNT(*) AS total_count,
                   SUM(CASE WHEN p.ins_result IN (0, 1, 3) THEN 1 ELSE 0 END) AS completed_count
            FROM ins_product p
            JOIN ins_sample s ON p.ins_sample_id = s.id
            WHERE p.state = 1 AND (p.is_binding IS NULL OR p.is_binding != 1)
            GROUP BY s.ins_order_id
        ) product_progress ON io.id = product_progress.ins_order_id
        LEFT JOIN (
            SELECT t.ins_order_id, COUNT(*) AS total_count,
                   SUM(CASE WHEN t.ins_result IN (0, 1) THEN 1 ELSE 0 END) AS completed_count
            FROM ins_order_standard_template t
            JOIN ins_order template_order ON template_order.id = t.ins_order_id
            WHERE EXISTS (
                SELECT 1
                FROM ins_sample s
                LEFT JOIN ins_product p ON p.ins_sample_id = s.id
                WHERE s.ins_order_id = t.ins_order_id
                  AND (p.template_row_index IS NOT NULL
                       OR (s.standard_method_list_id IS NULL
                           AND COALESCE(TRIM(s.factory), '') = ''
                           AND COALESCE(TRIM(s.sample_type), '') = ''
                           AND COALESCE(TRIM(s.model), '') = ''
                           AND COALESCE(TRIM(template_order.factory), '') = ''
                           AND COALESCE(TRIM(template_order.sample_type), '') = ''))
            )
            GROUP BY t.ins_order_id
        ) template_progress ON io.id = template_progress.ins_order_id
    </sql>
    <sql id="selectInsOrderExport">
        SELECT
            io.*,
@@ -53,7 +114,7 @@
            ir.url,
            ir.url_s,
            sample_counts.sample_num,
            CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
            <include refid="inspectionProgressColumn"/>,
            io.sample_view AS sample_name,
            GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
            u.name,
@@ -80,18 +141,7 @@
             FROM ins_sample
             WHERE id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
             GROUP BY ins_order_id) sample_counts ON io.id = sample_counts.ins_order_id
                LEFT JOIN
            (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
             FROM ins_product
                      JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
             WHERE ins_product.state = 1
             GROUP BY ins_sample.ins_order_id) total_product_counts ON io.id = total_product_counts.ins_order_id
                LEFT JOIN
            (SELECT ins_sample.ins_order_id, COUNT(*) AS approved_count
             FROM ins_product
                      JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
             WHERE ins_product.state = 1 AND ins_product.ins_result IS NOT NULL
             GROUP BY ins_sample.ins_order_id) approved_product_counts ON io.id = approved_product_counts.ins_order_id
            <include refid="inspectionProgressJoins"/>
                LEFT JOIN (SELECT ins_sample_id, GROUP_CONCAT(DISTINCT uu.name SEPARATOR ',') AS testing_name
                           FROM ins_sample_user u
                                    LEFT JOIN user uu ON u.user_id = uu.id
@@ -110,7 +160,7 @@
        ir.url,
        ir.url_s,
        sample_counts.sample_num,
        CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
        <include refid="inspectionProgressColumn"/>,
        io.sample_view AS sample_name,
        GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
        u.name,
@@ -134,18 +184,7 @@
        FROM ins_sample
        WHERE id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
        GROUP BY ins_order_id) sample_counts ON io.id = sample_counts.ins_order_id
        LEFT JOIN
        (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
        FROM ins_product
        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
        WHERE ins_product.state = 1 and is_binding !=1
        GROUP BY ins_sample.ins_order_id) total_product_counts ON io.id = total_product_counts.ins_order_id
        LEFT JOIN
        (SELECT ins_sample.ins_order_id, COUNT(*) AS approved_count
        FROM ins_product
        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
        WHERE ins_product.state = 1 and is_binding !=1 AND ins_product.ins_result IS NOT NULL
        GROUP BY ins_sample.ins_order_id) approved_product_counts ON io.id = approved_product_counts.ins_order_id
        <include refid="inspectionProgressJoins"/>
        LEFT JOIN (SELECT ins_sample_id, GROUP_CONCAT(DISTINCT uu.name SEPARATOR ',') AS testing_name
        FROM ins_sample_user u
        LEFT JOIN user uu ON u.user_id = uu.id
@@ -163,11 +202,12 @@
            AND io.laboratory=#{laboratory}
        </if>
        GROUP BY io.id,type
        order by type desc,io.id desc
        order by (io.sample_date is null) asc, io.sample_date desc, io.id desc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
        ORDER BY (a.sample_date IS NULL) ASC, a.sample_date DESC, a.id DESC
    </select>
    <select id="selectInsOrderParameter" resultType="com.ruoyi.inspect.pojo.InsOrder">
@@ -417,6 +457,7 @@
        from (select io2.id insOrderId,
                     io2.sample_view,
                     io2.production,
                     io2.sample_status,
                     io2.sample_date,
                     GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
                     io2.prepare_user,