| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """登记模式 3 的三条 Mock 来源。不修改 WMS_API、TEST_INBOUND_ERP。
- 连接串从 server/Admin.NET.Application/Configuration/Database.json 的默认库读取,不打印密码。
- 只插入 aidopdev.mdp_source 中 system_code=MOCK_MODE3 的三条;库 aidop_mock_mode3 仅在有建库权限时创建。
- """
- from __future__ import annotations
- import sys
- from datetime import datetime
- from pathlib import Path
- ROOT = Path(__file__).resolve().parents[4]
- DB_JSON = ROOT / "server" / "Admin.NET.Application" / "Configuration" / "Database.json"
- def connect(_database: str = "aidopdev"):
- import importlib.util
- helper = ROOT / "doc" / "plan" / "sql" / "uat-data" / "apply_sql_file.py"
- spec = importlib.util.spec_from_file_location("apply_sql_file", helper)
- mod = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(mod)
- return mod.connect()
- def main() -> int:
- conn = connect("aidopdev")
- try:
- with conn.cursor() as cur:
- cur.execute(
- """
- SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_DEFAULT, EXTRA, DATA_TYPE
- FROM information_schema.COLUMNS
- WHERE TABLE_SCHEMA='aidopdev' AND TABLE_NAME='mdp_source'
- """
- )
- meta = list(cur.fetchall())
- cols = {r["COLUMN_NAME"] for r in meta}
- needed = {"source_code", "system_code"}
- if not needed <= cols:
- print("mdp_source missing", needed - cols)
- return 1
- sources = [
- ("MOCK_MODE3_DB", "MOCK_MODE3", "aidop_mock_mode3"),
- ("MOCK_MODE3_API", "MOCK_MODE3", "http://127.0.0.1:8018"),
- ("MOCK_MODE3_INBOUND", "MOCK_MODE3", "API_INBOUND"),
- ]
- for code, system, hint in sources:
- cur.execute(
- "SELECT COUNT(*) AS c FROM mdp_source WHERE source_code=%s",
- (code,),
- )
- if cur.fetchone()["c"]:
- print("exists", code)
- continue
- values = {
- "source_code": code,
- "system_code": system,
- "source_name": code,
- "tenant_id": 0,
- "status": 1,
- }
- if "conn_hint" in cols:
- values["conn_hint"] = hint
- names = []
- vals = []
- for col in meta:
- name = col["COLUMN_NAME"]
- if "auto_increment" in (col["EXTRA"] or ""):
- continue
- if name in values:
- names.append(name)
- vals.append(values[name])
- continue
- if col["IS_NULLABLE"] == "NO" and col["COLUMN_DEFAULT"] is None:
- kind = col["DATA_TYPE"]
- names.append(name)
- if kind in ("int", "bigint", "tinyint", "decimal"):
- vals.append(0)
- elif kind in ("datetime", "timestamp", "date"):
- vals.append(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
- else:
- vals.append("")
- sql = "INSERT INTO mdp_source (" + ",".join(names) + ") VALUES (" + ",".join(["%s"] * len(names)) + ")"
- cur.execute(sql, vals)
- print("inserted", code, hint)
- try:
- with conn.cursor() as cur:
- cur.execute(
- "CREATE DATABASE IF NOT EXISTS aidop_mock_mode3 DEFAULT CHARACTER SET utf8mb4"
- )
- print("database aidop_mock_mode3 ready")
- except Exception as ex:
- print("create database skipped:", type(ex).__name__)
- finally:
- conn.close()
- return 0
- if __name__ == "__main__":
- sys.exit(main())
|