-- OMS 业务表 — 数据权限 P1 扩展字段 -- 设计文档:E:\oms0414\docs\数据权限设计.md §4.8 -- 可重复执行(information_schema 判断) -- t_customer.OrganizationId SET @db = DATABASE(); SET @sql = IF( (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_customer' AND COLUMN_NAME = 'OrganizationId') = 0, 'ALTER TABLE `t_customer` ADD COLUMN `OrganizationId` CHAR(36) NULL COMMENT ''归属销售组织 FK organization.Id'' AFTER `CustomerGroup`', 'SELECT ''skip t_customer.OrganizationId'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = IF( (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_customer' AND INDEX_NAME = 'idx_cus_organization') = 0, 'ALTER TABLE `t_customer` ADD KEY `idx_cus_organization` (`OrganizationId`)', 'SELECT ''skip idx_cus_organization'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- t_order.OrganizationId + SecretLevel SET @sql = IF( (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND COLUMN_NAME = 'OrganizationId') = 0, 'ALTER TABLE `t_order` ADD COLUMN `OrganizationId` CHAR(36) NULL COMMENT ''数据归属组织'' AFTER `CustomerId`', 'SELECT ''skip t_order.OrganizationId'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = IF( (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND COLUMN_NAME = 'SecretLevel') = 0, 'ALTER TABLE `t_order` ADD COLUMN `SecretLevel` TINYINT NOT NULL DEFAULT 2 COMMENT ''数据密级 1-4'' AFTER `OrganizationId`', 'SELECT ''skip t_order.SecretLevel'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = IF( (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND INDEX_NAME = 'idx_ord_org_secret_ctime') = 0, 'ALTER TABLE `t_order` ADD KEY `idx_ord_org_secret_ctime` (`OrganizationId`, `SecretLevel`, `CreateTime`)', 'SELECT ''skip idx_ord_org_secret_ctime'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- t_recharge_record.SecretLevel(P2 预置,可跳过) SET @sql = IF( (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_recharge_record' AND COLUMN_NAME = 'SecretLevel') = 0, 'ALTER TABLE `t_recharge_record` ADD COLUMN `SecretLevel` TINYINT NOT NULL DEFAULT 3 COMMENT ''数据密级 1-4'' AFTER `CustomerId`', 'SELECT ''skip t_recharge_record.SecretLevel'' AS msg' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 历史订单 OrganizationId 回填:取自客户归属组织(有则更新) UPDATE `t_order` o INNER JOIN `t_customer` c ON c.`Id` = o.`CustomerId` AND c.`IsDeleted` = 0 SET o.`OrganizationId` = c.`OrganizationId` WHERE o.`OrganizationId` IS NULL AND c.`OrganizationId` IS NOT NULL;