fs-lawrisk/tools/find_permit.py

101 lines
3.4 KiB
Python
Raw Permalink Normal View History

import sys
import os
# Init path to allow importing lawrisk
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from lawrisk.services import licensing_repo as lic_repo
from lawrisk.utils.env_loader import load_env
def find_permit():
load_env()
# Try to access _lic_pg_conn, handle if it's not directly exposed or named differently
if hasattr(lic_repo, "_lic_pg_conn"):
conn_func = getattr(lic_repo, "_lic_pg_conn")
elif hasattr(lic_repo, "get_connection"):
conn_func = getattr(lic_repo, "get_connection")
else:
# Fallback to looking for connection logic inside licensing_repo (it might be a context manager)
# But for now assume _lic_pg_conn exists as per audit_risks.py
conn_func = lic_repo._lic_pg_conn
# Check if it returns a connection or context manager
# _lic_pg_conn in licensing_repo seems to be a context manager based on 'with _lic_pg_conn() as conn'
# But audit_risks.py calls it as 'conn = lic_repo._lic_pg_conn()' ?
# Let's check audit_risks.py again.
# Line 17: conn = lic_repo._lic_pg_conn()
# Line 94: conn.close()
# This implies it returns a connection object, not a context manager.
# But licensing_repo.py line 778 says: 'with _lic_pg_conn() as conn:' ...
# This means _lic_pg_conn() can be used as a context manager OR returns something that has __enter__.
# A standard pg8000 connection can be used as a context manager.
try:
conn = conn_func()
except Exception as e:
print(f"Error connecting to DB: {e}")
return
cur = conn.cursor()
if len(sys.argv) > 1:
permit_name = sys.argv[1]
else:
permit_name = "仅销售预包装食品备案登记"
print(f"Searching for permit: {permit_name}")
# Check strict match
cur.execute("SELECT id, name FROM permits WHERE name = %s", (permit_name,))
strict_match = cur.fetchone()
if strict_match:
print(f"Found EXACT match: ID={strict_match[0]}, Name={strict_match[1]}")
permit_id = strict_match[0]
# Check regions
cur.execute("""
SELECT r.name
FROM region_theme_permits rtp
JOIN regions r ON r.id = rtp.region_id
WHERE rtp.permit_id = %s
GROUP BY r.name
""", (permit_id,))
regions = cur.fetchall()
if regions:
print("Bind to regions:")
for r_name in regions:
print(f" - {r_name[0]}")
else:
print("No region bindings found.")
# Check risks
cur.execute("""
SELECT count(*) FROM region_permit_risks WHERE permit_id = %s
""", (permit_id,))
risk_count_row = cur.fetchone()
risk_count = risk_count_row[0] if risk_count_row else 0
print(f"Total risk entries: {risk_count}")
else:
print("No exact match found.")
# Check fuzzy match
print("\nChecking fuzzy matches...")
cur.execute("SELECT id, name FROM permits WHERE name ILIKE %s", (f"%{permit_name}%",))
fuzzy_matches = cur.fetchall()
if fuzzy_matches:
for mid, mname in fuzzy_matches:
if strict_match and mid == strict_match[0]:
continue
print(f"Found partial match: ID={mid}, Name={mname}")
else:
if not strict_match:
print("No fuzzy matches found.")
conn.close()
if __name__ == "__main__":
find_permit()