deving
This commit is contained in:
@@ -15,6 +15,7 @@ from database.database import get_db_session
|
||||
from utils.logger import get_logger
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from core.mold_generator import MoldCavityGenerator
|
||||
from datetime import datetime
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -244,6 +245,71 @@ async def history_page(request: Request):
|
||||
})
|
||||
|
||||
|
||||
@router.get("/api/snapshots/{stp_file_id}")
|
||||
@router.post("/api/snapshots/{stp_file_id}")
|
||||
async def get_analysis_snapshots(stp_file_id: int, db_session: AsyncSession = Depends(get_db_session)):
|
||||
"""获取指定STP文件的分析结果快照列表"""
|
||||
storage_service = StorageIntegrationService()
|
||||
|
||||
try:
|
||||
snapshots = await storage_service.get_analysis_result_snapshots(db_session, stp_file_id)
|
||||
|
||||
# 构建返回数据
|
||||
snapshot_list = []
|
||||
for snapshot in snapshots:
|
||||
snapshot_list.append({
|
||||
"id": snapshot.id,
|
||||
"snapshot_name": snapshot.snapshot_name,
|
||||
"created_time": snapshot.created_time.isoformat() if snapshot.created_time else "",
|
||||
"analysis_time": snapshot.analysis_time.isoformat() if snapshot.analysis_time else "",
|
||||
"task_data": snapshot.task_data
|
||||
})
|
||||
|
||||
return {
|
||||
"stp_file_id": stp_file_id,
|
||||
"total_snapshots": len(snapshot_list),
|
||||
"snapshots": snapshot_list
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取分析结果快照失败: {e}")
|
||||
raise HTTPException(500, f"获取快照失败: {str(e)}")
|
||||
|
||||
|
||||
@router.get("/api/snapshot/{snapshot_id}")
|
||||
@router.post("/api/snapshot/{snapshot_id}")
|
||||
async def get_analysis_snapshot(snapshot_id: int, db_session: AsyncSession = Depends(get_db_session)):
|
||||
"""获取指定分析结果快照的完整数据"""
|
||||
from sqlalchemy import select
|
||||
from models.database import AnalysisResultSnapshot
|
||||
|
||||
try:
|
||||
result = await db_session.execute(
|
||||
select(AnalysisResultSnapshot).where(AnalysisResultSnapshot.id == snapshot_id)
|
||||
)
|
||||
snapshot = result.scalar_one_or_none()
|
||||
|
||||
if not snapshot:
|
||||
raise HTTPException(404, "快照不存在")
|
||||
|
||||
return {
|
||||
"id": snapshot.id,
|
||||
"snapshot_name": snapshot.snapshot_name,
|
||||
"stp_file_id": snapshot.stp_file_id,
|
||||
"created_time": snapshot.created_time.isoformat() if snapshot.created_time else "",
|
||||
"analysis_time": snapshot.analysis_time.isoformat() if snapshot.analysis_time else "",
|
||||
"task_data": snapshot.task_data,
|
||||
"geometry_data": snapshot.geometry_data,
|
||||
"mold_cavity_data": snapshot.mold_cavity_data,
|
||||
"key_info": snapshot.key_info,
|
||||
"html_info": snapshot.html_info
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取分析结果快照详情失败: {e}")
|
||||
raise HTTPException(500, f"获取快照详情失败: {str(e)}")
|
||||
|
||||
|
||||
@router.get("/result/{task_id}")
|
||||
@router.post("/result/{task_id}")
|
||||
async def result_page(request: Request, task_id: str, db_session: AsyncSession = Depends(get_db_session)):
|
||||
@@ -579,6 +645,39 @@ async def process_file_core(
|
||||
db_session, task_id, "completed", 100, "模具型腔生成完成"
|
||||
)
|
||||
|
||||
# 构建完整的分析结果数据
|
||||
task_info = tasks[task_id]
|
||||
|
||||
# 构建任务基本信息
|
||||
task_data = {
|
||||
"task_id": task_info["task_id"],
|
||||
"filename": task_info["filename"],
|
||||
"file_size": task_info["file_size"],
|
||||
"status": task_info["status"],
|
||||
"upload_time": task_info["upload_time"],
|
||||
"completed_at": str(datetime.now())
|
||||
}
|
||||
|
||||
# 保存分析结果快照到数据库
|
||||
try:
|
||||
await storage_service.save_analysis_result_snapshot(
|
||||
db_session,
|
||||
stp_file_id,
|
||||
task_data=task_data,
|
||||
geometry_data=geometry_data,
|
||||
mold_cavity_data=detailed_cavity_json,
|
||||
key_info=detailed_cavity_json,
|
||||
html_info={
|
||||
"filename": Path(html_file_path).name,
|
||||
"file_path": html_file_path,
|
||||
"generated_time": str(datetime.now())
|
||||
}
|
||||
)
|
||||
logger.info(f"分析结果快照保存成功: {task_id}")
|
||||
except Exception as e:
|
||||
logger.error(f"保存分析结果快照失败: {e}")
|
||||
# 不影响主流程,继续执行
|
||||
|
||||
# 更新内存任务状态
|
||||
tasks[task_id]["geometry_data"] = geometry_data
|
||||
tasks[task_id]["analysis_result"] = analysis_result
|
||||
|
||||
Reference in New Issue
Block a user