TkAlarmMapper.xml
5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?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 <= #{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 < #{queryMap.endTime}
</if>
</where>
GROUP BY status;
</select>
</mapper>