deving
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user