# 新BOM模块后端实现总结 ## 概述 根据前端页面的功能需求和API接口调用,完整实现了新BOM模块的后端代码,包括数据表设计、实体类、Mapper接口、Service层和Controller层。 ## 实现的功能 1. **基础CRUD操作** - 新增、修改、删除、查询BOM - BOM明细管理 - 分页查询和条件筛选 2. **高级功能** - BOM复制 - BOM版本管理 - BOM成本计算和分析 - BOM完整性验证 - BOM树形结构查询 - 替代料管理 - 用量分析 - 导入导出功能 3. **状态管理** - 草稿、已发布、已废弃三种状态 - 版本发布和废弃操作 ## 数据表结构 ### 1. 新BOM主表 (md_new_bom) ```sql CREATE TABLE `md_new_bom` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `material_id` bigint(20) NOT NULL COMMENT '产品物料ID', `product_code` varchar(100) NOT NULL COMMENT '产品编码', `product_name` varchar(200) NOT NULL COMMENT '产品名称', `specification` varchar(500) DEFAULT NULL COMMENT '规格型号', `version` varchar(50) NOT NULL COMMENT 'BOM版本', `bom_type` varchar(20) NOT NULL DEFAULT 'PRODUCTION' COMMENT 'BOM类型', `base_quantity` decimal(12,3) NOT NULL DEFAULT '1.000' COMMENT '基本数量', `unit_name` varchar(50) DEFAULT NULL COMMENT '单位名称', `total_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '总成本', `material_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '材料成本', `labor_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '人工成本', `manufacturing_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '制造费用', `status` char(1) NOT NULL DEFAULT '0' COMMENT '状态(0:草稿,1:已发布,2:已废弃)', `valid_from` date DEFAULT NULL COMMENT '有效期开始', `valid_to` date DEFAULT NULL COMMENT '有效期结束', `parent_id` bigint(20) DEFAULT NULL COMMENT '父级BOM ID', `has_children` tinyint(1) DEFAULT '0' COMMENT '是否有子级', `sort_order` int(11) DEFAULT '0' COMMENT '排序', `create_by` varchar(64) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `uk_product_version` (`material_id`, `version`), KEY `idx_material_id` (`material_id`), KEY `idx_bom_type` (`bom_type`), KEY `idx_status` (`status`), KEY `idx_parent_id` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新BOM主表'; ``` ### 2. 新BOM明细表 (md_new_bom_item) ```sql CREATE TABLE `md_new_bom_item` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `bom_id` bigint(20) NOT NULL COMMENT 'BOM主表ID', `material_id` bigint(20) NOT NULL COMMENT '物料ID', `material_code` varchar(100) NOT NULL COMMENT '物料编码', `material_name` varchar(200) NOT NULL COMMENT '物料名称', `specification` varchar(500) DEFAULT NULL COMMENT '规格型号', `quantity` decimal(12,3) NOT NULL DEFAULT '1.000' COMMENT '用量', `unit_name` varchar(50) DEFAULT NULL COMMENT '单位名称', `loss_rate` decimal(5,2) DEFAULT '0.00' COMMENT '损耗率(%)', `unit_price` decimal(12,4) DEFAULT '0.0000' COMMENT '单价', `total_cost` decimal(12,4) DEFAULT '0.0000' COMMENT '小计成本', `material_type` varchar(20) DEFAULT 'PURCHASED' COMMENT '物料类型', `is_key_component` tinyint(1) DEFAULT '0' COMMENT '是否关键件', `supplier_id` bigint(20) DEFAULT NULL COMMENT '供应商ID', `supplier_name` varchar(200) DEFAULT NULL COMMENT '供应商名称', `alternative_materials` text DEFAULT NULL COMMENT '替代料信息', `process_route` varchar(500) DEFAULT NULL COMMENT '工艺路线', `sort_order` int(11) DEFAULT '0' COMMENT '排序', `create_by` varchar(64) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_bom_id` (`bom_id`), KEY `idx_material_id` (`material_id`), KEY `idx_supplier_id` (`supplier_id`), KEY `idx_material_type` (`material_type`), CONSTRAINT `fk_bom_item_bom_id` FOREIGN KEY (`bom_id`) REFERENCES `md_new_bom` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新BOM明细表'; ``` ### 3. 其他辅助表 - **md_new_bom_version**: BOM版本历史表 - **md_new_bom_cost_analysis**: BOM成本分析表 - **md_new_bom_substitute**: 替代料关系表 ## 后端代码结构 ### 1. 实体类 (Domain) - `NewBom.java` - BOM主实体 - `NewBomItem.java` - BOM明细实体 - `NewBomVersion.java` - BOM版本实体 - `NewBomCostAnalysis.java` - BOM成本分析实体 ### 2. Mapper接口层 - `NewBomMapper.java` - BOM主表数据访问接口 - `NewBomItemMapper.java` - BOM明细表数据访问接口 - 对应的XML映射文件: - `NewBomMapper.xml` - `NewBomItemMapper.xml` ### 3. Service业务层 - `INewBomService.java` - BOM业务接口 - `NewBomServiceImpl.java` - BOM业务实现类 ### 4. Controller控制层 - `NewBomController.java` - BOM控制器 ## API接口列表 ### 基础CRUD接口 - `GET /masterdata/newBom/list` - 查询BOM列表 - `GET /masterdata/newBom/{id}` - 获取BOM详情 - `POST /masterdata/newBom` - 新增BOM - `PUT /masterdata/newBom` - 修改BOM - `DELETE /masterdata/newBom/{ids}` - 删除BOM ### 高级功能接口 - `POST /masterdata/newBom/copy/{id}` - 复制BOM - `POST /masterdata/newBom/export` - 导出BOM - `POST /masterdata/newBom/import` - 导入BOM - `GET /masterdata/newBom/tree/{parentId}` - 获取BOM树结构 - `GET /masterdata/newBom/cost/{id}` - 计算BOM成本 - `GET /masterdata/newBom/versions/{bomId}` - 获取BOM版本历史 - `POST /masterdata/newBom/publish` - 发布BOM版本 - `GET /masterdata/newBom/substitutes/{materialId}` - 获取替代料列表 - `GET /masterdata/newBom/analysis/{id}` - 获取BOM用量分析 - `GET /masterdata/newBom/validate/{id}` - 验证BOM完整性 ## 主要特性 ### 1. 成本计算 - 自动计算明细成本:用量 × 单价 × (1 + 损耗率/100) - 总成本 = 材料成本 + 人工成本 + 制造费用 - 支持成本占比分析 ### 2. 版本管理 - 支持多版本BOM管理 - 版本状态控制(草稿、已发布、已废弃) - 版本复制功能 - 版本历史查询 ### 3. 数据验证 - BOM完整性验证 - 唯一性约束(物料+版本) - 业务规则验证 ### 4. 权限控制 - 基于角色的权限控制 - 细粒度操作权限 - 数据安全保障 ## 使用说明 1. **执行数据表创建SQL语句** 2. **确保相关依赖项存在**: - Material(物料)表和相关服务 - Supplier(供应商)表和相关服务 - 权限管理系统 3. **配置权限**: - `masterdata:newBom:list` - 查询权限 - `masterdata:newBom:add` - 新增权限 - `masterdata:newBom:edit` - 修改权限 - `masterdata:newBom:remove` - 删除权限 - `masterdata:newBom:export` - 导出权限 - `masterdata:newBom:import` - 导入权限 - 其他功能权限... ## 注意事项 1. **数据完整性**:BOM明细与主表通过外键关联,删除主表时会级联删除明细 2. **版本控制**:已发布的BOM不能直接删除,需要先废弃 3. **成本计算**:成本计算为实时计算,可考虑加入缓存机制 4. **并发控制**:修改BOM时需要注意并发更新问题 5. **性能优化**:大量数据时建议添加适当索引 ## 扩展建议 1. **审批流程**:可以增加BOM审批流程 2. **变更记录**:增加BOM变更历史记录 3. **模板功能**:支持BOM模板功能 4. **批量操作**:支持批量导入导出明细 5. **集成功能**:与ERP、PLM等系统集成