huang
11 小时以前 04914a9997afbbead6f8adbb9d9c40e05b2edbd1
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
<?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>