# ============================================================ # 任务列表配置 # ============================================================ # 说明: # 1. 在这里管理所有的定时同步任务 # 2. 使用 register() 函数注册任务 # 3. 参数格式:register("任务名称", 执行函数, "cron表达式", enabled=True/False) # 4. enabled=True 表示启用任务,enabled=False 表示禁用任务 # 5. 不写 enabled 参数时,默认为 enabled=True # ============================================================ from cron.scheduler import register from jobs.clinic_log import run as clinic_log_run from jobs.consumption import run as consumption_run from jobs.clean_logs import run as clean_logs_run from jobs.patient_exam import ods_sync_run as ods_patient_exam_sync_run, dwd_build_run, ads_build_run from jobs.grossprofit import run as grossprofit_run # ============================================================ # 系统维护任务 # ============================================================ # 日志清理任务 # 每天凌晨 1 点执行,删除超过 30 天的旧日志文件 register( "clean_logs", # 任务名称 lambda: clean_logs_run(days=30), # 执行函数(保留30天) "0 1 * * *", # 每天凌晨 1 点 enabled=True # 启用任务 ) # ============================================================ # 数据同步任务 # ============================================================ # 诊所日志宽表同步任务 # 每天凌晨 5 点 0 分执行,同步昨天的数据 register( "clinic_log", # 任务名称 lambda start_date=None, end_date=None, group_id=1: clinic_log_run(start_date, end_date, group_id), # 执行函数 "0 5 * * *", # 每天凌晨 5 点 enabled=True # 启用任务(True=启用,False=禁用) ) # 患者消费统计宽表同步任务 # 每天凌晨 5 点 30 分执行,同步昨天的数据 register( "consumption", # 任务名称 lambda start_date=None, end_date=None, group_id=1: consumption_run(start_date, end_date, group_id), # 执行函数 "30 5 * * *", # 每天凌晨 5 点 30 分 enabled=True # 启用任务 ) # 毛利分析数据同步 # 每天凌晨 3 点执行,同步昨天的数据 register( "grossprofit", lambda start_date=None, end_date=None, group_id=1: grossprofit_run(start_date, end_date, group_id), "0 4 * * *", enabled=True ) # # ============================================================ # # 患者检查数据仓库任务 # # ============================================================ # # ODS 层原始表同步(MySQL → Doris,轻量级增量) # # 每天凌晨 1 点执行,只同步昨天的增量数据 # register( # "ods_patient_exam_sync", # 任务名称 # ods_patient_exam_sync_run, # 执行函数 # "0 1 * * *", # 每天凌晨 1 点 # enabled=False # 先禁用,测试后再启用 # ) # # DWD 层明细宽表计算(Doris 内部关联) # # 每天凌晨 2 点执行,在 Doris 内部关联计算 # register( # "dwd_patient_exam_build", # 任务名称 # dwd_build_run, # 执行函数 # "0 2 * * *", # 每天凌晨 2 点 # enabled=False # 先禁用,测试后再启用 # ) # # ADS 层周期宽表计算(Doris 内部生成宽表) # # 每天凌晨 4 点执行,增量更新昨天取镜患者 # register( # "ads_patient_exam_build", # 任务名称 # ads_build_run, # 执行函数 # "0 4 * * *", # 每天凌晨 4 点 # enabled=False # 先禁用,测试后再启用 # ) # ============================================================ # 如何添加新任务 # ============================================================ """ 步骤: 1. 在 jobs/ 目录下创建新的任务文件,例如 jobs/new_task.py 2. 定义一个 run(start_date=None, end_date=None) 函数 3. 在这里导入并注册任务 示例: # 1. 导入新任务 from jobs.new_task import run as new_task_run # 2. 注册任务 register( "new_task", # 任务名称(用于 python main.py run new_task) new_task_run, # 执行函数 "0 4 * * *", # cron 表达式(每天凌晨 4 点) enabled=True # 是否启用 ) """ # ============================================================ # Cron 表达式说明 # ============================================================ """ 格式:分 时 日 月 周 示例: 0 2 * * * - 每天凌晨 2 点执行 0 */2 * * * - 每隔 2 小时执行一次 0 0 * * 0 - 每周日凌晨 0 点执行 0 0 1 * * - 每月 1 号凌晨 0 点执行 */30 * * * * - 每 30 分钟执行一次 在线生成工具:https://crontab.guru/ """ # ============================================================ # 如何临时禁用任务 # ============================================================ """ 方法 1:将 enabled=True 改为 enabled=False register("clinic_log", clinic_log_run, "0 2 * * *", enabled=False) 方法 2:注释掉整行 # register("clinic_log", clinic_log_run, "0 2 * * *", enabled=True) """