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:
Codex Agent 2026-02-04 13:52:57 +08:00
parent fe911592e0
commit b0590fda30
1 changed files with 19 additions and 5 deletions

View File

@ -2643,11 +2643,15 @@ def list_all_themes(
cur.execute(sql, params)
rows = cur.fetchall()
columns = tuple(col[0] for col in cur.description)
items: List[Dict[str, Any]] = []
for row in rows:
record = {columns[idx]: row[idx] for idx in range(len(columns))}
items.append(_serialize_theme_row(record))
# 过滤掉"不涉及"主题
items = [item for item in items if item.get("name") != "不涉及"]
return items
@ -2699,20 +2703,30 @@ def list_unbound_permits(
where_clause = " AND ".join(filters)
sql = f"""
SELECT
SELECT
r.id AS region_id,
r.name AS region_name,
p.id AS permit_id,
p.name AS permit_name,
rpd.unit_name,
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
JOIN regions r ON r.id = rpd.region_id
JOIN permits p ON p.id = rpd.permit_id
LEFT JOIN region_theme_permits rtp
ON rtp.region_id = rpd.region_id
LEFT JOIN region_theme_permits rtp
ON rtp.region_id = rpd.region_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}
WHERE {where_clause}
ORDER BY r.name, p.name