|
|
@@ -1255,17 +1255,88 @@
|
|
|
<select id="selectDevStatusBatch" parameterType="java.util.List"
|
|
|
resultType="cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO">
|
|
|
SELECT
|
|
|
- dept_id, -- 建议返回部门ID,方便后续关联结果
|
|
|
+ dept_id,
|
|
|
device_status
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ d.dept_id,
|
|
|
+ -- 原有优先级判断逻辑,不变
|
|
|
+ CASE
|
|
|
+ WHEN EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class IN (159, 160)
|
|
|
+ AND deleted = 0
|
|
|
+ ) THEN (
|
|
|
+ SELECT device_status
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class IN (159, 160)
|
|
|
+ AND deleted = 0
|
|
|
+ AND device_status != 'sg'
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ WHEN EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class = 122
|
|
|
+ AND deleted = 0
|
|
|
+ ) THEN (
|
|
|
+ SELECT device_status
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class = 122
|
|
|
+ AND deleted = 0
|
|
|
+ AND device_status != 'sg'
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ WHEN EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class IN (157, 158, 191)
|
|
|
+ AND deleted = 0
|
|
|
+ ) THEN (
|
|
|
+ SELECT device_status
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class IN (157, 158, 191)
|
|
|
+ AND deleted = 0
|
|
|
+ AND device_status != 'sg'
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ WHEN EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class = 106
|
|
|
+ AND deleted = 0
|
|
|
+ ) THEN (
|
|
|
+ SELECT device_status
|
|
|
+ FROM rq_iot_device
|
|
|
+ WHERE dept_id = d.dept_id
|
|
|
+ AND asset_class = 106
|
|
|
+ AND deleted = 0
|
|
|
+ AND device_status != 'sg'
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ ELSE NULL
|
|
|
+ END AS device_status
|
|
|
+ FROM (
|
|
|
+ SELECT DISTINCT dept_id
|
|
|
FROM rq_iot_device
|
|
|
WHERE dept_id IN
|
|
|
<foreach collection="teams" item="item" open="(" separator="," close=")">
|
|
|
#{item.id}
|
|
|
</foreach>
|
|
|
AND asset_class IN (159, 160, 122, 106, 157, 158, 191)
|
|
|
- AND device_status != 'sg'
|
|
|
- and deleted = 0
|
|
|
- GROUP BY dept_id -- 确保每个部门只返回1条记录(若多个设备,取任意1条)
|
|
|
+ AND deleted = 0
|
|
|
+ ) AS d
|
|
|
+ ) AS temp
|
|
|
+ -- 核心过滤:仅保留设备状态非NULL的记录,状态为NULL则不返回整条记录
|
|
|
+ WHERE temp.device_status IS NOT NULL -- 确保每个部门只返回1条记录(若多个设备,取任意1条)
|
|
|
-- 可选:如需指定返回某条设备(如最新/最早),可加排序:
|
|
|
-- ORDER BY create_time DESC -- 按创建时间倒序(取最新)
|
|
|
</select>
|