1.0.390.sql 2.6 KB

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