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