"""定时任务模块""" import logging from apscheduler.schedulers.background import BackgroundScheduler from app.core.config import settings logger = logging.getLogger(__name__) scheduler = BackgroundScheduler() def init_scheduled_tasks(get_db_session): """初始化定时任务""" if scheduler.running: return scheduler.start() logger.info("定时任务调度器已启动") from app.tasks.customer_pool import ( check_customer_protect_time, pool_recovery_job, remind_customer_recycle, warn_customer_recycle, ) from app.tasks.db_auto_plan import auto_generate_monthly_plans_job from app.tasks.pl_cert_expiry import scan_pl_cert_expiry_job from app.tasks.pl_personnel_age import refresh_personnel_ages_job from app.tasks.wechat_notices import deliver_wechat_notices scheduler.add_job( deliver_wechat_notices, "interval", seconds=15, id="wechat_approval_notices", replace_existing=True, max_instances=1, coalesce=True, ) scheduler.add_job( check_customer_protect_time, "cron", hour=1, minute=0, id="check_customer_protect_time", replace_existing=True, ) scheduler.add_job( refresh_personnel_ages_job, "cron", hour=1, minute=0, id="refresh_personnel_ages", replace_existing=True, ) scheduler.add_job( auto_generate_monthly_plans_job, "cron", day=1, hour=1, minute=30, id="db_auto_generate_monthly_plans", replace_existing=True, ) scheduler.add_job( remind_customer_recycle, "cron", hour=9, minute=0, id="remind_customer_recycle", replace_existing=True, ) scheduler.add_job( pool_recovery_job, "cron", hour=2, minute=0, id="pool_recovery_job", replace_existing=True, ) scheduler.add_job( warn_customer_recycle, "cron", hour=10, minute=0, id="warn_customer_recycle", replace_existing=True, ) scheduler.add_job( scan_pl_cert_expiry_job, "cron", hour=settings.WECHAT_OA_CERT_REMINDER_HOUR, minute=settings.WECHAT_OA_CERT_REMINDER_MINUTE, timezone="Asia/Shanghai", id="scan_pl_cert_expiry", replace_existing=True, max_instances=1, coalesce=True, ) logger.info( "已注册定时任务: check_customer_protect_time(01:00), " "refresh_personnel_ages(01:00), " "db_auto_generate_monthly_plans(每月1日01:30), " "pool_recovery_job(02:00), remind_customer_recycle(09:00), " "warn_customer_recycle(10:00), scan_pl_cert_expiry(%02d:%02d Asia/Shanghai)", settings.WECHAT_OA_CERT_REMINDER_HOUR, settings.WECHAT_OA_CERT_REMINDER_MINUTE, ) def shutdown_scheduler(): if scheduler.running: scheduler.shutdown(wait=False) logger.info("定时任务调度器已关闭") __all__ = [ "scheduler", "init_scheduled_tasks", "shutdown_scheduler", ]