# BOM Diff Analyst **Repository Path**: ZHJEE/BomDiffAnalyst ## Basic Information - **Project Name**: BOM Diff Analyst - **Description**: bom 差异对比工具 - **Primary Language**: C# - **License**: MIT - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-08-28 - **Last Updated**: 2025-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🚀 BomDiffAnalyst — 精准高效的 BOM 差异分析工具 ## 🌟 为什么选择 BomDiffAnalyst? BomDiffAnalyst 是专为电子产品制造行业打造的 **BOM(物料清单)管理工具**,致力于帮助工程师、采购与生产团队快速识别设计变更、确保数据一致性,并减少人工校验错误。 无论您是在进行 **ERP BOM 与 PCB BOM 对比**,还是需要对 **不同版本的 BOM 进行差异分析**,BomDiffAnalyst 都能为您提供 **精准、结构化、可操作的工程变更报告(ECO)**。 --- ## 💡 核心优势 ✅ **高精度对比算法**:支持按料号(PartNumber)与位号(PartReference)两种方式精确识别新增、删除、修改与替代项。 ✅ **多维度差异报告**:生成按料号汇总与按位号汇总的详细变更列表,便于后续审批与执行。 ✅ **兼容多种 Excel 格式**:支持 EPPlus/NPOI 等主流 Excel 操作库,轻松导入导出数据。 ✅ **模块化架构设计**:基于 Prism 的 MVVM 架构,具备良好的扩展性与可维护性,方便集成到现有系统中。 ✅ **友好的用户界面**:结合 MaterialDesignInXAML 控件库,提供直观的操作体验与清晰的结果展示。 --- ## 🧩 功能概览 ### 🔍 BOM 数据一致性校验 - 在将 BOM 数据导入 ERP 前进行完整性与规则校验,避免数据错误影响生产流程。 ### 🔄 ERP BOM 与 PCB BOM 对比 - 支持识别以下类型的变更: - **新增料号**:仅出现在 PCB BOM 中但未在 ERP BOM 中定义的元器件。 - **删除料号**:仅存在于 ERP BOM 中但在 PCB BOM 中缺失的元器件。 - **修改料号**:料号不变但是位号发生变化。 - **替代料号**:料号不同但是位号相同。 ### 📊 多版本 BOM 差异分析 - 快速识别两个版本之间的所有变更点,包括料号与位号级别的修改。 ### 📄 ECO 报告生成 - 输出标准格式的工程变更订单报告,支持按料号或位号分类查看变更详情。 --- ## 🏗️ 技术栈与架构 - **开发平台**:.NET 8.0 - **UI 框架**:WPF + Prism + MaterialDesignInXAML - **核心模块**:`BomComparison.Core`, `BomComparison.Algorithm`, `Launcher` - **文件处理**:Excel.EPPlus / Excel.NPOI - **数据模型**:`BomItem`, `ComparisonResult`, `PartReferenceParser` - **对比服务**:`IBomComparisonService`, `CompareByPartNumber`, `CompareByPartReference` - **Excel 读写**:`IExcelReader`, `ExcelReader`, `IExcelWriter`, `ExcelWriter` --- ## ✅ 适用场景 - **电子产品研发团队**:用于快速识别设计变更并输出变更报告。 - **供应链管理人员**:用于验证 ERP 与 PCB 数据的一致性,防止错料漏料。 - **制造工艺工程师**:用于优化 BOM 数据结构,提高生产效率。 --- ## 📢 开始使用 立即下载并运行 BomDiffAnalyst,轻松实现高效、准确的 BOM 差异分析! > 如果你希望我们为你生成构建说明、安装指南或 UI 截图示例,请继续告诉我! --- ## 📚 技术实现细节 ### BOM 差异分析实现 BomDiffAnalyst 通过多个核心组件实现精确的 BOM 差异分析,主要包含以下功能模块: ### 软件模块划分 BomDiffAnalyst 的软件模块划分为多个层次,每个层次负责不同的功能,确保系统的高内聚、低耦合特性。以下是主要的模块划分: #### 1. **数据模型层** - **BomItem**:表示 BOM 中的一个元器件,包含料号、数量、位号和描述等属性。 - **ComparisonResult**:存储对比结果,包括按料号和位号汇总的差异项。 - **PartReferenceParser**:用于解析和处理位号字符串,支持将位号字符串转换为集合,并进行有效性校验。 - **PartReferenceComparer**:用于比较两个位号集合之间的差异,计算新增和删除的位号。 #### 2. **对比服务层** - **IBomComparisonService**:定义了标准的 BOM 对比接口,所有对比实现均基于此接口。 - **CompareByPartNumber**:实现了按料号进行 BOM 对比的服务,识别新增、删除、修改和替代的料号。 - **CompareByPartReference**:实现了按位号进行 BOM 对比的服务,识别新增、删除和替代的位号。 #### 3. **Excel 读写层** - **IExcelReader** -> `ExcelReader`: 实现了从 Excel 文件中读取 BOM 数据的功能。 - **IExcelWriter** -> `ExcelWriter`: 实现了将对比结果写入 Excel 文件的功能。 #### 4. **UI 层** - **FileSelectBrowserView**:主要用于选择需要对比的两个 BOM 文件,并设置列映射。 - **BOM1View / BOM2View**:分别显示源 BOM 和目标 BOM 的详细信息。 - **BOMDiffView**:显示详细的 BOM 差异。 - **ShowResultView**:展示对比结果。 #### 5. **模块加载与管理** - 使用 Prism 框架实现模块化架构,通过 `IModuleCatalog` 接口和 `DirectoryModuleCatalog` 类从指定目录动态加载模块。 - 模块配置信息定义在应用程序的启动类中,例如 Launcher.App 和 MainWindows.App。 - 模块描述符(`ModuleDescriptor`)用于存储每个模块的元数据,包括显示名称、图标、模块名称和默认视图类型。 #### 6. **模块通信与协调** - 使用 Prism 的事件聚合器(`IEventAggregator`)实现在不同模块之间的松耦合通信。 - 使用 `RegionManager` 实现模块之间的视图切换和区域管理。 - 通过依赖注入(DI)机制管理模块间的依赖关系。 #### 7. **总结** - BomDiffAnalyst 采用模块化设计,分离了数据读取、对比逻辑和结果展示。 - 使用 Prism 框架实现了 MVVM 模式,确保了良好的解耦和可维护性。 - 支持多种 Excel 文件格式(如 EPPlus),并提供了灵活的配置选项以适应不同的 BOM 结构。 - 通过事件聚合器(EventAggregator)和对话框服务(DialogService)实现了模块间的通信和交互。 这些设计使得 BomDiffAnalyst 具有高度的灵活性和可扩展性,能够轻松集成到更大的系统中。 ### 系统架构设计 BomDiffAnalyst 采用模块化设计,主要分为以下几个核心组件: #### 1. **模块加载与管理** - 使用 Prism 框架实现模块化架构,通过 `IModuleCatalog` 接口和 `DirectoryModuleCatalog` 类从指定目录动态加载模块。 - 模块配置信息定义在应用程序的启动类中,例如 Launcher.App 和 MainWindows.App。 - 模块描述符(`ModuleDescriptor`)用于存储每个模块的元数据,包括显示名称、图标、模块名称和默认视图类型。 #### 2. **核心模块分析** ##### BomComparisonModule - **功能**:负责实现 BOM(物料清单)对比的核心逻辑。 - **主要组件**: - `IExcelReader` -> `ExcelReader`: 负责从 Excel 文件中读取 BOM 数据。 - `IBomComparisonService` -> `CompareByPartNumber`, `CompareByPartReference`: 提供按料号或位号进行 BOM 对比的服务。 - `IExcelWriter` -> `ExcelWriter`: 负责将对比结果写入 Excel 文件。 - **视图导航**:注册了多个视图用于导航,如 `FileSelectBrowserView`, `BOM1View`, `BOM2View`, `BOMDiffView`。 - **对话框**:注册了一个对话框 `ShowResultView` 用于展示对比结果。 ##### FileSelectBrowserModule - **功能**:提供用户界面用于选择需要对比的两个 BOM 文件,并设置列映射。 - **主要组件**: - `FileSelectBrowserView`: 主要用于选择文件和配置列映射。 - `BOM1View`, `BOM2View`: 显示源 BOM 和目标 BOM 的详细信息。 - `BOMDiffView`: 显示详细的 BOM 差异。 - `ShowResultView`: 用于展示对比结果。 - **视图导航**:注册了多个视图用于导航,如 `FileSelectBrowserView`, `BOM1View`, `BOM2View`, `BOMDiffView`。 - **对话框**:注册了一个对话框 `ShowResultView` 用于展示对比结果。 --- ## 🗺️ 开发 Load Map(任务分解图) 本 Load Map 用于指导 BomDiffAnalyst 的开发过程中的任务划分、优先级安排与团队协作。 ### 阶段一:基础架构搭建 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 初始化解决方案 | 创建 .NET 8 WPF 解决方案结构 | 架构师 | ✅ | | 集成 Prism 框架 | 实现模块化加载、MVVM 支持 | 核心开发 | ✅ | | 配置构建脚本 | 创建 build.cmd, build.ps1, build.sh | DevOps 工程师 | ✅ | | 引入 UI 库 | 安装 MaterialDesignInXAML | 前端开发 | ✅ | | 设置 Git 仓库 | 初始化版本控制 | 全员 | ✅ | ### 阶段二:核心功能开发 #### 数据模型层 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 设计 [BomItem](Source/BomComparison.Core/Model/BomItem.cs#L6-L111) 类 | 定义 BOM 条目结构 | 核心开发 | ✅ | | 实现 [ComparisonResult](Source/BomComparison.Core/Model/ComparisonResult.cs#L4-L40) | 对比结果数据模型 | 核心开发 | ✅ | | 实现 [PartReferenceParser](Source/BomComparison.Algorithm/Comparers/PartReferenceParser.cs#L9-L72) | 位号解析器 | 核心开发 | ✅ | #### Excel 读写模块 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 实现 [IExcelReader](Source/Module/Excel.NPOI/Interface/IExcelReader.cs#L4-L7) 接口 | 定义读取接口 | 后端开发 | ✅ | | 实现 [ExcelReader](Source/Module/Excel.EPPlus/ExcelReader.cs#L10-L202) 类 | 使用 EPPlus/NPOI 实现读取逻辑 | 后端开发 | ✅ | | 实现 [IExcelWriter](Source/Module/Excel.NPOI/Interface/IExcelWriter.cs#L9-L12) 接口 | 定义写入接口 | 后端开发 | ✅ | | 实现 [ExcelWriter](Source/Module/Excel.EPPlus/ExcelWriter.cs#L9-L845) 类 | 输出对比结果到 Excel | 后端开发 | ✅ | #### 对比服务层 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 实现 [CompareByPartNumber](Source/BomComparison.Algorithm/Comparers/CompareByPartNumber.cs#L9-L208) | 按料号进行 BOM 对比 | 算法工程师 | ✅ | | 实现 [CompareByPartReference](Source/BomComparison.Algorithm/Comparers/CompareByPartReference.cs#L5-L53) | 按位号进行 BOM 对比 | 算法工程师 | ✅ | | 实现 [PartReferenceComparer](Source/BomComparison.Algorithm/Comparers/PartReferenceComparer.cs#L3-L76) | 位号集合比较逻辑 | 算法工程师 | ✅ | ### 阶段三:用户界面开发 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 创建 [FileSelectBrowserView](Source/Module/BomComparisonModule/Views/FileSelectBrowser.xaml.cs#L4-L10) | 文件选择界面 | 前端开发 | ✅ | | 创建 [BOM1View](Source/Module/BomComparisonModule/Views/ResultDialog/BOM1View.xaml.cs#L22-L37) / [BOM2View](Source/Module/BomComparisonModule/Views/ResultDialog/BOM2View.xaml.cs#L20-L26) | 展示源与目标 BOM 数据 | 前端开发 | ✅ | | 创建 [BOMDiffView](Source/Module/BomComparisonModule/Views/ResultDialog/BOMDiffView.xaml.cs#L20-L26) | 展示详细差异项 | 前端开发 | ⏳ | | 创建 [ShowResultView](Source/Module/BomComparisonModule/Views/ResultDialog/ShowResultView.xaml.cs#L12-L21) | 展示最终对比结果 | 前端开发 | ⏳ | | 集成 Prism 视图导航 | 实现视图切换与区域管理 | 核心开发 | ✅ | ### 阶段四:模块集成与通信 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 注册模块视图 | 在 [BomComparisonModule.cs](Source/Module/BomComparisonModule/BomComparisonModule.cs) 中注册所有视图 | 核心开发 | ✅ | | 实现模块间通信 | 使用 `IEventAggregator` 实现事件通信 | 核心开发 | ✅ | | 实现对话框服务 | 显示对比结果弹窗 | 核心开发 | ✅ | ### 阶段五:测试与优化 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 编写单元测试 | 使用 xUnit/NUnit 测试对比算法 | QA 工程师 | ⏳ | | 进行 UI 自动化测试 | 使用 FlaUI 或 Selenium 测试界面交互 | QA 工程师 | ⏳ | | 性能优化 | 提升大文件处理速度与内存效率 | 核心开发 | ⏳ | | Bug 修复与回归测试 | 修复已知问题并验证 | QA 工程师 | ⏳ | ### 阶段六:部署与发布 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 配置发布流程 | 打包可执行文件与依赖 | DevOps 工程师 | ⏳ | | 代码混淆配置 | 使用 Dotfuscator/Obfuscar 混淆代码 | DevOps 工程师 | ⏳ | | 编写安装说明文档 | 包括运行环境要求与使用说明 | 技术文档 | ⏳ | | 发布第一版 | 提供可下载的安装包或 MSI 安装程序 | DevOps 工程师 | ⏳ | ### 阶段七:扩展与增强 | 子任务 | 描述 | 负责人 | 状态 | |--------|------|--------|------| | 支持 CSV/XML 输入 | 扩展支持更多格式 | 后端开发 | ⏳ | | 支持数据库导入导出 | 从 ERP 数据库直接读取 BOM | 后端开发 | ⏳ | | 添加 ECO 报告模板 | 可自定义输出格式 | 技术文档 | ⏳ | | 实现云端同步功能 | 保存历史对比记录 | DevOps 工程师 | ⏳ | | 集成 CI/CD 流水线 | GitHub Actions / Azure DevOps | DevOps 工程师 | ⏳ |