fix(securityManagement): 修复移动端巡检列表分页查询SQL逻辑

重构该Mapper的分页查询SQL,调整表关联与过滤条件,优化状态计算、搜索匹配及排序规则,修复原查询的数据统计与展示问题。
This commit is contained in:
2026-06-03 21:07:53 +08:00
parent 977bd0a2bb
commit e76b3a35aa

View File

@@ -8,38 +8,31 @@
<select id="selectMobilePlanPage"
resultType="com.hotwj.platform.securityManagement.hiddenDangerInspection.domain.vo.HotHiddenDangerInspectionVo">
SELECT
p.id AS id,
p.company_id AS companyId,
p.id AS planId,
p.inspect_name AS projectName,
i.id AS id,
i.company_id AS companyId,
i.plan_id AS planId,
i.project_name AS projectName,
i.project_id AS projectId,
i.project_type AS projectType,
p.plan_name AS planName,
p.start_date AS planStartDate,
p.end_date AS planEndDate,
CASE
WHEN SUM(CASE WHEN i.status IS NULL OR i.status = 1 OR i.status = 2 THEN 1 ELSE 0 END) > 0 THEN 1
ELSE 3
END AS status,
CASE
WHEN SUM(CASE WHEN i.status IS NULL OR i.status = 1 OR i.status = 2 THEN 1 ELSE 0 END) > 0 THEN 1
WHEN i.status IS NULL OR i.status = 1 OR i.status = 2 THEN 1
WHEN i.status = 10 THEN 1
ELSE 2
END AS todoSortGroup,
CASE
WHEN SUM(CASE WHEN i.status IS NULL OR i.status = 1 OR i.status = 2 THEN 1 ELSE 0 END) > 0 THEN '未做'
WHEN i.status IS NULL OR i.status = 1 OR i.status = 2 THEN '未做'
WHEN i.status = 10 THEN '驳回'
ELSE '已完成'
END AS todoSortLabel
FROM hot_hidden_danger_plan p
LEFT JOIN hot_hidden_danger_inspection i
ON i.plan_id = p.id
AND i.is_deleted = 0
<if test="isAdmin == false">
AND (
(i.project_type = 3 AND i.project_id = #{driverId})
<if test="vehicleId != null and vehicleId != ''">
OR (i.project_type = 2 AND i.project_id = #{vehicleId})
</if>
)
</if>
WHERE p.is_deleted = 0
END AS todoSortLabel,
COALESCE(i.status, 0) AS status
FROM hot_hidden_danger_inspection i
INNER JOIN hot_hidden_danger_plan p
ON p.id = i.plan_id
AND p.is_deleted = 0
WHERE i.is_deleted = 0
AND p.company_id = #{companyId}
AND (
(NOW() BETWEEN p.start_date AND p.end_date)
@@ -48,39 +41,29 @@
AND NOW() BETWEEN p.recheck_start_time AND p.recheck_end_time
)
)
<if test="planId != null">
AND p.id = #{planId}
</if>
AND EXISTS (
SELECT 1
FROM hot_hidden_danger_inspection i2
WHERE i2.plan_id = p.id
AND i2.is_deleted = 0
<if test="isAdmin == false">
AND (
(i2.project_type = 3 AND i2.project_id = #{driverId})
<if test="vehicleId != null and vehicleId != ''">
OR (i2.project_type = 2 AND i2.project_id = #{vehicleId})
</if>
)
<if test="isAdmin == false">
AND (
(i.project_type = 3 AND i.project_id = #{driverId})
<if test="vehicleId != null and vehicleId != ''">
OR (i.project_type = 2 AND i.project_id = #{vehicleId})
</if>
)
</if>
<if test="planId != null">
AND i.plan_id = #{planId}
</if>
<if test="keyword != null and keyword != ''">
AND (
p.plan_name LIKE CONCAT('%', #{keyword}, '%')
OR p.inspect_name LIKE CONCAT('%', #{keyword}, '%')
OR i.project_name LIKE CONCAT('%', #{keyword}, '%')
<if test="isAdmin == false">
OR i.project_id LIKE CONCAT('%', #{keyword}, '%')
</if>
)
</if>
GROUP BY
p.id,
p.company_id,
p.inspect_name,
p.plan_name,
p.start_date,
p.end_date
ORDER BY
todoSortGroup ASC,
COALESCE(p.end_date, p.start_date, MAX(i.create_time)) ASC,
p.id DESC
COALESCE(p.end_date, p.start_date, i.create_time) ASC,
i.id DESC
</select>
</mapper>