tasks.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. # ============================================================
  2. # 任务列表配置
  3. # ============================================================
  4. # 说明:
  5. # 1. 在这里管理所有的定时同步任务
  6. # 2. 使用 register() 函数注册任务
  7. # 3. 参数格式:register("任务名称", 执行函数, "cron表达式", enabled=True/False)
  8. # 4. enabled=True 表示启用任务,enabled=False 表示禁用任务
  9. # 5. 不写 enabled 参数时,默认为 enabled=True
  10. # ============================================================
  11. from cron.scheduler import register
  12. from jobs.clinic_log import run as clinic_log_run
  13. from jobs.consumption import run as consumption_run
  14. from jobs.clean_logs import run as clean_logs_run
  15. from jobs.patient_exam import ods_sync_run as ods_patient_exam_sync_run, dwd_build_run, ads_build_run
  16. from jobs.grossprofit import run as grossprofit_run
  17. # ============================================================
  18. # 系统维护任务
  19. # ============================================================
  20. # 日志清理任务
  21. # 每天凌晨 1 点执行,删除超过 30 天的旧日志文件
  22. register(
  23. "clean_logs", # 任务名称
  24. lambda: clean_logs_run(days=30), # 执行函数(保留30天)
  25. "0 1 * * *", # 每天凌晨 1 点
  26. enabled=True # 启用任务
  27. )
  28. # ============================================================
  29. # 数据同步任务
  30. # ============================================================
  31. # 诊所日志宽表同步任务
  32. # 每天凌晨 5 点 0 分执行,同步昨天的数据
  33. register(
  34. "clinic_log", # 任务名称
  35. lambda start_date=None, end_date=None, group_id=1: clinic_log_run(start_date, end_date, group_id), # 执行函数
  36. "0 5 * * *", # 每天凌晨 5 点
  37. enabled=True # 启用任务(True=启用,False=禁用)
  38. )
  39. # 患者消费统计宽表同步任务
  40. # 每天凌晨 5 点 30 分执行,同步昨天的数据
  41. register(
  42. "consumption", # 任务名称
  43. lambda start_date=None, end_date=None, group_id=1: consumption_run(start_date, end_date, group_id), # 执行函数
  44. "30 5 * * *", # 每天凌晨 5 点 30 分
  45. enabled=True # 启用任务
  46. )
  47. # 毛利分析数据同步
  48. # 每天凌晨 3 点执行,同步昨天的数据
  49. register(
  50. "grossprofit",
  51. lambda start_date=None, end_date=None, group_id=1: grossprofit_run(start_date, end_date, group_id),
  52. "0 4 * * *",
  53. enabled=True
  54. )
  55. # # ============================================================
  56. # # 患者检查数据仓库任务
  57. # # ============================================================
  58. # # ODS 层原始表同步(MySQL → Doris,轻量级增量)
  59. # # 每天凌晨 1 点执行,只同步昨天的增量数据
  60. # register(
  61. # "ods_patient_exam_sync", # 任务名称
  62. # ods_patient_exam_sync_run, # 执行函数
  63. # "0 1 * * *", # 每天凌晨 1 点
  64. # enabled=False # 先禁用,测试后再启用
  65. # )
  66. # # DWD 层明细宽表计算(Doris 内部关联)
  67. # # 每天凌晨 2 点执行,在 Doris 内部关联计算
  68. # register(
  69. # "dwd_patient_exam_build", # 任务名称
  70. # dwd_build_run, # 执行函数
  71. # "0 2 * * *", # 每天凌晨 2 点
  72. # enabled=False # 先禁用,测试后再启用
  73. # )
  74. # # ADS 层周期宽表计算(Doris 内部生成宽表)
  75. # # 每天凌晨 4 点执行,增量更新昨天取镜患者
  76. # register(
  77. # "ads_patient_exam_build", # 任务名称
  78. # ads_build_run, # 执行函数
  79. # "0 4 * * *", # 每天凌晨 4 点
  80. # enabled=False # 先禁用,测试后再启用
  81. # )
  82. # ============================================================
  83. # 如何添加新任务
  84. # ============================================================
  85. """
  86. 步骤:
  87. 1. 在 jobs/ 目录下创建新的任务文件,例如 jobs/new_task.py
  88. 2. 定义一个 run(start_date=None, end_date=None) 函数
  89. 3. 在这里导入并注册任务
  90. 示例:
  91. # 1. 导入新任务
  92. from jobs.new_task import run as new_task_run
  93. # 2. 注册任务
  94. register(
  95. "new_task", # 任务名称(用于 python main.py run new_task)
  96. new_task_run, # 执行函数
  97. "0 4 * * *", # cron 表达式(每天凌晨 4 点)
  98. enabled=True # 是否启用
  99. )
  100. """
  101. # ============================================================
  102. # Cron 表达式说明
  103. # ============================================================
  104. """
  105. 格式:分 时 日 月 周
  106. 示例:
  107. 0 2 * * * - 每天凌晨 2 点执行
  108. 0 */2 * * * - 每隔 2 小时执行一次
  109. 0 0 * * 0 - 每周日凌晨 0 点执行
  110. 0 0 1 * * - 每月 1 号凌晨 0 点执行
  111. */30 * * * * - 每 30 分钟执行一次
  112. 在线生成工具:https://crontab.guru/
  113. """
  114. # ============================================================
  115. # 如何临时禁用任务
  116. # ============================================================
  117. """
  118. 方法 1:将 enabled=True 改为 enabled=False
  119. register("clinic_log", clinic_log_run, "0 2 * * *", enabled=False)
  120. 方法 2:注释掉整行
  121. # register("clinic_log", clinic_log_run, "0 2 * * *", enabled=True)
  122. """