Files
MES/yawei-mes/.tasks/2025-09-26_新BOM模块后端实现总结.md
2026-04-02 10:39:03 +08:00

201 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 新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等系统集成