fs-lawrisk/tools/patch_permits_missing_seria...

93 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import pg8000.dbapi as pg
from lawrisk.utils.env_loader import load_env
from lawrisk.services.licensing_repo import _parse_import_workbook, _ensure_risk
def patch_missing_risks():
load_env()
file_path = r"c:\Users\WIN10\Desktop\work\11th-week\法律风险提示-new\市监局-lawRisk-backend\市级初版-20251219\许可风险提示\101生产科 风险提示表(食品小作坊登记,市场监管部门) (1)_转自XLS.xlsx"
target_sheet_name = "市级" # Will match partially
target_permit_name = "食品小作坊登记证"
with open(file_path, "rb") as f:
content = f.read()
conn_params = {
"host": os.getenv("LIC_PG_HOST", "172.24.240.1"),
"port": int(os.getenv("LIC_PG_PORT", "5432")),
"user": os.getenv("LIC_PG_USER", "postgres"),
"password": os.getenv("LIC_PG_PASSWORD", ""),
"database": "licensing_risks",
}
try:
conn = pg.connect(**conn_params)
cur = conn.cursor()
# 1. Get IDs
cur.execute("SELECT id FROM regions WHERE name = '市级'")
region_id = cur.fetchone()[0]
cur.execute("SELECT id FROM permits WHERE name = '食品小作坊登记证'")
permit_id = cur.fetchone()[0]
print(f"Targeting: Region={region_id}, Permit={permit_id}")
# 2. Parse Excel
print("Parsing workbook...")
parsed = _parse_import_workbook(content, "101.xlsx")
sheets = parsed.get("sheets", {})
target_rows = []
for s_name, s_data in sheets.items():
if target_sheet_name in s_name:
print(f"Found match sheet: {s_name}")
target_rows = s_data.get("rows", [])
break
if not target_rows:
print("Target sheet not found!")
return
print(f"Processing {len(target_rows)} rows...")
restored_count = 0
for r in target_rows:
# Check if it's the right permit
if target_permit_name not in r.get("permit_name", ""):
continue
# Ensure risk exists in 'risks' table (idempotent)
risk_id = _ensure_risk(
conn,
risk_content=r["risk_content"],
legal_basis=r.get("legal_basis"),
document_no=r.get("document_no"),
summary=r.get("summary"),
remark=r.get("remark")
)
serial = r.get("serial_number")
# Upsert into region_permit_risks
# This is the key patching step
cur.execute("""
INSERT INTO region_permit_risks (region_id, permit_id, risk_id, serial_number)
VALUES (%s, %s, %s, %s)
ON CONFLICT (region_id, permit_id, risk_id)
DO UPDATE SET serial_number = EXCLUDED.serial_number
""", (region_id, permit_id, risk_id, serial))
# Simple heuristic to say we 'restored' or updated it
restored_count += 1
if serial in [3, 5]: # The ones we know were missing
print(f"Restored missing serial {serial} (Risk ID: {risk_id})")
conn.commit()
print(f"Done. Processed {restored_count} risks for the target permit.")
conn.close()
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
patch_missing_risks()