seed_mock_db.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. """登记模式 3 的三条 Mock 来源。不修改 WMS_API、TEST_INBOUND_ERP。
  2. 连接串从 server/Admin.NET.Application/Configuration/Database.json 的默认库读取,不打印密码。
  3. 只插入 aidopdev.mdp_source 中 system_code=MOCK_MODE3 的三条;库 aidop_mock_mode3 仅在有建库权限时创建。
  4. """
  5. from __future__ import annotations
  6. import sys
  7. from datetime import datetime
  8. from pathlib import Path
  9. ROOT = Path(__file__).resolve().parents[4]
  10. DB_JSON = ROOT / "server" / "Admin.NET.Application" / "Configuration" / "Database.json"
  11. def connect(_database: str = "aidopdev"):
  12. import importlib.util
  13. helper = ROOT / "doc" / "plan" / "sql" / "uat-data" / "apply_sql_file.py"
  14. spec = importlib.util.spec_from_file_location("apply_sql_file", helper)
  15. mod = importlib.util.module_from_spec(spec)
  16. spec.loader.exec_module(mod)
  17. return mod.connect()
  18. def main() -> int:
  19. conn = connect("aidopdev")
  20. try:
  21. with conn.cursor() as cur:
  22. cur.execute(
  23. """
  24. SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_DEFAULT, EXTRA, DATA_TYPE
  25. FROM information_schema.COLUMNS
  26. WHERE TABLE_SCHEMA='aidopdev' AND TABLE_NAME='mdp_source'
  27. """
  28. )
  29. meta = list(cur.fetchall())
  30. cols = {r["COLUMN_NAME"] for r in meta}
  31. needed = {"source_code", "system_code"}
  32. if not needed <= cols:
  33. print("mdp_source missing", needed - cols)
  34. return 1
  35. sources = [
  36. ("MOCK_MODE3_DB", "MOCK_MODE3", "aidop_mock_mode3"),
  37. ("MOCK_MODE3_API", "MOCK_MODE3", "http://127.0.0.1:8018"),
  38. ("MOCK_MODE3_INBOUND", "MOCK_MODE3", "API_INBOUND"),
  39. ]
  40. for code, system, hint in sources:
  41. cur.execute(
  42. "SELECT COUNT(*) AS c FROM mdp_source WHERE source_code=%s",
  43. (code,),
  44. )
  45. if cur.fetchone()["c"]:
  46. print("exists", code)
  47. continue
  48. values = {
  49. "source_code": code,
  50. "system_code": system,
  51. "source_name": code,
  52. "tenant_id": 0,
  53. "status": 1,
  54. }
  55. if "conn_hint" in cols:
  56. values["conn_hint"] = hint
  57. names = []
  58. vals = []
  59. for col in meta:
  60. name = col["COLUMN_NAME"]
  61. if "auto_increment" in (col["EXTRA"] or ""):
  62. continue
  63. if name in values:
  64. names.append(name)
  65. vals.append(values[name])
  66. continue
  67. if col["IS_NULLABLE"] == "NO" and col["COLUMN_DEFAULT"] is None:
  68. kind = col["DATA_TYPE"]
  69. names.append(name)
  70. if kind in ("int", "bigint", "tinyint", "decimal"):
  71. vals.append(0)
  72. elif kind in ("datetime", "timestamp", "date"):
  73. vals.append(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
  74. else:
  75. vals.append("")
  76. sql = "INSERT INTO mdp_source (" + ",".join(names) + ") VALUES (" + ",".join(["%s"] * len(names)) + ")"
  77. cur.execute(sql, vals)
  78. print("inserted", code, hint)
  79. try:
  80. with conn.cursor() as cur:
  81. cur.execute(
  82. "CREATE DATABASE IF NOT EXISTS aidop_mock_mode3 DEFAULT CHARACTER SET utf8mb4"
  83. )
  84. print("database aidop_mock_mode3 ready")
  85. except Exception as ex:
  86. print("create database skipped:", type(ex).__name__)
  87. finally:
  88. conn.close()
  89. return 0
  90. if __name__ == "__main__":
  91. sys.exit(main())