<?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.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_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 < 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_regul_succ_rate 
 | 
                                            ELSE 0 END 
 | 
                                    ) AS WeightedFailure, 
 | 
                                sum( 
 | 
                                        CASE 
 | 
                                            WHEN b.product_type < 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_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_tmp > 0 
 | 
                                      ) 
 | 
                                 OR (a.reliab_distrib_type = 3 AND a.basic_mtbf_regul_succ_rate > 0)) 
 | 
                                    ) 
 | 
                             || (b.product_type < 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_runs_num / 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 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 
 | 
            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"> 
 | 
        SELECT a.NAME, 
 | 
               a.id, 
 | 
               a.pid, 
 | 
               b.ai, 
 | 
               b.basic_mtbf_regulate, 
 | 
               b.repair_mttcr, 
 | 
               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.product_type <> 10 
 | 
            and b.basic_join_compute = 1 
 | 
            and a.ship_id = ${shipId} 
 | 
           or a.id = ${shipId} 
 | 
        ORDER BY a.product_type, a.sort 
 | 
    </select> 
 | 
  
 | 
</mapper> 
 |