附图报价系统设计分析2
附图报价系统设计分析2一、项目概览项目信息项目名称QuoteApp 附图报价助手桌面应用项目位置d:\QuoteApp\技术栈Python 3.10 / PyQt6 / SQLiteSQLAlchemy ORM/ openpyxl / python-docx可选依赖pythonOCCSTEP高精度解析/ pymupdf / PaddleOCR / OpenVINO代码初版完成2026-03-27本日优化完成2026-03-28测试状态53 个单元测试全部通过冒烟测试通过启动命令pip install -r requirements.txt python main.py二、目录结构QuoteApp/ ├── main.py # 应用入口PyQt6 QApplication ├── requirements.txt # 依赖清单含 OCR 依赖说明 ├── smoke_test.py # 集成冒烟测试in-memory DB ├── src/ │ ├── core/ │ │ ├── geometry_extractor.py # 几何解析STEP/STL/PDF/DXF★ 本日升级 │ │ ├── process_engine.py # 工艺推断11道工序工时定额 │ │ ├── quota_formulas.py # 工时定额手册公式库 │ │ ├── cost_calculator.py # 成本核算材料费加工费税费利润 │ │ └── quote_generator.py # 报价单导出Excel/Word │ ├── models/ │ │ ├── database.py # SQLAlchemy init_db SessionFactory │ │ ├── material.py # 材料 ORM7种预置材料 │ │ ├── process.py # 工序 ORM11道工序 │ │ ├── auxiliary_cost.py # 辅材费 ORM20种 │ │ ├── quota_coeff.py # 定额系数 ORM24条 │ │ └── quote_record.py # 报价历史记录 ORM │ └── ui/ │ ├── theme.py # 集中式主题管理 ★ 本日新增 │ ├── main_window.py # 主窗口三Tab │ ├── quote_panel.py # 报价Tab含 DimReviewDialog★ 本日升级 │ ├── settings_panel.py # 参数维护Tab ★ 本日修复 │ ├── history_panel.py # 历史记录Tab │ └── process_table.py # 工序明细表格组件 ├── templates/ │ ├── quote_template.xlsx # Excel 报价模板 │ └── quote_template.docx # Word 报价模板 └── tests/ # 53 个单元测试三、核心功能模块3.1 几何解析引擎geometry_extractor.py支持四种文件格式按精度分级处理格式解析方式置信度STEP / STPpythonOCC高精度→ trimesh降级0.95 / 0.85STLtrimesh 网格体积0.80DXFezdxf 矢量解析0.82PDF三级降级链见下节0.50 ~ 0.85提取信息长/宽/高、体积、表面积、孔特征直径/深度/数量、复杂度简单/中等/复杂3.2 PDF 三级降级解析链PDF 文件 │ ├─► Level 1: pymupdf 矢量提取 置信度 ~78% │ ├─ 工程标注正则Ø/φ/R/× │ ├─ 出现频次过滤量化到 0.5mm │ └─ 中位数离群剔除 │ ├─► Level 2: PaddleOCR扫描版 置信度 ~85% │ ├─ pymupdf 渲染 300DPI PNG │ ├─ CLAHE 自适应对比度增强 │ ├─ PaddleOCR 中英文识别 │ └─ 置信度 60% 的词丢弃 │ └─► Level 3: pdfplumber 文本兜底 置信度 ~50% └─ 原始暴力提取最后保障升级前 vs 升级后对比指标升级前升级后平均置信度50%78% ~ 85%孔特征识别❌ 无✅ 识别 Ø/φ/R 标注扫描版图纸❌ 无法识别✅ PaddleOCR 识别置信度不足时提示❌ 无✅ 弹出核对对话框3.3 工艺推断引擎process_engine.py根据几何特征推断 11 道工序及对应工时工序定额来源编程复杂度系数 × 特征数准终时间手册查表简单/中等/复杂三档车削一章 C620 公式外圆/端面/车孔/钻孔孔加工十一章钻床公式D/L/K材料系数铣削面积 × 铣削系数磨削六章磨床平面磨 F 面积公式热处理重量 × 处理系数线切割轮廓长度 × 切割系数检测/包装/表面处理固定系数 面积系数3.4 成本核算cost_calculator.py总成本 材料费 加工费 辅材费 管理费 含税报价 总成本 × (1 利润率) × (1 税率)材料费体积 × 密度 × 单价损耗系数 1.05加工费Σ工时 × 工序单价辅材费用户在参数维护中勾选的辅材合计默认 ¥13利润率/税率参数维护中可配置3.5 报价单导出支持 Excel 和 Word 两种格式报价单包含表头字段客户名称 / 收货地址 / 收件人 / 电话 / 备注 / 报价单号QT-YYYYMMDD-XXXX/ 客户单号 / 付款方式在线支付/账期支付/线下电汇/ 税率 / 物流费用 / 审核员 / 报价员 / 平台签章 / 客户签章工件清单物料名称 / 平台型号 / 客户型号 / 模具编号 / 零件编号 / 材质 / 品牌 / 单位 / 数量 / 含税单价 / 合计金额 / 交期天四、数据预置类型数量内容材料库7种铝6061 / 铝T6 / 钢45# / 冷拉钢 / 不锈钢304 / 灰铸铁 / 黄铜工序11道编程/准终/热处理/线切割/孔加工/车削/铣削/磨削/检测/包装/表面处理定额系数24条车/钻/铣/磨/编程/准终/装卸全覆盖辅材20种按刀具/冷却/磨料/量具/包材/其他分类默认选中电费分摊清洗¥13五、优化内容5.1 UI 主题升级新增src/ui/theme.py集中式主题管理自动检测 Windows 注册表AppsUseLightTheme切换深色/浅色主题Theme.apply(app)一次性应用 QSS QPaletteTheme.C颜色 token 字典统一管理所有 UI 颜色浅色Win11 Fluent Design白底 /#0078D4强调蓝深色工业深色风#1C1F26背景 /#2B82F0强调蓝受影响文件main.py/main_window.py/quote_panel.py/settings_panel.py/history_panel.py/process_table.py5.2 参数维护-材料库列表高度修复问题根因QTableWidget未设置minimumHeight和SizePolicyQt 布局引擎将其压缩到只显示表头的高度。修复内容修复点改动mat_table初始高度setMinimumHeight(220)setSizePolicy(Expanding, Expanding)数据加载后动态调整resizeRowsToContents() 按行数计算minimumHeight最多 12 行列宽优化材料名称列改为Stretch自适应quota_table同步修复最小 200px最多 10 行布局权重材料库卡片stretch3定额系数卡片stretch2视觉优化交替行颜色、隐藏垂直表头、按行选中5.3 参数维护-辅材费复选框无法勾选 BUG 修复问题根因QGroupBox.setCheckable(True)setChecked(False)— Qt 的 checkable GroupBox 在checkedFalse时自动禁用组内所有子控件导致 20 个QCheckBox全部变为 disabled无法点击。修复内容修复点改动根本修复辅材费 GroupBox 去掉setCheckable(True)改为普通 GroupBox布局清空deleteLater()异步→takeAt() setParent(None)同步防止布局错位信号改用toggled→checkStateChanged避免重复触发保存新增分类标题刀具/冷却/磨料/量具/包材/其他 分隔显示滚动区域20 条辅材放入最大 280px 的 QScrollArea全部取消按钮一键清空所有选中验证结果headless 测试CB total:20 enabled:20✅5.4 PDF 图纸解析置信度升级问题根因原代码取 PDF 文本中最大的三个数字作为 L/W/H图框编号、公差值、零件号全部混入置信度天然只有 50%报价严重虚高。新增依赖pymupdf 1.23.0 # 矢量PDF文字精确提取 paddlepaddle paddleocr # 扫描版OCR识别CPU版约700MB模型 opencv-python-headless # 图像预处理CLAHE对比度增强 # 可选加速 openvino # Intel CPU 推理加速速度提升3~5x三级降级链架构def_parse_pdf(file_path):# Level 1: pymupdf 矢量提取置信度 ~78%try:feat_parse_pdf_vector(file_path)iffeat.confidence0.70:returnfeatexcept:pass# Level 2: PaddleOCR 扫描识别置信度 ~85%try:return_parse_pdf_ocr(file_path)except:pass# Level 3: pdfplumber 兜底置信度 ~50%return_parse_pdf_fallback(file_path)智能尺寸过滤算法_filter_engineering_dims范围过滤保留 2~3000mm排除页码/版次/公差量化聚合量化到 0.5mm 精度统计出现频次频次优先同一尺寸重复标注 → 更可信离群剔除排除 中位数 20 倍的异常值新增 UI尺寸核对对话框DimReviewDialog当 PDF 解析置信度 80% 时自动弹出允许用户手动修正 L/W/H / 孔数 / 复杂度修正后置信度自动标记为 ≥ 80%置信度提升对比图纸类型升级前升级后矢量 PDFCAD直出50%78%扫描版 PDF50%85%所有 PDF手工核对后50%≥80%六、已知限制与后续建议项目当前状态建议STEP 高精度解析需单独安装pythonocc-coreconda提供 conda 环境配置文件PaddleOCR 首次加载约 3~5 秒下载并加载约 300MB 模型增加启动进度提示OpenVINO 加速可选安装Intel CPU 速度提升 3~5x推荐 Intel 平台用户安装PDF 孔特征识别通过正则识别 Ø/φ/R 标注需图纸标注规范后续可增加 CNN 检测圆形特征批量报价当前只支持单件报价可增加批量导入 Excel 功能EXE 打包已更新dist/QuoteApp/QuoteApp.exe建议增加版本号管理七、规格文档清单文档状态REQUIREMENT.md✅ 完成DESIGN.md✅ 完成QUOTA_ENGINE_DESIGN.md✅ 完成BUSINESS_RULES.md✅ 完成UML_MODELS.md✅ 完成PROCESS_FLOWS.md✅ 完成TASK_PLAN.md✅ 完成