From b0590fda307c1f4694a60494c0b3892ce9baa0a7 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Wed, 4 Feb 2026 13:52:57 +0800 Subject: [PATCH] feat: enhance theme and permit listing with filtering and risk counts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- lawrisk/services/licensing_repo.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lawrisk/services/licensing_repo.py b/lawrisk/services/licensing_repo.py index 596bcd1..5e7f36f 100644 --- a/lawrisk/services/licensing_repo.py +++ b/lawrisk/services/licensing_repo.py @@ -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