### 批量传递算法
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
此算法为所有指定的颜色代码批量执行传递操作。它遍历颜色组,为每个颜色代码合并特征表达式,然后调用递归传递算法来处理每个颜色代码的传递过程。
```ALGORITHM
ALGORITHM batchPropagateColors(rootPart, colorGroups, bomStructure):
1. colorBOMResults = []
2. FOR EACH (colorCode, features) IN colorGroups:
// 合并特征表达式
featureExpression = join(features, '&')
// 为当前颜色代码执行传递
propagateColor(rootPart, colorCode, featureExpression, 1, bomStructure)
3. RETURN colorBOMResults
```
--------------------------------
### 规则优化算法
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
此算法用于优化组合后的使用规则表达式,去除其中的冗余信息。它首先分解规则表达式,然后去除重复的组件,并可选地进行排序,最后重新组合成优化后的规则。
```ALGORITHM
ALGORITHM optimizeUsageRule(combinedRule):
1. IF (combinedRule IS NULL OR combinedRule = '') THEN
RETURN NULL
2. // 分解规则表达式
ruleComponents = split(combinedRule, '&')
3. // 去重
uniqueComponents = removeDuplicates(ruleComponents)
4. // 排序(可选,便于阅读)
sortedComponents = sort(uniqueComponents)
5. // 重新组合
RETURN join(sortedComponents, '&')
```
--------------------------------
### 递归传递算法(含约束处理)
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
此算法将父零件的颜色信息递归地传递给所有子零件,同时处理颜色件和非颜色件的约束条件。它通过检查子零件是否为本色件来决定如何生成新的BOM行,并递归调用自身处理下一层级。
```ALGORITHM
ALGORITHM propagateColor(parentPart, colorCode, featureExpression, level, bomStructure, parentIsColorPart):
1. // 获取当前零件的所有子零件
childParts = getChildParts(parentPart, bomStructure)
2. FOR EACH childPart IN childParts:
// 构造父零件编码(含颜色)
parentPartWithColor = parentPart + "-" + colorCode
IF (childPart.isColorPart = 1) THEN
// 约束检查:父零件是颜色件且子零件是本色件
IF (parentIsColorPart = true) THEN
// 违反约束:子零件不扩展颜色,保持本色
createColorBOMLine(
parentPartWithColor,
childPart.partCode, // 不添加颜色后缀
childPart.lineNumber,
combineUsageRules(childPart.usageRule, featureExpression),
colorCode,
featureExpression,
level
)
// 递归处理下一层级,标记父零件为非颜色件
propagateColor(childPart.partCode, colorCode, featureExpression, level + 1, bomStructure, false)
ELSE
// 正常处理:本色件扩展颜色
childPartWithColor = childPart.partCode + "-" + colorCode
createColorBOMLine(
parentPartWithColor,
childPartWithColor,
childPart.lineNumber,
combineUsageRules(childPart.usageRule, featureExpression),
colorCode,
featureExpression,
level
)
// 递归处理下一层级,标记父零件为颜色件
propagateColor(childPart.partCode, colorCode, featureExpression, level + 1, bomStructure, true)
ELSE
// 非本色件:保持原样
createColorBOMLine(
parentPartWithColor,
childPart.partCode,
childPart.lineNumber,
childPart.usageRule,
colorCode,
featureExpression,
level
)
```
--------------------------------
### 使用规则组合算法
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
此算法用于将原BOM使用规则、颜色方案使用条件和特征约束组合成一个新的使用规则。它会检查每个规则部分是否存在,并将存在的规则组合起来,用'&'连接。
```ALGORITHM
ALGORITHM combineUsageRules(originalRule, colorSchemeRule, featureExpression):
1. ruleComponents = []
2. // 添加原BOM使用规则
IF (originalRule IS NOT NULL AND originalRule ≠ '') THEN
ruleComponents.add(originalRule)
3. // 添加颜色方案使用条件
IF (colorSchemeRule IS NOT NULL AND colorSchemeRule ≠ '') THEN
ruleComponents.add(colorSchemeRule)
4. // 添加特征约束
IF (featureExpression IS NOT NULL AND featureExpression ≠ '') THEN
ruleComponents.add(featureExpression)
5. // 组合所有规则
IF (ruleComponents.isEmpty()) THEN
RETURN NULL
ELSE
RETURN join(ruleComponents, '&')
```
--------------------------------
### 增量扩展算法
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
提供了增量扩展算法的伪代码,用于处理新增特征和颜色代码,包括变更检测、影响分析、数据保留、新增数据生成和结果合并。
```pseudocode
ALGORITHM incrementalExpansion(originalConfig, newConfig):
1. // 变更检测
changes = detectChanges(originalConfig, newConfig)
2. // 影响分析
affectedParts = analyzeImpact(changes)
3. // 保留原有数据
preserveExistingBOM(originalBOM, "无变化")
4. // 生成新增数据
FOR EACH change IN changes:
IF (change.type = "NEW_FEATURE" OR change.type = "NEW_COLOR") THEN
newBOMLines = generateIncrementalBOM(change)
markBOMLines(newBOMLines, "新增", "红色标识")
5. // 合并结果
finalBOM = merge(originalBOM, newBOMLines)
6. RETURN finalBOM
```
--------------------------------
### 新增颜色代码案例 - 新增变更
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
列出了新增G4特征后,对N1、Q1、Q21、Q3零件的颜色代码进行的具体变更。
```text
变更内容:
1. 新增G4特征,N1、Q1在G4特征下配置颜色代码D3
2. Q21在G4特征下新增颜色代码D2
3. Q3在G4特征下新增颜色代码D1
```
--------------------------------
### 增量扩展流程图
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
描绘了从原有BOM结构到新增特征操作,再到变更检测、影响范围分析,最终生成增量BOM的完整流程。
```mermaid
flowchart TD
A["A60原有颜色方案
N1-G1-D1,G2-D2,G3-D1
Q1-G1-D1,G2-D2,G3-D1"] --> B["新增G4特征操作
N1-G4-D3
Q1-G4-D3"]
B --> C[变更检测算法]
C --> D{检测到变更?}
D -->|否| E[无需处理]
D -->|是| F[识别变更范围]
F --> G[变更类型分析]
G --> H["N1新增G4特征-D3"]
G --> I["Q1新增G4特征-D3"]
H --> J[影响范围分析]
I --> J
J --> K["直接影响-N1和Q1零件"]
J --> L["间接影响-子零件层级传递"]
K --> M["保留原有BOM行
标记-无变化"]
L --> M
M --> N["生成新增BOM行
标记-红色新增"]
N --> O["新BOM行1-E01A60到N1-D3"]
N --> P["新BOM行2-Q01N1-D3到Q1-D3"]
N --> Q["新BOM行3-Q011Q1-D3到Q11"]
O --> R[最终增量BOM结构]
P --> R
Q --> R
R --> S["版本控制
支持回滚"]
style A fill:#e3f2fd
style B fill:#fff3e0
style N fill:#ffebee
style R fill:#e8f5e8
```
--------------------------------
### 零件特征映射示例
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了不同零件(N1, Q1, Q21, Q3, Q4)的特征(G1, G2, G3)如何映射到颜色代码(D1, D2, D3),并按颜色分组和合并特征。
```text
N1零件特征映射:
- G1 → D1, G2 → D2, G3 → D1
- 按颜色分组: {D1: [G1, G3], D2: [G2]}
- 特征合并: {D1: "G1&G3", D2: "G2"}
Q1零件特征映射:
- G1 → D1, G2 → D2, G3 → D1
- 按颜色分组: {D1: [G1, G3], D2: [G2]}
- 特征合并: {D1: "G1&G3", D2: "G2"}
Q21零件特征映射:
- G1 → D1, G2 → D3, G3 → D3
- 按颜色分组: {D1: [G1], D3: [G2, G3]}
- 特征合并: {D1: "G1", D3: "G2&G3"}
Q3零件特征映射:
- G1 → D2, G2 → D3
- 按颜色分组: {D2: [G1], D3: [G2]}
- 特征合并: {D2: "G1", D3: "G2"}
Q4零件特征映射:
- G1 → D1, G2 → D2
- 按颜色分组: {D1: [G1], D2: [G2]}
- 特征合并: {D1: "G1", D2: "G2"}
```
--------------------------------
### 特征合并流程图
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了如何根据零件的颜色方案配置,将具有相同颜色代码的多个特征进行合并,并生成相应的BOM行。
```mermaid
graph TD
A[零件颜色方案配置] --> B[特征-颜色代码对]
B --> C[G1:D1, G2:D2, G3:D1]
C --> D[按颜色代码分组]
D --> E[D1组: G1, G3]
D --> F[D2组: G2]
E --> G{D1组特征数量>1?}
F --> H{D2组特征数量>1?}
G -->|是| I[合并特征: G1&G3]
G -->|否| J[单独特征: G1]
H -->|是| K[合并特征: G2&G3]
H -->|否| L[单独特征: G2]
I --> M[生成BOM行1
零件-D1, 规则:原规则&G1&G3]
L --> N[生成BOM行2
零件-D2, 规则:原规则&G2]
M --> O[最终BOM结果]
N --> O
style A fill:#e3f2fd
style O fill:#e8f5e8
style G fill:#fff3e0
style H fill:#fff3e0
```
--------------------------------
### 新增颜色代码案例 - 新增后配置
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了新增G4特征和相关颜色代码后,更新的零件颜色配置情况,并标注了新增的G4特征。
```text
零件号 | BOM行号 | 使用条件 | G1 | G2 | G3 | G4
N1 | | | D1 | D2 | D1 | D3 ← 新增G4特征
Q1 | | | D1 | D2 | D1 | D3 ← 新增G4特征
Q21 | | | D1 | D3 | D3 | D2 ← 新增G4特征
Q3 | | | D2 | D3 | - | D1 ← 新增G4特征
N3 | E03 | GC01 | D2 | - | - | - ← N3不涉及G4
Q4 | | | D1 | D2 | - | - ← Q4不涉及G4
```
--------------------------------
### 算法优化策略 - 内存优化
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
提出了一系列内存优化策略,包括流式处理、分页处理和对象复用,以减少内存占用和GC压力。
```text
内存优化
1. **流式处理** - 对大批量数据采用流式处理,避免内存溢出
2. **分页处理** - 将大型BOM结构分页处理
3. **对象复用** - 复用临时对象,减少GC压力
```
--------------------------------
### 新增颜色代码案例 - 原有配置
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了在新增G4特征之前,各零件的颜色配置情况,包括零件号、BOM行号、使用条件以及G1到G3的颜色代码。
```text
零件号 | BOM行号 | 使用条件 | G1 | G2 | G3 | G4
N1 | | | D1 | D2 | D1 | -
Q1 | | | D1 | D2 | D1 | -
Q21 | | | D1 | D3 | D3 | -
Q3 | | | D2 | D3 | - | -
N3 | E03 | GC01 | D2 | - | - | -
Q4 | | | D1 | D2 | - | -
```
--------------------------------
### 算法优化策略 - 性能优化
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
提出了一系列性能优化策略,包括批量处理、缓存机制、并行处理和索引优化,以提高BOM处理的效率。
```text
性能优化
1. **批量处理** - 将相同颜色代码的零件批量处理,减少重复计算
2. **缓存机制** - 缓存已计算的特征映射结果,避免重复解析
3. **并行处理** - 对独立的BOM分支进行并行处理
4. **索引优化** - 建立零件-特征-颜色的索引,加速查询
```
--------------------------------
### BOM打散主流程图
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
描述了本色件BOM结构输入后,如何遍历BOM行、处理特征配置、收集颜色代码、合并特征以及生成新BOM行的完整流程。
```mermaid
flowchart TD
A[本色件BOM结构输入] --> B{遍历BOM行}
B --> C{是否本色件=1?}
C -->|否| D[保持原BOM行
不做颜色扩展]
C -->|是| E[获取该零件的
颜色方案配置]
E --> F[遍历特征配置
G1, G2, G3...]
F --> G{特征有颜色代码?}
G -->|否| H[跳过该特征]
G -->|是| I[收集颜色代码
按颜色分组]
I --> J{相同颜色代码
有多个特征?}
J -->|是| K[特征合并
G1&G2&G3]
J -->|否| L[单独特征
G1]
K --> M[生成新BOM行]
L --> M
M --> N[设置父零件
原父零件-颜色代码]
N --> O[设置子零件
原子零件-颜色代码]
O --> P[组合使用规则
原规则&特征约束]
P --> Q[添加到结果集]
H --> R{还有特征?}
Q --> R
R -->|是| F
R -->|否| S{还有BOM行?}
D --> S
S -->|是| B
S -->|否| T[输出颜色件BOM结构]
style A fill:#e1f5fe
style T fill:#c8e6c9
style C fill:#fff3e0
style J fill:#fff3e0
```
--------------------------------
### BOM打散验证结果
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
总结了BOM打散过程的验证结果,包括本色件打散、非本色件处理、约束验证、特征合并和使用规则组合的符合性。
```text
本色件打散 - 6个本色件(N1、Q1、Q21、Q3、N3、Q4)正确扩展为颜色件
非本色件处理 - 3个非本色件(Q11、Q2、N2)保持原状
约束验证 - 所有打散结果都符合"父子零件不能同时都是本色件"的原则:
- 颜色件父零件 → 颜色件子零件:N1-D1→Q1-D1 ✓ (符合约束)
- 颜色件父零件 → 非颜色件子零件:N1-D1→Q2 ✓ (符合约束)
- 非颜色件父零件 → 颜色件子零件:Q2→Q21-D1 ✓ (符合约束)
- 非颜色件父零件 → 颜色件子零件:N2→Q3-D2 ✓ (符合约束)
- 颜色件父零件 → 颜色件子零件:N3-D2→Q4-D1 ✓ (符合约束)
特征合并 - 相同颜色代码的特征正确合并
使用规则组合 - 使用规则正确组合
✅ 约束符合性验证:
所有打散结果都严格遵守业务约束。约束是"不能同时都是本色件",而颜色件→颜色件完全符合要求。
打散算法正确地将本色件扩展为颜色件,确保了业务规则的正确执行。
```
--------------------------------
### 完整BOM打散结果表格
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
以表格形式展示了BOM打散的详细结果,包括序号、层级、BOM行号、父零件、子零件、使用规则和生成逻辑。
```text
| 序号 | 层级 | BOM行号 | 父零件 | 子零件 | 使用规则 | 生成逻辑 |
|------|------|---------|-----------|-----------|-------------------|---------------------------------------------|
| 1 | 1 | E01 | A60 | N1-D1 | FB01&(G1&G3) | 本色件N1在G1&G3特征下=D1(特征合并) |
| 2 | 2 | Q01 | N1-D1 | Q1-D1 | G1&G3 | 本色件Q1继承父零件颜色,在G1&G3特征下=D1 |
| 3 | 3 | Q011 | Q1-D1 | Q11 | 空 | 非本色件Q11,不参与打散 |
| 4 | 2 | Q02 | N1-D1 | Q2 | 空 | 非本色件Q2,不参与打散 |
| 5 | 3 | Q021 | Q2 | Q21-D1 | G1 | 本色件Q21根据自身颜色方案在G1特征下=D1 |
| 6 | 1 | E01 | A60 | N1-D2 | FB01&G2 | 本色件N1在G2特征下=D2 |
| 7 | 2 | Q01 | N1-D2 | Q1-D2 | G2 | 本色件Q1继承父零件颜色,在G2特征下=D2 |
| 8 | 3 | Q011 | Q1-D2 | Q11 | 空 | 非本色件Q11,不参与打散 |
| 9 | 2 | Q02 | N1-D2 | Q2 | 空 | 非本色件Q2,不参与打散 |
| 10 | 3 | Q021 | Q2 | Q21-D3 | G2&G3 | 本色件Q21根据自身颜色方案在G2&G3特征下=D3 |
| 11 | 1 | E02 | A60 | N2 | FB01 | 非本色件N2,不参与打散 |
| 12 | 2 | Q03 | N2 | Q3-D2 | G1 | 本色件Q3根据自身颜色方案在G1特征下=D2 |
| 13 | 2 | Q03 | N2 | Q3-D3 | G2 | 本色件Q3根据自身颜色方案在G2特征下=D3 |
| 14 | 1 | E03 | A60 | N3-D2 | FB01&GC01&G1 | 本色件N3混合特征配置:E03=GC01, G1=D2 |
| 15 | 2 | Q04 | N3-D2 | Q4-D1 | GC01&G1 | 本色件Q4继承父零件特征,在G1特征下=D1 |
| 16 | 2 | Q04 | N3-D2 | Q4-D2 | GC01&G2 | 本色件Q4继承父零件特征,在G2特征下=D2 |
```
--------------------------------
### 跨层级颜色传递场景示例
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了当父零件有多个颜色代码时,如何正确传递给多层级的子零件,包括传递算法的执行过程和最终结果。
```text
业务描述: 当父零件有多个颜色代码时,如何正确传递给多层级的子零件。
BOM结构:
```
Level 1: A60 (整车)
├── Level 2: N1 (总成, 本色件) - 配置: G1→D1, G2→D2, G3→D1
│ ├── Level 3: Q1 (子总成, 本色件) - 配置: G1→D1, G2→D2, G3→D1
│ │ └── Level 4: Q11 (零件, 非本色件)
│ └── Level 3: Q2 (零件, 非本色件)
│ └── Level 4: Q21 (零件, 本色件) - 配置: G1→D1, G2→D3, G3→D3
```
传递算法执行:
```
第1层传递: A60 → N1
- N1-D1 (G1&G3特征合并)
- N1-D2 (G2特征)
第2层传递: N1 → Q1, Q2
- N1-D1 → Q1-D1 (Q1是本色件,扩展颜色)
- N1-D1 → Q2 (Q2是非本色件,保持原样)
- N1-D2 → Q1-D2 (Q1是本色件,扩展颜色)
- N1-D2 → Q2 (Q2是非本色件,保持原样)
第3层传递: Q1 → Q11, Q2 → Q21
- Q1-D1 → Q11 (Q11是非本色件,保持原样)
- Q1-D2 → Q11 (Q11是非本色件,保持原样)
- Q2 → Q21-D1 (Q21是本色件,根据自身方案扩展)
- Q2 → Q21-D3 (Q21是本色件,根据自身方案扩展)
```
最终结果:
```
E01|A60→N1-D1|FB01&(G1&G3)
E01|A60→N1-D2|FB01&G2
Q01|N1-D1→Q1-D1|G1&G3
Q01|N1-D2→Q1-D2|G2
Q011|Q1-D1→Q11|
Q011|Q1-D2→Q11|
Q02|N1-D1→Q2|
Q02|N1-D2→Q2|
Q021|Q2→Q21-D1|G1
Q021|Q2→Q21-D3|G2&G3
```
```
--------------------------------
### BOM打散执行示例
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
演示了如何根据零件特征映射和约束条件,对原始BOM进行打散处理,生成包含颜色代码和特征合并的BOM行。
```text
N1零件打散:
原BOM: E01|A60→N1|FB01
生成结果:
- E01|A60→N1-D1|FB01&(G1&G3)
- E01|A60→N1-D2|FB01&G2
Q1零件打散:
原BOM: Q01|N1→Q1|
父零件传递: N1-D1, N1-D2
生成结果:
- Q01|N1-D1→Q1-D1|G1&G3
- Q01|N1-D2→Q1-D2|G2
Q21零件打散:
原BOM: Q021|Q2→Q21|
父零件传递: Q2(非本色件,保持原状)
生成结果:
- Q021|Q2→Q21-D1|G1
- Q021|Q2→Q21-D3|G2&G3
Q3零件打散:
原BOM: Q03|N2→Q3|
父零件传递: N2(非本色件,保持原状)
生成结果:
- Q03|N2→Q3-D2|G1
- Q03|N2→Q3-D3|G2
Q4零件打散:
原BOM: Q04|N3→Q4|
父零件传递: N3-D2
生成结果:
- Q04|N3-D2→Q4-D1|GC01&G1
- Q04|N3-D2→Q4-D2|GC01&G2
```
--------------------------------
### 算法复杂度分析
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
分析了BOM处理算法的时间复杂度和空间复杂度,并提出了通过优化手段降低复杂度的可能性。
```text
算法复杂度
- **时间复杂度** - O(n×m×k),其中n为BOM行数,m为颜色代码数,k为特征数
- **空间复杂度** - O(n×m),主要用于存储生成的颜色件BOM
- **优化后复杂度** - 通过缓存和索引可降低到O(n×m)
```
--------------------------------
### 混合特征配置场景示例
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了零件同时配置内外饰特征和扩展特征时的处理方式,以及最终规则组合和BOM行的生成。
```text
业务描述: 零件同时配置内外饰特征和扩展特征时的处理。
配置示例:
```
零件N3配置:
- BOM行号: E03
- 扩展特征: GC01 (工艺特征)
- 内外饰特征: G1→D2
- 使用规则: FB01
```
规则组合结果:
```
最终使用规则 = FB01 & GC01 & G1
生成BOM行: E03|A60→N3-D2|FB01&GC01&G1
```
```
--------------------------------
### 增量BOM生成结果示例
Source: https://github.com/2670314264/gitrep/blob/main/颜色方案BOM打散核心算法指南.md
展示了在增量BOM生成过程中,新增的BOM行及其标识(红色),说明了特征新增和层级传递等情况。
```text
新增的BOM行(红色标识):
E01|A60→N1-D3|FB01&G4 → 新增(G4特征新增)
Q01|N1-D3→Q1-D3|G4 → 新增(层级传递)
Q011|Q1-D3→Q11| → 新增(非本色件保持)
Q02|N1-D3→Q2| → 新增(非本色件保持)
Q021|Q2→Q21-D2|G4 → 新增(Q21的G4特征变化)
Q03|N2→Q3-D1|G4 → 新增(Q3的G4特征)
```
=== COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.