fetch_dms_fields.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. """读取 DMS 申勤相关模型的字段定义(只读),输出到 output/dms_models_fields.json。"""
  2. from __future__ import annotations
  3. import json
  4. import sys
  5. import urllib.request
  6. sys.stdout.reconfigure(encoding="utf-8")
  7. TOKEN = ("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9."
  8. "eyJyb2xlSWQiOiIwLDEsMiwxMiIsImV4cCI6MTc4NjU2NjU0NCwidXNlcklkIjoyNzQs"
  9. "InVzZXJuYW1lIjoidXNlcl93YW5neGkifQ."
  10. "FHjT1Bi_gYW3wAfdqTXpMFfmzW2L8V-gYJ0On1PnWq0")
  11. BASE = "http://121.43.55.7:10081/dms/model/getModelById"
  12. IDS = {
  13. "sq_employee(申勤员工)": 1793,
  14. "sq_project(申勤项目数据)": 1794,
  15. "file1da77(申勤物业项目清单)": 1795,
  16. "sq_xq(续签表)": 1950,
  17. "xzbm(行政编码及片区)": 1902,
  18. "sq_personnel_certificate(人员证书)": 1890,
  19. "sq_position_salary(岗位区域薪资)": 1900,
  20. "shenqin_zbb(招标表)": 1853,
  21. "shenqin_txb(投续标表)": 1852,
  22. "shenqin_project_annual_stat(年化数据统计)": 1836,
  23. "sq_project_period(项目期次)": 1876,
  24. "sq_shenqin_project(项目主数据)": 1896,
  25. "sq_yt_column(申勤业态表)": 1909,
  26. "sq_tender_intent(招标意向)": 1954,
  27. "sq_tender_notice(招标公告)": 1955,
  28. "sq_tender_result(结果公告)": 1956,
  29. }
  30. def fetch(mid: int) -> dict:
  31. url = BASE + "?modelId=" + str(mid)
  32. req = urllib.request.Request(
  33. url, data=b"{}",
  34. headers={"token": TOKEN, "Content-Type": "application/json"})
  35. with urllib.request.urlopen(req, timeout=30) as r:
  36. return json.loads(r.read().decode("utf-8", "replace"))
  37. def main() -> None:
  38. out = {}
  39. for name, mid in IDS.items():
  40. try:
  41. data = fetch(mid)
  42. content = data.get("content") or {}
  43. fields = content.get("fieldList") or "{}"
  44. if isinstance(fields, str):
  45. fields = json.loads(fields)
  46. names = []
  47. if isinstance(fields, dict):
  48. for k, v in fields.items():
  49. alias = v.get("alias") if isinstance(v, dict) else (v if isinstance(v, str) else str(v))
  50. names.append((k, alias))
  51. elif isinstance(fields, list):
  52. for v in fields:
  53. if isinstance(v, dict):
  54. names.append((v.get("name"), v.get("alias")))
  55. else:
  56. names.append((str(v), str(v)))
  57. out[name] = {"modelId": mid, "modelName": content.get("modelName"),
  58. "fields": names}
  59. print(f"== {name} [{content.get('modelName')}] 字段数={len(names)}")
  60. for n, a in names:
  61. print(f" {n} | {a}")
  62. except Exception as e: # noqa: BLE001
  63. print(f"== {name} ERR {e}")
  64. with open(r"E:\CODE\knowledge_agent\output\dms_models_fields.json", "w", encoding="utf-8") as f:
  65. json.dump(out, f, ensure_ascii=False, indent=1)
  66. if __name__ == "__main__":
  67. main()