TkAlarmMapper.xml 6.15 KB
<?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="org.thingsboard.server.dao.yunteng.mapper.TkAlarmMapper">

    <resultMap type="org.thingsboard.server.dao.yunteng.entities.TkAlarmEntity" id="alarmInfo">
        <result property="id" column="id" />
        <result property="tenantId" column="tenant_id" />
        <result property="deviceName" column="device_name"/>
        <result property="deviceAlias" column="device_alias"/>
        <result property="customerId" column="customer_id" />
        <result property="type" column="type"/>
        <result property="deviceId" column="device_id" />
        <result property="originatorType" column="originator_type"/>
        <result property="tbDeviceId" column="originator_Id" />
        <result property="severity" column="severity" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
        <result property="startTs" column="start_ts"/>
        <result property="endTs" column="end_ts"/>
        <result property="ackTs" column="ack_ts"/>
        <result property="clearTs" column="clear_ts"/>
        <result property="details" column="additional_info" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
        <result property="propagate" column="propagate"/>
        <result property="organizationId" column="organization_id"/>
        <result property="organizationName" column="organization_name"/>
        <result property="acknowledged" column="acknowledged"/>
        <result property="cleared" column="cleared"/>

    </resultMap>

    <resultMap type="org.thingsboard.server.dao.yunteng.entities.SysDictEntity" id="alarmType">
        <result property="dictName" column="dict_name"/>
        <result property="dictCode" column="dict_code"/>
    </resultMap>

    <resultMap type="org.thingsboard.server.common.data.yunteng.dto.statistics.AggregationDTO" id="aggregationMap">
        <result property="acknowledged" column="acknowledged"/>
        <result property="cleared" column="cleared"/>
        <result property="value" column="value"/>
    </resultMap>




    <select id="alarmPage" resultMap="alarmInfo">
        SELECT d.name AS device_name,d.alias AS device_alias,d.id device_id,d.customer_id,m.*,d.organization_id,org.name organization_name
        FROM alarm m
        LEFT JOIN device d ON m.originator_id = d.id
        LEFT JOIN tk_organization org ON org.id = d.organization_id
        <where>
            m.tenant_id = #{tenantId}
            <if test="queryMap.customerId !=null">
                AND d.customer_id = #{queryMap.customerId}
            </if>
            <if test="queryMap.severity !=null">
                AND severity = #{queryMap.severity}
            </if>
            <if test="queryMap.alarmType !=null">
                AND m.type LIKE CONCAT('%',#{queryMap.alarmType},'%')
            </if>
            <if test="queryMap.startTime !=null">
                AND m.created_time >= #{queryMap.startTime}
            </if>
            <if test="queryMap.endTime !=null">
                AND m.created_time 	&lt;= #{queryMap.endTime}
            </if>
            <if test="queryMap.acknowledged !=null">
                AND m.acknowledged = #{queryMap.acknowledged}
            </if>
            <if test="queryMap.cleared !=null">
                AND m.cleared = #{queryMap.cleared}
            </if>
            <if test="queryMap.deviceIds !=null">
                AND d.id IN
                <foreach collection="queryMap.deviceIds" item="deviceId" index="index" open="(" close=")" separator=",">
                    #{deviceId}
                </foreach>
            </if>
            <if test="queryMap.deviceName !=null">
                AND  (d.name LIKE concat('%',#{queryMap.deviceName},'%') or d.alias LIKE concat('%',#{queryMap.deviceName},'%'))
            </if>
            <if test="queryMap.deviceType !=null">
                AND d.device_type = #{queryMap.deviceType.name}
            </if>
            <if test="queryMap.originatorType !=null">
                AND originator_type = #{queryMap.originatorType.ordinal}
            </if>
            <if test="queryMap.organizationIds !=null">
                AND d.organization_id IN
                <foreach collection="queryMap.organizationIds" item="id" index="index" open="(" close=")" separator=",">
                    #{id}
                </foreach>
            </if>

        </where>
    </select>


    <select id="alarmType" resultMap="alarmType">
        SELECT DISTINCT m.type AS dict_name,m.type AS dict_code
        FROM alarm m
        <where>
            m.tenant_id = #{tenantId}
        </where>
    </select>

    <select id="countAlarms" resultMap="aggregationMap">
        SELECT acknowledged,cleared , COUNT(m.id) AS value FROM alarm  m
        <if test="queryMap.customerId !=null or queryMap.deviceIds !=null ">
            LEFT JOIN device d ON m.originator_id = d.id
        </if>
        <where>
            <if test="queryMap.tenantId !=null">
                AND m.tenant_id= #{queryMap.tenantId}::uuid
            </if>
            <if test="queryMap.customerId !=null">
                AND d.customer_id= #{queryMap.customerId}::uuid
            </if>
            <if test="queryMap.startTime !=null and queryMap.customerId ==null">
                AND m.created_time >= #{queryMap.startTime}
            </if>
            <if test="queryMap.endTime !=null and queryMap.customerId ==null">
                AND m.created_time &lt;  #{queryMap.endTime}
            </if>
            <if test="queryMap.deviceIds !=null ">
                AND d.tb_device_id IN
                <foreach collection="queryMap.deviceIds" item="id" index="index" open="(" close=")" separator=",">
                    #{id}
                </foreach>
            </if>
        </where>
        GROUP BY acknowledged, cleared;
    </select>
    <select id="getByTbDeviceId" resultType="java.lang.String">
        SELECT id  FROM alarm where 1=1
        <if test="tenantId !=null">
            AND tenant_id= #{tenantId}::uuid
        </if>
        <if test="tbDeviceId !=null">
            AND originator_id= #{tbDeviceId}::uuid
        </if>
    </select>
</mapper>