<?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="com.mes.device.mapper.DeviceGroupRelationMapper">
|
|
<!-- 批量添加设备到设备组 -->
|
<insert id="batchAddDevicesToGroup" parameterType="map">
|
INSERT INTO device_group_relation (group_id, device_id, role, status, priority, connection_order,
|
created_time, updated_time, created_by, updated_by)
|
SELECT
|
#{groupId},
|
t.device_id,
|
CASE
|
WHEN #{deviceRole} = 'CONTROLLER' THEN 1
|
WHEN #{deviceRole} = 'COLLABORATOR' THEN 2
|
WHEN #{deviceRole} = 'MONITOR' THEN 3
|
ELSE 2
|
END,
|
1,
|
5,
|
(SELECT IFNULL(MAX(connection_order), 0) FROM device_group_relation WHERE group_id = #{groupId} AND is_deleted = 0) +
|
t.row_num as connection_order,
|
NOW(),
|
NOW(),
|
'system',
|
'system'
|
FROM (
|
SELECT
|
device_id,
|
@row_num := @row_num + 1 as row_num
|
FROM (
|
<foreach collection="deviceIds" item="deviceId" separator=" UNION ALL ">
|
SELECT #{deviceId} as device_id
|
</foreach>
|
) d
|
CROSS JOIN (SELECT @row_num := 0) r
|
ORDER BY device_id
|
) t
|
WHERE NOT EXISTS (
|
SELECT 1 FROM device_group_relation dgr
|
WHERE dgr.group_id = #{groupId} AND dgr.device_id = t.device_id AND dgr.is_deleted = 0
|
)
|
</insert>
|
|
<!-- 批量从设备组移除设备 -->
|
<update id="batchRemoveDevicesFromGroup" parameterType="map">
|
UPDATE device_group_relation
|
SET is_deleted = 1, updated_time = NOW(), updated_by = 'system'
|
WHERE group_id = #{groupId}
|
AND device_id IN
|
<foreach collection="deviceIds" item="deviceId" open="(" separator="," close=")">
|
#{deviceId}
|
</foreach>
|
AND is_deleted = 0
|
</update>
|
|
<!-- 更新设备在设备组中的角色 -->
|
<update id="updateDeviceRole" parameterType="map">
|
UPDATE device_group_relation
|
SET role = CASE
|
WHEN #{deviceRole} = 'CONTROLLER' THEN 1
|
WHEN #{deviceRole} = 'COLLABORATOR' THEN 2
|
WHEN #{deviceRole} = 'MONITOR' THEN 3
|
ELSE 2
|
END,
|
updated_time = NOW(),
|
updated_by = 'system'
|
WHERE group_id = #{groupId}
|
AND device_id = #{deviceId}
|
AND is_deleted = 0
|
</update>
|
|
<!-- 检查设备是否已在设备组中 -->
|
<select id="checkDeviceInGroup" parameterType="map" resultType="boolean">
|
SELECT COUNT(*) > 0
|
FROM device_group_relation
|
WHERE group_id = #{groupId}
|
AND device_id = #{deviceId}
|
AND is_deleted = 0
|
</select>
|
|
<!-- 删除设备组关联 -->
|
<delete id="deleteDeviceFromGroup">
|
UPDATE device_group_relation
|
SET is_deleted = 1, updated_time = NOW(), updated_by = 'system'
|
WHERE group_id = #{groupId}
|
AND device_id = #{deviceId}
|
AND is_deleted = 0
|
</delete>
|
|
</mapper>
|