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

35 KiB
Raw Permalink Blame History

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_itemerp_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