From c9c4bc2bcd60fbbce1ef226be755d146b6ac39ad Mon Sep 17 00:00:00 2001 From: SZCJW <792430652@qq.com> Date: Sun, 8 Mar 2026 03:55:48 +0800 Subject: [PATCH] x --- src/services/verification_service.py | 60 +++++++++++++++++----------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/src/services/verification_service.py b/src/services/verification_service.py index f91c838..d597fa7 100644 --- a/src/services/verification_service.py +++ b/src/services/verification_service.py @@ -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