Просмотр исходного кода

运行记录260105-运行记录定时任务瑞恒非施工小队查询优化

yuanchao 2 дней назад
Родитель
Сommit
0fd3483864

+ 75 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

@@ -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>