This commit is contained in:
2026-03-08 03:55:48 +08:00
parent 10c83a84bf
commit c9c4bc2bcd
+37 -23
View File
@@ -128,9 +128,9 @@ class GeometryVerificationService:
stdout_text = stdout.decode('utf-8') if stdout else ''
stderr_text = stderr.decode('utf-8') if stderr else ''
logger.debug(f"验证脚本 stdout: {stdout_text[:500]}")
logger.info(f"验证脚本 stdout (前1000字符): {stdout_text[:1000]}")
if stderr_text:
logger.debug(f"验证脚本 stderr: {stderr_text[:500]}")
logger.warning(f"验证脚本 stderr: {stderr_text[:500]}")
if process.returncode == 0:
# 尝试读取生成的报告文件(在 STP 文件目录下)
@@ -181,34 +181,48 @@ class GeometryVerificationService:
}
lines = output.split('\n')
current_section = None
for line in lines:
line = line.strip()
# 检测验证结果
if '验证结果:' in line:
if '✅ 通过' in line or '通过' in line:
result['status'] = 'passed'
elif '❌ 失败' in line or '失败' in line:
result['status'] = 'failed'
elif '体积对比:' in line or '体积差异' in line:
# 检测当前段落
if '体积对比:' in line:
current_section = 'volume'
elif '表面积对比:' in line:
current_section = 'surface_area'
# 解析差异百分比
if '差异:' in line and '%' in line:
try:
if '差异:' in line:
parts = line.split('差异:')
if len(parts) > 1:
diff_part = parts[1].strip()
if '%' in diff_part:
percent = float(diff_part.split('%')[0].strip().split()[-1])
result['comparison']['volume'] = {'difference_percent': percent}
except:
pass
elif '表面积对比:' in line or '表面积差异' in line:
try:
if '差异:' in line:
parts = line.split('差异:')
if len(parts) > 1:
diff_part = parts[1].strip()
if '%' in diff_part:
percent = float(diff_part.split('%')[0].strip().split()[-1])
result['comparison']['surface_area'] = {'difference_percent': percent}
except:
pass
# 格式: "差异: 123.4567 mm³ (0.1234%)"
parts = line.split('(')
if len(parts) >= 2:
percent_str = parts[-1].split('%')[0].strip()
percent = float(percent_str)
if current_section == 'volume':
result['comparison']['volume'] = {'difference_percent': percent}
elif current_section == 'surface_area':
result['comparison']['surface_area'] = {'difference_percent': percent}
except Exception as e:
logger.debug(f"解析差异百分比失败: {e}")
# 如果没有找到验证结果,但有 comparison 数据,则根据差异判断
if result['status'] == 'unknown' and result['comparison']:
vol_diff = result['comparison'].get('volume', {}).get('difference_percent', 100)
area_diff = result['comparison'].get('surface_area', {}).get('difference_percent', 100)
if vol_diff < 1 and area_diff < 2:
result['status'] = 'passed'
else:
result['status'] = 'failed'
return result