|
|
@@ -0,0 +1,43 @@
|
|
|
+from fastapi import APIRouter, HTTPException
|
|
|
+from pydantic import BaseModel
|
|
|
+from typing import Optional
|
|
|
+from app.agents.report_parse_agent import ReportParseAgent
|
|
|
+import logging
|
|
|
+import os
|
|
|
+
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
+router = APIRouter(prefix="/api/v1", tags=["report_parse"])
|
|
|
+_agent = None
|
|
|
+
|
|
|
+
|
|
|
+def get_agent():
|
|
|
+ global _agent
|
|
|
+ if _agent is None:
|
|
|
+ _agent = ReportParseAgent()
|
|
|
+ return _agent
|
|
|
+
|
|
|
+
|
|
|
+class ParseRequest(BaseModel):
|
|
|
+ file_path: str
|
|
|
+ family_id: Optional[int] = None
|
|
|
+ user_id: Optional[int] = None
|
|
|
+
|
|
|
+
|
|
|
+class ParseResponse(BaseModel):
|
|
|
+ code: int = 200
|
|
|
+ message: str = "ok"
|
|
|
+ data: dict = {}
|
|
|
+
|
|
|
+
|
|
|
+@router.post("/report/parse", response_model=ParseResponse)
|
|
|
+async def parse_report(req: ParseRequest):
|
|
|
+ if not os.path.exists(req.file_path):
|
|
|
+ raise HTTPException(status_code=400, detail=f"文件不存在: {req.file_path}")
|
|
|
+
|
|
|
+ agent = get_agent()
|
|
|
+ try:
|
|
|
+ result = await agent.parse(req.file_path)
|
|
|
+ return ParseResponse(data=result)
|
|
|
+ except Exception as e:
|
|
|
+ logger.error("报告解析失败: %s", e, exc_info=True)
|
|
|
+ return ParseResponse(code=500, message=f"解析失败: {str(e)}", data={})
|