zrj
2024-07-11 6e4c8d00a3e745fdb910c2325840e3b88f634d21
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -5,19 +5,50 @@
    <!--自定义分页列表查询-->
    <select id="selectAlarmRecordPage" resultType="cn.gistack.alerts.alarmRule.vo.AlarmRecordVO">
        select
        <if test="alarmRecord.type == '渗压监测' or alarmRecord.type =='渗流监测' or alarmRecord.type == '变形监测' ">
            acb."cd_nm" as cdNm,
        </if>
        sar.*,
        sar1.type,sar1.alarm_rule_type as alarmRuleType,sar1.create_alarm_type as createAlarmType,
        arb."name" as reservoirName,aab."ad_name" as areaName
        sar1.type,sar1.alarm_rule_type as alarmRuleType,sar1.create_alarm_type as createAlarmType,sar1.rule_name as ruleName,a."label" as labels,
        a."name" as reservoirName,a."res_reg_code" as resRegCode,a."eng_scal" as engScal,
        case when b."ad_grad" = 4 THEN b."ad_name"
            ELSE NULL END AS townName,
        case when b."ad_grad" = 3 THEN b."ad_name"
            when c."ad_grad" = 3 THEN C."ad_name"
            END AS countyName,
        case when b."ad_grad" = 2 THEN b."ad_name"
            when c."ad_grad" = 2 THEN c."ad_name"
            ELSE d."ad_name" END AS cityName,
            sar1.alarm_level
        from YWXT.sm_alarm_record sar
        left join YWXT.sm_alarm_rule sar1 on sar.alarm_rule_id = sar1.id and sar1.is_deleted = 0
        left join SJZT_MD."att_res_base" arb on arb."guid" = sar.reservoir_number
        left join SJZT_MD."att_ad_base" aab on aab."guid" = arb."interior_ad_guid"
        left join SJZT_MD."att_res_base" a on a."guid" = sar.reservoir_number
        left join SJZT_MD."att_ad_base" b on b."guid" = a."interior_ad_guid"
        LEFT JOIN SJZT_MD."att_ad_base" c ON b."p_ad_code" = c."guid"
        LEFT JOIN SJZT_MD."att_ad_base" d ON c."p_ad_code" = d."guid"
        LEFT JOIN SJZT_MD."rel_res_bas_loc" rrbl ON rrbl."res_guid" = sar.reservoir_number
        LEFT JOIN SJZT_MD."att_bas_base" abb ON abb."code" = rrbl."bas_guid"
        LEFT JOIN SJZT_MD."att_bas_base" pabb ON abb."p_code" = pabb."code"
        <if test="alarmRecord.type == '渗压监测'">
            LEFT JOIN SJZT_MD."att_cd_base" acb on acb."cd" = sar.alarm_survey_station_code and acb."cd_type" = 'sy' and sar.alarm_survey_station_code !='-1'  and acb."res_cd" = sar.reservoir_number
        </if>
        <if test="alarmRecord.type == '渗流监测'">
            LEFT JOIN SJZT_MD."att_cd_base" acb on acb."cd" = sar.alarm_survey_station_code and acb."cd_type" = 'sl' and sar.alarm_survey_station_code !='-1'  and acb."res_cd" = sar.reservoir_number
        </if>
        <if test="alarmRecord.type == '变形监测'">
            LEFT JOIN SJZT_MD."att_wy_cd_base" acb on acb."cd" = sar.alarm_survey_station_code and acb."cd_type" = 'wy' and sar.alarm_survey_station_code !='-1'  and acb."res_cd" = sar.reservoir_number
        </if>
        where sar.is_deleted = 0
        <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
            and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
            and a."name" like concat('%',#{alarmRecord.reservoirName},'%')
        </if>
        <if test="alarmRecord.type!=null and alarmRecord.type!=''">
            and sar1.type = #{alarmRecord.type}
            and
            <foreach collection="alarmRecord.type.split(',')" index="index" item="item" open="(" separator="or " close=")">
                sar1.type = #{item}
            </foreach>
        </if>
        <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
            and sar1.alarm_rule_type = #{alarmRecord.alarmRuleType}
@@ -25,6 +56,392 @@
        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
            and sar1.create_alarm_type = #{alarmRecord.createAlarmType}
        </if>
        <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
            and sar1.rule_name = #{alarmRecord.ruleName}
        </if>
        <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
            and sar.create_time >= #{alarmRecord.startTime}
        </if>
        <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
            and sar.create_time &lt;= #{alarmRecord.endTime}
        </if>
        <if test="alarmRecord.adCode!=null and alarmRecord.adCode!=''">
            and  concat(a."interior_ad_guid",b."guid",c."guid",d."guid") like concat('%',#{alarmRecord.adCode},'%')
        </if>
        <if test="alarmRecord.alarmLevel != null and alarmRecord.alarmLevel !=''">
            and sar1.alarm_level = #{alarmRecord.alarmLevel}
        </if>
        <if test="alarmRecord.engScal != null and alarmRecord.engScal != ''">
            and a."eng_scal" = #{alarmRecord.engScal}
        </if>
        <if test="alarmRecord.labels != null and alarmRecord.labels != '' ">
            AND( 1!=1
            <foreach collection="alarmRecord.labels.split(',')" item="item" open="" separator="" close="" index="index">
                OR  #{item}  in (a."label")
            </foreach>
            )
        </if>
        <if test="alarmRecord.basGuids != null and alarmRecord.basGuids !='' ">
            AND(
            abb."code" in
            <foreach collection="alarmRecord.basGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
            or pabb."code" in
            <foreach collection="alarmRecord.basGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
            )
        </if>
        <if test="alarmRecord.resGuids != null and alarmRecord.resGuids !=''">
            AND sar.reservoir_number in
            <foreach collection="alarmRecord.resGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        order by field(sar1.alarm_level,'红色预警','橙色预警','黄色预警','蓝色预警')
    </select>
    <select id="getVODetail" resultType="cn.gistack.alerts.alarmRule.vo.AlarmRecordVO">
        select
            sar.*,
            sar1.type,sar1.alarm_rule_type as alarmRuleType,sar1.create_alarm_type as createAlarmType,sar1.rule_name as ruleName,
            a."name" as reservoirName,a."res_reg_code" as resRegCode,a."eng_scal" as engScal,
            case when b."ad_grad" = 4 THEN b."ad_name"
                 ELSE NULL END AS townName,
            case when b."ad_grad" = 3 THEN b."ad_name"
                 when c."ad_grad" = 3 THEN C."ad_name"
                END AS countyName,
            case when b."ad_grad" = 2 THEN b."ad_name"
                 when c."ad_grad" = 2 THEN c."ad_name"
                 ELSE d."ad_name" END AS cityName
        from YWXT.sm_alarm_record sar
                 left join YWXT.sm_alarm_rule sar1 on sar.alarm_rule_id = sar1.id and sar1.is_deleted = 0
                 left join SJZT_MD."att_res_base" a on a."guid" = sar.reservoir_number
                 left join SJZT_MD."att_ad_base" b on b."guid" = a."interior_ad_guid"
                 LEFT JOIN SJZT_MD."att_ad_base" c ON b."p_ad_code" = c."guid"
                 LEFT JOIN SJZT_MD."att_ad_base" d ON c."p_ad_code" = d."guid"
        where sar.is_deleted = 0 and sar.id = #{id}
    </select>
    <!--按行政区code 查询下级行政区-->
    <select id="getAdNameList" resultType="java.lang.String">
        select "ad_name" from SJZT_MD."att_ad_base" where "p_ad_code" = #{adCode} order by "guid"
    </select>
    <!--按行政区code行政区-->
    <select id="getAdNameListByAdCode" resultType="java.lang.String">
        select "ad_name" from SJZT_MD."att_ad_base" where "ad_code" = #{adCode} order by "guid"
    </select>
    <!--查询告警统计数据-->
    <select id="statisticAlarmRecord" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord">
        select
            <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 1 ">
                cityName as adName,
            </if>
            <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 2 ">
                countyName as adName,
            </if>
            <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 3 ">
                townName as adName,
            </if>
            <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 4 ">
                townName as adName,
            </if>
            rule_name as ruleName,count(*) num from (
            select
            sar.id,sar.alarm_rule_id,sar.create_time,sar.reservoir_number,
            arb."name",
            e.rule_name,
            case when b."ad_grad" = 4 THEN b."ad_name" ELSE NULL END AS townName,
            case when b."ad_grad" = 3 THEN b."ad_name"
                when c."ad_grad" = 3 THEN c."ad_name" END AS countyName,
            case when b."ad_grad" = 3 THEN b."ad_code"
                when c."ad_grad" = 3 THEN c."ad_code" END AS countyCode,
            case when b."ad_grad" = 2 THEN b."ad_code"
                when c."ad_grad" = 2 THEN c."ad_code"
                ELSE d."ad_code" END AS cityCode,
            case when b."ad_grad" = 2 THEN b."ad_name"
                when c."ad_grad" = 2 THEN c."ad_name"
                ELSE d."ad_name" END AS cityName
            from YWXT.sm_alarm_record sar
            left join SJZT_MD."att_res_base" arb on arb."guid" = sar.reservoir_number
            left join SJZT_MD."att_ad_base" b ON arb."interior_ad_guid" = b."guid"
            left join SJZT_MD."att_ad_base" c ON b."p_ad_code" = c."guid"
            left join SJZT_MD."att_ad_base" d ON c."p_ad_code" = d."guid"
            left join YWXT.sm_alarm_rule e on e.id = sar.alarm_rule_id
            LEFT JOIN SJZT_MD."rel_res_bas_loc" rrbl ON rrbl."res_guid" = sar.reservoir_number
            LEFT JOIN SJZT_MD."att_bas_base" abb ON abb."code" = rrbl."bas_guid"
            LEFT JOIN SJZT_MD."att_bas_base" pabb ON abb."p_code" = pabb."code"
            where sar.is_deleted = 0
            <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
                and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
            </if>
            <if test="alarmRecord.type!=null and alarmRecord.type!=''">
                and e.type = #{alarmRecord.type}
            </if>
            <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
                and e.alarm_rule_type = #{alarmRecord.alarmRuleType}
            </if>
            <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
                and e.create_alarm_type = #{alarmRecord.createAlarmType}
            </if>
            <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
                and e.rule_name = #{alarmRecord.ruleName}
            </if>
            <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
                and sar.create_time >= #{alarmRecord.startTime}
            </if>
            <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
                and sar.create_time &lt;= #{alarmRecord.endTime}
            </if>
            <if test="alarmRecord.adCode!=null and alarmRecord.adCode!=''">
                and arb."interior_ad_guid" like concat('%',#{alarmRecord.adCode},'%')
            </if>
            <if test="alarmRecord.engScal != null and alarmRecord.engScal != ''">
                and arb."eng_scal" = #{alarmRecord.engScal}
            </if>
            <if test="alarmRecord.labels != null and alarmRecord.labels != '' ">
                AND( 1!=1
                <foreach collection="alarmRecord.labels.split(',')" item="item" open="" separator="" close="" index="index">
                    OR  #{item}  in (arb."label")
                </foreach>
                )
            </if>
            <if test="alarmRecord.basGuids != null and alarmRecord.basGuids !='' ">
                AND(
                abb."code" in
                <foreach collection="alarmRecord.basGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
                or pabb."code" in
                <foreach collection="alarmRecord.basGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
                )
            </if>
            <if test="alarmRecord.resGuids != null and alarmRecord.resGuids !=''">
                AND sar.reservoir_number in
                <foreach collection="alarmRecord.resGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        ) f
        group by
        <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 1 ">
            cityName,
        </if>
        <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 2 ">
            countyName,
        </if>
        <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 3 ">
            townName,
        </if>
        <if test="alarmRecord.adLevel !=null and alarmRecord.adLevel != '' and alarmRecord.adLevel == 4 ">
            townName,
        </if>
            rule_name
    </select>
    <!--查询告警统计数据-按三大类-->
    <select id="statisticAlarmRecordByType" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord">
        select
        a.dict_value as ruleName,
        case when ifnull(b.type,0)='0' then 0 else b.num end as num
        from
        (
        select dict_value from YWXT.blade_dict_biz where code = 'ALARM_TYPE' and dict_key!= '-1' and is_deleted = 0
        ) a left join
        (
        select type,count(*) num
        from YWXT.sm_alarm_record sar
        left join YWXT.sm_alarm_rule e on e.id = sar.alarm_rule_id
        left join SJZT_MD."att_res_base" a on a."guid" = sar.reservoir_number
        left join SJZT_MD."att_ad_base" b on b."guid" = a."interior_ad_guid"
        where sar.is_deleted = 0
        <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
            and sar.create_time >= #{alarmRecord.startTime}
        </if>
        <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
            and sar.create_time &lt;= #{alarmRecord.endTime}
        </if>
        <if test="alarmRecord.adCode!=null and alarmRecord.adCode!=''">
            and  a."interior_ad_guid" like concat('%',#{alarmRecord.adCode},'%')
        </if>
        group by type
        ) b on a.dict_value = b.type
    </select>
    <!--  查询大坝安全告警统计数据  -->
    <select id="statisticAlarmRecordByAlarmRuleType" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord">
        select
            case
                when alarm_rule_type='渗压监测告警' then '告警数量'
                when alarm_rule_type='渗压监测预警' then '预警数量'
                when alarm_rule_type='变形监测告警' then '告警数量'
                when alarm_rule_type='变形监测预警' then '预警数量'
                when alarm_rule_type='渗流监测告警' then '告警数量'
                when alarm_rule_type='渗流监测预警' then '预警数量'
            else alarm_rule_type
            end as ruleName,
        sum(
        (
        select count(*) from YWXT.sm_alarm_record cha
        left join SJZT_MD."att_res_base" a on a."guid" = cha.reservoir_number
        left join SJZT_MD."att_ad_base" b on b."guid" = a."interior_ad_guid"
        where a.id = cha.alarm_rule_id
        and cha.is_deleted = 0
        <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
            and cha.create_time >= #{alarmRecord.startTime}
        </if>
        <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
            and cha.create_time &lt;= #{alarmRecord.endTime}
        </if>
        <if test="alarmRecord.adCode!=null and alarmRecord.adCode!=''">
            and  a."interior_ad_guid" like concat('%',#{alarmRecord.adCode},'%')
        </if>
        )
        ) as num
        from  YWXT.sm_alarm_rule a
        <where>
            <if test="alarmRecord.type!=null and alarmRecord.type!=''">
                and type = #{alarmRecord.type}
            </if>
        </where>
        group by alarm_rule_type
    </select>
    <!--查询符合条件的告警类型-->
    <select id="listAlarmRule" resultType="cn.gistack.alerts.alarmRule.entity.AlarmRule">
        select * from YWXT.sm_alarm_rule where is_deleted = 0
        <if test="alarmRecord.type!=null and alarmRecord.type!=''">
            and type = #{alarmRecord.type}
        </if>
        <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
            and alarm_rule_type = #{alarmRecord.alarmRuleType}
        </if>
        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
            and create_alarm_type = #{alarmRecord.createAlarmType}
        </if>
        <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
            and rule_name = #{alarmRecord.ruleName}
        </if>
    </select>
    <select id="statisticsPie" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord">
        SELECT
            count(*) num,rule.alarm_level alarmLevel
        FROM YWXT.sm_alarm_record record
                 LEFT JOIN ywxt.SM_ALARM_RULE rule on rule.id = record.alarm_rule_id
                 LEFT JOIN SJZT_MD."att_res_base" arb on arb."guid" = record.reservoir_number
                LEFT JOIN SJZT_MD."rel_res_bas_loc" rrbl ON rrbl."res_guid" = record.reservoir_number
                LEFT JOIN SJZT_MD."att_bas_base" abb ON abb."code" = rrbl."bas_guid"
                LEFT JOIN SJZT_MD."att_bas_base" pabb ON abb."p_code" = pabb."code"
        where
            record.is_deleted = 0
          <if test="alarmRecord.type != null and alarmRecord.type !=''">
              and rule.type = #{alarmRecord.type}
          </if>
        <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
            and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
        </if>
        <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
            and rule.alarm_rule_type = #{alarmRecord.alarmRuleType}
        </if>
        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
            and rule.create_alarm_type = #{alarmRecord.createAlarmType}
        </if>
        <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
            and rule.rule_name = #{alarmRecord.ruleName}
        </if>
          <if test="alarmRecord.adCode != null and alarmRecord.adCode !=''">
              and arb."interior_ad_guid" like concat('%',#{alarmRecord.adCode},'%')
          </if>
            <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
                and record.create_time >= #{alarmRecord.startTime}
            </if>
            <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
                and record.create_time &lt;= #{alarmRecord.endTime}
            </if>
            <if test="alarmRecord.engScal != null and alarmRecord.engScal != ''">
                and arb."eng_scal" = #{alarmRecord.engScal}
            </if>
            <if test="alarmRecord.labels != null and alarmRecord.labels != '' ">
                AND( 1!=1
                <foreach collection="alarmRecord.labels.split(',')" item="item" open="" separator="" close="" index="index">
                    OR  #{item}  in (arb."label")
                </foreach>
                )
            </if>
            <if test="alarmRecord.basGuids != null and alarmRecord.basGuids !='' ">
                AND(
                abb."code" in
                <foreach collection="alarmRecord.basGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
                or pabb."code" in
                <foreach collection="alarmRecord.basGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
                )
            </if>
            <if test="alarmRecord.resGuids != null and alarmRecord.resGuids !=''">
                AND record.reservoir_number in
                <foreach collection="alarmRecord.resGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        group by rule.alarm_level
        order by field(rule.alarm_level,'蓝色预警','黄色预警','橙色预警','红色预警')
    </select>
    <!--告警统计按告警分类-等级统计-->
    <select id="statisticAlaByTypeAndLev" resultType="cn.gistack.alerts.alarmRule.vo.StatisticAlarmRecord">
        SELECT
            count(*) num,type as ruleName,rule.alarm_level alarmLevel
        FROM YWXT.sm_alarm_record record
        LEFT JOIN ywxt.SM_ALARM_RULE rule on rule.id = record.alarm_rule_id
        LEFT JOIN SJZT_MD."att_res_base" arb on arb."guid" = record.reservoir_number
        LEFT JOIN SJZT_MD."rel_res_bas_loc" rrbl ON rrbl."res_guid" = record.reservoir_number
        LEFT JOIN SJZT_MD."att_bas_base" abb ON abb."code" = rrbl."bas_guid"
        LEFT JOIN SJZT_MD."att_bas_base" pabb ON abb."p_code" = pabb."code"
        where
        record.is_deleted = 0
        and rule.type in ('渗压监测','渗流监测','变形监测','水情监测','雨情监测')
        <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
            and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
        </if>
        <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
            and rule.alarm_rule_type = #{alarmRecord.alarmRuleType}
        </if>
        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
            and rule.create_alarm_type = #{alarmRecord.createAlarmType}
        </if>
        <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
            and rule.rule_name = #{alarmRecord.ruleName}
        </if>
        <if test="alarmRecord.startTime!=null and alarmRecord.startTime!=''">
            and record.create_time >= #{alarmRecord.startTime}
        </if>
        <if test="alarmRecord.endTime!=null and alarmRecord.endTime!=''">
            and record.create_time &lt;= #{alarmRecord.endTime}
        </if>
        <if test="alarmRecord.resGuids != null and alarmRecord.resGuids !=''">
            AND record.reservoir_number in
            <foreach collection="alarmRecord.resGuids.split(',')" item="item" index="index" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        group by type,rule.alarm_level
    </select>
</mapper>