yj
2025-07-22 2a8d022a20f82c35e9df680dfb66c3c95863b190
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""
主应用入口
"""
 
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from loguru import logger
from config import settings
from app.api.callback import router as callback_router
from app.models.database import create_tables
from app.workers.message_worker import message_worker
 
 
@asynccontextmanager
async def lifespan(app: FastAPI):
    """应用生命周期管理"""
    # 启动时执行
    logger.info("正在启动应用...")
 
    # 创建数据库表
    try:
        create_tables()
        logger.info("数据库表创建成功")
    except Exception as e:
        logger.error(f"数据库表创建失败: {str(e)}")
 
    # 启动消息工作进程
    try:
        message_worker.start()
        logger.info("消息工作进程启动成功")
    except Exception as e:
        logger.error(f"消息工作进程启动失败: {str(e)}")
 
    logger.info("应用启动完成")
 
    yield
 
    # 关闭时执行
    logger.info("正在关闭应用...")
 
    # 停止消息工作进程
    try:
        message_worker.stop()
        logger.info("消息工作进程已停止")
    except Exception as e:
        logger.error(f"消息工作进程停止失败: {str(e)}")
 
    logger.info("应用已关闭")
 
 
# 创建FastAPI应用
app = FastAPI(
    title="E云管家-DifyAI对接服务",
    description="将E云管家消息转发到DifyAI并返回AI回答",
    version="1.0.0",
    lifespan=lifespan,
)
 
# 添加CORS中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
 
# 注册路由
app.include_router(callback_router, prefix="/api/v1", tags=["回调接口"])
 
 
@app.get("/")
async def root():
    """根路径"""
    return {
        "message": "E云管家-DifyAI对接服务",
        "version": "1.0.0",
        "status": "running",
    }
 
 
if __name__ == "__main__":
    # 配置日志
    logger.add(
        settings.log_file,
        rotation="1 day",
        retention="30 days",
        level=settings.log_level,
        format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name}:{function}:{line} - {message}",
    )
 
    logger.info("启动E云管家-DifyAI对接服务")
 
    # 启动服务
    uvicorn.run(
        "main:app",
        host=settings.server_host,
        port=settings.server_port,
        reload=settings.debug,
        log_level=settings.log_level.lower(),
    )