Files
my-mom-system/prd/生产计划-数据模型.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

462 lines
17 KiB
Markdown

# 生产计划模块 - 数据模型
> 本文档定义生产计划模块的数据库表结构、实体关系和视图设计。
---
## 1. 实体关系图 (ER Diagram)
```
┌─────────────────┐ 1:N ┌─────────────────┐
│ so_order │◄─────────────►│ mp_plan │
│ (销售订单) │ │ (生产计划单) │
└─────────────────┘ └────────┬────────┘
│ 1:N
┌─────────────────┐
│ mp_plan_line │
│ (生产计划明细) │
└────────┬────────┘
┌───────────────────────────────┼───────────────────────────────┐
│ │ │
▼ 1:N ▼ 1:N ▼ 1:N
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ mp_mbom │ │ mp_purchase │ │ mp_task │
│ (物料清单) │ │ (采购计划单) │ │ (生产任务单) │
└────────┬────────┘ └────────┬────────┘ └─────────────────┘
│ 1:N │ 1:N
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ mp_mbom_line │ │ mp_purchase_line│
│ (物料清单明细) │ │ (采购计划明细) │
└─────────────────┘ └─────────────────┘
关联表:
┌─────────────────┐
│ md_item │ ◄──── 生产计划、物料清单、采购计划关联
│ (物料档案) │
└─────────────────┘
┌─────────────────┐
│ md_bom │ ◄──── 生产计划关联BOM
│ (BOM档案) │
└─────────────────┘
```
---
## 2. 生产计划单表 (mp_plan)
> API 路径: `/mp/plan/order`
### 2.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| planId | bigint | - | N | - | 计划ID (主键) |
| planCode | varchar | 32 | N | - | 计划单编码 |
| planDate | date | - | N | - | 计划日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| businessStatus | varchar | 20 | N | 'NORMAL' | 业务状态 |
| businessType | varchar | 20 | N | - | 业务类型 |
| workType | int | - | N | 0 | 工作类型(0生产计划/1零部件计划/2零部件订单) |
| salesOrderId | bigint | - | Y | - | 销售订单ID |
| salesOrderCode | varchar | 32 | Y | - | 销售订单编码 |
| salesUserId | bigint | - | Y | - | 销售员ID |
| salesUserName | varchar | 50 | Y | - | 销售员名称 |
| deliveryDate | date | - | Y | - | 订单交期 |
| bomId | bigint | - | Y | - | BOM ID |
| bomVersion | varchar | 20 | Y | - | BOM版本号 |
| bomDesc | varchar | 200 | Y | - | BOM版本说明 |
| totalQuantity | decimal | 18,4 | Y | 0 | 生产总量 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 2.2 明细表结构 (mp_plan_line)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| lineId | bigint | - | N | - | 明细ID (主键) |
| planId | bigint | - | N | - | 计划ID (外键) |
| planCode | varchar | 32 | N | - | 计划单编码 |
| lineNo | int | - | N | - | 行号 |
| salesLineId | bigint | - | Y | - | 销售订单明细ID |
| trackCode | varchar | 32 | Y | - | 跟单编号 |
| itemId | bigint | - | N | - | 物料ID |
| itemCode | varchar | 32 | N | - | 物料编码 |
| itemName | varchar | 100 | N | - | 物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitId | bigint | - | Y | - | 计量单位ID |
| unitName | varchar | 20 | Y | - | 计量单位 |
| quantity | decimal | 18,4 | N | 0 | 生产数量 |
| qualityReq | varchar | 200 | Y | - | 质量要求 |
| remark | varchar | 200 | Y | - | 备注 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createTime | datetime | - | Y | - | 创建时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 2.3 索引设计
| 索引名 | 索引字段 | 类型 | 说明 |
|--------|----------|------|------|
| pk_plan | planId | 主键 | 主键索引 |
| uk_plan_code | planCode, tenantId | 唯一 | 计划单编码唯一 |
| idx_plan_sales | salesOrderId | 普通 | 销售订单查询 |
| idx_plan_date | planDate | 普通 | 日期查询 |
| idx_plan_status | status | 普通 | 状态查询 |
| pk_plan_line | lineId | 主键 | 明细主键 |
| idx_line_plan | planId | 普通 | 计划单关联 |
| idx_line_item | itemId | 普通 | 物料查询 |
---
## 3. 物料清单表 (mp_mbom)
> API 路径: `/mp/plan/mbom`
### 3.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| mbomId | bigint | - | N | - | 物料清单ID (主键) |
| mbomCode | varchar | 32 | N | - | 物料清单编码 |
| mbomDate | date | - | N | - | 单据日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| businessType | varchar | 20 | N | - | 业务类型(BOM运算/生产补料) |
| issueStatus | varchar | 20 | Y | - | 下发状态 |
| planId | bigint | - | N | - | 生产计划ID |
| planCode | varchar | 32 | N | - | 生产计划编码 |
| salesOrderId | bigint | - | Y | - | 销售订单ID |
| salesOrderCode | varchar | 32 | Y | - | 销售订单编码 |
| deliveryDate | date | - | Y | - | 订单交期 |
| itemId | bigint | - | N | - | 产品物料ID |
| itemCode | varchar | 32 | N | - | 产品物料编码 |
| itemName | varchar | 100 | N | - | 产品物料名称 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| supplyType | varchar | 20 | Y | - | 供应方式(采购/自制/委外) |
| quantity | decimal | 18,4 | N | 0 | 生产数量 |
| workshopId | bigint | - | Y | - | 下发车间ID |
| workshopName | varchar | 50 | Y | - | 下发车间名称 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
### 3.2 明细表结构 (mp_mbom_line)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| lineId | bigint | - | N | - | 明细ID (主键) |
| mbomId | bigint | - | N | - | 物料清单ID (外键) |
| mbomCode | varchar | 32 | N | - | 物料清单编码 |
| lineNo | int | - | N | - | 行号 |
| parentItemId | bigint | - | Y | - | 父级物料ID |
| bomLevel | int | - | Y | 1 | BOM层级 |
| itemId | bigint | - | N | - | 子件物料ID |
| itemCode | varchar | 32 | N | - | 子件物料编码 |
| itemName | varchar | 100 | N | - | 子件物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| baseQty | decimal | 18,6 | Y | 1 | 基本用量 |
| quantity | decimal | 18,4 | N | 0 | 需求数量 |
| lossRate | decimal | 5,2 | Y | 0 | 损耗率% |
| supplyType | varchar | 20 | Y | - | 供应方式 |
| remark | varchar | 200 | Y | - | 备注 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createTime | datetime | - | Y | - | 创建时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
---
## 4. 采购计划单表 (mp_purchase)
> API 路径: `/mp/plan/purchase`
### 4.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| purchaseId | bigint | - | N | - | 采购计划ID (主键) |
| purchaseCode | varchar | 32 | N | - | 采购计划编码 |
| purchaseDate | date | - | N | - | 计划日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| needType | int | - | N | 0 | 需求方式(0订单用料/1库存备料) |
| planId | bigint | - | Y | - | 生产计划ID |
| planCode | varchar | 32 | Y | - | 生产计划编码 |
| salesOrderId | bigint | - | Y | - | 销售订单ID |
| salesOrderCode | varchar | 32 | Y | - | 销售订单编码(跟单单号) |
| deliveryDate | date | - | Y | - | 订单交期 |
| itemId | bigint | - | N | - | 物料ID |
| itemCode | varchar | 32 | N | - | 物料编码 |
| itemName | varchar | 100 | N | - | 物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| purchaseQty | decimal | 18,4 | N | 0 | 采购数量 |
| orderedQty | decimal | 18,4 | Y | 0 | 已订数量 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
---
## 5. 零部件订单表 (mp_parts)
> API 路径: `/mp/plan/order/parts`
### 5.1 主表结构
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
|--------|------|------|--------|--------|------|
| partsId | bigint | - | N | - | 零部件订单ID (主键) |
| partsCode | varchar | 32 | N | - | 零部件订单编码 |
| partsDate | date | - | N | - | 单据日期 |
| status | varchar | 20 | N | 'DRAFT' | 单据状态 |
| itemId | bigint | - | N | - | 零部件物料ID |
| itemCode | varchar | 32 | N | - | 零部件物料编码 |
| itemName | varchar | 100 | N | - | 零部件物料名称 |
| specification | varchar | 200 | Y | - | 型号规格 |
| drawingNo | varchar | 50 | Y | - | 图纸号 |
| unitName | varchar | 20 | Y | - | 计量单位 |
| quantity | decimal | 18,4 | N | 0 | 订单数量 |
| planQty | decimal | 18,4 | Y | 0 | 计划数量 |
| completedQty | decimal | 18,4 | Y | 0 | 完成数量 |
| remark | varchar | 500 | Y | - | 备注 |
| operatorId | bigint | - | Y | - | 操作员ID |
| operatorName | varchar | 50 | Y | - | 操作员名称 |
| approverId | bigint | - | Y | - | 审核员ID |
| approverName | varchar | 50 | Y | - | 审核员名称 |
| approveDate | datetime | - | Y | - | 审核日期 |
| delFlag | char | 1 | N | '0' | 删除标志 |
| createBy | varchar | 64 | Y | - | 创建者 |
| createTime | datetime | - | Y | - | 创建时间 |
| updateBy | varchar | 64 | Y | - | 更新者 |
| updateTime | datetime | - | Y | - | 更新时间 |
| tenantId | varchar | 20 | N | - | 租户ID |
---
## 6. 视图设计
### 6.1 生产计划明细视图 (v_mp_plan_detail)
```sql
CREATE VIEW v_mp_plan_detail AS
SELECT
l.lineId,
l.planId,
p.planCode,
p.planDate,
p.status,
p.workType,
p.salesOrderCode,
p.salesUserName,
p.deliveryDate,
l.trackCode,
l.itemId,
l.itemCode,
l.itemName,
l.specification,
l.unitName,
l.quantity,
p.tenantId
FROM mp_plan_line l
INNER JOIN mp_plan p ON l.planId = p.planId
WHERE l.delFlag = '0' AND p.delFlag = '0';
```
### 6.2 采购计划执行视图 (v_mp_purchase_exec)
```sql
CREATE VIEW v_mp_purchase_exec AS
SELECT
p.purchaseId,
p.purchaseCode,
p.purchaseDate,
p.status,
p.needType,
p.salesOrderCode,
p.deliveryDate,
p.itemId,
p.itemCode,
p.itemName,
p.purchaseQty,
p.orderedQty,
(p.purchaseQty - IFNULL(p.orderedQty, 0)) AS unorderedQty,
i.itemTypeCode,
i.itemTypeName,
p.tenantId
FROM mp_purchase p
LEFT JOIN md_item i ON p.itemId = i.itemId
WHERE p.delFlag = '0';
```
### 6.3 采购计划汇总视图 (v_mp_purchase_summary)
```sql
CREATE VIEW v_mp_purchase_summary AS
SELECT
i.itemTypeCode AS majorType,
i.itemTypeName AS majorTypeName,
i.itemSubTypeCode AS minorType,
i.itemSubTypeName AS minorTypeName,
p.itemId,
p.itemCode,
p.itemName,
SUM(p.purchaseQty) AS totalPurchaseQty,
SUM(IFNULL(p.orderedQty, 0)) AS totalOrderedQty,
SUM(p.purchaseQty - IFNULL(p.orderedQty, 0)) AS totalUnorderedQty,
p.tenantId
FROM mp_purchase p
LEFT JOIN md_item i ON p.itemId = i.itemId
WHERE p.delFlag = '0' AND p.status = 'APPROVED'
GROUP BY i.itemTypeCode, i.itemTypeName, i.itemSubTypeCode, i.itemSubTypeName,
p.itemId, p.itemCode, p.itemName, p.tenantId;
```
---
## 7. 状态枚举定义
### 7.1 单据状态 (status)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| DRAFT | 开立 | 草稿,可编辑 |
| APPROVED | 审核 | 已审核,不可编辑 |
| CLOSED | 关闭 | 已关闭 |
### 7.2 业务状态 (businessStatus)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| NORMAL | 正常 | 正常执行 |
| PAUSE | 暂停 | 暂停执行 |
| CANCEL | 取消 | 已取消 |
### 7.3 下发状态 (issueStatus)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| NOT_ISSUED | 未下发 | 未下发到车间 |
| ISSUED | 已下发 | 已下发到车间 |
| COMPLETED | 已完成 | 生产完成 |
### 7.4 供应方式 (supplyType)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| PURCHASE | 采购 | 外部采购 |
| SELF_MADE | 自制 | 自己生产 |
| OUTSOURCE | 委外 | 委外加工 |
### 7.5 业务类型 (businessType)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| PRODUCTION_PLAN | 生产计划 | 生产计划单 |
| BOM_CALC | BOM运算 | BOM运算生成 |
| SUPPLEMENT | 生产补料 | 补料计划 |
### 7.6 工作类型 (workType)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| 0 | 生产计划单 | 主生产计划 |
| 1 | 零部件计划单 | 零部件生产计划 |
| 2 | 零部件订单 | 零部件加工订单 |
### 7.7 需求方式 (needType)
| 枚举值 | 中文名 | 说明 |
|--------|--------|------|
| 0 | 订单用料 | 按订单需求采购 |
| 1 | 库存备料 | 备库采购 |
---
## 8. API 模块路径对照
| 业务模块 | API前缀 | 说明 |
|----------|---------|------|
| 生产计划单 | /mp/plan/order | 主生产计划 |
| 零部件订单 | /mp/plan/order/parts | 零部件订单 |
| 零部件计划单 | /mp/plan/order/mach | 零部件计划 |
| 物料清单 | /mp/plan/mbom | BOM运算结果 |
| 采购计划单 | /mp/plan/purchase | 订单用料计划 |
| 备库计划单 | /mp/plan/purchase/bl | 库存备料计划 |
| 计划执行明细 | /mp/plan/detail | 执行明细报表 |
| 计划执行汇总 | /mp/plan/total | 执行汇总报表 |
| 生产计划需求 | /mp/plan/reorder | 生产需求报表 |
| 采购计划需求 | /mp/plan/need | 采购需求报表 |
---
## 9. 数据权限说明
### 9.1 租户隔离
所有表都包含 `tenantId` 字段,用于多租户数据隔离。
### 9.2 数据权限范围
| 权限类型 | 说明 |
|----------|------|
| 全部数据 | 可查看所有数据 |
| 部门数据 | 只能查看本部门数据 |
| 部门及以下数据 | 可查看本部门及下级部门数据 |
| 仅本人数据 | 只能查看自己创建的数据 |
---
## 10. 关联关系说明
### 10.1 与销售模块关联
- `mp_plan.salesOrderId` -> `so_order.orderId`
- `mp_plan.salesOrderCode` -> `so_order.orderCode`
- `mp_plan_line.salesLineId` -> `so_order_line.lineId`
### 10.2 与采购模块关联
- `mp_purchase` -> `po_order` (生成采购订单)
- 采购计划审核后可生成采购订单
### 10.3 与生产模块关联
- `mp_mbom` -> `pm_task` (生成生产任务单)
- 物料清单下发后生成生产任务
### 10.4 与基础数据关联
- `itemId` -> `md_item.itemId` (物料档案)
- `bomId` -> `md_bom.bomId` (BOM档案)
- `workshopId` -> `wm_workshop.workshopId` (车间档案)