35 KiB
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关心的字段,不含合同/发票等财务信息。
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)
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采购订单数据,用于入库时关联溯源、齐套检查时查看采购进度。
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)
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关联。
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)
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计算后的物料需求清单,按供应方式拆解(生产/采购/委外),支撑齐套检查。
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 同步。
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)
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关联字段
-- ============================================================
-- 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 新增采购关联字段
-- ============================================================
-- 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 增强关联
-- ============================================================
-- 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 |