__init__.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """定时任务模块"""
  2. import logging
  3. from apscheduler.schedulers.background import BackgroundScheduler
  4. from app.core.config import settings
  5. logger = logging.getLogger(__name__)
  6. scheduler = BackgroundScheduler()
  7. def init_scheduled_tasks(get_db_session):
  8. """初始化定时任务"""
  9. if scheduler.running:
  10. return
  11. scheduler.start()
  12. logger.info("定时任务调度器已启动")
  13. from app.tasks.customer_pool import (
  14. check_customer_protect_time,
  15. pool_recovery_job,
  16. remind_customer_recycle,
  17. warn_customer_recycle,
  18. )
  19. from app.tasks.db_auto_plan import auto_generate_monthly_plans_job
  20. from app.tasks.pl_cert_expiry import scan_pl_cert_expiry_job
  21. from app.tasks.pl_personnel_age import refresh_personnel_ages_job
  22. from app.tasks.wechat_notices import deliver_wechat_notices
  23. scheduler.add_job(
  24. deliver_wechat_notices, "interval", seconds=15,
  25. id="wechat_approval_notices", replace_existing=True, max_instances=1, coalesce=True,
  26. )
  27. scheduler.add_job(
  28. check_customer_protect_time,
  29. "cron", hour=1, minute=0,
  30. id="check_customer_protect_time",
  31. replace_existing=True,
  32. )
  33. scheduler.add_job(
  34. refresh_personnel_ages_job,
  35. "cron", hour=1, minute=0,
  36. id="refresh_personnel_ages",
  37. replace_existing=True,
  38. )
  39. scheduler.add_job(
  40. auto_generate_monthly_plans_job,
  41. "cron", day=1, hour=1, minute=30,
  42. id="db_auto_generate_monthly_plans",
  43. replace_existing=True,
  44. )
  45. scheduler.add_job(
  46. remind_customer_recycle,
  47. "cron", hour=9, minute=0,
  48. id="remind_customer_recycle",
  49. replace_existing=True,
  50. )
  51. scheduler.add_job(
  52. pool_recovery_job,
  53. "cron", hour=2, minute=0,
  54. id="pool_recovery_job",
  55. replace_existing=True,
  56. )
  57. scheduler.add_job(
  58. warn_customer_recycle,
  59. "cron", hour=10, minute=0,
  60. id="warn_customer_recycle",
  61. replace_existing=True,
  62. )
  63. scheduler.add_job(
  64. scan_pl_cert_expiry_job,
  65. "cron", hour=settings.WECHAT_OA_CERT_REMINDER_HOUR,
  66. minute=settings.WECHAT_OA_CERT_REMINDER_MINUTE, timezone="Asia/Shanghai",
  67. id="scan_pl_cert_expiry",
  68. replace_existing=True, max_instances=1, coalesce=True,
  69. )
  70. logger.info(
  71. "已注册定时任务: check_customer_protect_time(01:00), "
  72. "refresh_personnel_ages(01:00), "
  73. "db_auto_generate_monthly_plans(每月1日01:30), "
  74. "pool_recovery_job(02:00), remind_customer_recycle(09:00), "
  75. "warn_customer_recycle(10:00), scan_pl_cert_expiry(%02d:%02d Asia/Shanghai)",
  76. settings.WECHAT_OA_CERT_REMINDER_HOUR, settings.WECHAT_OA_CERT_REMINDER_MINUTE,
  77. )
  78. def shutdown_scheduler():
  79. if scheduler.running:
  80. scheduler.shutdown(wait=False)
  81. logger.info("定时任务调度器已关闭")
  82. __all__ = [
  83. "scheduler",
  84. "init_scheduled_tasks",
  85. "shutdown_scheduler",
  86. ]