Files
MES/yawei-mes/.tasks/2025-09-26_新BOM模块后端实现总结.md

201 lines
7.8 KiB
Markdown
Raw Normal View History

2026-04-02 10:38:23 +08:00
# 新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等系统集成