migrate_tasks_to_fs_task.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """?????????admin-saas / fs-qw-task ?????? -> fs-task???????? @Scheduled"""
  4. import os
  5. import re
  6. import shutil
  7. from pathlib import Path
  8. ROOT = Path(__file__).resolve().parent.parent
  9. FS_TASK = ROOT / "fs-task" / "src" / "main" / "java"
  10. FS_SERVICE = ROOT / "fs-service" / "src" / "main" / "java"
  11. FS_ADMIN_SAAS = ROOT / "fs-admin-saas" / "src" / "main" / "java"
  12. FS_QW_TASK = ROOT / "fs-qw-task" / "src" / "main" / "java"
  13. ADMIN_SAAS_MOVE_DIRS = [
  14. "com/fs/his/task",
  15. "com/fs/hisStore/task",
  16. "com/fs/course/task",
  17. "com/fs/tenant/task",
  18. "com/fs/ad/controller/task",
  19. ]
  20. ADMIN_SAAS_MOVE_FILES = [
  21. "com/fs/admin/sync/LobsterBridgeDataSyncService.java",
  22. ]
  23. ADMIN_SAAS_TASK_FILES = [
  24. "com/fs/task/CrmCustomerAiProcessingTask.java",
  25. "com/fs/task/ComprehensiveStatisticsTask.java",
  26. "com/fs/task/FsCompanyTask.java",
  27. "com/fs/task/FsStoreTask.java",
  28. "com/fs/task/MiniProgramSubTask.java",
  29. "com/fs/task/QwExternalAiAnalyzeTask.java",
  30. "com/fs/task/SyncTuLinStudentInfoTask.java",
  31. ]
  32. QW_MOVE_DIRS = [
  33. "com/fs/app/task",
  34. "com/fs/app/taskService",
  35. ]
  36. SERVICE_TASK_DELETE_DIRS = [
  37. "com/fs/his/task",
  38. "com/fs/hisStore/task",
  39. "com/fs/course/task",
  40. "com/fs/tenant/task",
  41. "com/fs/task",
  42. "com/fs/proxy/task",
  43. "com/fs/ad/controller/task",
  44. ]
  45. SCHEDULED_IMPORT = re.compile(r"^\s*import org\.springframework\.scheduling\.annotation\.Scheduled;\s*\n", re.M)
  46. SCHEDULED_ANN = re.compile(r"^\s*@Scheduled\([^)]*\)\s*\n", re.M)
  47. def ensure_parent(path: Path):
  48. path.parent.mkdir(parents=True, exist_ok=True)
  49. def move_path(src: Path, dst: Path):
  50. if not src.exists():
  51. return
  52. ensure_parent(dst)
  53. if dst.exists():
  54. dst.unlink()
  55. shutil.move(str(src), str(dst))
  56. print(f"MOVE {src.relative_to(ROOT)} -> {dst.relative_to(ROOT)}")
  57. def move_tree(src_root: Path, rel: str, dst_root: Path):
  58. src = src_root / rel
  59. if not src.exists():
  60. return
  61. dst = dst_root / rel
  62. if src.is_dir():
  63. if dst.exists():
  64. shutil.rmtree(dst)
  65. shutil.move(str(src), str(dst))
  66. print(f"MOVE DIR {src.relative_to(ROOT)} -> {dst.relative_to(ROOT)}")
  67. else:
  68. move_path(src, dst)
  69. def strip_scheduled(content: str) -> str:
  70. content = SCHEDULED_ANN.sub("", content)
  71. content = SCHEDULED_IMPORT.sub("", content)
  72. return content
  73. def process_java_file(path: Path):
  74. for enc in ("utf-8", "gbk", "latin-1"):
  75. try:
  76. text = path.read_text(encoding=enc)
  77. break
  78. except UnicodeDecodeError:
  79. text = None
  80. if text is None:
  81. print(f"SKIP (encoding) {path.relative_to(ROOT)}")
  82. return
  83. new_text = strip_scheduled(text)
  84. if new_text != text:
  85. path.write_text(new_text, encoding="utf-8")
  86. print(f"STRIP @Scheduled {path.relative_to(ROOT)}")
  87. def strip_tree(root: Path):
  88. if not root.exists():
  89. return
  90. for p in root.rglob("*.java"):
  91. process_java_file(p)
  92. def delete_tree(base: Path, rel: str):
  93. p = base / rel
  94. if p.exists():
  95. if p.is_dir():
  96. shutil.rmtree(p)
  97. else:
  98. p.unlink()
  99. print(f"DELETE {p.relative_to(ROOT)}")
  100. def main():
  101. FS_TASK.mkdir(parents=True, exist_ok=True)
  102. for rel in ADMIN_SAAS_MOVE_DIRS:
  103. move_tree(FS_ADMIN_SAAS, rel, FS_TASK)
  104. for rel in ADMIN_SAAS_MOVE_FILES + ADMIN_SAAS_TASK_FILES:
  105. move_path(FS_ADMIN_SAAS / rel, FS_TASK / rel)
  106. for rel in QW_MOVE_DIRS:
  107. move_tree(FS_QW_TASK, rel, FS_TASK)
  108. for rel in SERVICE_TASK_DELETE_DIRS:
  109. delete_tree(FS_SERVICE, rel)
  110. strip_tree(FS_TASK)
  111. # fs-service ??? @Scheduled ????????????????? Quartz ?????
  112. for rel in [
  113. "com/fs/proxy/service/impl/PlatformStatisticsServiceImpl.java",
  114. "com/fs/erp/service/impl/JstTokenService.java",
  115. "com/fs/company/service/workflow/heartbeat/impl/HeartbeatSchedulerImpl.java",
  116. "com/fs/company/service/workflow/evolution/impl/EvolutionSchedulerImpl.java",
  117. "com/fs/company/service/workflow/event/UserEventMonitor.java",
  118. "com/fs/fastgptApi/util/EventLogUtils.java",
  119. ]:
  120. p = FS_SERVICE / rel
  121. if p.exists():
  122. process_java_file(p)
  123. print("DONE")
  124. if __name__ == "__main__":
  125. main()