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