fs-lawrisk/tools/patch_permits_missing_seria...

93 lines
3.4 KiB
Python
Raw Permalink Normal View History

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()