huang
2025-11-17 92a5d16f0474ead87744b4ca5cb04417247a0619
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
<?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_at, updated_at, created_by, updated_by)
        SELECT 
            #{groupId} as group_id,
            device_id,
            CASE 
                WHEN #{deviceRole} = 'CONTROLLER' THEN 1
                WHEN #{deviceRole} = 'COLLABORATOR' THEN 2
                WHEN #{deviceRole} = 'MONITOR' THEN 3
                ELSE 2
            END as role,
            1 as status,
            5 as priority,
            ROW_NUMBER() OVER (ORDER BY device_id) as connection_order,
            NOW() as created_at,
            NOW() as updated_at,
            'system' as created_by,
            'system' as updated_by
        FROM (
            <foreach collection="deviceIds" item="deviceId" separator=" UNION ALL ">
                SELECT #{deviceId} as device_id
            </foreach>
        ) t
        WHERE NOT EXISTS (
            SELECT 1 FROM device_group_relation 
            WHERE group_id = #{groupId} AND device_id = device_id AND is_deleted = 0
        )
    </insert>
 
    <!-- 批量从设备组移除设备 -->
    <update id="batchRemoveDevicesFromGroup" parameterType="map">
        UPDATE device_group_relation 
        SET is_deleted = 1, updated_at = 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_at = 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_at = NOW(), updated_by = 'system'
        WHERE group_id = #{groupId} 
        AND device_id = #{deviceId} 
        AND is_deleted = 0
    </delete>
 
</mapper>