_bid_gen_funclist.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # -*- coding: utf-8 -*-
  2. """从前端 FUNC 编号登记表提取已建成功能清单,生成技术方案用的数据模块。
  3. 数据源为 Web/src/constants/aidopFuncCodes.ts,即系统实际路由与菜单的唯一映射表,
  4. 保证投标文件中列出的功能与已交付系统一一对应。
  5. """
  6. import io
  7. import os
  8. import re
  9. HERE = os.path.dirname(os.path.abspath(__file__))
  10. SRC = os.path.join(HERE, "..", "Web", "src", "constants", "aidopFuncCodes.ts")
  11. OUT = os.path.join(HERE, "_bid_func_list.py")
  12. MODULE_NAME = {
  13. "S0": "运营建模", "S1": "产销协同", "S2": "制造协同", "S3": "供应协同",
  14. "S4": "采购执行", "S5": "物料仓储", "S6": "生产执行", "S7": "成品仓储",
  15. "S8": "异常监控", "S9": "运营指标与智慧运营",
  16. }
  17. PAT = re.compile(r"code:\s*'(FUNC-S(\d)-(\d{3}))'\s*,\s*name:\s*'([^']+)'")
  18. def main():
  19. text = io.open(SRC, encoding="utf-8").read()
  20. items = []
  21. seen = set()
  22. for code, mod, seq, name in PAT.findall(text):
  23. if code in seen:
  24. continue
  25. seen.add(code)
  26. items.append((f"S{mod}", code, name))
  27. items.sort(key=lambda x: (x[0], x[1]))
  28. out = io.open(OUT, "w", encoding="utf-8")
  29. out.write("# -*- coding: utf-8 -*-\n")
  30. out.write('"""已建成功能清单,由 _bid_gen_funclist.py 从前端 FUNC 登记表生成。\n\n'
  31. '请勿手工编辑;功能有增减时重新运行生成脚本。\n"""\n\n')
  32. out.write("MODULE_NAME = %r\n\n" % (MODULE_NAME,))
  33. out.write("FUNC_LIST = [\n")
  34. for mod, code, name in items:
  35. out.write(f" ({mod!r}, {code!r}, {name!r}),\n")
  36. out.write("]\n")
  37. out.close()
  38. print(f"共 {len(items)} 项功能 -> {OUT}")
  39. for mod in sorted(MODULE_NAME):
  40. n = sum(1 for m, _, _ in items if m == mod)
  41. if n:
  42. print(f" {mod} {MODULE_NAME[mod]:<12} {n:>3} 项")
  43. if __name__ == "__main__":
  44. main()