diff --git a/app/core/liftspan.py b/app/core/liftspan.py index cad2a78..619b0cc 100644 --- a/app/core/liftspan.py +++ b/app/core/liftspan.py @@ -1,10 +1,14 @@ 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 """ 生命周期 @@ -12,12 +16,39 @@ from app.client.mysql_client_manager import db_assistant_mysql_client_manager 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() \ No newline at end of file + milvus_client.close() + scheduler.shutdown() + logger.info("定时任务调度器已关闭") \ No newline at end of file diff --git a/app/repository/archive_messages_repository.py b/app/repository/archive_messages_repository.py index de5b4e4..66cb685 100644 --- a/app/repository/archive_messages_repository.py +++ b/app/repository/archive_messages_repository.py @@ -35,8 +35,8 @@ class ArchiveMessagesRepository: if end_date: conditions.append(" msgtime <= :end_date") params["end_date"] = end_date - #base_query += " WHERE 1=1 and roomid='' and msgtype='text' " - base_query += " WHERE (from_user='BuShouShiJinBuGaiMing') and roomid='' and msgtype='text' " + base_query += " WHERE 1=1 and roomid='' and msgtype='text' " + #base_query += " WHERE (from_user='BuShouShiJinBuGaiMing') and roomid='' and msgtype='text' " if conditions: base_query += " AND ".join(conditions)+" " base_query += " GROUP BY DATE(FROM_UNIXTIME(msgtime / 1000)), from_user ORDER BY created_at DESC, from_user;" diff --git a/app/summary/service.py b/app/summary/service.py index 9c0df16..b030f29 100644 --- a/app/summary/service.py +++ b/app/summary/service.py @@ -216,8 +216,8 @@ async def build(day:str): if __name__ == '__main__': # - start = datetime(2026, 6, 17) - end = datetime(2026, 6, 17) + start = datetime(2026, 6, 23) + end = datetime(2026, 6, 23) result = [] temp = start diff --git a/app/uvicorn_main.py b/app/uvicorn_main.py index 967f022..3b6b666 100644 --- a/app/uvicorn_main.py +++ b/app/uvicorn_main.py @@ -10,42 +10,18 @@ from app.summary.service import build from app.core.log import logger app = FastAPI(lifespan=lifespan) -scheduler = AsyncIOScheduler(timezone='Asia/Shanghai') app.include_router(query_qa_router) -async def generate_daily_summary(date: Optional[str] = None): - if not date: - yesterday = datetime.now() - timedelta(days=1) - #date = yesterday.strftime("%Y-%-m-%-d") # 格式: 2026-6-15 - date = datetime(yesterday.year, yesterday.month, yesterday.day) - - # 按 年-月-日 无补零格式输出 - date_format = f"{date.year}-{date.month}-{date.day}" - - await build(date_format) - - logger.info(f"{date} 消息摘要生成完成") - -@app.on_event("startup") -async def startup_event(): - scheduler.add_job( - generate_daily_summary, - trigger='cron', - hour=2, - minute=0, - second=0, - id='daily_summary', - name='每日消息摘要任务', - replace_existing=True - ) - scheduler.start() - logger.info("定时任务调度器已启动,每天凌晨2:00自动执行消息摘要任务") - - -@app.on_event("shutdown") -async def shutdown_event(): - scheduler.shutdown() - logger.info("定时任务调度器已关闭") +# @app.on_event("startup") +# async def startup_event(): +# +# logger.info("定时任务调度器已启动,每天凌晨2:00自动执行消息摘要任务") +# +# +# @app.on_event("shutdown") +# async def shutdown_event(): +# scheduler.shutdown() +# logger.info("定时任务调度器已关闭") if __name__ == '__main__': diff --git a/readme b/readme index 887019e..49dca54 100644 --- a/readme +++ b/readme @@ -1,5 +1,7 @@ - 启动:nohup uvicorn app.uvicorn_main:app --host 0.0.0.0 --port 8000 --workers 4 > uvicorn.log 2>&1 & + 启动:nohup uvicorn app.uvicorn_main:app --host 0.0.0.0 --port 8000 --workers 1 > uvicorn.log 2>&1 & 打包:py package.py 同步库+虚拟环境:uv sync + 优化:后续将workers 1--》workers 4 在定时任务加redis分布式 +