附图报价系统设计分析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 日志可视化与分析](#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 分钟内,无需资深工艺师
- 收入来源:未明确(推测为企业内部工具 / 打包销售 / 配套 digitmold.com 电商平台)
- 交付模式:单 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 |
中期总结 |