Files
my-mom-system/prd/db/mom系统数据升级方案-销售采购生产计划.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

681 lines
35 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.
# MOM系统数据升级方案 — 销售、采购、生产计划模块
> 版本: 1.1.0
> 创建日期: 2026-02-06
> 更新日期: 2026-02-07
> 基于: ERP数据字典 / erp数据库设计-DDL.sql / 映射对照表 v1.2.0
---
## 1. 升级背景
MOM系统当前定位为**生产执行层**不直接管理销售订单、采购订单和生产计划。但随着ERP系统集成深化MOM需要存储来自ERP的计划层数据以支撑
- 生产排程时查看销售订单交期
- 领料时关联采购订单溯源
- 工单下发时保留计划单完整信息
本方案对比两系统在三大模块的数据模型差异给出MOM侧的具体升级动作。
---
## 2. 现状对比总览
### 2.1 三模块表级覆盖率
| 模块 | ERP表数量 | MOM已有映射表 | MOM缺失 | 覆盖率 |
|------|----------|-------------|---------|--------|
| 销售管理 | 10 (含合同/发票) | 3 (间接: workorder+出库) | 销售订单独立存储、合同、发票 | 30% |
| 采购管理 | 9 (含发票) | 4 (到货通知+入库+退料) | 采购订单独立存储、发票 | 44% |
| 生产计划 | 6 | 2 (workorder+workorder_bom) | 计划单独立存储、物料清单、采购计划 | 33% |
### 2.2 关键差距
| 差距项 | 说明 | 影响 |
|--------|------|------|
| **无销售订单表** | 订单信息仅作为source_code存储在pro_workorder中 | 无法查看订单完整信息(客户/金额/交期/明细) |
| **无采购订单表** | 采购单号仅作为po_code存储在wm_arrival_notice中 | 无法追溯采购进度(下单/到货/入库链路) |
| **无生产计划单表** | 计划信息合并到pro_workorder | 丢失计划层的BOM版本/关联订单/齐套状态 |
| **无计划物料清单(MBOM)** | ERP的BOM计算结果无处存储 | 无法展示按供应方式拆解后的完整用料需求 |
| **无采购计划表** | ERP采购计划仅映射到wm_arrival_notice | 丢失计划采购量/已订量/缺口量等跟踪信息 |
| **pro_workorder缺字段** | 缺少ERP计划层的关键字段 | 缺少bom_version/bom_desc/sales_user/delivery_date等 |
---
## 3. 升级方案
### 3.1 方案总览
| 序号 | 升级动作 | 类型 | 优先级 | 说明 |
|------|----------|------|--------|------|
| A1 | 新建 `erp_sl_order` | 新建表 | P0 | 销售订单表头接收ERP数据 |
| A2 | 新建 `erp_sl_order_line` | 新建表 | P0 | 销售订单明细 |
| A3 | 新建 `erp_po_order` | 新建表 | P0 | 采购订单表头接收ERP数据 |
| A4 | 新建 `erp_po_order_line` | 新建表 | P0 | 采购订单明细 |
| A5 | 新建 `erp_mp_plan` | 新建表 | P0 | 生产计划单表头接收ERP数据 |
| A6 | 新建 `erp_mp_plan_line` | 新建表 | P0 | 生产计划单明细 |
| A7 | 新建 `erp_mp_mbom` | 新建表 | P1 | 计划物料清单表头 |
| A8 | 新建 `erp_mp_mbom_line` | 新建表 | P1 | 计划物料清单明细 |
| A9 | 新建 `erp_mp_purchase` | 新建表 | P1 | 采购计划单 |
| B1 | 修改 `pro_workorder` | ALTER | P0 | 新增ERP计划关联字段 |
| B2 | 修改 `wm_item_recpt` | ALTER | P1 | 新增采购订单关联字段 |
| B3 | 修改 `wm_arrival_notice` | ALTER | P1 | 增强采购单关联 |
### 3.2 命名规范
新建表统一采用 `erp_` 前缀与MOM已有的ERP同步表保持一致`erp_md_item``erp_md_bom_line`),便于识别数据来源:
| 表前缀 | 含义 | 举例 |
|--------|------|------|
| `erp_sl_` | 同步自ERP销售模块 | erp_sl_order |
| `erp_po_` | 同步自ERP采购模块 | erp_po_order |
| `erp_mp_` | 同步自ERP生产计划模块 | erp_mp_plan |
| `pro_` | MOM原生生产执行表 | pro_workorder (已有) |
| `wm_` | MOM原生仓库管理表 | wm_item_recpt (已有) |
---
## 4. 销售模块升级 (P0)
### 4.1 新建: 销售订单表头 (erp_sl_order)
> 用途: 接收ERP销售订单审核后的数据供生产排程和发货查询使用。只存储MOM关心的字段不含合同/发票等财务信息。
```sql
DROP TABLE IF EXISTS `erp_sl_order`;
CREATE TABLE `erp_sl_order` (
`order_id` bigint(20) NOT NULL COMMENT '订单ID (同步自ERP)',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
`order_name` varchar(100) DEFAULT NULL COMMENT '订单名称',
`order_date` date DEFAULT NULL COMMENT '订单日期',
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态(DRAFT/APPROVED/CLOSED)',
`business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态',
`order_type` varchar(20) DEFAULT NULL COMMENT '订单类型(销售/备货)',
`contract_id` bigint(20) DEFAULT NULL COMMENT '合同ID',
`contract_code` varchar(32) DEFAULT NULL COMMENT '合同编码',
`client_id` bigint(20) DEFAULT NULL COMMENT '客户ID',
`client_code` varchar(32) DEFAULT NULL COMMENT '客户编码',
`client_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
`sales_user_id` bigint(20) DEFAULT NULL COMMENT '销售员ID',
`sales_user_name` varchar(50) DEFAULT NULL COMMENT '销售员名称',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
`dept_name` varchar(50) DEFAULT NULL COMMENT '部门名称',
`delivery_date` date DEFAULT NULL COMMENT '交货日期',
`delivery_address` varchar(200) DEFAULT NULL COMMENT '收货地址',
`total_quantity` decimal(18,4) DEFAULT 0 COMMENT '总数量',
`total_amount` decimal(18,2) DEFAULT 0 COMMENT '总金额',
`delivered_quantity` decimal(18,4) DEFAULT 0 COMMENT '已发货数量',
`delivered_amount` decimal(18,2) DEFAULT 0 COMMENT '已发货金额',
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`order_id`),
UNIQUE KEY `uk_sl_order_code` (`order_code`, `tenant_id`),
KEY `idx_sl_order_client` (`client_id`),
KEY `idx_sl_order_date` (`delivery_date`),
KEY `idx_sl_order_pp` (`pp_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售订单表头(同步自ERP)';
```
**与ERP字段对照:** 已按《erp数据库设计-数据字典》与 DDL 补齐与 ERP 同名字段,保证 1:1 同步时字段一致。pp_number、erp_sync_time 为 MOM 扩展字段。
### 4.2 新建: 销售订单明细 (erp_sl_order_line)
```sql
DROP TABLE IF EXISTS `erp_sl_order_line`;
CREATE TABLE `erp_sl_order_line` (
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
`order_id` bigint(20) NOT NULL COMMENT '订单ID',
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
`line_no` int DEFAULT NULL COMMENT '行号',
`track_code` varchar(32) DEFAULT NULL COMMENT '跟单编号',
`contract_line_id` bigint(20) DEFAULT NULL COMMENT '合同明细ID',
`item_id` bigint(20) NOT NULL COMMENT '物料ID',
`item_code` varchar(64) DEFAULT NULL COMMENT '物料编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
`unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位ID',
`unit_of_measure` varchar(64) DEFAULT NULL COMMENT '计量单位',
`unit_name` varchar(64) DEFAULT NULL COMMENT '单位名称',
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '订单数量',
`unit_price` decimal(18,4) DEFAULT 0 COMMENT '单价',
`amount` decimal(18,2) DEFAULT 0 COMMENT '金额',
`delivered_qty` decimal(18,4) DEFAULT 0 COMMENT '已发货数量',
`quality_req` varchar(200) DEFAULT NULL COMMENT '质量要求',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`line_id`),
KEY `idx_sl_order_line_oid` (`order_id`),
KEY `idx_sl_order_line_item` (`item_id`),
KEY `idx_sl_order_line_track` (`track_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售订单明细(同步自ERP)';
```
---
## 5. 采购模块升级 (P0)
### 5.1 新建: 采购订单表头 (erp_po_order)
> 用途: 接收ERP采购订单数据用于入库时关联溯源、齐套检查时查看采购进度。
```sql
DROP TABLE IF EXISTS `erp_po_order`;
CREATE TABLE `erp_po_order` (
`order_id` bigint(20) NOT NULL COMMENT '订单ID (同步自ERP)',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
`order_date` date DEFAULT NULL COMMENT '订单日期',
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
`business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态',
`business_type` varchar(20) DEFAULT NULL COMMENT '业务类型',
`order_type` varchar(20) DEFAULT NULL COMMENT '单据类型',
`material_need` varchar(20) DEFAULT NULL COMMENT '用料需求',
`supplier_id` bigint(20) DEFAULT NULL COMMENT '供应商ID (与ERP一致)',
`supplier_code` varchar(32) DEFAULT NULL COMMENT '供应商编码',
`supplier_name` varchar(100) DEFAULT NULL COMMENT '供应商名称',
`dept_id` bigint(20) DEFAULT NULL COMMENT '采购部门ID',
`dept_name` varchar(50) DEFAULT NULL COMMENT '采购部门名称',
`user_id` bigint(20) DEFAULT NULL COMMENT '采购人员ID',
`user_name` varchar(50) DEFAULT NULL COMMENT '采购人员名称',
`delivery_date` date DEFAULT NULL COMMENT '到货日期',
`contract_no` varchar(50) DEFAULT NULL COMMENT '合同号',
`contract_file` varchar(500) DEFAULT NULL COMMENT '合同附件',
`total_quantity` decimal(18,4) DEFAULT 0 COMMENT '总数量',
`total_amount` decimal(18,2) DEFAULT 0 COMMENT '总金额',
`arrived_quantity` decimal(18,4) DEFAULT 0 COMMENT '已到货数量',
`plan_code` varchar(32) DEFAULT NULL COMMENT '关联计划单编码',
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`order_id`),
UNIQUE KEY `uk_po_order_code` (`order_code`, `tenant_id`),
KEY `idx_po_order_supplier` (`supplier_id`),
KEY `idx_po_order_date` (`delivery_date`),
KEY `idx_po_order_pp` (`pp_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购订单表头(同步自ERP)';
```
### 5.2 新建: 采购订单明细 (erp_po_order_line)
```sql
DROP TABLE IF EXISTS `erp_po_order_line`;
CREATE TABLE `erp_po_order_line` (
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
`order_id` bigint(20) NOT NULL COMMENT '订单ID',
`order_code` varchar(32) NOT NULL COMMENT '订单编码',
`line_no` int DEFAULT NULL COMMENT '行号',
`track_code` varchar(32) DEFAULT NULL COMMENT '跟单编号',
`plan_code` varchar(32) DEFAULT NULL COMMENT '计划单号',
`plan_line_id` bigint(20) DEFAULT NULL COMMENT '计划明细ID',
`item_id` bigint(20) NOT NULL COMMENT '物料ID',
`item_code` varchar(64) DEFAULT NULL COMMENT '物料编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '型号规格',
`unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位ID',
`unit_of_measure` varchar(64) DEFAULT NULL COMMENT '计量单位',
`unit_name` varchar(64) DEFAULT NULL COMMENT '单位名称',
`need_date` date DEFAULT NULL COMMENT '需求日期',
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '采购数量',
`unit_price` decimal(18,4) DEFAULT 0 COMMENT '采购单价',
`amount` decimal(18,2) DEFAULT 0 COMMENT '金额',
`arrived_quantity` decimal(18,4) DEFAULT 0 COMMENT '已到货数量',
`remark` varchar(500) DEFAULT NULL COMMENT '采购说明',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`line_id`),
KEY `idx_po_order_line_oid` (`order_id`),
KEY `idx_po_order_line_item` (`item_id`),
KEY `idx_po_order_line_track` (`track_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购订单明细(同步自ERP)';
```
---
## 6. 生产计划模块升级 (P0)
### 6.1 新建: 生产计划单表头 (erp_mp_plan)
> 用途: 接收ERP生产计划单数据保留计划层的完整信息BOM版本、关联销售订单、计划数量等pro_workorder通过source_code关联。
```sql
DROP TABLE IF EXISTS `erp_mp_plan`;
CREATE TABLE `erp_mp_plan` (
`plan_id` bigint(20) NOT NULL COMMENT '计划ID (同步自ERP)',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`plan_code` varchar(32) NOT NULL COMMENT '计划单编码',
`plan_date` date DEFAULT NULL COMMENT '计划日期',
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
`business_status` varchar(20) DEFAULT 'NORMAL' COMMENT '业务状态',
`business_type` varchar(20) DEFAULT NULL COMMENT '业务类型',
`work_type` int DEFAULT 0 COMMENT '工作类型(0计划单/1零部件计划/2零部件订单)',
`sales_order_id` bigint(20) DEFAULT NULL COMMENT '销售订单ID',
`sales_order_code` varchar(32) DEFAULT NULL COMMENT '销售订单编码',
`sales_user_id` bigint(20) DEFAULT NULL COMMENT '销售员ID',
`sales_user_name` varchar(50) DEFAULT NULL COMMENT '销售员名称',
`delivery_date` date DEFAULT NULL COMMENT '订单交期',
`bom_id` bigint(20) DEFAULT NULL COMMENT 'BOM ID',
`bom_version` varchar(20) DEFAULT NULL COMMENT 'BOM版本号',
`bom_desc` varchar(200) DEFAULT NULL COMMENT 'BOM版本说明',
`total_quantity` decimal(18,4) DEFAULT 0 COMMENT '生产总量',
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`plan_id`),
UNIQUE KEY `uk_mp_plan_code` (`plan_code`, `tenant_id`),
KEY `idx_mp_plan_sales` (`sales_order_code`),
KEY `idx_mp_plan_date` (`plan_date`),
KEY `idx_mp_plan_pp` (`pp_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产计划单表头(同步自ERP)';
```
### 6.2 新建: 生产计划单明细 (erp_mp_plan_line)
```sql
DROP TABLE IF EXISTS `erp_mp_plan_line`;
CREATE TABLE `erp_mp_plan_line` (
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
`plan_id` bigint(20) NOT NULL COMMENT '计划ID',
`plan_code` varchar(32) NOT NULL COMMENT '计划单编码',
`line_no` int DEFAULT NULL COMMENT '行号',
`sales_line_id` bigint(20) DEFAULT NULL COMMENT '销售订单明细ID',
`track_code` varchar(32) DEFAULT NULL COMMENT '跟单编号',
`item_id` bigint(20) NOT NULL COMMENT '产品物料ID',
`item_code` varchar(64) DEFAULT NULL COMMENT '产品物料编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '产品物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
`unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位ID',
`unit_of_measure` varchar(64) DEFAULT NULL COMMENT '计量单位',
`unit_name` varchar(64) DEFAULT NULL COMMENT '单位名称',
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '计划数量',
`supply_type` varchar(20) DEFAULT NULL COMMENT '供应方式',
`quality_req` varchar(200) DEFAULT NULL COMMENT '质量要求',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`line_id`),
KEY `idx_mp_plan_line_pid` (`plan_id`),
KEY `idx_mp_plan_line_item` (`item_id`),
KEY `idx_mp_plan_line_sales` (`sales_line_id`),
KEY `idx_mp_plan_line_track` (`track_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产计划单明细(同步自ERP)';
```
---
## 7. 生产计划模块升级 (P1)
### 7.1 新建: 计划物料清单表头 (erp_mp_mbom)
> 用途: 接收ERP BOM计算后的物料需求清单按供应方式拆解生产/采购/委外),支撑齐套检查。
```sql
DROP TABLE IF EXISTS `erp_mp_mbom`;
CREATE TABLE `erp_mp_mbom` (
`mbom_id` bigint(20) NOT NULL COMMENT '物料清单ID (同步自ERP)',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`mbom_code` varchar(32) NOT NULL COMMENT '物料清单编码',
`mbom_date` date DEFAULT NULL COMMENT '单据日期',
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
`business_type` varchar(20) DEFAULT NULL COMMENT '业务类型',
`issue_status` varchar(20) DEFAULT NULL COMMENT '下发状态',
`plan_id` bigint(20) NOT NULL COMMENT '生产计划ID',
`plan_code` varchar(32) NOT NULL COMMENT '生产计划编码',
`sales_order_id` bigint(20) DEFAULT NULL COMMENT '销售订单ID',
`sales_order_code` varchar(32) DEFAULT NULL COMMENT '销售订单编码',
`delivery_date` date DEFAULT NULL COMMENT '订单交期',
`item_id` bigint(20) NOT NULL COMMENT '产品物料ID',
`item_code` varchar(64) DEFAULT NULL COMMENT '产品物料编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '产品物料名称',
`unit_name` varchar(64) DEFAULT NULL COMMENT '计量单位',
`supply_type` varchar(20) DEFAULT NULL COMMENT '供应方式(生产/加工/装配/委外/采购)',
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '生产数量',
`workshop_id` bigint(20) DEFAULT NULL COMMENT '下发车间ID',
`workshop_name` varchar(50) DEFAULT NULL COMMENT '下发车间名称',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
`completed_qty` decimal(18,4) DEFAULT 0 COMMENT '已完成数量(MOM回写)',
`workorder_id` bigint(20) DEFAULT NULL COMMENT '关联MOM工单ID(MOM扩展)',
`workorder_code` varchar(64) DEFAULT NULL COMMENT '关联MOM工单编码(MOM扩展)',
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号(MOM扩展)',
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`mbom_id`),
KEY `idx_mp_mbom_plan` (`plan_id`),
KEY `idx_mp_mbom_item` (`item_id`),
KEY `idx_mp_mbom_wo` (`workorder_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计划物料清单表头(同步自ERP)';
```
### 7.2 新建: 计划物料清单明细 (erp_mp_mbom_line)
> 与 ERP `erp_mp_mbom_line` 字段一致,保证 1:1 同步。
```sql
DROP TABLE IF EXISTS `erp_mp_mbom_line`;
CREATE TABLE `erp_mp_mbom_line` (
`line_id` bigint(20) NOT NULL COMMENT '明细ID (同步自ERP)',
`mbom_id` bigint(20) NOT NULL COMMENT '物料清单ID',
`mbom_code` varchar(32) NOT NULL COMMENT '物料清单编码',
`line_no` int DEFAULT NULL COMMENT '行号',
`parent_item_id` bigint(20) DEFAULT NULL COMMENT '父级物料ID',
`bom_level` int DEFAULT 1 COMMENT 'BOM层级',
`item_id` bigint(20) NOT NULL COMMENT '子件物料ID',
`item_code` varchar(64) DEFAULT NULL COMMENT '子件物料编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '子件物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '型号规格',
`unit_name` varchar(64) DEFAULT NULL COMMENT '计量单位',
`base_qty` decimal(18,6) DEFAULT 1 COMMENT '基本用量',
`quantity` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '需求数量',
`loss_rate` decimal(5,2) DEFAULT 0 COMMENT '损耗率(%)',
`supply_type` varchar(20) DEFAULT NULL COMMENT '供应方式',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`line_id`),
KEY `idx_mp_mbom_line_mbom` (`mbom_id`),
KEY `idx_mp_mbom_line_item` (`item_id`),
KEY `idx_mp_mbom_line_parent` (`parent_item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计划物料清单明细(同步自ERP)';
```
### 7.3 新建: 采购计划单 (erp_mp_purchase)
```sql
DROP TABLE IF EXISTS `erp_mp_purchase`;
CREATE TABLE `erp_mp_purchase` (
`purchase_id` bigint(20) NOT NULL COMMENT '采购计划ID (同步自ERP)',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户ID',
`purchase_code` varchar(32) NOT NULL COMMENT '采购计划编码',
`purchase_date` date DEFAULT NULL COMMENT '计划日期',
`status` varchar(20) DEFAULT 'DRAFT' COMMENT '单据状态',
`need_type` int DEFAULT 0 COMMENT '需求方式(0订单用料/1库存备料)',
`plan_id` bigint(20) DEFAULT NULL COMMENT '生产计划ID',
`plan_code` varchar(32) DEFAULT NULL COMMENT '生产计划编码',
`sales_order_id` bigint(20) DEFAULT NULL COMMENT '销售订单ID',
`sales_order_code` varchar(32) DEFAULT NULL COMMENT '销售订单编码',
`delivery_date` date DEFAULT NULL COMMENT '订单交期',
`item_id` bigint(20) NOT NULL COMMENT '物料ID',
`item_code` varchar(64) DEFAULT NULL COMMENT '物料编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '物料名称',
`specification` varchar(500) DEFAULT NULL COMMENT '型号规格',
`unit_name` varchar(64) DEFAULT NULL COMMENT '计量单位',
`purchase_qty` decimal(18,4) NOT NULL DEFAULT 0 COMMENT '采购数量',
`ordered_qty` decimal(18,4) DEFAULT 0 COMMENT '已下单数量',
`arrived_qty` decimal(18,4) DEFAULT 0 COMMENT '已到货数量(MOM扩展)',
`pp_number` varchar(50) DEFAULT NULL COMMENT '跟单编号(MOM扩展)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`operator_id` bigint(20) DEFAULT NULL COMMENT '操作员ID',
`operator_name` varchar(50) DEFAULT NULL COMMENT '操作员名称',
`approver_id` bigint(20) DEFAULT NULL COMMENT '审核员ID',
`approver_name` varchar(50) DEFAULT NULL COMMENT '审核员名称',
`approve_date` datetime DEFAULT NULL COMMENT '审核日期',
`erp_sync_time` datetime DEFAULT NULL COMMENT 'ERP同步时间',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`purchase_id`),
KEY `idx_mp_purchase_plan` (`plan_id`),
KEY `idx_mp_purchase_item` (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划单(同步自ERP)';
```
---
## 8. 现有表结构升级 (ALTER)
### 8.1 pro_workorder 新增ERP关联字段
```sql
-- ============================================================
-- pro_workorder 新增ERP计划层关联字段
-- ============================================================
-- 关联ERP计划单保留完整计划信息
CALL proc_add_column_if_not_exists('pro_workorder', 'plan_id', 'bigint(20) DEFAULT NULL COMMENT ''ERP生产计划ID''');
CALL proc_add_column_if_not_exists('pro_workorder', 'plan_code', 'varchar(32) DEFAULT NULL COMMENT ''ERP生产计划编码''');
-- BOM版本信息ERP选择的具体BOM版本
CALL proc_add_column_if_not_exists('pro_workorder', 'bom_id', 'bigint(20) DEFAULT NULL COMMENT ''BOM ID''');
CALL proc_add_column_if_not_exists('pro_workorder', 'bom_version', 'varchar(20) DEFAULT NULL COMMENT ''BOM版本号''');
-- 销售订单交期(排程核心参数)
CALL proc_add_column_if_not_exists('pro_workorder', 'delivery_date', 'date DEFAULT NULL COMMENT ''订单交货日期''');
-- 销售员(跟单查询)
CALL proc_add_column_if_not_exists('pro_workorder', 'sales_user_name', 'varchar(50) DEFAULT NULL COMMENT ''销售员''');
-- 跟单编号ERP全流程追溯
CALL proc_add_column_if_not_exists('pro_workorder', 'pp_number', 'varchar(50) DEFAULT NULL COMMENT ''跟单编号(ERP全流程追溯)''');
-- MBOM关联对应ERP物料清单哪一条
CALL proc_add_column_if_not_exists('pro_workorder', 'mbom_id', 'bigint(20) DEFAULT NULL COMMENT ''ERP物料清单ID''');
CALL proc_add_column_if_not_exists('pro_workorder', 'mbom_code', 'varchar(32) DEFAULT NULL COMMENT ''ERP物料清单编码''');
-- ERP同步标记
CALL proc_add_column_if_not_exists('pro_workorder', 'erp_sync_time', 'datetime DEFAULT NULL COMMENT ''ERP同步时间''');
-- 创建索引
CALL proc_add_index_if_not_exists('pro_workorder', 'idx_wo_plan', 'plan_code');
CALL proc_add_index_if_not_exists('pro_workorder', 'idx_wo_pp', 'pp_number');
CALL proc_add_index_if_not_exists('pro_workorder', 'idx_wo_delivery', 'delivery_date');
```
### 8.2 wm_item_recpt 新增采购关联字段
```sql
-- ============================================================
-- wm_item_recpt 增强采购订单关联
-- ============================================================
-- 采购订单关联已有po_code字段补充订单ID和行ID
CALL proc_add_column_if_not_exists('wm_item_recpt', 'po_order_id', 'bigint(20) DEFAULT NULL COMMENT ''采购订单ID''');
CALL proc_add_column_if_not_exists('wm_item_recpt', 'po_line_id', 'bigint(20) DEFAULT NULL COMMENT ''采购订单行ID''');
-- 跟单编号
CALL proc_add_column_if_not_exists('wm_item_recpt', 'pp_number', 'varchar(50) DEFAULT NULL COMMENT ''跟单编号''');
-- ERP同步标记
CALL proc_add_column_if_not_exists('wm_item_recpt', 'erp_sync_time', 'datetime DEFAULT NULL COMMENT ''ERP同步时间''');
```
### 8.3 wm_arrival_notice 增强关联
```sql
-- ============================================================
-- wm_arrival_notice 增强采购计划关联
-- ============================================================
-- 采购计划关联
CALL proc_add_column_if_not_exists('wm_arrival_notice', 'purchase_plan_id', 'bigint(20) DEFAULT NULL COMMENT ''采购计划ID''');
CALL proc_add_column_if_not_exists('wm_arrival_notice', 'purchase_plan_code', 'varchar(32) DEFAULT NULL COMMENT ''采购计划编码''');
-- 跟单编号
CALL proc_add_column_if_not_exists('wm_arrival_notice', 'pp_number', 'varchar(50) DEFAULT NULL COMMENT ''跟单编号''');
```
---
## 9. 数据同步策略
### 9.1 同步方向和时机
| 同步路径 | 方向 | 触发时机 | 说明 |
|---------|------|---------|------|
| erp_sl_order → erp_sl_order | ERP→MOM | 销售订单审核后 | 只同步已审核订单 |
| erp_po_order → erp_po_order | ERP→MOM | 采购订单审核后 | 只同步已审核订单 |
| erp_mp_plan → erp_mp_plan | ERP→MOM | 生产计划审核后 | 只同步已审核计划 |
| erp_mp_plan → pro_workorder | ERP→MOM | 计划下发时 | BOM计算后按供应方式拆解创建工单 |
| erp_mp_mbom → erp_mp_mbom | ERP→MOM | BOM计算完成后 | 保留计划层完整物料需求 |
| erp_mp_purchase → erp_mp_purchase | ERP→MOM | 采购计划审核后 | 同步采购需求 |
| pro_workorder.status → erp_mp_mbom | MOM→ERP | 工单完工时 | 回写已完成数量 |
| wm_item_recpt → erp_po_checkin | MOM→ERP | 入库审核时 | 回写已入库数量 |
### 9.2 主键策略
| 策略 | 说明 |
|------|------|
| **使用ERP主键** | erp_sl/po/mp 新表的主键直接使用ERP侧的ID值非自增确保一一对应 |
| **编码关联** | pro_workorder 通过 `source_code = plan_code` 关联不存储ERP主键 |
| **同步时间戳** | 所有同步表增加 `erp_sync_time` 字段,用于增量同步判断 |
### 9.3 状态值映射
| ERP状态 | MOM存储值 | 说明 |
|---------|----------|------|
| DRAFT(开立) | DRAFT | 直接存储,不转换 |
| APPROVED(审核) | APPROVED | 直接存储 |
| CLOSED(关闭) | CLOSED | 直接存储 |
| CANCELLED(取消) | CANCELLED | 直接存储 |
> **原则**: erp_sl/po/mp 表作为ERP数据的镜像状态值不做转换保持与ERP一致。仅pro_workorder的状态使用MOM自有体系(PREPARE/CONFIRMED/PRODUCING/FINISHED)。
---
## 10. 执行计划
### 10.1 执行顺序
```
阶段1 (P0 - 基础表创建):
├── 1.1 创建 erp_sl_order / erp_sl_order_line
├── 1.2 创建 erp_po_order / erp_po_order_line
├── 1.3 创建 erp_mp_plan / erp_mp_plan_line
└── 1.4 ALTER pro_workorder (新增关联字段)
阶段2 (P1 - 扩展表创建):
├── 2.1 创建 erp_mp_mbom / erp_mp_mbom_line (DDL见 7.1、7.2字段与ERP数据字典一致)
├── 2.2 创建 erp_mp_purchase (DDL见 7.3)
├── 2.3 ALTER wm_item_recpt
└── 2.4 ALTER wm_arrival_notice
阶段3 (同步接口开发):
├── 3.1 ERP→MOM 数据同步API
├── 3.2 MOM→ERP 回写API
└── 3.3 增量同步定时任务
```
### 10.2 回滚策略
所有新建表使用 `DROP TABLE IF EXISTS` 前缀可安全回滚。ALTER操作使用 `proc_add_column_if_not_exists` 存储过程,具有幂等性。
### 10.3 验证清单
| 检查项 | 验证SQL |
|--------|---------|
| 新表已创建 | `SHOW TABLES LIKE 'erp_%';` |
| pro_workorder字段已加 | `SHOW COLUMNS FROM pro_workorder LIKE 'plan_code';` |
| 索引已创建 | `SHOW INDEX FROM erp_sl_order;` |
| 数据同步测试 | `SELECT COUNT(*) FROM erp_sl_order WHERE erp_sync_time IS NOT NULL;` |
---
## 11. 升级前后对比
### 升级前
```
ERP MOM
┌──────────┐ ┌──────────────┐
│ sl_order │──(只传编码)──────►│ pro_workorder │
│ sl_line │ │ .source_code │
└──────────┘ └──────────────┘
┌──────────┐ ┌──────────────┐
│ po_order │──(只传编码)──────►│wm_arrival_ │
│ po_line │ │ notice.po_code│
└──────────┘ └──────────────┘
┌──────────┐ ┌──────────────┐
│ mp_plan │──(转成工单)──────►│ pro_workorder │
│ mp_mbom │ │ (丢失计划信息)│
└──────────┘ └──────────────┘
```
### 升级后
```
ERP MOM
┌──────────┐ ┌───────────┐ ┌──────────────┐
│ sl_order │──►│erp_sl_order│──►│ pro_workorder │
│ sl_line │ │erp_sl_line │ │ .plan_code │
└──────────┘ └───────────┘ │ .pp_number │
│ .delivery_date│
┌──────────┐ ┌───────────┐ └──────┬───────┘
│ po_order │──►│erp_po_order│──►│wm_item_recpt │
│ po_line │ │erp_po_line │ │.po_order_id │
└──────────┘ └───────────┘ └──────────────┘
┌──────────┐ ┌───────────┐ ┌──────────────┐
│ mp_plan │──►│erp_mp_plan │──►│ pro_workorder │
│ mp_mbom │ │erp_mp_mbom │ │ .plan_code │
│ mp_purch │ │erp_mp_purch│ │ .bom_version │
└──────────┘ └───────────┘ └──────────────┘
```
**升级收益**: MOM系统获得完整的计划层数据镜像可实现订单交期可视化、采购进度追踪、计划-执行全链路追溯同时不破坏MOM原有的生产执行数据结构。
---
## 修订历史
| 版本 | 日期 | 修订内容 | 修订人 |
|------|------|----------|--------|
| 1.0.0 | 2026-02-06 | 初始版本 | System |
| 1.0.1 | 2026-02-06 | 新表前缀由 mom_ 统一改为 erp_与已有ERP同步表命名一致 | System |
| 1.1.0 | 2026-02-07 | 与ERP同名字段补齐对照《erp数据库设计-数据字典》及 DDL对 erp_sl_order/line、erp_po_order/line、erp_mp_plan/line、erp_mp_mbom、erp_mp_mbom_line、erp_mp_purchase 补齐ERP中已有字段采购表统一为 supplier_id/code/name销售明细 track_code/contract_line_id/unit_id/unit_price/amount/quality_req补全 erp_mp_mbom_line 的 DDL | System |