sales-assistant-py-new/app/core/liftspan.py

54 lines
1.6 KiB
Python

from contextlib import asynccontextmanager
from datetime import datetime, timedelta
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from fastapi import FastAPI
from app.client.embedding_client_manager import embedding_client
from app.client.milvus_client_manager import milvus_client
from app.client.mysql_client_manager import db_assistant_mysql_client_manager
from app.core.log import logger
from app.summary.service import build
"""
生命周期
容器启动时执行
yield
容器停止时执行
"""
scheduler = AsyncIOScheduler(timezone='Asia/Shanghai')
async def generate_daily_summary():
yesterday = datetime.now() - timedelta(days=1)
date = datetime(yesterday.year, yesterday.month, yesterday.day)
# 按 年-月-日 无补零格式输出
date_format = f"{date.year}-{date.month}-{date.day}"
#date_format = "2026-06-23"
await build(date_format)
logger.info(f"{date_format} 消息摘要生成完成")
@asynccontextmanager
async def lifespan(app: FastAPI):
db_assistant_mysql_client_manager.init()
embedding_client.init()
milvus_client.init()
scheduler.add_job(
generate_daily_summary,
trigger='cron',
hour=9,
minute=40,
second=0,
id='daily_summary',
name='每日消息摘要任务',
replace_existing=True
)
scheduler.start()
logger.info("定时任务调度器已开启")
yield
await db_assistant_mysql_client_manager.close()
await embedding_client.close()
milvus_client.close()
scheduler.shutdown()
logger.info("定时任务调度器已关闭")