This commit is contained in:
cjw
2026-02-16 18:33:17 +08:00
parent d111721ed9
commit 1525f6fc0b
5 changed files with 25 additions and 849 deletions
+2 -75
View File
@@ -3,7 +3,7 @@
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, update
from pathlib import Path
from typing import Optional, Dict, Any, List
from typing import Optional, Dict, Any
import json
from datetime import datetime
@@ -11,7 +11,7 @@ from models.database import (
STPFile, GeometryData, MoldCavityData,
HTMLFile, ProcessingTask, User,
FeatureDetection, DesignRecommendation,
UserActivity, SystemLog, AnalysisResultSnapshot
UserActivity, SystemLog
)
from storage.rustfs_storage import rustfs_manager
from utils.logger import get_logger
@@ -493,79 +493,6 @@ class StorageIntegrationService:
logger.info(f"STP文件及其关联数据已删除: {stp_file_id}")
async def save_analysis_result_snapshot(
self,
session: AsyncSession,
stp_file_id: int,
task_data: Dict[str, Any],
geometry_data: Optional[Dict[str, Any]] = None,
mold_cavity_data: Optional[Dict[str, Any]] = None,
key_info: Optional[Dict[str, Any]] = None,
html_info: Optional[Dict[str, Any]] = None
) -> AnalysisResultSnapshot:
"""保存分析结果快照 - 文件名+日期时间命名方式"""
# 获取STP文件信息
stp_file = await session.get(STPFile, stp_file_id)
if not stp_file:
raise ValueError(f"STP文件不存在: {stp_file_id}")
# 生成快照名称:文件名_YYYYMMDD_HHMMSS
filename = stp_file.original_filename
# 移除文件扩展名
base_name = Path(filename).stem
# 生成时间戳
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
snapshot_name = f"{base_name}_{timestamp}"
# 获取分析时间(从任务数据中获取或使用当前时间)
analysis_time_str = task_data.get('created_at') or task_data.get('upload_time')
if analysis_time_str:
analysis_time = datetime.fromisoformat(analysis_time_str.replace('Z', '+00:00'))
else:
analysis_time = datetime.now()
# 创建快照记录
snapshot = AnalysisResultSnapshot(
stp_file_id=stp_file_id,
snapshot_name=snapshot_name,
task_data=task_data,
geometry_data=geometry_data,
mold_cavity_data=mold_cavity_data,
key_info=key_info,
html_info=html_info,
analysis_time=analysis_time
)
session.add(snapshot)
await session.commit()
await session.refresh(snapshot)
logger.info(f"分析结果快照保存成功: {snapshot_name} (ID: {snapshot.id})")
return snapshot
async def get_analysis_result_snapshots(
self,
session: AsyncSession,
stp_file_id: int,
limit: int = 10
) -> List[AnalysisResultSnapshot]:
"""获取指定STP文件的分析结果快照列表"""
from sqlalchemy import select
from sqlalchemy.orm import selectinload
result = await session.execute(
select(AnalysisResultSnapshot)
.where(AnalysisResultSnapshot.stp_file_id == stp_file_id)
.order_by(AnalysisResultSnapshot.created_time.desc())
.limit(limit)
)
snapshots = result.scalars().all()
logger.info(f"获取到 {len(snapshots)} 个分析结果快照")
return snapshots
# 全局存储集成服务实例
storage_integration = StorageIntegrationService()