附图报价系统设计分析6
报告核心发现速览
| 维度 | 关键数据 |
|---|
| 项目规模 | 129个Python文件,37,261行代码,50个MD文档16,397行 |
| 开发周期 | 2026-03-27 ~ 2026-05-01,共 36天,70次提交 |
| UI占比 | src/ui/ 16,737行,占总代码 44.9%,是最大模块 |
| 最大文件 | gl_3d_widget.py 2,316行 / geometry_extractor.py 1,915行 |
| 提交节奏 | 前7天密集开发(日均5~7次),后转为修复打磨期 |
| 测试覆盖 | 仅7个测试文件1,000行,覆盖率远低于37K行源码 |
六大核心子系统
图纸解析(7格式·3级回退) → 预览引擎(3级OpenGL) → 成本核算(13步公式链) → 语义解析(GDT/焊缝/标题栏) → AI推理(Gemma本地+百炼云端) → 报价生成(Excel/Word)
三大核心风险
①单一main分支开发无特性分支
②gl_3d_widget单体2,316行
③测试覆盖率严重不足
报告包含了完整的 迭代路线图建议(短期重构→中期语义增强→长期多租户云端化),可直接用于后续开发排期。



目录
- 业务模型分析
- 需求清单(可追溯)
- 系统架构设计
- 功能清单与模块映射
- 代码规模全景
- 侧端推理链路
- 模型特征分析
- Git 日志可视化与分析
- 风险与优化建议
- 迭代路线图建议
一、业务模型分析
1.1 业务定位
QuoteApp 是一款面向中小机加工企业的桌面级 CAD 智能报价工具,核心价值是将"人工看图→手工报价"的传统流程升级为"图纸上传→AI 自动核算→导出报价单"的数字化链路。
1.2 目标用户画像
| 用户类型 | 规模 | 核心痛点 | 使用频次 |
|---|
| 中小机加工厂报价员 | 5~50人 | 依赖老师傅、报价周期2~3天 | 每日 |
| 大型制造企业工艺工程师 | 个人 | 缺乏快速核算工具 | 每周 |
| 销售/采购人员 | 个人 | 成本"黑盒",无法拆解费用明细 | 按需 |
1.3 业务价值链
客户发来图纸
↓
上传 STEP/STL/PDF/DXF/DWG
↓
自动解析几何特征(体积、表面积、孔径分布、复杂度)
↓
工艺推断引擎 → 11道工序工时计算
↓
成本核算(材料费→加工费→管销费→利润→税费→含税价)
↓
校对与手工覆写 → 确认报价
↓
导出 Excel/Word 报价单
↓
回复客户
1.4 行业对标分析
| 对标系统 | 类型 | QuoteApp 差异化定位 |
|---|
| HCB 成本报表 | Excel 表单工具 | 自动化替代人工填表 |
| 开目 3DDFC | 国产 CAD 报价软件 | 轻量化 + 桌面部署(无需服务器) |
| meviy(米思米) | 日本云端 AI 报价 | 离线可用,数据本地存储 |
| 寸铁应用平台 | 工业 AI SaaS | 单 exe 分发,零部署成本 |
1.5 商业模型推断
- 价值主张:将 2~3 天报价周期缩短至 30 分钟内,无需资深工艺师
- 收入来源:未明确(推测为企业内部工具 / 打包销售 / 配套工业品电商平台)
- 交付模式:单 EXE 绿色分发(690MB),CLI 支持批量处理
- 竞争壁垒:11道工序工时定额公式库 + 三级回退解析链 + 双 AI 引擎
二、需求清单(可追溯)
2.1 功能需求(FR)
| 编号 | 名称 | 描述 | 优先级 | 状态 | 对应文件 |
|---|
| FR-01-1 | 3D文件上传 | STEP/STP/STL/OBJ 解析 | P0 | ✅ 完成 | geometry_extractor.py |
| FR-01-2 | 2D图纸上传 | PDF/DXF/DWG 解析 | P1 | ✅ 完成 | geometry_extractor.py |
| FR-01-3 | 拖拽上传 | 拖拽文件到界面 | P1 | ✅ 完成 | quote_panel.py |
| FR-01-4 | 包围盒提取 | L×W×H/直径(mm) | P0 | ✅ 完成 | geometry_extractor.py |
| FR-01-5 | 体积表面积 | 自动计算 mm³/mm² | P0 | ✅ 完成 | geometry_extractor.py |
| FR-01-6 | 孔径分布统计 | 11段区间分类 | P0 | ✅ 完成 | geometry_extractor.py |
| FR-01-7 | 工艺特征识别 | 平面/凹槽/圆角/螺纹 | P1 | ✅ 完成 | geometry_extractor.py |
| FR-01-8 | 3D 线框预览 | OpenGL 渲染展示 | P2 | ✅ 完成 | gl_3d_widget.py |
| FR-02-1 | 内置材料库 | 铝/钢/不锈钢等 | P0 | ✅ 完成 | material.py |
| FR-02-2 | 材料属性 | 密度/单价 | P0 | ✅ 完成 | material.py |
| FR-02-3 | 表面处理选项 | 阳极氧化/镀铬/发黑等 | P0 | ✅ 完成 | quote_panel.py |
| FR-02-4 | 热处理选项 | 调质/淬火/渗碳等 | P0 | ✅ 完成 | heat_treat_widget.py |
| FR-02-5 | 自定义材料 | 用户新增材料 | P1 | ✅ 完成 | settings_panel.py |
| FR-02-6 | 编辑材料单价 | 修改市场单价 | P0 | ✅ 完成 | settings_panel.py |
| FR-03-1 | 编程工时 | 基于复杂度评分 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-2 | 调机(准终时间) | 查表法 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-3 | 空乘(装卸)时间 | 基于重量G公式 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-4 | 热处理 | 净重×单价 | P0 | ✅ 完成 | cost_calculator.py |
| FR-03-5 | 线切割 | 参考插床公式 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-6 | 孔加工 | D/L/K材料系数 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-7 | 粗车/铣/磨 | 基于D/L/K光洁度 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-8 | 精车/铣/磨 | 基于F/h/形位公差 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-9 | 检测工时 | 公差特征数×系数 | P0 | ✅ 完成 | quota_formulas.py |
| FR-03-10 | 包装 | 固定费用/重量 | P1 | ✅ 完成 | quota_formulas.py |
| FR-03-11 | 表面处理 | 基于F面积 | P0 | ✅ 完成 | cost_calculator.py |
| FR-04-1~11 | 费用汇总链 | 13步公式链 | P0 | ✅ 完成 | cost_calculator.py |
| FR-05-1 | 批量报价 | 多零件上传 | P1 | ✅ 完成 | batch_quote_panel.py |
| FR-05-2 | 报价单字段 | 14列标准字段 | P0 | ✅ 完成 | quote_generator.py |
| FR-05-3 | 导出 Excel | .xlsx 对齐 HCB | P0 | ✅ 完成 | quote_generator.py |
| FR-05-4 | 导出 Word | .docx 格式 | P1 | ✅ 完成 | quote_generator.py |
| FR-05-5 | 历史报价存储 | SQLite 本地存储 | P0 | ✅ 完成 | quote_record.py |
| FR-05-6 | 历史报价查询 | 按日期/图号/客户 | P0 | ✅ 完成 | history_panel.py |
| FR-05-7 | 历史重新导出 | 从历史记录导出 | P1 | ✅ 完成 | history_panel.py |
| FR-06-1 | 材料库管理 | CRUD 操作 | P0 | ✅ 完成 | settings_panel.py |
| FR-06-2 | 工序单价配置 | 元/H 可配置 | P0 | ✅ 完成 | settings_panel.py |
| FR-06-3 | 工时系数配置 | 支持微调校准 | P0 | ✅ 完成 | settings_panel.py |
| FR-06-4 | 辅材费用清单 | 20+ 种辅料 | P1 | ✅ 完成 | auxiliary_cost.py |
| FR-06-5 | 税率/管销/利润率 | 全局配置 | P0 | ✅ 完成 | settings_panel.py |
| FR-03-N1~N4 | 定额系数校准 | 手册系数可调 | P1 | ✅ 完成 | quota_formulas.py |
2.2 非功能需求(NFR)
| 编号 | 类型 | 描述 | 状态 |
|---|
| NFR-01 | 性能 | STEP <10MB 后台解析,报价响应<3秒 | ✅ 完成 |
| NFR-02 | 离线可用 | 全程本地运行,无需联网 | ✅ 完成(含本地 Gemma 模型) |
| NFR-03 | 兼容性 | Windows 10/11 64位 | ✅ 完成 |
| NFR-04 | 可安装 | 单EXE绿色安装 | ✅ 完成(PyInstaller,~690MB) |
| NFR-05 | 数据安全 | 本地 SQLite 存储 | ✅ 完成 |
| NFR-06 | 可维护 | UI界面可调参数 | ✅ 完成 |
| NFR-07 | 估算精度 | 常规件<20%,复杂件<35% | ⚠️ 待验证 |
| NFR-08 | 易用性 | 核心流程≤5步 | ✅ 完成 |
2.3 AI 增强需求
| 编号 | 名称 | 描述 | 状态 |
|---|
| AI-01 | 工艺路线规划 | Gemma-4-E2B 本地推理 | ✅ 完成 |
| AI-02 | 工序工时估算 | Gemma-4-E2B 本地推理 | ✅ 完成 |
| AI-03 | 工艺对话 | 阿里百炼 Qwen-Plus(SSE流式) | ✅ 完成 |
| AI-04 | Ollama 本地模型支持 | 替代百炼 | ✅ 完成 |
| AI-05 | 标题栏验证 | Gemma 4 验证 Level 0 | ✅ 完成 |
| AI-06 | 材质语义理解 | Gemma 4 语义增强 | ✅ 完成 |
| AI-07 | 技术要求分类 | Gemma 4 智能分类 | ✅ 完成 |
2.4 本文档未覆盖的需求增量(实际已完成)
| 增量功能 | 说明 |
|---|
| ViewCube CAD 导航 | 3D 方位体交互控件 |
| CAD 工具栏 | 测量/孔分布/标注/导出 |
| 2D DXF 显示 | 独立的 DXF 预览控件 |
| 工艺可视化 | 工序流程图可视化 |
| 语义审查对话框 | AI 解析结果审查 |
| 语义参数配置 | 三级回退策略配置 |
| 反向标注 | 背部标注面板 |
| 粗糙度/形位公差/热处理控件 | 独立 UI 组件 |
| 模型树3D联动 | 选中节点联动高亮 |
| CLI 无头模式 | 命令行批量处理 |
三、系统架构设计
3.1 六层架构总览
┌──────────────────────────────────────────────────────────────────────┐
│ UI 层(PyQt6,16,737行) │
│ MainWindow · QuotePanel · BatchQuotePanel · HistoryPanel │
│ SettingsPanel · PreviewPanel · Gl3DWidget · ViewCube · CAD 工具栏 │
│ SemanticReview · SemanticSettings · AI Chat · 工艺表格/可视化 │
├──────────────────────────────────────────────────────────────────────┤
│ 业务逻辑层(core/,7,410行) │
│ GeometryExtractor → ProcessEngine/V2 → CostCalculator │
│ ←→ QuotaFormulas (定额手册公式库) → QuoteGenerator │
│ DrawingExporter · BatchExtractor · PreviewEngine · CliRunner │
├──────────────────────────────────────────────────────────────────────┤
│ 语义解析层(core/semantic/,3,202行) │
│ SemanticExtractor · GDTDetector · WeldDetector · TechReqParser │
│ TitleBlockParser · OcrUtils · Gemma4Validator · AliyunValidtor │
├──────────────────────────────────────────────────────────────────────┤
│ 数据模型层(models/,837行) │
│ Material · ProcessParam · QuoteRecord · AuxiliaryCost · Database │
│ QuotaFormulaParam (定额系数) [SQLAlchemy 2.0 ORM] │
├──────────────────────────────────────────────────────────────────────┤
│ 持久化层(SQLite) │
│ 6张核心表:materials / quote_records / process_params │
│ quota_formula_params / auxiliary_costs / weld_annotations │
├──────────────────────────────────────────────────────────────────────┤
│ 文件输入/输出层 │
│ 输入:STEP/STL/OBJ/PDF/DXF/DWG/ZIP │
│ 输出:Excel(.xlsx) / Word(.docx) │
└──────────────────────────────────────────────────────────────────────┘
3.2 核心数据流
文件上传 ─→ 格式检测 ─→ 三级回退解析链 ─→ GeometryFeatures
↓
13步成本公式链
↓
11道工序工时分配
↓
报价汇总(含税/不含税)
↓
Excel/Word 导出或历史存储
3.3 图纸解析回退链(7种格式·3级回退)
STEP → pythonOCC → trimesh → 正则提取
STL → trimesh 直接加载
OBJ → trimesh 直接加载
PDF → pymupdf 矢量 → PaddleOCR → pdfplumber
DXF → ezdxf 直接解析
DWG → ODA (Open Design Alliance) → DXF → ezdxf
ZIP → 自动解压 → 逐文件处理
3.4 三级 OpenGL 渲染架构
| 级别 | API | 着色特性 | 触发条件 |
|---|
| Primary | OpenGL 3.3 Core | Phong + 半球环境光 + 边缘光 + 菲涅尔 + Gamma | GPU 支持 GL 3.3 |
| Secondary | OpenGL 2.1 (GLSL 120) | 标准 Phong | GPU 仅支持 GL 2.1 |
| Fallback | QPainter 软件渲染 | 线框模式 | 无 GPU / 远程桌面 |
3.4. 1. QuoteApp 与 OpenCASCADE (OCCT) 架构关联度分析报告核心结论
QuoteApp 不是基于 OCCT 构建的 CAD 软件,而是一个机械零件报价辅助工具。它与 OCCT 的关系是单向读取——仅利用 OCCT 的数据读取能力提取几何特征(尺寸、体积、孔径),用于报价计算,不使用 OCCT 的任何建模、编辑、渲染能力。
3.4.2. OCCT 七层架构 vs QuoteApp 对照
| OCCT 层级 | OCCT 能力 | QuoteApp 对应 | 关联度 |
|---|
| ① Foundation Classes | 内存管理(handles 智能指针)、跨平台可移植性 | ❌ 无对应 | 0% — QuoteApp 用 Python GC |
| ② Modeling Data | B-Rep 拓扑 (TopoDS)、几何/曲面数据结构 | ⚠️ 仅读取 | 15% — pythonOCC 路径遍历 Face/Edge 提取孔径,但不维护拓扑 |
| ③ Modeling Algorithm | 布尔运算、倒角、偏移、填充 | ❌ 完全不用 | 0% — 报价工具不需要建模 |
| ③ Mesh | BRepMesh 三角化 | ⚠️ 间接使用 | 10% — pythonOCC 的 BRepMesh_IncrementalMesh 仅作为 STEP→三角网格的转换桥梁 |
| ④ OCAF | 文档-视图架构、Undo/Redo、持久化 | ❌ 无对应 | 0% — QuoteApp 用 SQLite + 自研 UI |
| ⑤ Data Exchange | STEP/IGES/STL 读写 | ✅ 关键依赖 | 40% — STEP 读取是核心功能之一 |
| ⑥ Visualization | 3D 渲染、视图管理、选择高亮 | ❌ 无对应 | 0% — QuoteApp 自研 OpenGL 渲染器(三级降级) |
| ⑦ GUI Framework | Qt/MFC/.NET 集成 | ❌ 独立使用 PyQt6 | 0% — 直接用 PyQt6,不走 OCCT 的 Qt 集成层 |
3.4.3. 实际代码中的 OCCT 依赖点
QuoteApp 通过 pythonocc-core(Python 绑定)间接使用 OCCT,涉及以下模块:
| OCCT 模块 | QuoteApp 用途 | 关键文件 |
|---|
STEPControl_Reader | STEP 文件读取 | preview_engine.py、geometry_extractor.py |
BRepGProp | 体积/面积精确计算 | geometry_extractor.py |
BRepMesh_IncrementalMesh | B-Rep → 三角网格(仅用于 3D 预览) | preview_engine.py |
TopExp_Explorer | 遍历 Face/Edge 拓扑 | geometry_extractor.py |
BRepAdaptor_Surface | 曲面类型判断(识别圆柱面→孔) | geometry_extractor.py |
Bnd_Box / BRepBndLib | 包围盒计算 | geometry_extractor.py |
关键特征: 所有 OCCT 调用都在 try/except ImportError 内,是可选路径。主路径使用 cascadio(纯 Python 封装)或 trimesh。
3.4.4. QuoteApp 自研替代了 OCCT 的哪些层
| OCCT 能力 | QuoteApp 的替代方案 |
|---|
| Visualization(渲染器) | GL3DWidget:自研 OpenGL 3.3/2.1/软件三级降级渲染器(1535行),含 Blinn-Phong 三光源、菲涅尔轮廓光、ViewCube |
| Modeling Data(数据结构) | MeshData:纯三角网格(vertices+normals+indices numpy 数组),无 B-Rep |
| GUI Framework | PyQt6:独立于 OCCT,自研 PreviewPanel、QuotePanel 等 |
| 数据交换(写出) | ❌ 暂无 CAD 格式导出(DXF/PDF 导出在 Phase 2/3 计划中) |
| 标注系统 | DimAnnotation + QPainter 叠加层:自研 3D 尺寸标注(ISO/ASME 箭头) |
| 语义解析 | SemanticExtractor:GDT 形位公差检测、粗糙度、焊接符号、标题栏解析 |
3.4.5. 综合关联度评分
| 维度 | 评分 | 说明 |
|---|
| 数据交换(读取) | ⭐⭐⭐⭐☆ | STEP 读取是核心功能,但用 cascadio 主路径 |
| 几何内核 | ⭐⭐☆☆☆ | pythonOCC 仅做读取+测量,不做建模 |
| 可视化 | ⭐☆☆☆☆ | 完全自研,与 OCCT Visualization 无关 |
| 应用框架 | ⭐☆☆☆☆ | 完全自研 |
| 建模能力 | ☆☆☆☆☆ | 无布尔运算、倒角、偏移等 |
| GUI 集成 | ☆☆☆☆☆ | 独立 PyQt6,不走 OCCT Qt 层 |
总体关联度:约 15% — QuoteApp 只"消费"了 OCCT 数据交换层的一小部分(STEP 读取),其他 85% 完全自研或使用其他库(trimesh、ezdxf、PyMuPDF、PaddleOCR)。
3.4.6. 技术栈对比一览
| 维度 | OCCT 架构 | QuoteApp 实现 |
|---|
| 语言 | C++ | Python 3.13 |
| 几何内核 | B-Rep(精确几何) | 三角网格(近似几何) |
| 建模能力 | 布尔运算/倒角/偏移/扫掠 | 无(只读) |
| 数据格式 | STEP/IGES/STL/VRML | 读取 STEP/DXF/PDF,无写出 |
| 渲染 | OpenCascade Visualization | 自研 OpenGL(三级降级) |
| UI 框架 | Qt/MFC/.NET 抽象层 | PyQt6(直接使用) |
| 数据持久化 | OCAF 文档模型 | SQLite |
| OCR | 无 | PaddleOCR / OpenVINO |
| AI 能力 | 无 | Gemma4 本地 LLM |
3.4.7. 架构关系图
┌─────────────────────────────────────────────────┐
│ QuoteApp 应用层 │
│ 报价引擎 │ OCR 语义解析 │ 3D 标注 │ AI 辅助 │
├─────────────────────────────────────────────────┤
│ PyQt6 GUI(自研面板系统) │
├──────────────┬──────────────────────────────────┤
│ 自研 │ 第三方依赖 │
│ GL3DWidget │ trimesh │ ezdxf │ PyMuPDF │
│ (OpenGL) │ cascadio │ PaddleOCR │
├──────────────┴──────────────────────────────────┤
│ pythonocc-core(可选路径) │
│ ┌──────────────────────────────────────────┐ │
│ │ OCCT Data Exchange ◄── STEP 读取 │ │
│ │ OCCT Mesh ◄── BRep 三角化 │ │
│ │ OCCT Modeling Data ◄── 拓扑遍历 │ │
│ │ OCCT Foundation ◄── 基础类 │ │
│ └──────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ Python 3.13 + SQLite │
└─────────────────────────────────────────────────┘
3.4.8. 小结
QuoteApp 是 OCCT 生态的下游消费者,不是上层应用。它从 OCCT "吸"了一根管子(STEP 文件读取),但自己搭建了完整的渲染引擎、标注系统、语义解析和报价引擎。
如果要升级 OCCT 关联度(比如增加建模编辑能力),需要引入 BRep 建模 API,这是一个架构级别的变化。
3.5 13步成本公式链
净重 = 体积 × 密度
→ 用料重量 = 净重 × 1.15(余量系数)
→ 材料费 = 用料重量 × 单价
→ 加工费 = Σ(11道工序成本)
→ 辅助费 = 用户勾选辅料合计
→ 产品成本 = 材料费 + 加工费 + 辅助费
→ 管销费 = 产品成本 × 2.88%
→ 利润 = 产品成本 × 13%
→ 不含税价 = 产品成本 + 管销费 + 利润
→ 税额 = 不含税价 × 13%增值税
→ 含税单价 = 不含税价 + 税额
→ 含税总额 = 含税单价 × 数量
3.6 数据库 ER 核心关系
materials (材料库, 19种预设)
↑ FK
quote_records (报价记录, 含几何JSON/工序JSON快照)
↑ FK
weld_annotations (焊缝标注, 独立表)
process_params (21道工序参数, DB可校准)
quota_formula_params (31个定额公式系数, 用户可调)
auxiliary_costs (20项辅材费用)
四、功能清单与模块映射
4.1 六大核心子系统
| # | 子系统 | 核心文件 | 代码行数 | 功能描述 |
|---|
| 1 | 图纸解析引擎 | geometry_extractor.py | 1,915 | 7种格式·三级回退·几何特征提取 |
| 2 | 预览引擎 | preview_engine.py + gl_3d_widget.py + view_cube_widget.py | 3,662 | 三级OpenGL·ViewCube·2D/3D |
| 3 | 成本核算引擎 | cost_calculator.py + process_engine.py + process_engine_v2.py + quota_formulas.py | 2,433 | 13步公式链·11道工序·定额手册系数 |
| 4 | 语义解析引擎 | semantic/ 9个文件 | 3,202 | GDT·焊缝·粗糙度·标题栏·技术要求 |
| 5 | AI 推理引擎 | gemma4_validator.py + aliyun_bailian_validator.py | 1,108 | Gemma本地·百炼云端·Ollama |
| 6 | 报价生成引擎 | quote_generator.py | 1,256 | Excel 14列·Word 6区·单件+批量 |
4.2 UI 组件全景(31个文件,16,737行)
| 模块 | 文件 | 行数 | 功能 |
|---|
| 3D 视图 | gl_3d_widget.py | 2,316 | OpenGL 三级渲染,Arcball 交互 |
| 报价面板 | quote_panel.py | 1,588 | 单件报价编辑工作台 |
| 设置面板 | settings_panel.py | 1,232 | 全局参数配置 |
| 预览面板 | preview_panel.py | 1,194 | 2D/3D 混合预览 |
| 批量报价 | batch_quote_panel.py | 983 | 多工件批量处理 |
| 聊天组件 | chat_components.py | 848 | Markdown 渲染、气泡组件 |
| AI 聊天 | ai_chat_panel.py | 824 | 大模型对话界面 |
| 增强预览 | enhanced_preview_panel.py | 693 | 增强型预览面板 |
| ViewCube | view_cube_widget.py | 563 | CAD 风格 3D 导航 |
| 主题系统 | theme.py | 479 | 应用主题定义 |
| 软件3D | software_3d_widget.py | 479 | 软件渲染回退 |
| 模型树 | model_tree_widget.py | 395 | 树形结构+3D联动 |
| 历史面板 | history_panel.py | 401 | 报价历史查询 |
| 工艺表格 | process_table.py | ~350 | 工序编辑表格 |
| 语义审查 | semantic_review_dialog.py | ~350 | 语义解析审核 |
| 主窗口 | main_window.py | ~350 | Tab 布局/主题/DB 初始化 |
| CAD 工具栏 | cad_toolbar.py | ~300 | 测量/标注/导出 |
| 2D 预览 | dxf_2d_widget.py | ~300 | DXF 图纸显示 |
| 热处理 | heat_treat_widget.py | 402 | 热处理选择 |
| 尺寸列表 | dim_list_widget.py | 408 | 尺寸标注列表 |
4.3 语义解析模块全景(10个文件)
| 模块 | 检测内容 | 检测策略 | 精度策略 |
|---|
| GDT 检测 | 14种 GD&T 符号 | YOLOv8 → OpenCV → 正则(三级) | |
| 焊缝检测 | 7种焊缝类型 | YOLOv8 → OpenCV → 正则(三级) | |
| 粗糙度检测 | Ra/Rz 数值 | 正则匹配 | |
| 标题栏解析 | 图号/名称/材料/比例/日期 | PaddleOCR表格 → 向量 → 正则(三级) | |
| 技术要求解析 | 热处理/涂层/检验 | 规则引擎 + AI 智能分类 | |
4.4 打包与部署功能
| 功能 | 说明 |
|---|
| PyInstaller 打包 | 6.19.0,单 EXE |
| zipapp 打包 | __main__.py 入口 |
| CLI 无头模式 | --cli --input --output --batch |
| UPX 压缩 | 启用 |
| 排除大依赖 | torch/paddlepaddle/scipy 等 |
| 控制台模式 | console=False 纯窗口 |
五、代码规模全景
5.1 全局统计
| 统计项 | 数值 |
|---|
| 项目总文件数(源码) | 278 |
| Python 文件数(项目源码) | 129 |
| Python 代码总行数 | 37,261 |
| Markdown 文档数 | 50 |
| Markdown 文档总行数 | 16,397 |
| Git 提交数 | 70 |
| 代码变更 | +45,421 / -722(212 files changed) |
5.2 按目录代码分布
| 目录 | .py 文件数 | 代码行数 | 占比 |
|---|
核心源码 src/ | 61 | 28,186 | 75.6% |
├─ src/ui/ | 31 | 16,737 | 44.9% |
├─ src/core/ | 13 | 7,410 | 19.9% |
├─ src/core/semantic/ | 10 | 3,202 | 8.6% |
└─ src/models/ | 6 | 837 | 2.2% |
| 根目录(打包/测试脚本) | 54 | 6,219 | 16.7% |
tests/ | 7 | 1,000 | 2.7% |
scripts/automation/ | 5 | 1,621 | 4.3% |
hooks/ + migrations/ | 2 | 235 | 0.6% |
| 合计 | 129 | 37,261 | 100% |
5.3 最大源文件 TOP 15
| 排名 | 文件 | 行数 | 模块归属 |
|---|
| 1 | src/ui/gl_3d_widget.py | 2,316 | UI-3D渲染 |
| 2 | src/core/geometry_extractor.py | 1,915 | 核心-图纸解析 |
| 3 | src/ui/quote_panel.py | 1,588 | UI-报价面板 |
| 4 | src/core/quote_generator.py | 1,256 | 核心-报价生成 |
| 5 | src/ui/settings_panel.py | 1,232 | UI-设置面板 |
| 6 | src/ui/preview_panel.py | 1,194 | UI-预览面板 |
| 7 | src/ui/batch_quote_panel.py | 983 | UI-批量报价 |
| 8 | src/core/cost_calculator.py | 877 | 核心-成本核算 |
| 9 | src/ui/chat_components.py | 848 | UI-聊天组件 |
| 10 | src/ui/ai_chat_panel.py | 824 | UI-AI对话 |
| 11 | src/core/preview_engine.py | 783 | 核心-预览引擎 |
| 12 | src/ui/enhanced_preview_panel.py | 693 | UI-增强预览 |
| 13 | src/core/semantic/title_block_parser.py | 655 | 语义-标题栏 |
| 14 | src/core/semantic/aliyun_bailian_validator.py | 567 | 语义-百炼API |
| 15 | src/ui/view_cube_widget.py | 563 | UI-ViewCube |
5.4 代码复杂度分析要点
- UI 层占比 44.9%,是整个项目最庞大的模块,表明 PyQt6 开发效率较高但 UI 逻辑占比大
- gl_3d_widget.py(2,316行)是单体最大文件,建议未来拆分
- geometry_extractor.py(1,915行)承载7种格式解析逻辑,复杂度高,建议按格式拆分
- core/semantic/ 共10个文件但仅3,202行,模块化程度较好
- models/ 仅837行/6个文件,ORM 设计简洁
六、侧端推理链路
6.1 推理链路总览
PDF/DXF 输入 ──────────────────────────────────────────────────┐
↓ │
┌──────────────────────────────────────────────────────────┐ │
│ 语义解析链路(全本地推理) │ │
│ │ │
│ ① PaddleOCR-Table(文字检测+表格识别)← OpenVINO 加速 │ │
│ ↓ │ │
│ ② Gemma-4-E2B 验证器(Level 0,可选) │ │
│ ├─ 标题栏验证:图号/名称/材料/比例 │ │
│ ├─ 材质语义理解:材料牌号智能匹配 │ │
│ └─ 技术要求分类:热处理/涂层/检验等 │ │
│ ↓ │ │
│ ③ YOLOv8(可选)—— 符号检测 │ │
│ ├─ GDT 检测器:14种形位公差符号 │ │
│ └─ 焊缝检测器:7种焊缝类型 │ │
│ ↓ ↓ │ │
│ ④ OpenCV 模板匹配(二级回退) │ │
│ ↓ ↓ │ │
│ ⑤ 正则匹配(三级兜底) │ │
│ │ │
└──────────────────────────────────────────────────────────┘ │
↓ │
┌──────────────────────────────────────────────────────────┐ │
│ AI 工艺助手链路(混合推理) │ │
│ │ │
│ ① 本地推理:Gemma-4-E2B(GGUF, ~2.5GB) │ │
│ ├─ llama-cpp-python 加载 │ │
│ ├─ 工艺路线规划:根据几何特征推断加工工序 │ │
│ └─ 工序工时估算:基于语义理解输出工时 │ │
│ │ │
│ ② 云端推理:阿里百炼 Qwen-Plus │ │
│ ├─ SSE 流式输出(流式追加) │ │
│ └─ 工艺知识对话 │ │
│ │ │
│ ③ Ollama 本地替代(2026-04 新增) │ │
│ └─ 替代百炼 API 的本地部署方案 │ │
└──────────────────────────────────────────────────────────┘ │
↓ │
┌──────────────────────────────────────────────────────────┐ │
│ 成本核算链路(纯规则引擎,无AI) │ │
│ 定额手册公式库(31个公式系数,DB可校准) │ │
│ 输入:GeometryFeatures + 语义字段 → 输出:报价单 │ │
└──────────────────────────────────────────────────────────┘ │
↓ │
报价单输出(Excel/Word) ◄─────────────────┘
6.2 本地 AI 模型规格
| 模型 | 规格 | 推理框架 | 存储路径 | 用途 |
|---|
| Gemma-4-E2B-it-GGUF | Q4_K_M, ~2.5GB | llama-cpp-python | models/gemma-4-2b-it-vision-q4_k_m.gguf | 工艺规划+工时估算+语义验证 |
| PaddleOCR | 轻量,~20MB | PaddleOCR + OpenVINO | 内置 | 文字检测与表格识别 |
| YOLOv8-GDT(可选) | 定制,~45MB | ultralytics | models/ | GDT 符号检测 |
| YOLOv8-WELD(可选) | 定制,~45MB | ultralytics | models/ | 焊缝符号检测 |
| Ollama 模型 | 用户自选 | Ollama | 系统级 | 替代云端推理 |
6.3 推理性能特征
| 推理步骤 | 延迟 | 依赖项 | 可选/必需 |
|---|
| PaddleOCR(单页) | 1~3s | paddlepaddle-gpu/openvino | 必需(已打包) |
| OpenVINO 加速 | -10~30% 耗时 | openvino | 可选 |
| Gemma-4 (2B) CPU 推理 | 2~5s/次 | llama-cpp-python | 可选(Level 0) |
| YOLOv8 检测 | 0.5~2s/页 | ultralytics | 可选(未打包) |
| 阿里百炼 API | 5~15s/次(网络) | requests + SSE | 可选 |
| 纯规则引擎核算 | <0.1s | 无外部依赖 | 必需 |
6.4 侧端推理特点总结
- 三级回退策略 — 每层推理结果不达标时自动降级,保证高可用性
- 全本地推理能力 — PaddleOCR + OpenVINO 可在无 GPU 设备上运行
- 双 AI 引擎互补 — Gemma 本地(离线·隐私·低延迟)+ 百炼云端(在线·强能力·流式)
- 规则引擎兜底 — 核心报价流程不依赖任何 AI 模型,AI 为增强而非必需
- 可选依赖设计 — YOLOv8 / Gemma 等大模型均为
try/except 导入,缺失不影响核心功能
七、模型特征分析
7.1 领域模型概览
| 模型 | 类型 | 输入 | 输出 |
|---|
| GeometryFeatures | 数据类 | 图纸解析结果 | 核算引擎输入 |
| ProcessItem | 数据类 | 工艺推断结果 | 工序明细表 |
| QuoteSummary | 数据类 | 成本核算结果 | 报价单数据 |
| GDTAnnotation | 数据类 | GDT 检测 | 语义审核展示 |
| WeldAnnotation | 数据类 | 焊缝检测 | 语义审核展示 |
| ExtendedGeometryFeatures | 数据类 | 语义增强解析 | V2 工艺引擎输入 |
7.2 数据模型特征
materials (19种预设材料)
├── name/density/price_per_kg/category
└── 预置:铝合金3种 + 碳钢4种 + 不锈钢3种 + 模具钢6种 + 铜合金3种
quote_records (快照设计)
├── drawing_no / part_name / material_id (外键)
├── weight_material_kg / weight_net_kg
├── material_cost / process_cost / aux_cost
├── management_fee / profit / tax_amount
├── unit_price_ex_tax / unit_price_inc_tax
├── process_detail_json (工序快照)
├── geometry_info_json (几何快照)
└── 语义增强字段:tightest_tolerance/ra/has_weld/title_block_json...
process_params (21道工序参数)
├── process_code / name / price_per_hour
├── base_time_coefficient / complexity_factor / formula_type
quota_formula_params (31个定额公式系数)
├── process_code / param_name / param_value (DB可校准)
└── default_value / machine_model / material_type
auxiliary_costs (20项辅材)
├── name / category / unit_price / unit
└── 预置:刀具/冷却液/砂轮/量具/包装等
7.3 模型约束与假设
| 约束/假设 | 说明 | 影响范围 |
|---|
| 材料密度为零 → 重量计算异常 | 输入校验 | 报价准确性 |
| 手工覆写标记(绿色底色) | is_manual_override=True | 报价一致性 |
| 历史快照设计 | 报价时快照存储,不受参数变更影响 | 数据一致性 |
| 置信度 < 0.6 → 高亮提示 | 用户手工复核 | 用户体验 |
| 利润率校验(<0% 或 >200%) | 预警提示 | 报价合理性 |
| 孔径分段 11 段(HCB 标准) | 固定分段 | 孔加工工时计算 |
八、Git 日志可视化与分析
8.1 提交时间线
2026-03-27 ████████████████████████████ 19 commits (启动+基础框架)
2026-03-28 ████ 4 commits (OpenVINO+PaddleOCR)
2026-03-29 █████ 5 commits (批量报价+功能优化)
2026-03-30 ███ 3 commits (Claw技能调用)
2026-03-31 █████ 5 commits (2D/3D显示+OpenGL)
2026-04-01 ████ 4 commits (测试优化)
2026-04-02 ██ 2 commits (测试优化)
2026-04-04 ███ 3 commits (Gemma-4-E2B集成)
2026-04-05 ███ 3 commits (AI工艺规划+工时估算)
2026-04-06 ████ 4 commits (百炼API+项目总结)
2026-04-11 █ 1 commit (测试优化)
2026-04-16 ████ 4 commits (ViewCube/CAD工具栏)
2026-04-17-29 (子模块/分离阶段)
2026-04-30 ███ 3 commits (模型渲染UI+打包测试)
2026-05-01 ████ 4 commits (打包配置+修复)
8.2 月度提交分布
| 月份 | 提交数 | 关键事件 |
|---|
| 2026-03 (3月27~31日) | 20 | 项目启动+基础框架+OpenVINO+PaddleOCR+批量报价 |
| 2026-04 (4月) | 47 | AI集成+3D优化+语义解析+ViewCube+修复 |
| 2026-05 (5月1日) | 3 | 打包配置最终优化 |
8.3 提交类型分析
| 类型 | 数量 | 占比 | 典型提交 |
|---|
| 测试/问题优化 | ~30 | ~43% | “测试问题优化”, “测试验证优化” |
| 功能开发 | ~20 | ~29% | “增加Gemma-4-E2B”, “集成OpenVINO” |
| 3D/渲染优化 | ~10 | ~14% | “三维渲染测试优化”, “模型渲染问题优化” |
| AI 集成 | ~6 | ~9% | “增加阿里百炼”, “Ollama模型支持” |
| 打包/部署 | ~4 | ~6% | “更新打包配置”, “修复打包后运行报错” |
8.4 文件变更频率 TOP 10
| 文件 | 变更次数 | 说明 |
|---|
src/ui/quote_panel.py | 19 | 报价面板最活跃 |
src/ui/gl_3d_widget.py | 19 | 3D渲染持续迭代 |
src/ui/preview_panel.py | 14 | 预览面板 |
build.spec | 14 | 打包配置高频调整 |
src/ui/settings_panel.py | 12 | 设置面板 |
src/core/geometry_extractor.py | 11 | 图纸解析 |
src/core/preview_engine.py | 9 | 预览引擎 |
setup.py | 9 | 打包脚本 |
src/ui/ai_chat_panel.py | 8 | AI对话 |
requirements.txt | 8 | 依赖管理 |
8.5 开发节奏特征
- 高强度前7天(3/274/2):完成基础框架→OpenVINO→批量报价→Claw→2D/3D显示,日均57次提交
- AI 集成阶段(4/4~4/6):3天完成 Gemma-4 下载→集成→工艺规划→百炼API,日均3~4次提交
- 修复打磨阶段(4/11~5/1):以测试优化、3D修复、打包问题为主
- 单人开发模式:100% commit 来自 david_232656,无协作痕迹
- 分支单一:仅
main 分支,所有开发直接在主线进行
九、风险与优化建议
9.1 技术债务清单
| 风险项 | 严重度 | 说明 | 建议 |
|---|
| 单一main分支开发 | 🔴 高 | 所有开发直接在主线进行,无feature/develop分支 | 引入 Git Flow 或 Trunk-based 策略 |
| UI层过于庞大 | 🟡 中 | gl_3d_widget.py (2,316行) 单体过大 | 拆分为 renderer/, interaction/, shader/ 子模块 |
| geometry_extractor.py | 🟡 中 | 1,915行承载7种格式解析逻辑 | 按格式拆分为独立解析器(step_parser.py, stl_parser.py…) |
| 错误处理统一性 | 🟡 中 | try/except ImportError 分散在各处 | 抽取统一依赖检测框架 |
| 测试覆盖率低 | 🟡 中 | 仅7个测试文件,1,000行,远低于源码规模37K | 增加单元测试,目标覆盖核心公式链 |
| Windows 路径硬编码 | 🟢 低 | 部分路径处理假设 Windows 环境 | 使用 pathlib 替代字符串拼接 |
| ORM 迁移版本管理 | 🟢 低 | 仅1次迁移(002_add_semantic_fields) | 引入 Alembic 管理 Schema 版本 |
9.2 性能风险
| 风险项 | 描述 | 缓解建议 |
|---|
| 大 STEP 文件解析 | >50MB 文件耗时 >30秒 | 增加进度条 + 取消按钮 |
| CPU 推理延迟 | Gemma 2B CPU 推理 2~5s | 增加缓存机制,预加载模型 |
| 打包体积 | 690MB 分发 | 按功能模块拆分可选组件 |
| 多模型内存占用 | PaddleOCR + OpenVINO + Gemma 同时加载 | 懒加载 + 按需卸载 |
9.3 功能缺失评估
| 缺失功能 | 影响 | 建议优先级 |
|---|
| DWG 格式 ODA 集成不稳定 | 部分用户图纸无法解析 | P0 |
| 表面粗糙度语义识别 | 影响精加工工时精度±25% | P1 |
| 形位公差语义识别 | 精密件报价精度不足 | P1 |
| 多用户/权限管理 | 无法区分不同用户的报价 | P2 |
| MES/ERP 对接接口 | 无法接入工厂上游系统 | P2 |
| 在线采购平台对接 | 无法直连 meviy/怡合达等平台 | P3 |
十、迭代路线图建议
10.1 短期修复(2周)
| 任务 | 目标 | 工作项 |
|---|
| 代码重构 | 解耦单体文件 | 拆分 gl_3d_widget (2.3K行) → renderer/ + interaction/ |
| | 拆分 geometry_extractor (1.9K行) → 格式独立解析器 |
| 测试强化 | 提升覆盖率至40%+ | 核心公式链单元测试、UI 集成测试 |
| 打包优化 | 缩减分发体积 | 按需排除、可选组件分离 |
10.2 中期增强(1~2月)
| 任务 | 目标 | 工作项 |
|---|
| 语义增强 v2 | 提升非3D文件精度 | 表面粗糙度识别、形位公差识别 |
| AI 模型迭代 | 提升推理准确率 | Gemma 微调 + RAG 知识库嵌入 |
| DWG 解析加固 | 兼容性提升 | ODA 路径优化 + 错误恢复 |
| 批量报价增强 | 批量处理效率 | 多线程解析、ZIP目录批量处理 |
10.3 长期演进(2~4月)
| 任务 | 目标 | 工作项 |
|---|
| 多租户支持 | 多用户数据隔离 | 用户管理 + 权限体系 |
| 云端协同 | 数据同步 | 可选云端存储 + 报价共享 |
| Web 版本 | 拓宽平台 | FastAPI 后端 + Vue 3 前端(配套 digitmold.com) |
| 专业定额扩展 | 行业定制 | 冲压/注塑/铸造定额公式库 |
| MES/ERP 对接 | 企业级集成 | REST API + WebHook 推送 |
附录 A:技术栈完整清单
| 类别 | 技术 | 版本 |
|---|
| 语言 | Python | 3.13 (conda) |
| GUI | PyQt6 | 6.6.1 |
| 3D 渲染 | PyOpenGL / OpenGL | 3.3 Core / 2.1 |
| 3D 解析 | pythonOCC (可选) + trimesh + cascadio | - |
| 2D 解析 | ezdxf + ODA | - |
| PDF 解析 | pymupdf + pdfplumber | - |
| OCR | PaddleOCR + OpenVINO | - |
| 数据库 | SQLite + SQLAlchemy 2.0 ORM | 2.0+ |
| 报表导出 | openpyxl + python-docx | - |
| 本地 AI | llama-cpp-python (Gemma-4 GGUF) | - |
| 云端 AI | 阿里百炼 API (Qwen-Plus) | - |
| YOLO | ultralytics (可选) | - |
| 打包 | PyInstaller | 6.19.0 |
| 数学计算 | NumPy | 1.26+ |
| 部署形态 | EXE (~30MB) / 总包 (~690MB) | UPX 压缩 |
附录 B:项目文件索引
| 类别 | 文件 | 路径 |
|---|
| 入口 | __main__.py | 根目录 (zipapp) |
| 入口 | main.py | 根目录 (GUI/CLI双模式) |
| 核心文档 | DESIGN.md | 系统架构设计 |
| 核心文档 | REQUIREMENT.md | 需求分析 |
| 核心文档 | BUSINESS_RULES.md | 1156行业务规则规范 |
| 核心文档 | QUOTA_ENGINE_DESIGN.md | 工时定额公式集成设计 |
| 总结 | QuoteApp_项目成果总结.md | 完整成果总结 |
| 总结 | 全链路开发项目总结报告.md | 中期总结 |
所有评论(0)