docs: add BIPUploadModule flowchart documentation
Add comprehensive flowchart documentation for BIPUploadModule: - Simplified main flow diagram for management review - Detailed ProcessOrdersToBIP flowchart - ProcessSingleOrder sub-process flowchart - WriteBatchData batch write flowchart - Data structure specifications - Key features and performance optimizations - Execution examples (normal and error cases) - Related modules and dependencies Documentation uses Mermaid diagrams for visualization with proper bracket escaping for compatibility. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
226
docs/BIPUploadModule流程图.md
Normal file
226
docs/BIPUploadModule流程图.md
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
# BIPUploadModule 流程图文档
|
||||||
|
|
||||||
|
## 模块概述
|
||||||
|
|
||||||
|
**模块名**: BIPUploadModule
|
||||||
|
**功能**: 处理产品订单数据,提取BOM后生成[BIP上传模板]格式数据
|
||||||
|
**主入口**: ProcessOrdersToBIP
|
||||||
|
|
||||||
|
## ProcessOrdersToBIP 流程图(简化版)
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
Start([开始处理]) --> Init["初始化<br/>1. 获取工作表<br/>2. 加载BOM库"]
|
||||||
|
|
||||||
|
Init --> Loop["循环处理每个订单"]
|
||||||
|
|
||||||
|
Loop --> Read["读取订单信息<br/>- 生产订单号<br/>- 产品型号<br/>- 数量<br/>- 产品编码<br/>- 部件优先标志"]
|
||||||
|
|
||||||
|
Read --> Parse["解析产品型号<br/>提取规格参数"]
|
||||||
|
|
||||||
|
Parse --> Extract["提取BOM物料<br/>根据规格参数匹配物料库"]
|
||||||
|
|
||||||
|
Extract --> CheckPriority{"部件优先=否?"}
|
||||||
|
CheckPriority -->|是| SkipComponent["排除'部件'类别<br/>只提取子类别物料"]
|
||||||
|
CheckPriority -->|否| KeepAll["保留所有物料"]
|
||||||
|
SkipComponent --> Generate
|
||||||
|
KeepAll --> Generate["生成BIP上传数据<br/>- 订单信息<br/>- 物料清单<br/>- 行号编码"]
|
||||||
|
|
||||||
|
Generate --> Collect["收集到内存集合"]
|
||||||
|
|
||||||
|
Collect --> NextOrder{"还有订单?"}
|
||||||
|
NextOrder -->|是| Loop
|
||||||
|
NextOrder -->|否| BatchWrite["批量写入[BIP上传模板]"]
|
||||||
|
|
||||||
|
BatchWrite --> Format["格式化表格"]
|
||||||
|
|
||||||
|
Format --> End([完成])
|
||||||
|
|
||||||
|
style Init fill:#e1f5e1
|
||||||
|
style Parse fill:#fff3cd
|
||||||
|
style Extract fill:#d1ecf1
|
||||||
|
style Generate fill:#d1ecf1
|
||||||
|
style BatchWrite fill:#f8d7da
|
||||||
|
style End fill:#e1f5e1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ProcessSingleOrder 子流程(详细版)
|
||||||
|
|
||||||
|
> 注:以下为技术人员提供详细流程图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
Start([开始 ProcessSingleOrder]) --> ClearExclude["清空排除类别<br/>ClearExcludeCategories"]
|
||||||
|
|
||||||
|
ClearExclude --> CheckPriority{"部件优先?"}
|
||||||
|
CheckPriority -->|否/0/FALSE| AddExclude["创建排除类别集合<br/>添加: 部件"]
|
||||||
|
AddExclude --> SetExclude["设置排除类别"]
|
||||||
|
SetExclude --> ParseModel
|
||||||
|
CheckPriority -->|是| ParseModel["解析产品型号<br/>ProductModelParser.Parse"]
|
||||||
|
|
||||||
|
ParseModel --> CheckParse{"解析成功?"}
|
||||||
|
CheckParse -->|否| CreateError1["创建错误行数据<br/>备注: 解析失败信息"]
|
||||||
|
CreateError1 --> AddError1["添加到outputData"] --> End1([返回])
|
||||||
|
|
||||||
|
CheckParse -->|是| ExtractBOM["提取BOM<br/>BomExtractor.ExtractBom"]
|
||||||
|
ExtractBOM --> GetErrors["获取错误信息摘要"]
|
||||||
|
|
||||||
|
GetErrors --> CheckMatch{"匹配到物料?"}
|
||||||
|
CheckMatch -->|否| SetError1["设置备注: 未匹配到任何物料"]
|
||||||
|
SetError1 --> CreateError2["创建空记录行数据"]
|
||||||
|
CreateError2 --> AddError2["添加到outputData"] --> End2([返回])
|
||||||
|
|
||||||
|
CheckMatch -->|是| InitLine["初始化行号索引 lineIndex = 1"]
|
||||||
|
InitLine --> StartLoop["开始循环物料"]
|
||||||
|
|
||||||
|
StartLoop --> GetItem["获取物料项"]
|
||||||
|
GetItem --> InitNote["初始化备注 = 提取错误"]
|
||||||
|
|
||||||
|
InitNote --> CheckItemError{"物料有错误?"}
|
||||||
|
CheckItemError -->|是| AppendError["追加物料错误信息"]
|
||||||
|
CheckItemError -->|否| CreateRow
|
||||||
|
AppendError --> CreateRow["创建BIP行数据<br/>CreateBIPRowArray"]
|
||||||
|
|
||||||
|
CreateRow --> AddRow["添加到outputData"]
|
||||||
|
AddRow --> IncLine["lineIndex++"]
|
||||||
|
IncLine --> NextLoop{"还有物料?"}
|
||||||
|
NextLoop -->|是| StartLoop
|
||||||
|
NextLoop -->|否| End3([返回])
|
||||||
|
```
|
||||||
|
|
||||||
|
## WriteBatchData 批量写入流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
Start([开始 WriteBatchData]) --> CheckData{"outputData为空?"}
|
||||||
|
CheckData -->|是| End1([直接返回])
|
||||||
|
CheckData -->|否| GetRowCount["获取行数 rowCount"]
|
||||||
|
|
||||||
|
GetRowCount --> CreateArray["创建二维数组<br/>resultData1 to rowCount, 1 to 10"]
|
||||||
|
|
||||||
|
CreateArray --> StartLoop["开始循环: i = 1 to rowCount"]
|
||||||
|
StartLoop --> GetRowArray["获取行数组 rowArray = outputDatai"]
|
||||||
|
|
||||||
|
GetRowArray --> FillArray["填充二维数组<br/>resultDatai, 1 to 10 = rowArray1 to 10"]
|
||||||
|
FillArray --> NextLoop{"i++ 还有数据?"}
|
||||||
|
NextLoop -->|是| StartLoop
|
||||||
|
NextLoop -->|否| WriteSheet["一次性写入工作表<br/>A2单元格.Resize rowCount, 10"]
|
||||||
|
|
||||||
|
WriteSheet --> End([完成])
|
||||||
|
```
|
||||||
|
|
||||||
|
## 数据结构说明
|
||||||
|
|
||||||
|
### BIP上传模板字段 (10列)
|
||||||
|
|
||||||
|
| 列号 | 字段名 | 说明 | 数据来源 |
|
||||||
|
|------|--------|------|----------|
|
||||||
|
| 1 | 来源单据号(生产订单号) | 订单唯一标识 | [产品订单] A列 |
|
||||||
|
| 2 | 产品编码 | 产品代码 | [产品订单] D列 |
|
||||||
|
| 3 | 生产数量 | 生产数量 | [产品订单] C列 |
|
||||||
|
| 4 | 行号 | BOM行号 = 7000 + 索引 | 自动生成(7001, 7002...) |
|
||||||
|
| 5 | 材料编码 | 物料66编码 | BOM提取结果 |
|
||||||
|
| 6 | 供应方式 | 固定值 | "一般发料" |
|
||||||
|
| 7 | 需用日期 | 日期 | 当天日期 Date |
|
||||||
|
| 8 | 发料组织 | 固定值 | "重庆布莱迪仪器仪表有限公司" |
|
||||||
|
| 9 | 计划出库数量 | 数量 | 与生产数量一致 |
|
||||||
|
| 10 | 备注 | 异常信息 | BOM提取错误/异常 |
|
||||||
|
|
||||||
|
### [产品订单] 工作表结构 (5列)
|
||||||
|
|
||||||
|
| 列号 | 字段名 | 说明 | 必填 |
|
||||||
|
|------|--------|------|------|
|
||||||
|
| A | 生产订单号 | 订单唯一标识 | 是 |
|
||||||
|
| B | 产品型号 | 产品完整型号 | 是 |
|
||||||
|
| C | 数量 | 生产数量 | 是 |
|
||||||
|
| D | 产品编码 | 产品代码 | 否 |
|
||||||
|
| E | 部件优先 | 是否优先提取部件类别 | 否 |
|
||||||
|
|
||||||
|
## 关键特性
|
||||||
|
|
||||||
|
### 1. 性能优化
|
||||||
|
- **批量写入**: 使用数组一次性写入所有数据,而非逐个单元格写入
|
||||||
|
- **内存缓存**: 所有数据先收集到Collection对象,最后统一输出
|
||||||
|
- **预期性能提升**: 10-100倍(取决于数据量)
|
||||||
|
|
||||||
|
### 2. 部件优先功能
|
||||||
|
- 当`部件优先` = "否"/"0"/"FALSE"时:
|
||||||
|
- 排除"部件"类别的物料
|
||||||
|
- 只提取"部件"的子类别物料(如"接头"、"弹性元件"等)
|
||||||
|
- 当`部件优先` = "是"或其他值时:
|
||||||
|
- 正常提取所有物料,包括"部件"类别及其子类别
|
||||||
|
|
||||||
|
### 3. 错误处理
|
||||||
|
- **必填字段验证**: 生产订单号、产品型号、数量
|
||||||
|
- **解析失败处理**: 记录错误信息到备注列
|
||||||
|
- **BOM提取异常**: 记录匹配失败和异常信息
|
||||||
|
- **空行处理**: 自动跳过完全空白的行
|
||||||
|
|
||||||
|
### 4. 数据完整性
|
||||||
|
- 每次运行前清空旧数据(保留表头)
|
||||||
|
- 自动创建[BIP上传模板]工作表(如不存在)
|
||||||
|
- 行号自动生成(7001, 7002, 7003...)
|
||||||
|
- 日期自动填充为当天日期
|
||||||
|
|
||||||
|
## 执行示例
|
||||||
|
|
||||||
|
### 正常流程示例
|
||||||
|
|
||||||
|
```
|
||||||
|
输入: [产品订单] 3行数据
|
||||||
|
- 订单001, 型号MD-100, 数量10, 编码P001, 部件优先=是
|
||||||
|
- 订单002, 型号MD-200, 数量20, 编码P002, 部件优先=否
|
||||||
|
- 订单003, 型号MD-300, 数量30, 编码P003, 部件优先=是
|
||||||
|
|
||||||
|
处理流程:
|
||||||
|
1. 读取3行订单数据
|
||||||
|
2. 逐个解析产品型号
|
||||||
|
3. 根据部件优先设置提取BOM
|
||||||
|
4. 订单001: 提取5种物料(包括部件)
|
||||||
|
5. 订单002: 提取4种物料(排除部件,只提取子类别)
|
||||||
|
6. 订单003: 提取6种物料(包括部件)
|
||||||
|
7. 批量写入15行数据到[BIP上传模板]
|
||||||
|
8. 显示完成信息: 处理3个订单,生成15行BOM数据
|
||||||
|
|
||||||
|
输出: [BIP上传模板] 15行数据
|
||||||
|
```
|
||||||
|
|
||||||
|
### 异常处理示例
|
||||||
|
|
||||||
|
```
|
||||||
|
输入: [产品订单] 包含异常数据
|
||||||
|
- 订单A01, 型号INVALID, 数量5 ← 型号解析失败
|
||||||
|
- 订单A02, 型号MD-100, 数量0 ← 未匹配到任何物料
|
||||||
|
- 订单A03, 型号MD-200, 数量10 ← 正常提取3种物料
|
||||||
|
|
||||||
|
输出:
|
||||||
|
第1行: 订单A01, ..., 备注: "解析失败: 无效的型号格式"
|
||||||
|
第2行: 订单A02, ..., 备注: "未匹配到任何物料"
|
||||||
|
第3-5行: 订单A03, 3种物料数据
|
||||||
|
```
|
||||||
|
|
||||||
|
## 相关模块
|
||||||
|
|
||||||
|
### 依赖的类模块
|
||||||
|
- **BomExtractor**: BOM提取器,负责从平台配置清单中提取匹配的物料
|
||||||
|
- **ProductModelParser**: 产品型号解析器,解析型号字符串为结构化条件
|
||||||
|
- **BomItem**: BOM物料项数据模型
|
||||||
|
- **ConditionEvaluator**: 条件评估器,评估选择条件和类别条件
|
||||||
|
|
||||||
|
### 相关模块
|
||||||
|
- **MainModule**: 主控模块,处理产品型号提取和BOM匹配
|
||||||
|
- 类似的处理逻辑
|
||||||
|
- 输出到[BOM提取结果]工作表
|
||||||
|
- 支持部件优先功能
|
||||||
|
- 使用相同的批量写入优化
|
||||||
|
|
||||||
|
## 版本历史
|
||||||
|
|
||||||
|
| 版本 | 日期 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 1.0 | 2026-02-01 | 初始版本,实现基本的订单处理和BOM提取功能 |
|
||||||
|
| 1.1 | 2026-02-01 | 添加部件优先功能,支持排除特定类别 |
|
||||||
|
| 1.2 | 2026-02-01 | 性能优化,使用数组批量写入替代逐个单元格写入 |
|
||||||
|
| 1.3 | 2026-02-01 | 修复Mermaid流程图方括号转义问题 |
|
||||||
Reference in New Issue
Block a user