|
|
@@ -0,0 +1,125 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+"""P-039: seed tenant-isolated test facts so diagnosis loops can run.
|
|
|
+
|
|
|
+Does not claim production truth. Rows are tagged P039 / P039_TEST_20260818.
|
|
|
+"""
|
|
|
+
|
|
|
+from __future__ import annotations
|
|
|
+
|
|
|
+import re
|
|
|
+from pathlib import Path
|
|
|
+
|
|
|
+import pymysql
|
|
|
+from pymysql.constants import CLIENT
|
|
|
+
|
|
|
+ROOT = Path(__file__).resolve().parents[4]
|
|
|
+CONFIG = ROOT / "server" / "Admin.NET.Application" / "Configuration" / "Database.json"
|
|
|
+
|
|
|
+A = {"tenant": 838257186181189, "factory": 838257186320453}
|
|
|
+B = {"tenant": 838257212780613, "factory": 838257212858437}
|
|
|
+DEMO = {"tenant": 838257237606469, "factory": 838257237676101}
|
|
|
+
|
|
|
+
|
|
|
+def connect() -> pymysql.Connection:
|
|
|
+ raw = CONFIG.read_text(encoding="utf-8-sig")
|
|
|
+ value = next(
|
|
|
+ item
|
|
|
+ for item in re.findall(r'(?m)^\s*"ConnectionString"\s*:\s*"([^"]+)"', raw)
|
|
|
+ if "Database=aidopdev" in item
|
|
|
+ )
|
|
|
+ parts = {
|
|
|
+ item.split("=", 1)[0].strip().lower(): item.split("=", 1)[1].strip()
|
|
|
+ for item in value.split(";")
|
|
|
+ if "=" in item
|
|
|
+ }
|
|
|
+ return pymysql.connect(
|
|
|
+ host=parts["server"],
|
|
|
+ port=int(parts["port"]),
|
|
|
+ user=parts["uid"],
|
|
|
+ password=parts["pwd"],
|
|
|
+ database=parts["database"],
|
|
|
+ charset="utf8mb4",
|
|
|
+ autocommit=True,
|
|
|
+ client_flag=CLIENT.MULTI_STATEMENTS,
|
|
|
+ cursorclass=pymysql.cursors.DictCursor,
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+SQL = f"""
|
|
|
+INSERT INTO ado_s8_exception (
|
|
|
+ tenant_id, factory_id, exception_code, title, description, scene_code, source_type,
|
|
|
+ status, severity, priority_score, priority_level, occurrence_dept_id, responsible_dept_id,
|
|
|
+ timeout_flag, created_at, is_deleted, module_code, consecutive_hit_count, consecutive_miss_count,
|
|
|
+ related_object_code, created_by)
|
|
|
+SELECT {A['tenant']}, {A['factory']}, 'EX-20260818-P039-A', 'P039 测试异常 产销协同超期',
|
|
|
+ 'P039 编制测试数据,用于 A 租户 S8 诊断闭环测通', 'S1', 'MANUAL', 'NEW', 'SERIOUS', 80.00, 'P1',
|
|
|
+ {A['factory']}, {A['factory']}, 0, NOW(), 0, 'S1', 1, 0, 'UATA-SO-P039', 'P039'
|
|
|
+FROM DUAL
|
|
|
+WHERE NOT EXISTS (
|
|
|
+ SELECT 1 FROM ado_s8_exception
|
|
|
+ WHERE tenant_id={A['tenant']} AND factory_id={A['factory']} AND exception_code='EX-20260818-P039-A');
|
|
|
+
|
|
|
+INSERT INTO mdp_std_fqc_result (
|
|
|
+ tenant_id, source_system, bill_no, inspect_time, material_code, material_name, judgment,
|
|
|
+ inspect_qty, qualified_qty, unqualified_qty, sap_work_order_no, source_row_id, source_biz_key,
|
|
|
+ sync_batch_id, sync_time)
|
|
|
+SELECT {B['tenant']}, 'P039', 'UATB-P039-FQC-001', NOW(), '3121C0035', 'P039测试物料', 'NG',
|
|
|
+ 10, 0, 10, 'UATB-WO-001', 'P039-B-FQC-001', 'P039-B-FQC-001', 'P039_TEST_20260818', NOW()
|
|
|
+FROM DUAL
|
|
|
+WHERE NOT EXISTS (
|
|
|
+ SELECT 1 FROM mdp_std_fqc_result
|
|
|
+ WHERE tenant_id={B['tenant']} AND source_row_id='P039-B-FQC-001');
|
|
|
+
|
|
|
+INSERT INTO mdp_std_s6_report (
|
|
|
+ tenant_id, factory_id, source_system, work_order_no, report_date, report_qty,
|
|
|
+ source_row_id, source_biz_key, sync_batch_id, sync_time)
|
|
|
+SELECT {B['tenant']}, {B['factory']}, 'P039', 'UATB-WO-001', NOW(), 8,
|
|
|
+ 'P039-B-S6-001', 'P039-B-S6-001', 'P039_TEST_20260818', NOW()
|
|
|
+FROM DUAL
|
|
|
+WHERE NOT EXISTS (
|
|
|
+ SELECT 1 FROM mdp_std_s6_report
|
|
|
+ WHERE tenant_id={B['tenant']} AND source_system='P039' AND source_biz_key='P039-B-S6-001');
|
|
|
+
|
|
|
+INSERT INTO qms_qcp_inspbill (
|
|
|
+ id, tenant_id, FBILLNO, FBILLSTATUS, FCREATETIME, SampleQty, TestQty, FCOMMENT, UnqualifiedDescription)
|
|
|
+SELECT 101991258985080001, {DEMO['tenant']}, 'UATDEMO-P039-IQC-001', 'NG', NOW(), 10, 10,
|
|
|
+ 'P039 编制测试 IQC', 'P039 test NG'
|
|
|
+FROM DUAL
|
|
|
+WHERE NOT EXISTS (
|
|
|
+ SELECT 1 FROM qms_qcp_inspbill
|
|
|
+ WHERE tenant_id={DEMO['tenant']} AND FBILLNO='UATDEMO-P039-IQC-001');
|
|
|
+"""
|
|
|
+
|
|
|
+
|
|
|
+def main() -> None:
|
|
|
+ conn = connect()
|
|
|
+ try:
|
|
|
+ with conn.cursor() as cur:
|
|
|
+ cur.execute(SQL)
|
|
|
+ while True:
|
|
|
+ if not cur.nextset():
|
|
|
+ break
|
|
|
+ with conn.cursor() as cur:
|
|
|
+ cur.execute(
|
|
|
+ """
|
|
|
+ SELECT 'A_s8' k, COUNT(*) c FROM ado_s8_exception
|
|
|
+ WHERE tenant_id=%s AND exception_code='EX-20260818-P039-A' AND IFNULL(is_deleted,0)=0
|
|
|
+ UNION ALL
|
|
|
+ SELECT 'B_fqc', COUNT(*) FROM mdp_std_fqc_result
|
|
|
+ WHERE tenant_id=%s AND bill_no='UATB-P039-FQC-001'
|
|
|
+ UNION ALL
|
|
|
+ SELECT 'B_s6', COUNT(*) FROM mdp_std_s6_report
|
|
|
+ WHERE tenant_id=%s AND source_biz_key='P039-B-S6-001'
|
|
|
+ UNION ALL
|
|
|
+ SELECT 'D_iqc', COUNT(*) FROM qms_qcp_inspbill
|
|
|
+ WHERE tenant_id=%s AND FBILLNO='UATDEMO-P039-IQC-001'
|
|
|
+ """,
|
|
|
+ (A["tenant"], B["tenant"], B["tenant"], DEMO["tenant"]),
|
|
|
+ )
|
|
|
+ print({row["k"]: row["c"] for row in cur.fetchall()})
|
|
|
+ finally:
|
|
|
+ conn.close()
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|