Files
my-mom-system/prd/db/mom系统同步erp字段-alter.sql
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

347 lines
17 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- MOM系统同步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 │
-- └─────────────────────┴──────────────────────────┘
--
-- ============================================================