# 生产计划模块 - 数据模型 > 本文档定义生产计划模块的数据库表结构、实体关系和视图设计。 --- ## 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` (车间档案)