add freecad

This commit is contained in:
2026-03-08 02:53:27 +08:00
parent 6ee740853f
commit c79190e319
4 changed files with 385 additions and 3 deletions
+63
View File
@@ -358,6 +358,46 @@ async def _save_analysis_metrics(session, stp_file_id, analysis_result):
logger.info(f"分析指标保存成功: {metrics.id}")
async def _save_verification_metrics(session, stp_file_id, verification_result):
"""保存验证指标到数据库"""
from models.database import AnalysisMetrics
from sqlalchemy import select
# 查找现有的分析指标记录
result = await session.execute(
select(AnalysisMetrics).where(AnalysisMetrics.stp_file_id == stp_file_id)
)
metrics = result.scalar_one_or_none()
if metrics:
# 更新现有记录
metrics.verification_status = verification_result.get("status", "unknown")
comparison = verification_result.get("comparison", {})
volume_comparison = comparison.get("volume", {})
area_comparison = comparison.get("surface_area", {})
metrics.verification_volume_diff = volume_comparison.get("difference_percent", 0)
metrics.verification_area_diff = area_comparison.get("difference_percent", 0)
metrics.verification_details = verification_result
else:
# 创建新记录
comparison = verification_result.get("comparison", {})
volume_comparison = comparison.get("volume", {})
area_comparison = comparison.get("surface_area", {})
metrics = AnalysisMetrics(
stp_file_id=stp_file_id,
verification_status=verification_result.get("status", "unknown"),
verification_volume_diff=volume_comparison.get("difference_percent", 0),
verification_area_diff=area_comparison.get("difference_percent", 0),
verification_details=verification_result
)
session.add(metrics)
await session.commit()
logger.info(f"验证指标保存成功: stp_file_id={stp_file_id}")
async def process_file_core(
storage_service: StorageIntegrationService,
task_id: str,
@@ -633,6 +673,29 @@ async def process_file_core(
product_weight=product_weight_g
)
# 9.7 FreeCAD 几何验证
await storage_service.update_task_status(
db_session, task_id, "processing", 90, "FreeCAD几何验证"
)
verification_result = None
try:
from services.verification_service import verification_service
verification_result = await verification_service.verify_stp_file(file_path)
# 保存验证结果到数据库
if verification_result and analysis_result:
await _save_verification_metrics(
db_session,
stp_file_id,
verification_result
)
logger.info(f"FreeCAD验证完成: {verification_result.get('status', 'unknown') if verification_result else 'failed'}")
except Exception as ve:
logger.warning(f"FreeCAD验证失败(不影响主流程): {ve}")
verification_result = {"status": "error", "error": str(ve)}
# 10. 完成处理
await storage_service.update_stp_file_status(db_session, stp_file_id, "completed")
await storage_service.update_task_status(