TkAlarmMapper.xml 5.34 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" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
        <result property="tenantId" column="tenant_id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
        <result property="deviceName" column="device_name"/>
        <result property="deviceAlias" column="device_alias"/>
        <result property="customerId" column="customer_id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
        <result property="type" column="type"/>
        <result property="deviceId" column="device_id" />
        <result property="originatorType" column="originator_type"/>
        <result property="tbDeviceId" column="originator_Id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
        <result property="severity" column="severity" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
        <result property="status" column="status" 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"/>

    </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="key" column="status"/>
        <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,m.*,d.organization_id,org.name organization_name
        FROM alarm m
        LEFT JOIN tk_device d ON m.originator_id = d.tb_device_id::uuid
        LEFT JOIN device bd ON bd.id = d.tb_device_id::uuid
        LEFT JOIN tk_organization org ON org.id = d.organization_id
        <where>
            m.tenant_id = #{tenantId}
            <if test="customerId!=null">
                AND bd.customer_id = #{customerId}
            </if>
            <if test="severity!=null">
                AND severity = #{severity}
            </if>
            <if test="alarmType!=null">
                AND type LIKE CONCAT('%',#{alarmType},'%')
            </if>
            <if test="startTime!=null">
                AND m.created_time >= #{startTime}
            </if>
            <if test="endTime!=null">
                AND m.created_time 	&lt;= #{endTime}
            </if>
            <if test="status!=null">
                AND status IN
                <foreach collection="status" item="id" index="index" open="(" close=")" separator=",">
                    #{id}
                </foreach>
            </if>
            <if test="deviceIds!=null">
                AND d.id IN
                <foreach collection="deviceIds" item="deviceId" index="index" open="(" close=")" separator=",">
                    #{deviceId}
                </foreach>
            </if>
            <if test="deviceName!=null">
                AND d.name LIKE concat('%',#{deviceName},'%')
            </if>
            <if test="deviceType!=null">
                AND d.device_type = #{deviceType.name}
            </if>
            <if test="originatorType!=null">
                AND originator_type = #{originatorType.ordinal}
            </if>
            <if test="organizationId!=null">
                AND d.organization_id IN
                <foreach collection="organizationId" 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 status ,COUNT(id) AS value FROM alarm
        <where>
            1=1
            <if test="queryMap.tenantId !=null">
                AND tenant_id= #{queryMap.tenantId}::uuid
            </if>
            <if test="queryMap.customerId !=null">
                AND customer_id= #{queryMap.customerId}::uuid
            </if>
            <if test="queryMap.startTime !=null">
                AND created_time >= #{queryMap.startTime}
            </if>
            <if test="queryMap.endTime !=null">
                AND created_time &lt;  #{queryMap.endTime}
            </if>
        </where>
        GROUP BY status;
    </select>
</mapper>