93 lines
3.4 KiB
Python
93 lines
3.4 KiB
Python
|
||
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()
|