设计目标
• 支持"按单生产"与"按任务生产"两种物料需求策略
• 允许同一条生产线在不同订单/任务里使用不同 BOM 版本
• 工序-部件-生产线三维校验:确保"工序需要的部件"与"生产线能加工的部件"匹配
• 工资既支持"按任务数量"又支持"按工序报工数量"
• 所有主数据支持版本号、生效/失效日期,满足未来工艺变更
流程说明
(含报价→订单→任务→工序→部件→BOM→物料需求→工资核算全链路)

数据库ER图

高离散制造 -- 生产订单数据库设计表(核心表结构)
1. 产品主表 product
|----------------|--------------|-----------|-----|---------------|------|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| item_code | varchar(50) | 料号 | --- | --- | 唯一 |
| item_name | varchar(100) | 名称 | --- | --- | --- |
| item_type | enum | 成品/半成品/原料 | --- | --- | --- |
| default_bom_id | bigint | 默认BOM | --- | FK→bom_header | 可空 |
| unit | varchar(10) | 单位 | --- | --- | --- |
| enable_flag | tinyint(1) | 启用标记 | --- | --- | 1=启用 |
2. BOM主表 bom_header
|-------------|-------------|-------|-----|------------|------|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| product_id | bigint | 产品ID | --- | FK→product | --- |
| bom_code | varchar(50) | BOM编码 | --- | --- | 唯一 |
| version | varchar(10) | 版本号 | --- | --- | --- |
| effect_date | date | 生效日期 | --- | --- | --- |
| expire_date | date | 失效日期 | --- | --- | --- |
| is_default | tinyint(1) | 默认标识 | --- | --- | 1=默认 |
3. BOM子件表 bom_item
|----------------|---------------|--------|-----|---------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| bom_header_id | bigint | BOM头ID | --- | FK→bom_header | --- |
| parent_item_id | bigint | 父项料号 | --- | FK→product | --- |
| child_item_id | bigint | 子项料号 | --- | FK→product | --- |
| qty | decimal(12,4) | 用量 | --- | --- | --- |
| unit | varchar(10) | 单位 | --- | --- | --- |
| loss_rate | decimal(5,2) | 损耗率(%) | --- | --- | --- |
| op_seq_start | int | 起始工序序号 | --- | --- | --- |
| op_seq_end | int | 结束工序序号 | --- | --- | --- |
4. 生产线表 prod_line
|-------------|-------------|------|-----|-----|------|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| line_code | varchar(20) | 线体代码 | --- | --- | 唯一 |
| line_name | varchar(50) | 线体名称 | --- | --- | --- |
| dept | varchar(50) | 所属车间 | --- | --- | --- |
| enable_flag | tinyint(1) | 启用标记 | --- | --- | 1=启用 |
5. 生产订单表 prod_order
|-----------------|---------------|---------|-----|---------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| order_no | varchar(30) | 内部订单号 | --- | --- | 唯一 |
| source_quote_id | bigint | 来源报价ID | --- | FK→quote_main | 可空 |
| customer | varchar(100) | 客户名称 | --- | --- | --- |
| product_id | bigint | 产品ID | --- | FK→product | --- |
| qty_total | decimal(12,2) | 订单数量 | --- | --- | --- |
| delivery_date | date | 交货日期 | --- | --- | --- |
| bom_version | varchar(10) | 使用BOM版本 | --- | --- | --- |
| status | enum | 状态 | --- | --- | 见字典 |
| created_at | datetime | 创建时间 | --- | --- | --- |
6. 生产任务单表 prod_task
|---------------|---------------|----------|-----|---------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| prod_order_id | bigint | 所属订单ID | --- | FK→prod_order | --- |
| task_no | varchar(30) | 任务单号 | --- | --- | 唯一 |
| product_name | varchar(100) | 产品名称(冗余) | --- | --- | --- |
| qty | decimal(12,2) | 任务数量 | --- | --- | --- |
| plan_start | date | 计划开工 | --- | --- | --- |
| plan_end | date | 计划完工 | --- | --- | --- |
| status | enum | 状态 | --- | --- | 见字典 |
7. 任务-生产线关系表 task_line
|----------|---------------|-------|-----|--------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| task_id | bigint | 任务ID | --- | FK→prod_task | --- |
| line_id | bigint | 生产线ID | --- | FK→prod_line | --- |
| seq | int | 生产顺序 | --- | --- | --- |
| qty_line | decimal(12,2) | 本线数量 | --- | --- | --- |
| status | enum | 状态 | --- | --- | --- |
8. 工序实例表 prod_process
|--------------|--------------|-------|-----|--------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| task_line_id | bigint | 任务线ID | --- | FK→task_line | --- |
| process_name | varchar(50) | 工序名称 | --- | --- | --- |
| seq | int | 顺序号 | --- | --- | --- |
| std_time | decimal(8,2) | 标准工时 | --- | --- | 分钟 |
| status | enum | 状态 | --- | --- | --- |
9. 任务部件表 prod_part
|--------------|---------------|--------|-----|--------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| task_line_id | bigint | 任务线ID | --- | FK→task_line | --- |
| part_name | varchar(100) | 部件名称 | --- | --- | --- |
| material | varchar(50) | 材质 | --- | --- | --- |
| length | decimal(8,2) | 长度(mm) | --- | --- | --- |
| width | decimal(8,2) | 宽度(mm) | --- | --- | --- |
| thick | decimal(8,2) | 厚度(mm) | --- | --- | --- |
| qty | decimal(10,2) | 数量 | --- | --- | --- |
| unit | varchar(10) | 单位 | --- | --- | --- |
10. 物料需求表 material_requirement
|---------------|---------------|----------|-----|---------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| prod_order_id | bigint | 订单ID(可空) | --- | FK→prod_order | --- |
| task_id | bigint | 任务ID(可空) | --- | FK→prod_task | --- |
| line_id | bigint | 生产线ID | --- | FK→prod_line | --- |
| material_id | bigint | 物料ID | --- | FK→product | --- |
| spec | varchar(100) | 规格描述 | --- | --- | --- |
| qty_required | decimal(12,2) | 需求数量 | --- | --- | --- |
| qty_on_hand | decimal(12,2) | 库存数量 | --- | --- | --- |
| qty_ordered | decimal(12,2) | 已采数量 | --- | --- | --- |
| status | enum | 需求状态 | --- | --- | --- |
11. 生产报工表 prod_report
|--------------|---------------|-------|-----|-----------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| task_line_id | bigint | 任务线ID | --- | FK→task_line | --- |
| process_id | bigint | 工序ID | --- | FK→prod_process | --- |
| worker_id | bigint | 员工ID | --- | FK→worker | --- |
| qty_good | decimal(12,2) | 合格数 | --- | --- | --- |
| qty_scrap | decimal(12,2) | 废品数 | --- | --- | --- |
| start_time | datetime | 开始时间 | --- | --- | --- |
| end_time | datetime | 结束时间 | --- | --- | --- |
| wage_flag | tinyint(1) | 已结算标记 | --- | --- | 0/1 |
12. 工资计算结果表 wage_calc
|--------------|---------------|-------|-----|-----------------|-----|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint | 主键 | PK | --- | 自增 |
| worker_id | bigint | 员工ID | --- | FK→worker | --- |
| task_line_id | bigint | 任务线ID | --- | FK→task_line | 可空 |
| process_id | bigint | 工序ID | --- | FK→prod_process | 可空 |
| qty_basis | decimal(12,2) | 计薪数量 | --- | --- | --- |
| unit_price | decimal(10,4) | 单价 | --- | --- | --- |
| amount | decimal(12,2) | 金额 | --- | --- | --- |
| calc_date | date | 计算日期 | --- | --- | --- |
关键校验与扩展字段(所有表通用)ext_json json --- 用户自定义字段tenant_id bigint --- 多租户revision int --- 乐观锁
13. 工序主数据表 process_master
|------------------|--------------|------------|-----|-----|------|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint PK | 主键 | ✔ | --- | 自增 |
| process_code | varchar(30) | 工序编码 | --- | --- | 唯一 |
| process_name | varchar(50) | 工序名称 | --- | --- | --- |
| description | varchar(200) | 描述 | --- | --- | --- |
| default_std_time | decimal(8,2) | 默认标准工时(分钟) | --- | --- | --- |
| enable_flag | tinyint(1) | 启用标记 | --- | --- | 1=启用 |
14. 工序-生产线关系表 process_line_rel
|-------------|------------|-----------------------|-----|-------------------|------|
| 字段名 | 类型 | 描述 | 主键 | 外键 | 备注 |
| id | bigint PK | 主键 | ✔ | --- | 自增 |
| process_id | bigint | 工序ID | --- | FK→process_master | --- |
| line_id | bigint | 生产线ID | --- | FK→prod_line | --- |
| seq | smallint | 在线内顺序 | --- | --- | --- |
| enable_flag | tinyint(1) | 启用标记 | --- | --- | 1=启用 |
| UNIQUE | --- | (process_id, line_id) | --- | --- | 防重复 |
15. 更新后的关系链示意
process_master 1 ──< process_line_rel >── prod_lineprod_line 1 ──< task_line >── prod_taskprod_task 1 ──< prod_process >── process_master
• 通过 process_line_rel 保证"工序-生产线"多对多,且在线内有序。
设计说明
主键设计:所有主表和明细表均采用BIGINT类型的自增主键,确保系统扩展性。
单据编号:bill_no字段用于业务单据的唯一标识,建议采用"业务类型前缀+年月+流水号"的生成规则。
状态管理:通过status字段实现工作流控制,不同状态对应不同的操作权限。
时间戳:create_time和update_time自动记录数据创建和修改时间,便于审计追踪。
审批流程:关键业务单据设计审批人和审批时间字段,支持多级审批。
外键关联:通过prod_order_id等字段与生产订单主数据关联,确保数据一致性。
扩展性:字段设计考虑了多币种、多单位、批次管理等企业级需求。
此设计可满足制造业生产管理的基本需求,可根据具体业务场景进行调整和优化。
案例演示:
开源地址:
https://gitee.com/07fly/07flyadmin
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!