fix(project): 优化大屏项目统计数据查询逻辑

dev_visual_page
zhaokai 2026-08-07 17:08:15 +08:00
parent 15b3337d9d
commit 53af6abd32
1 changed files with 130 additions and 55 deletions

View File

@ -590,7 +590,14 @@
<select id="largeScreenProjectStatistics" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenProjectStatisticsDO">
SELECT
COUNT(DISTINCT CASE WHEN kp.apply_status IN (1, 2, 3, 4, 5, 6, 7) THEN kp.id END) AS totalProjectCount,
COUNT(DISTINCT CASE WHEN kp.apply_status IN (0, 1, 2, 4, 5, 6)
AND NOT EXISTS (
SELECT 1
FROM key_project kp_latest
WHERE kp_latest.delete_enum = 'FALSE'
AND kp_latest.key_project_id = kp.key_project_id
AND kp_latest.id > kp.id
) THEN kp.key_project_id END) AS totalProjectCount,
COUNT(DISTINCT CASE WHEN kp.apply_status IN (1, 2)
AND CURDATE() <![CDATA[ < ]]> kp.plan_work_start_date THEN kp.id END) AS waitStartCount,
COUNT(DISTINCT CASE WHEN kp.apply_status IN (4, 5)
@ -630,62 +637,130 @@
<select id="largeScreenProjectProgress" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenProjectProgressDO">
SELECT
p.id AS projectId,
p.project_name AS projectName,
p.corpinfo_name AS corpinfoName,
COALESCE(sei_stat.inspectCount, 0) AS inspectCount,
COALESCE(hidden_stat.hiddenCount, 0) AS hiddenCount,
COALESCE(penalty_stat.penaltyAmount, 0) AS penaltyAmount
FROM project_approval_flow paf
LEFT JOIN project p ON paf.project_id = p.id
LEFT JOIN corp_info cp ON p.corpinfo_id = cp.id
LEFT JOIN (
progress.projectId,
progress.projectName,
progress.corpinfoName,
progress.inspectCount,
progress.hiddenCount,
progress.penaltyAmount
FROM (
SELECT
k.project_id,
COUNT(DISTINCT sei.id) AS inspectCount
FROM key_project k
INNER JOIN safety_environmental_inspection sei ON sei.key_project_id = k.key_project_id
AND sei.delete_enum = 'FALSE'
AND sei.status != 0
WHERE k.delete_enum = 'FALSE'
GROUP BY k.project_id
) sei_stat ON sei_stat.project_id = p.id
LEFT JOIN (
p.id AS projectId,
p.project_name AS projectName,
p.corpinfo_name AS corpinfoName,
COALESCE(sei_stat.inspectCount, 0) AS inspectCount,
COALESCE(hidden_stat.hiddenCount, 0) AS hiddenCount,
COALESCE(penalty_stat.penaltyAmount, 0) AS penaltyAmount,
p.initiation_time AS sortTime
FROM project_approval_flow paf
LEFT JOIN project p ON paf.project_id = p.id
LEFT JOIN corp_info cp ON p.corpinfo_id = cp.id
LEFT JOIN (
SELECT
k.project_id,
COUNT(DISTINCT sei.id) AS inspectCount
FROM key_project k
INNER JOIN safety_environmental_inspection sei ON sei.key_project_id = k.key_project_id
AND sei.delete_enum = 'FALSE'
AND sei.status != 0
WHERE k.delete_enum = 'FALSE'
GROUP BY k.project_id
) sei_stat ON sei_stat.project_id = p.id
LEFT JOIN (
SELECT
k.project_id,
COUNT(DISTINCT h.id) AS hiddenCount
FROM key_project k
INNER JOIN safety_environmental_inspection sei ON sei.key_project_id = k.key_project_id
AND sei.delete_enum = 'FALSE'
AND sei.status != 0
INNER JOIN hidden h ON h.foreign_key = sei.inspection_id
AND h.delete_enum = 'FALSE'
WHERE k.delete_enum = 'FALSE'
GROUP BY k.project_id
) hidden_stat ON hidden_stat.project_id = p.id
LEFT JOIN (
SELECT
k.project_id,
SUM(COALESCE(hp.penalty_amount, 0)) AS penaltyAmount
FROM key_project k
INNER JOIN hidden_penalty hp ON hp.key_project_id = k.key_project_id
AND hp.delete_enum = 'FALSE'
WHERE k.delete_enum = 'FALSE'
GROUP BY k.project_id
) penalty_stat ON penalty_stat.project_id = p.id
WHERE paf.delete_enum = 'FALSE'
AND paf.audit_type = 2
AND p.delete_enum = 'FALSE'
AND p.project_status = 4
<if test="corpinfoId != null">
AND paf.corpinfo_id = #{corpinfoId}
</if>
<if test="portArea != null">
AND cp.port_area = #{portArea}
</if>
GROUP BY p.id
UNION ALL
SELECT
k.project_id,
COUNT(DISTINCT h.id) AS hiddenCount
FROM key_project k
INNER JOIN safety_environmental_inspection sei ON sei.key_project_id = k.key_project_id
AND sei.delete_enum = 'FALSE'
AND sei.status != 0
INNER JOIN hidden h ON h.foreign_key = sei.inspection_id
AND h.delete_enum = 'FALSE'
WHERE k.delete_enum = 'FALSE'
GROUP BY k.project_id
) hidden_stat ON hidden_stat.project_id = p.id
LEFT JOIN (
SELECT
k.project_id,
SUM(COALESCE(hp.penalty_amount, 0)) AS penaltyAmount
FROM key_project k
INNER JOIN hidden_penalty hp ON hp.key_project_id = k.key_project_id
AND hp.delete_enum = 'FALSE'
WHERE k.delete_enum = 'FALSE'
GROUP BY k.project_id
) penalty_stat ON penalty_stat.project_id = p.id
WHERE paf.delete_enum = 'FALSE'
AND paf.audit_type = 2
AND p.delete_enum = 'FALSE'
AND p.project_status = 4
<if test="corpinfoId != null">
AND paf.corpinfo_id = #{corpinfoId}
</if>
<if test="portArea != null">
AND cp.port_area = #{portArea}
</if>
GROUP BY p.id
ORDER BY p.initiation_time DESC
NULL AS projectId,
kp.project_name AS projectName,
xgfci.corp_name AS corpinfoName,
COALESCE(sei_stat.inspectCount, 0) AS inspectCount,
COALESCE(hidden_stat.hiddenCount, 0) AS hiddenCount,
COALESCE(penalty_stat.penaltyAmount, 0) AS penaltyAmount,
kp.create_time AS sortTime
FROM key_project kp
LEFT JOIN corp_info cp ON kp.jurisdiction_corpinfo_id = cp.id
LEFT JOIN corp_info xgfci ON kp.xgf_corpinfo_id = xgfci.id
LEFT JOIN (
SELECT
sei.key_project_id,
COUNT(DISTINCT sei.id) AS inspectCount
FROM safety_environmental_inspection sei
WHERE sei.delete_enum = 'FALSE'
AND sei.status != 0
GROUP BY sei.key_project_id
) sei_stat ON sei_stat.key_project_id = kp.key_project_id
LEFT JOIN (
SELECT
sei.key_project_id,
COUNT(DISTINCT h.id) AS hiddenCount
FROM safety_environmental_inspection sei
INNER JOIN hidden h ON h.foreign_key = sei.inspection_id
AND h.delete_enum = 'FALSE'
WHERE sei.delete_enum = 'FALSE'
AND sei.status != 0
GROUP BY sei.key_project_id
) hidden_stat ON hidden_stat.key_project_id = kp.key_project_id
LEFT JOIN (
SELECT
hp.key_project_id,
SUM(COALESCE(hp.penalty_amount, 0)) AS penaltyAmount
FROM hidden_penalty hp
WHERE hp.delete_enum = 'FALSE'
GROUP BY hp.key_project_id
) penalty_stat ON penalty_stat.key_project_id = kp.key_project_id
WHERE kp.delete_enum = 'FALSE'
AND kp.project_work_flag = 0
AND (kp.project_id IS NULL OR kp.project_id = '')
AND NOT EXISTS (
SELECT 1
FROM key_project kp_latest
WHERE kp_latest.delete_enum = 'FALSE'
AND kp_latest.key_project_id = kp.key_project_id
AND kp_latest.id > kp.id
)
<if test="corpinfoId != null">
AND kp.jurisdiction_corpinfo_id = #{corpinfoId}
</if>
<if test="portArea != null">
AND cp.port_area = #{portArea}
</if>
GROUP BY kp.key_project_id
) progress
ORDER BY progress.sortTime DESC
</select>
<select id="largeScreenXgfStatistics" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenXgfStatisticsDO">