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 (
SELECT #{deviceId} as device_id
) 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
)
UPDATE device_group_relation
SET is_deleted = 1, updated_time = NOW(), updated_by = 'system'
WHERE group_id = #{groupId}
AND device_id IN
#{deviceId}
AND is_deleted = 0
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 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