-- ============================================================ -- MOM系统同步ERP字段 ALTER TABLE 脚本 -- 将ERP系统的以下表的字段同步到MOM系统对应表: -- - erp_md_item -> md_item -- - erp_md_item_type -> md_item_type -- - erp_md_unit -> md_unit_measure -- - erp_md_bom, erp_md_bom_line -> md_product_bom -- 生成日期: 2026-01-26 -- 兼容 MySQL 5.7+ -- ============================================================ SET NAMES utf8mb4; -- ============================================================ -- 辅助存储过程: 安全添加字段 (字段不存在时才添加) -- ============================================================ DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`; DELIMITER // CREATE PROCEDURE `proc_add_column_if_not_exists`( IN p_table_name VARCHAR(64), IN p_column_name VARCHAR(64), IN p_column_definition VARCHAR(500) ) BEGIN DECLARE v_count INT DEFAULT 0; SELECT COUNT(*) INTO v_count FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table_name AND COLUMN_NAME = p_column_name; IF v_count = 0 THEN SET @sql = CONCAT('ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_column_definition); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT CONCAT('Added column: ', p_table_name, '.', p_column_name) AS result; ELSE SELECT CONCAT('Column already exists: ', p_table_name, '.', p_column_name) AS result; END IF; END // -- 辅助存储过程: 安全创建索引 (索引不存在时才创建) CREATE PROCEDURE `proc_add_index_if_not_exists`( IN p_table_name VARCHAR(64), IN p_index_name VARCHAR(64), IN p_column_name VARCHAR(64) ) BEGIN DECLARE v_count INT DEFAULT 0; SELECT COUNT(*) INTO v_count FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table_name AND INDEX_NAME = p_index_name; IF v_count = 0 THEN SET @sql = CONCAT('CREATE INDEX `', p_index_name, '` ON `', p_table_name, '` (`', p_column_name, '`)'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT CONCAT('Created index: ', p_index_name) AS result; ELSE SELECT CONCAT('Index already exists: ', p_index_name) AS result; END IF; END // DELIMITER ; -- ============================================================ -- 1. md_item 表新增字段 (物料产品表) -- ============================================================ -- 新增租户ID字段 CALL proc_add_column_if_not_exists('md_item', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID'''); -- 新增二级分类编码 CALL proc_add_column_if_not_exists('md_item', 'item_sub_type_code', 'varchar(32) DEFAULT NULL COMMENT ''二级分类编码'''); -- 新增二级分类名称 CALL proc_add_column_if_not_exists('md_item', 'item_sub_type_name', 'varchar(50) DEFAULT NULL COMMENT ''二级分类名称'''); -- 新增默认仓库ID CALL proc_add_column_if_not_exists('md_item', 'default_warehouse_id', 'bigint(20) DEFAULT NULL COMMENT ''默认仓库ID'''); -- 新增默认仓库名称 CALL proc_add_column_if_not_exists('md_item', 'default_warehouse_name', 'varchar(50) DEFAULT NULL COMMENT ''默认仓库名称'''); -- 新增重量 CALL proc_add_column_if_not_exists('md_item', 'weight', 'decimal(18,6) DEFAULT NULL COMMENT ''重量(kg)'''); -- 新增体积 CALL proc_add_column_if_not_exists('md_item', 'volume', 'decimal(18,6) DEFAULT NULL COMMENT ''体积(m³)'''); -- 新增删除标志 CALL proc_add_column_if_not_exists('md_item', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志 (0存在 1删除)'''); -- 新增备注字段 CALL proc_add_column_if_not_exists('md_item', 'remark', 'varchar(500) DEFAULT NULL COMMENT ''备注'''); -- 创建索引 CALL proc_add_index_if_not_exists('md_item', 'idx_item_tenant', 'tenant_id'); -- ============================================================ -- 2. md_item_type 表新增字段 (物料分类表) -- ============================================================ -- 新增租户ID字段 CALL proc_add_column_if_not_exists('md_item_type', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID'''); -- 新增删除标志 CALL proc_add_column_if_not_exists('md_item_type', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志 (0存在 1删除)'''); -- 扩展ancestors字段长度 (从255扩展到500) -- 注意: 这个操作是安全的,扩展长度不会丢失数据 ALTER TABLE `md_item_type` MODIFY COLUMN `ancestors` varchar(500) DEFAULT NULL COMMENT '所有层级父节点'; -- 创建索引 CALL proc_add_index_if_not_exists('md_item_type', 'idx_item_type_tenant', 'tenant_id'); -- ============================================================ -- 3. md_unit_measure 表新增字段 (计量单位表) -- ============================================================ -- 新增租户ID字段 CALL proc_add_column_if_not_exists('md_unit_measure', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID'''); -- 新增主单位ID CALL proc_add_column_if_not_exists('md_unit_measure', 'primary_id', 'bigint(20) DEFAULT NULL COMMENT ''主单位ID'''); -- 新增是否主单位标志 CALL proc_add_column_if_not_exists('md_unit_measure', 'primary_flag', 'char(1) NOT NULL DEFAULT ''Y'' COMMENT ''是否主单位(Y/N)'''); -- 新增换算比例 CALL proc_add_column_if_not_exists('md_unit_measure', 'change_rate', 'decimal(18,6) DEFAULT 1.000000 COMMENT ''与主单位换算比例'''); -- 新增删除标志 CALL proc_add_column_if_not_exists('md_unit_measure', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志 (0存在 1删除)'''); -- 创建索引 CALL proc_add_index_if_not_exists('md_unit_measure', 'idx_measure_tenant', 'tenant_id'); -- ============================================================ -- 清理: 删除辅助存储过程 (可选) -- ============================================================ -- DROP PROCEDURE IF EXISTS `proc_add_column_if_not_exists`; -- DROP PROCEDURE IF EXISTS `proc_add_index_if_not_exists`; -- ============================================================ -- 4. md_product_bom 表新增字段 (产品BOM关系表) -- 同步自ERP: erp_md_bom, erp_md_bom_line -- ============================================================ -- 新增BOM编码 (来自 erp_md_bom.bom_code) CALL proc_add_column_if_not_exists('md_product_bom', 'bom_code', 'varchar(32) DEFAULT NULL COMMENT ''BOM编码'''); -- 新增BOM名称 (来自 erp_md_bom.bom_name) CALL proc_add_column_if_not_exists('md_product_bom', 'bom_name', 'varchar(100) DEFAULT NULL COMMENT ''BOM名称'''); -- 新增版本号 (来自 erp_md_bom.version) CALL proc_add_column_if_not_exists('md_product_bom', 'version', 'varchar(20) DEFAULT NULL COMMENT ''版本号'''); -- 新增版本说明 (来自 erp_md_bom.version_desc) CALL proc_add_column_if_not_exists('md_product_bom', 'version_desc', 'varchar(200) DEFAULT NULL COMMENT ''版本说明'''); -- 新增状态 (来自 erp_md_bom.status) CALL proc_add_column_if_not_exists('md_product_bom', 'status', 'varchar(20) DEFAULT ''APPROVED'' COMMENT ''BOM状态(DRAFT/APPROVED/OBSOLETE)'''); -- 新增行号 (来自 erp_md_bom_line.line_no) CALL proc_add_column_if_not_exists('md_product_bom', 'line_no', 'int(11) DEFAULT 0 COMMENT ''BOM行号'''); -- 新增损耗率 (来自 erp_md_bom_line.loss_rate) CALL proc_add_column_if_not_exists('md_product_bom', 'loss_rate', 'decimal(5,2) DEFAULT 0.00 COMMENT ''损耗率(%)'''); -- 新增供应方式 (来自 erp_md_bom_line.supply_type) CALL proc_add_column_if_not_exists('md_product_bom', 'supply_type', 'varchar(20) DEFAULT ''PURCHASE'' COMMENT ''供应方式(PURCHASE/PRODUCE/OUTSOURCE)'''); -- 新增租户ID CALL proc_add_column_if_not_exists('md_product_bom', 'tenant_id', 'varchar(20) DEFAULT NULL COMMENT ''租户ID'''); -- 新增删除标志 (来自 erp_md_bom.del_flag) CALL proc_add_column_if_not_exists('md_product_bom', 'del_flag', 'char(1) NOT NULL DEFAULT ''0'' COMMENT ''删除标志(0存在 1删除)'''); -- 创建索引 CALL proc_add_index_if_not_exists('md_product_bom', 'idx_bom_item', 'item_id'); CALL proc_add_index_if_not_exists('md_product_bom', 'idx_bom_tenant', 'tenant_id'); CALL proc_add_index_if_not_exists('md_product_bom', 'idx_bom_code', 'bom_code'); -- ============================================================ -- 5. md_item 表新增BOM相关字段 (来自 erp_md_bom) -- 物料档案表关联默认BOM信息 -- ============================================================ -- 新增默认BOM ID (关联 erp_md_bom.bom_id) CALL proc_add_column_if_not_exists('md_item', 'default_bom_id', 'bigint(20) DEFAULT NULL COMMENT ''默认BOM ID'''); -- 新增默认BOM编码 (关联 erp_md_bom.bom_code) CALL proc_add_column_if_not_exists('md_item', 'default_bom_code', 'varchar(32) DEFAULT NULL COMMENT ''默认BOM编码'''); -- 新增默认BOM名称 (关联 erp_md_bom.bom_name) CALL proc_add_column_if_not_exists('md_item', 'default_bom_name', 'varchar(100) DEFAULT NULL COMMENT ''默认BOM名称'''); -- 新增基本数量 (来自 erp_md_bom.base_qty) CALL proc_add_column_if_not_exists('md_item', 'base_qty', 'decimal(18,4) DEFAULT 1.0000 COMMENT ''基本数量'''); -- 新增默认BOM版本号 (关联 erp_md_bom.version) CALL proc_add_column_if_not_exists('md_item', 'default_bom_version', 'varchar(20) DEFAULT NULL COMMENT ''默认BOM版本号'''); -- 创建索引 CALL proc_add_index_if_not_exists('md_item', 'idx_item_default_bom', 'default_bom_id'); -- ============================================================ -- 6. md_product_bom 表补充字段 (来自 erp_md_bom_line) -- ============================================================ -- 新增基本用量 (来自 erp_md_bom_line.base_qty) -- 注: quantity字段已存在,这里添加base_qty作为原始用量 CALL proc_add_column_if_not_exists('md_product_bom', 'base_qty', 'decimal(18,6) DEFAULT 1.000000 COMMENT ''基本用量(同步自ERP)'''); -- 新增产品物料编码 (来自 erp_md_bom.item_code) CALL proc_add_column_if_not_exists('md_product_bom', 'item_code', 'varchar(32) DEFAULT NULL COMMENT ''产品物料编码'''); -- 新增产品物料名称 (来自 erp_md_bom.item_name) CALL proc_add_column_if_not_exists('md_product_bom', 'item_name', 'varchar(100) DEFAULT NULL COMMENT ''产品物料名称'''); -- 新增产品物料规格 (关联查询) CALL proc_add_column_if_not_exists('md_product_bom', 'item_spec', 'varchar(200) DEFAULT NULL COMMENT ''产品物料规格'''); -- 新增子件规格 (来自 erp_md_bom_line.specification) CALL proc_add_column_if_not_exists('md_product_bom', 'specification', 'varchar(200) DEFAULT NULL COMMENT ''子件规格型号'''); -- 新增计量单位名称 (来自 erp_md_bom_line.unit_name) CALL proc_add_column_if_not_exists('md_product_bom', 'unit_name', 'varchar(20) DEFAULT NULL COMMENT ''计量单位名称'''); -- 确保enable_flag字段存在 CALL proc_add_column_if_not_exists('md_product_bom', 'enable_flag', 'char(1) DEFAULT ''Y'' COMMENT ''是否启用(Y/N)'''); -- ============================================================ -- 字段变更汇总 -- ============================================================ -- -- md_item (物料产品表) 新增字段: -- - tenant_id: 租户ID -- - item_sub_type_code: 二级分类编码 -- - item_sub_type_name: 二级分类名称 -- - default_warehouse_id: 默认仓库ID -- - default_warehouse_name: 默认仓库名称 -- - weight: 重量(kg) -- - volume: 体积(m³) -- - del_flag: 删除标志 -- - remark: 备注 -- -- md_item_type (物料分类表) 新增字段: -- - tenant_id: 租户ID -- - del_flag: 删除标志 -- - ancestors: 字段长度从255扩展到500 -- -- md_unit_measure (计量单位表) 新增字段: -- - tenant_id: 租户ID -- - primary_id: 主单位ID -- - primary_flag: 是否主单位 -- - change_rate: 与主单位换算比例 -- - del_flag: 删除标志 -- -- md_product_bom (产品BOM关系表) 新增字段: -- - bom_code: BOM编码 (来自 erp_md_bom) -- - bom_name: BOM名称 (来自 erp_md_bom) -- - version: 版本号 (来自 erp_md_bom) -- - version_desc: 版本说明 (来自 erp_md_bom) -- - status: BOM状态 (来自 erp_md_bom) -- - line_no: 行号 (来自 erp_md_bom_line) -- - loss_rate: 损耗率(%) (来自 erp_md_bom_line) -- - supply_type: 供应方式 (来自 erp_md_bom_line) -- - base_qty: 基本用量 (来自 erp_md_bom_line) -- - item_code: 产品物料编码 (来自 erp_md_bom) -- - item_name: 产品物料名称 (来自 erp_md_bom) -- - item_spec: 产品物料规格 -- - specification: 子件规格型号 (来自 erp_md_bom_line) -- - unit_name: 计量单位名称 (来自 erp_md_bom_line) -- - enable_flag: 是否启用 -- - tenant_id: 租户ID -- - del_flag: 删除标志 -- -- md_item (物料产品表) 新增BOM关联字段: -- - default_bom_id: 默认BOM ID (来自 erp_md_bom) -- - default_bom_code: 默认BOM编码 (来自 erp_md_bom) -- - default_bom_name: 默认BOM名称 (来自 erp_md_bom) -- - base_qty: 基本数量 (来自 erp_md_bom) -- - default_bom_version: 默认BOM版本号 (来自 erp_md_bom) -- -- ============================================================ -- ERP BOM字段映射说明: -- ============================================================ -- -- erp_md_bom (BOM表头) -> md_item (关联字段) + md_product_bom (表头字段) -- ┌─────────────────────┬───────────────────────┬──────────────────────────┐ -- │ ERP字段 │ MOM md_item字段 │ MOM md_product_bom字段 │ -- ├─────────────────────┼───────────────────────┼──────────────────────────┤ -- │ bom_id │ default_bom_id │ - │ -- │ bom_code │ default_bom_code │ bom_code │ -- │ bom_name │ default_bom_name │ bom_name │ -- │ item_id │ - │ item_id │ -- │ item_code │ - │ item_code │ -- │ item_name │ - │ item_name │ -- │ unit_name │ - │ - │ -- │ base_qty │ base_qty │ - │ -- │ version │ default_bom_version │ version │ -- │ version_desc │ - │ version_desc │ -- │ status │ - │ status │ -- │ enable_flag │ - │ enable_flag │ -- │ del_flag │ - │ del_flag │ -- └─────────────────────┴───────────────────────┴──────────────────────────┘ -- -- erp_md_bom_line (BOM明细) -> md_product_bom (明细字段) -- ┌─────────────────────┬──────────────────────────┐ -- │ ERP字段 │ MOM md_product_bom字段 │ -- ├─────────────────────┼──────────────────────────┤ -- │ line_id │ bom_id │ -- │ bom_id │ (通过bom_code关联) │ -- │ line_no │ line_no │ -- │ item_id │ bom_item_id │ -- │ item_code │ bom_item_code │ -- │ item_name │ bom_item_name │ -- │ specification │ bom_item_spec │ -- │ unit_name │ unit_name │ -- │ base_qty │ base_qty / quantity │ -- │ loss_rate │ loss_rate │ -- │ supply_type │ supply_type │ -- │ remark │ remark │ -- │ del_flag │ del_flag │ -- │ tenant_id │ tenant_id │ -- └─────────────────────┴──────────────────────────┘ -- -- ============================================================