### 批量传递算法 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.