run_wp_sd_p039_seed.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/usr/bin/env python3
  2. """P-039: seed tenant-isolated test facts so diagnosis loops can run.
  3. Does not claim production truth. Rows are tagged P039 / P039_TEST_20260818.
  4. """
  5. from __future__ import annotations
  6. import re
  7. from pathlib import Path
  8. import pymysql
  9. from pymysql.constants import CLIENT
  10. ROOT = Path(__file__).resolve().parents[4]
  11. CONFIG = ROOT / "server" / "Admin.NET.Application" / "Configuration" / "Database.json"
  12. A = {"tenant": 838257186181189, "factory": 838257186320453}
  13. B = {"tenant": 838257212780613, "factory": 838257212858437}
  14. DEMO = {"tenant": 838257237606469, "factory": 838257237676101}
  15. def connect() -> pymysql.Connection:
  16. raw = CONFIG.read_text(encoding="utf-8-sig")
  17. value = next(
  18. item
  19. for item in re.findall(r'(?m)^\s*"ConnectionString"\s*:\s*"([^"]+)"', raw)
  20. if "Database=aidopdev" in item
  21. )
  22. parts = {
  23. item.split("=", 1)[0].strip().lower(): item.split("=", 1)[1].strip()
  24. for item in value.split(";")
  25. if "=" in item
  26. }
  27. return pymysql.connect(
  28. host=parts["server"],
  29. port=int(parts["port"]),
  30. user=parts["uid"],
  31. password=parts["pwd"],
  32. database=parts["database"],
  33. charset="utf8mb4",
  34. autocommit=True,
  35. client_flag=CLIENT.MULTI_STATEMENTS,
  36. cursorclass=pymysql.cursors.DictCursor,
  37. )
  38. SQL = f"""
  39. INSERT INTO ado_s8_exception (
  40. tenant_id, factory_id, exception_code, title, description, scene_code, source_type,
  41. status, severity, priority_score, priority_level, occurrence_dept_id, responsible_dept_id,
  42. timeout_flag, created_at, is_deleted, module_code, consecutive_hit_count, consecutive_miss_count,
  43. related_object_code, created_by)
  44. SELECT {A['tenant']}, {A['factory']}, 'EX-20260818-P039-A', 'P039 测试异常 产销协同超期',
  45. 'P039 编制测试数据,用于 A 租户 S8 诊断闭环测通', 'S1', 'MANUAL', 'NEW', 'SERIOUS', 80.00, 'P1',
  46. {A['factory']}, {A['factory']}, 0, NOW(), 0, 'S1', 1, 0, 'UATA-SO-P039', 'P039'
  47. FROM DUAL
  48. WHERE NOT EXISTS (
  49. SELECT 1 FROM ado_s8_exception
  50. WHERE tenant_id={A['tenant']} AND factory_id={A['factory']} AND exception_code='EX-20260818-P039-A');
  51. INSERT INTO mdp_std_fqc_result (
  52. tenant_id, source_system, bill_no, inspect_time, material_code, material_name, judgment,
  53. inspect_qty, qualified_qty, unqualified_qty, sap_work_order_no, source_row_id, source_biz_key,
  54. sync_batch_id, sync_time)
  55. SELECT {B['tenant']}, 'P039', 'UATB-P039-FQC-001', NOW(), '3121C0035', 'P039测试物料', 'NG',
  56. 10, 0, 10, 'UATB-WO-001', 'P039-B-FQC-001', 'P039-B-FQC-001', 'P039_TEST_20260818', NOW()
  57. FROM DUAL
  58. WHERE NOT EXISTS (
  59. SELECT 1 FROM mdp_std_fqc_result
  60. WHERE tenant_id={B['tenant']} AND source_row_id='P039-B-FQC-001');
  61. INSERT INTO mdp_std_s6_report (
  62. tenant_id, factory_id, source_system, work_order_no, report_date, report_qty,
  63. source_row_id, source_biz_key, sync_batch_id, sync_time)
  64. SELECT {B['tenant']}, {B['factory']}, 'P039', 'UATB-WO-001', NOW(), 8,
  65. 'P039-B-S6-001', 'P039-B-S6-001', 'P039_TEST_20260818', NOW()
  66. FROM DUAL
  67. WHERE NOT EXISTS (
  68. SELECT 1 FROM mdp_std_s6_report
  69. WHERE tenant_id={B['tenant']} AND source_system='P039' AND source_biz_key='P039-B-S6-001');
  70. INSERT INTO qms_qcp_inspbill (
  71. id, tenant_id, FBILLNO, FBILLSTATUS, FCREATETIME, SampleQty, TestQty, FCOMMENT, UnqualifiedDescription)
  72. SELECT 101991258985080001, {DEMO['tenant']}, 'UATDEMO-P039-IQC-001', 'NG', NOW(), 10, 10,
  73. 'P039 编制测试 IQC', 'P039 test NG'
  74. FROM DUAL
  75. WHERE NOT EXISTS (
  76. SELECT 1 FROM qms_qcp_inspbill
  77. WHERE tenant_id={DEMO['tenant']} AND FBILLNO='UATDEMO-P039-IQC-001');
  78. """
  79. def main() -> None:
  80. conn = connect()
  81. try:
  82. with conn.cursor() as cur:
  83. cur.execute(SQL)
  84. while True:
  85. if not cur.nextset():
  86. break
  87. with conn.cursor() as cur:
  88. cur.execute(
  89. """
  90. SELECT 'A_s8' k, COUNT(*) c FROM ado_s8_exception
  91. WHERE tenant_id=%s AND exception_code='EX-20260818-P039-A' AND IFNULL(is_deleted,0)=0
  92. UNION ALL
  93. SELECT 'B_fqc', COUNT(*) FROM mdp_std_fqc_result
  94. WHERE tenant_id=%s AND bill_no='UATB-P039-FQC-001'
  95. UNION ALL
  96. SELECT 'B_s6', COUNT(*) FROM mdp_std_s6_report
  97. WHERE tenant_id=%s AND source_biz_key='P039-B-S6-001'
  98. UNION ALL
  99. SELECT 'D_iqc', COUNT(*) FROM qms_qcp_inspbill
  100. WHERE tenant_id=%s AND FBILLNO='UATDEMO-P039-IQC-001'
  101. """,
  102. (A["tenant"], B["tenant"], B["tenant"], DEMO["tenant"]),
  103. )
  104. print({row["k"]: row["c"] for row in cur.fetchall()})
  105. finally:
  106. conn.close()
  107. if __name__ == "__main__":
  108. main()