-- S0ProcessFlowCard 租户隔离补齐(承接 1.0.389 的 12 张表,本脚本只处理这一张)。 -- -- 背景:AdoS0ProcessFlowCard 实体已实现 ITenantIdFilter 并映射 tenant_id, -- 且唯一索引声明为 (TenantId, FactoryRefId, FlowCardNo);物理表需同步,否则 -- 启动后 CodeFirst 与实体声明不一致、且唯一键仍为跨租户口径。 -- -- 该表当前 0 行(2026-08-25 实测),因此无历史数据回填,只做 DDL 对齐。 -- 组织解析改造(AdoS0ProcessFlowCardsController.ResolveDefaultOrgAsync 去 ClearFilter、 -- 改为当前租户内 C1→C3→C2→C4 / F1→F2→F3→F4 分级解析)与本脚本同批提交。 -- -- 幂等:ADD COLUMN / ADD INDEX 均有 information_schema 存在性保护; -- 唯一键按实际列清单比对,已是目标结构则跳过。重复执行无副作用。 -- 本脚本不含 DELETE / TRUNCATE / DROP TABLE,不创建任何演示数据。 SET @t1 := (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='S0ProcessFlowCard'); SET @c1 := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='S0ProcessFlowCard' AND COLUMN_NAME='tenant_id'); SET @a1 := CASE WHEN @t1=1 AND @c1=0 THEN 'ALTER TABLE `S0ProcessFlowCard` ADD COLUMN `tenant_id` BIGINT NULL COMMENT ''租户Id''' ELSE 'SELECT 1' END; PREPARE p1a FROM @a1; EXECUTE p1a; DEALLOCATE PREPARE p1a; SET @i1 := (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='S0ProcessFlowCard' AND INDEX_NAME='idx_tenant'); SET @b1 := CASE WHEN @t1=1 AND @i1=0 THEN 'ALTER TABLE `S0ProcessFlowCard` ADD INDEX `idx_tenant` (`tenant_id`)' ELSE 'SELECT 1' END; PREPARE p1b FROM @b1; EXECUTE p1b; DEALLOCATE PREPARE p1b; -- 不回填:该表 0 行,无历史归属可推导,不伪造租户值。 SET @u1 := (SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='S0ProcessFlowCard' AND INDEX_NAME='uk_S0ProcessFlowCard_factory_flowcard'); SET @e1 := CASE WHEN @t1<>1 THEN 'SELECT 1' WHEN @u1 = 'tenant_id,factory_ref_id,flow_card_no' THEN 'SELECT 1' WHEN @u1 IS NULL THEN 'ALTER TABLE `S0ProcessFlowCard` ADD UNIQUE INDEX `uk_S0ProcessFlowCard_factory_flowcard` (`tenant_id`,`factory_ref_id`,`flow_card_no`)' ELSE 'ALTER TABLE `S0ProcessFlowCard` DROP INDEX `uk_S0ProcessFlowCard_factory_flowcard`, ADD UNIQUE INDEX `uk_S0ProcessFlowCard_factory_flowcard` (`tenant_id`,`factory_ref_id`,`flow_card_no`)' END; PREPARE p1e FROM @e1; EXECUTE p1e; DEALLOCATE PREPARE p1e;