DeviceMapper.xml
10.1 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
<?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.DeviceMapper">
<resultMap type="org.thingsboard.server.common.data.yunteng.dto.DeviceDTO" id="deviceMap">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="deviceInfo" column="device_info"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result property="profileId" column="profile_id"/>
<result property="activeTime" column="active_time"/>
<result property="deviceType" column="device_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
<result property="tenantId" column="tenant_id"/>
<result property="tbDeviceId" column="tb_device_id"/>
<result property="label" column="label"/>
<result property="alarmStatus" column="alarm_status"/>
<result property="deviceState" column="status" />
<result property="statusTime" column="status_time"/>
<result property="lastOnlineTime" column="last_online_time"/>
<result property="lastOfflineTime" column="last_offline_time"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="creator" column="creator"/>
<result property="updater" column="updater"/>
<result property="description" column="description"/>
<result property="customerId" column="customer_id"/>
<result property="organizationId" column="organization_id"/>
<result property="gatewayId" column="gateway_id"/>
<result property="gatewayName" column="gateway_name"/>
<association property="deviceProfile" javaType="org.thingsboard.server.common.data.yunteng.dto.DeviceProfileDTO">
<result property="name" column="profile_name"/>
<result property="transportType" column="transport_type"/>
</association>
<association property="organizationDTO" javaType="org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO">
<result property="name" column="organization_name"/>
</association>
</resultMap>
<resultMap id="relationDeviceMap" type="org.thingsboard.server.common.data.yunteng.dto.RelationDeviceDTO">
<result property="tbDeviceId" column="id"/>
<result property="tbDeviceName" column="name"/>
<result property="label" column="label"/>
<result property="deviceState" column="status" />
<result property="createdTime" column="created_time"/>
<result property="lastOnlineTime" column="last_online_time"/>
</resultMap>
<sql id="basicColumns">
ifd.id,ifd.name,ifd.device_info,ifd.profile_id,ifd.active_time,ifd.tenant_id,ifd.description
,ifd.tb_device_id,ifd.label,ifd.last_connect_time,ifd.device_type,ifd.device_state,ifd.create_time,ifd.update_time,ifd.creator,
ifd.updater,ifd.organization_id,ifd.alarm_status
</sql>
<sql id="detailColumns">
<include refid="basicColumns"/>
,ifd.gateway_id,idg.name gateway_name
,ifdp.name AS profile_name,ifdp.transport_type
,io.name AS organization_name
</sql>
<sql id="pageColumns">
<include refid="basicColumns"/>
,ifdp.name AS profile_name,ifdp.transport_type
,io.name AS organization_name
,a.bool_v status,a.last_update_ts status_time,b.long_v last_online_time,c.long_v last_offline_time
</sql>
<select id="getDevicePage" resultMap="deviceMap">
SELECT
<include refid="pageColumns"/>,d.customer_id::TEXT AS customer_id
FROM iotfs_device ifd
LEFT JOIN device_profile ifdp ON ifd.profile_id = ifdp.id::TEXT
LEFT JOIN iotfs_organization io ON io.id = ifd.organization_id
LEFT JOIN attribute_kv a ON ifd.tb_device_id = a.entity_id::TEXT AND a.entity_type ='DEVICE' AND a.attribute_key='active'
LEFT JOIN attribute_kv b ON ifd.tb_device_id = b.entity_id::TEXT AND b.entity_type ='DEVICE' AND b.attribute_key='lastActivityTime'
LEFT JOIN attribute_kv c ON ifd.tb_device_id = c.entity_id::TEXT AND c.entity_type ='DEVICE' AND c.attribute_key='inactivityAlarmTime'
LEFT JOIN device d ON d.id::TEXT = ifd.tb_device_id
<where>
<if test="queryMap.tenantId !=null and queryMap.tenantId !=''">
AND ifd.tenant_id = #{queryMap.tenantId}
</if>
<if test="queryMap.profileId !=null and queryMap.profileId !=''">
AND ifd.profile_id = #{queryMap.profileId}
</if>
<if test="queryMap.name !=null and queryMap.name !=''">
AND ifd.name LIKE concat('%',#{queryMap.name}::TEXT,'%')
</if>
<if test="queryMap.deviceType !=null and queryMap.deviceType !=''">
AND ifd.device_type = #{queryMap.deviceType}
</if>
<if test="queryMap.deviceState !=null">
AND a.bool_v = #{queryMap.deviceState}
AND b.long_v IS NOT NULL
</if>
<if test="queryMap.activeState !=null">
AND b.long_v IS NULL
</if>
<if test="queryMap.customerId !=null">
AND d.customer_id::TEXT = #{queryMap.customerId}
</if>
<if test="queryMap.alarmStatus !=null">
AND ifd.alarm_status = #{queryMap.alarmStatus}
</if>
<if test="queryMap.organizationIds !=null">
AND ifd.organization_id IN
<foreach collection="queryMap.organizationIds" item="organizationId" open="(" separator="," close=")">
#{organizationId}
</foreach>
</if>
</where>
</select>
<select id="selectDetail" resultMap="deviceMap">
SELECT
<include refid="detailColumns"/>
FROM iotfs_device ifd
LEFT JOIN device_profile ifdp ON ifd.profile_id = CAST (ifdp.id AS VARCHAR)
LEFT JOIN iotfs_organization io ON io.id = ifd.organization_id
LEFT JOIN iotfs_device idg ON idg.id = ifd.gateway_id
<where>
<if test="tenantId !=null and tenantId !=''">
AND ifd.tenant_id = #{tenantId}
</if>
<if test="id !=null and id !=''">
AND ifd.id = #{id}
</if>
</where>
</select>
<select id="findGateWayDeviceByTbDeviceId" resultMap="deviceMap">
SELECT
<include refid="basicColumns"/>
FROM iotfs_device ifd
LEFT JOIN relation rl ON ifd.tb_device_id = rl.from_id :: TEXT
WHERE
rl.to_id ::TEXT = #{tbDeviceId}
AND rl.relation_type_group = 'COMMON' AND rl.relation_type = 'Created'
AND rl.from_type = 'DEVICE' AND rl.to_type = 'DEVICE'
</select>
<update id="freshAlarmStatus" >
UPDATE iotfs_device
SET alarm_status=#{created}
WHERE tb_device_id = #{tbDeviceId}
</update>
<select id="findDevices" resultMap="deviceMap">
SELECT
ifd.ID,
ifd.NAME,
ifd.tenant_id,
ifd.organization_id,
ifd.create_time,
ifdp.NAME AS profile_name,
io.NAME AS organization_name,
A.bool_v status,
b.long_v last_online_time,
d.customer_id :: TEXT AS customer_id
FROM
iotfs_device ifd
LEFT JOIN device_profile ifdp ON ifd.profile_id = ifdp.ID ::
TEXT LEFT JOIN iotfs_organization io ON io.ID = ifd.organization_id
LEFT JOIN attribute_kv A ON ifd.tb_device_id = A.entity_id :: TEXT
AND A.entity_type = 'DEVICE'
AND A.attribute_key = 'active'
LEFT JOIN attribute_kv b ON ifd.tb_device_id = b.entity_id :: TEXT
AND b.entity_type = 'DEVICE'
AND b.attribute_key = 'lastActivityTime'
LEFT JOIN attribute_kv C ON ifd.tb_device_id = C.entity_id :: TEXT
AND C.entity_type = 'DEVICE'
AND C.attribute_key = 'inactivityAlarmTime'
LEFT JOIN device d ON d.ID :: TEXT = ifd.tb_device_id
<where>
<if test="queryMap.tenantId !=null and queryMap.tenantId !=''">
AND ifd.tenant_id = #{queryMap.tenantId}
</if>
<if test="queryMap.customerId !=null and queryMap.customerId !=''">
AND d.customer_id = #{queryMap.customerId}
</if>
</where>
</select>
<select id="getRelationDevicePage" resultMap="relationDeviceMap">
SELECT
de.id,
de.name,
de.label,
de.created_time,
A.bool_v AS status,
b.long_v AS last_online_time
FROM
device de
LEFT JOIN relation rt ON de."id" = rt.to_id
LEFT JOIN attribute_kv A ON de."id" = A.entity_id
AND A.entity_type = 'DEVICE'
AND A.attribute_key = 'active'
LEFT JOIN attribute_kv b ON de."id" = b.entity_id
AND b.entity_type = 'DEVICE'
AND b.attribute_key = 'lastActivityTime'
<where>
rt.from_id ::TEXT = #{queryMap.fromId}
AND de.tenant_id ::TEXT = #{queryMap.tenantId}
<if test="queryMap.customerId !=null and queryMap.customerId !=''">
AND de.customer_id ::TEXT = #{queryMap.customerId}
</if>
<if test="queryMap.name !=null and queryMap.name !=''">
AND de.name LIKE concat('%',#{queryMap.name}::TEXT,'%')
</if>
<if test="queryMap.deviceState !=null">
AND A.bool_v = #{queryMap.deviceState}
AND b.long_v IS NOT NULL
</if>
<if test="queryMap.activeState !=null">
AND b.long_v IS NULL
</if>
</where>
</select>
<select id="findDeviceIdsByCustomerId" resultType="java.lang.String">
SELECT idi.tb_device_id FROM iotfs_device idi LEFT JOIN device d ON d.id::TEXT = idi.tb_device_id
WHERE customer_id::TEXT = #{customerId}
</select>
</mapper>