xyc
2025-02-21 664db98c9e8595ce4dd636a27f480e3a08b81ff5
modules/mainPart/src/main/resources/mapper/baseReliability/ParamDataBasicDao.xml
@@ -4,72 +4,146 @@
<mapper namespace="com.zt.life.modules.mainPart.baseReliability.dao.ParamDataBasicDao">
    <update id="compute">
        update param_data f,
        (
        SELECT
        c.*,
        CASE
        WHEN WeightedFailure IS NOT NULL
        AND WeightedFailure > 0 THEN
        1 / WeightedFailure ELSE 0
        END AS basic_mtbf_regulate,
        CASE
        WHEN WeightedFailure IS NOT NULL
        AND WeightedFailure > 0 THEN
        WeightedMTTR / WeightedFailure ELSE 0
        END AS repair_mttcr
        FROM
        (
        SELECT
        c.id,
        c.name,
        sum(
        CASE
        WHEN b.product_type &lt; 5 THEN
        1 * 1 / basic_mtbf_regulate
        WHEN a.reliab_distrib_type = 1 THEN
        1 * a.basic_mtbf_operating_ratio / a.basic_mtbf_regulate
        WHEN a.reliab_distrib_type = 2 THEN
        1 * a.basic_mtbf_operating_ratio / a.basic_mtbf_regul_succ_rate
        ELSE 0 END
        ) AS WeightedFailure,
        sum(
        CASE
        WHEN b.product_type &lt; 5 THEN
        1 * 1 * a.repair_mttcr / a.basic_mtbf_regulate
        WHEN a.repairable = 1 and a.reliab_distrib_type = 1 THEN
        1 * a.basic_mtbf_operating_ratio * a.repair_mttcr / a.basic_mtbf_regulate
        WHEN a.repairable = 1 and a.reliab_distrib_type = 2 THEN
        1 * a.basic_mtbf_operating_ratio * a.repair_mttcr / a.basic_mtbf_regul_succ_rate
        ELSE 0
        END
        ) AS WeightedMttr
        FROM
        param_data a,
        product_model b,
        product_model c
        WHERE 1 = 1
        and c.ship_id = ${shipId} and c.product_type = ${productType} and c.is_delete = 0
        and b.ship_id = ${shipId} and b.pid = c.id and b.is_delete = 0
        and a.IS_DELETE = 0 and a.product_id = b.id
        AND ( (b.product_type = 5 AND a.basic_join_compute = 1
        and ((
        a.reliab_distrib_type = 1
        AND a.basic_mtbf_regulate > 0
        )
        OR ( a.reliab_distrib_type = 2 AND a.basic_mtbf_regul_succ_rate > 0 ))
        )
        || (b.product_type &lt; 5 AND a.basic_mtbf_regulate > 0 ) )
        GROUP BY c.id,c.name
        ) c
        )d set f.basic_mtbf_regulate = d.basic_mtbf_regulate,
        f.repair_mttcr = d.repair_mttcr
            (
                SELECT c.*,
                       CASE
                           WHEN WeightedFailure IS NOT NULL
                               AND WeightedFailure > 0 THEN
                               1 / WeightedFailure
                           ELSE 0
                           END AS basic_mtbf_regulate_tmp,
                       CASE
                           WHEN WeightedFailure IS NOT NULL
                               AND WeightedFailure > 0 THEN
                               WeightedMTTR / WeightedFailure
                           ELSE 0
                           END AS repair_mttcr
                FROM (
                         SELECT c.id,
                                c.name,
                                sum(
                                        CASE
                                            WHEN b.product_type &lt; 5 THEN
                                                1 * 1 / basic_mtbf_regulate_tmp
                                            WHEN a.reliab_distrib_type = 1 THEN
                                                    a.basic_unit_num * a.basic_mtbf_operating_ratio /
                                                    a.basic_mtbf_regulate_tmp
                                            WHEN a.reliab_distrib_type = 3 THEN
                                                    a.basic_unit_num * a.basic_mtbf_operating_ratio /
                                                    a.basic_mtbf_regulate_tmp
                                            ELSE 0 END
                                    ) AS WeightedFailure,
                                sum(
                                        CASE
                                            WHEN b.product_type &lt; 5 THEN
                                                1 * 1 * a.repair_mttcr / a.basic_mtbf_regulate_tmp
                                            WHEN a.repairable = 1 and a.reliab_distrib_type = 1 THEN
                                                    a.basic_unit_num * a.basic_mtbf_operating_ratio * a.repair_mttcr /
                                                    a.basic_mtbf_regulate_tmp
                                            WHEN a.repairable = 1 and a.reliab_distrib_type = 3 THEN
                                                    a.basic_unit_num * a.basic_mtbf_operating_ratio * a.repair_mttcr /
                                                    a.basic_mtbf_regulate_tmp
                                            ELSE 0
                                            END
                                    ) AS WeightedMttr
                         FROM param_data a,
                              product_model b,
                              product_model c
                         WHERE 1 = 1
                           and c.ship_id = ${shipId}
                           and c.product_type = ${productType}
                           and c.is_delete = 0
                           and b.ship_id = ${shipId}
                           and b.pid = c.id
                           and b.is_delete = 0
                           and a.IS_DELETE = 0
                           and a.product_id = b.id
                           AND ((b.product_type = 5 AND a.basic_join_compute = 1
                             and ((
                                          a.reliab_distrib_type = 1
                                          AND a.basic_mtbf_regulate_tmp > 0
                                      )
                                 OR (a.reliab_distrib_type = 3 AND a.basic_mtbf_regul_succ_rate > 0))
                                    )
                             || (b.product_type &lt; 5 AND a.basic_mtbf_regulate_tmp > 0))
                         GROUP BY c.id, c.name
                     ) c
            ) d
        set f.basic_mtbf_regulate_tmp = d.basic_mtbf_regulate_tmp,
            f.repair_mttcr            = d.repair_mttcr
        where f.product_id = d.id;
    </update>
    <update id="compute1">
        UPDATE param_data a, product_model b
        SET repair_mttcr = 0
        where b.ship_id = ${shipId}
          and repair_mttcr is null;
        UPDATE param_data a, product_model b
        SET basic_mtbf_regulate_tmp = basic_mtbf_regulate
        where b.ship_id = ${shipId};
        UPDATE param_data a, product_model b
        SET basic_mtbf_regulate_tmp = basic_mtbf_regul_succ_rate/(1-basic_mtbf_regul_succ_rate)
        where b.ship_id = ${shipId}
          and reliab_distrib_type = 3
    </update>
    <update id="compute2">
        UPDATE param_data a, product_model b
        SET ai = basic_mtbf_regulate / (basic_mtbf_regulate + repair_mttcr)
        where  b.ship_id = ${shipId}
        SET basic_mtbf_regulate = basic_mtbf_regulate_tmp
        where b.ship_id = ${shipId}
          and (reliab_distrib_type = 1 or reliab_distrib_type is null)
          and a.product_id = b.id
          and a.IS_DELETE = 0
          and b.IS_DELETE = 0;
        UPDATE param_data a, product_model b
        SET ai = basic_mtbf_regulate_tmp / (basic_mtbf_regulate_tmp + repair_mttcr)
        where b.ship_id = ${shipId}
          and a.product_id = b.id
          and a.IS_DELETE = 0
          and b.IS_DELETE = 0;
        UPDATE param_data a,(
            select pid, case when count(1) > 0 then 1 else 0 end as basic_join_compute
            from param_data a,
                 product_model b
            where b.ship_id = ${shipId}
              and a.product_id = b.id
              and a.basic_join_compute = 1
              and b.product_type = 5
            group by b.pid
        ) b
        set a.basic_join_compute = b.basic_join_compute
        where a.product_id = b.pid;
        UPDATE param_data a,(
            select pid, case when count(1) > 0 then 1 else 0 end as basic_join_compute
            from param_data a,
                 product_model b
            where b.ship_id = ${shipId}
              and a.product_id = b.id
              and a.basic_join_compute = 1
              and b.product_type = 4
            group by b.pid
        ) b
        set a.basic_join_compute = b.basic_join_compute
        where a.product_id = b.pid;
        UPDATE param_data a,(
            select pid, case when count(1) > 0 then 1 else 0 end as basic_join_compute
            from param_data a,
                 product_model b
            where b.ship_id = ${shipId}
              and a.product_id = b.id
              and a.basic_join_compute = 1
              and b.product_type = 3
            group by b.pid
        ) b
        set a.basic_join_compute = b.basic_join_compute
        where a.product_id = b.pid;
    </update>
    <select id="getAI" resultType="com.zt.life.modules.mainPart.basicInfo.model.ParamData">
@@ -79,12 +153,17 @@
               b.ai,
               b.basic_mtbf_regulate,
               b.repair_mttcr,
               b.basic_mtbf_operating_ratio
               b.basic_mtbf_operating_ratio,
               b.basic_mtbf_regul_succ_rate,
               b.basic_runs_num,
               b.basic_unit_num
        FROM product_model a
                 LEFT JOIN param_data b ON b.product_id = a.id and b.is_delete = 0
        where a.is_delete = 0
          and a.ship_id = ${shipId}
           or a.id =${shipId}
            and a.product_type &lt;&gt; 10
            and b.basic_join_compute = 1
            and a.ship_id = ${shipId}
           or a.id = ${shipId}
        ORDER BY a.product_type, a.sort
    </select>