| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- """定时任务模块"""
- 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",
- ]
|