feat: enhance theme and permit listing with filtering and risk counts
- Filter out "不涉及" (not applicable) theme from list_all_themes() - Add risk_count column to list_unbound_permits() with aggregated risk counts - Improve unbound permits API to display risk count per permit-region combination Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
fe911592e0
commit
b0590fda30
|
|
@ -2643,11 +2643,15 @@ def list_all_themes(
|
||||||
cur.execute(sql, params)
|
cur.execute(sql, params)
|
||||||
rows = cur.fetchall()
|
rows = cur.fetchall()
|
||||||
columns = tuple(col[0] for col in cur.description)
|
columns = tuple(col[0] for col in cur.description)
|
||||||
|
|
||||||
items: List[Dict[str, Any]] = []
|
items: List[Dict[str, Any]] = []
|
||||||
for row in rows:
|
for row in rows:
|
||||||
record = {columns[idx]: row[idx] for idx in range(len(columns))}
|
record = {columns[idx]: row[idx] for idx in range(len(columns))}
|
||||||
items.append(_serialize_theme_row(record))
|
items.append(_serialize_theme_row(record))
|
||||||
|
|
||||||
|
# 过滤掉"不涉及"主题
|
||||||
|
items = [item for item in items if item.get("name") != "不涉及"]
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2699,20 +2703,30 @@ def list_unbound_permits(
|
||||||
where_clause = " AND ".join(filters)
|
where_clause = " AND ".join(filters)
|
||||||
|
|
||||||
sql = f"""
|
sql = f"""
|
||||||
SELECT
|
SELECT
|
||||||
r.id AS region_id,
|
r.id AS region_id,
|
||||||
r.name AS region_name,
|
r.name AS region_name,
|
||||||
p.id AS permit_id,
|
p.id AS permit_id,
|
||||||
p.name AS permit_name,
|
p.name AS permit_name,
|
||||||
rpd.unit_name,
|
rpd.unit_name,
|
||||||
rpd.updated_at,
|
rpd.updated_at,
|
||||||
COALESCE(rpd.is_v2_visible, true) AS is_v2_visible
|
COALESCE(rpd.is_v2_visible, true) AS is_v2_visible,
|
||||||
|
COALESCE(risk_counts.risk_count, 0) AS risk_count
|
||||||
FROM region_permit_details rpd
|
FROM region_permit_details rpd
|
||||||
JOIN regions r ON r.id = rpd.region_id
|
JOIN regions r ON r.id = rpd.region_id
|
||||||
JOIN permits p ON p.id = rpd.permit_id
|
JOIN permits p ON p.id = rpd.permit_id
|
||||||
LEFT JOIN region_theme_permits rtp
|
LEFT JOIN region_theme_permits rtp
|
||||||
ON rtp.region_id = rpd.region_id
|
ON rtp.region_id = rpd.region_id
|
||||||
AND rtp.permit_id = rpd.permit_id
|
AND rtp.permit_id = rpd.permit_id
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT
|
||||||
|
permit_id,
|
||||||
|
region_id,
|
||||||
|
COUNT(risk_id) AS risk_count
|
||||||
|
FROM region_permit_risks
|
||||||
|
GROUP BY permit_id, region_id
|
||||||
|
) risk_counts ON risk_counts.permit_id = rpd.permit_id
|
||||||
|
AND risk_counts.region_id = rpd.region_id
|
||||||
{ps_join}
|
{ps_join}
|
||||||
WHERE {where_clause}
|
WHERE {where_clause}
|
||||||
ORDER BY r.name, p.name
|
ORDER BY r.name, p.name
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue