1.0.434.sql 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. -- ============================================================================
  2. -- 1.0.434:B-2A —— 把 UAT 租户 838257186181189 的 91 行 NbrControl 组织引用
  3. -- 从 Demo 租户组织迁回本租户自己的组织。
  4. --
  5. -- 背景(S0-ORG-REFERENCE-MODEL-FIX / B-1 已止血):
  6. -- 2026-06-14 commit a18c8a6c5 在「单部署」假设下把 DEFAULT_COMPANY_REF_ID=1329900200001 /
  7. -- DEFAULT_FACTORY_REF_ID=1329900200002 写死进 S0 仓储页;其后 1.0.317.sql 把这两个 SysOrg
  8. -- 改挂到 Demo 租户 797403760988230,前端常量未同步 → 各租户新增都写入别租户的组织 Id。
  9. -- B-1 已让服务端(AdoS0OrgScope.ResolveAsync)成为组织归属的唯一裁决者,新增不再产生污染;
  10. -- 本脚本只清理**当前 UAT 租户**的历史存量。
  11. --
  12. -- 迁移口径(2026-09-01 只读实测):
  13. -- 源:tenant_id=838257186181189 AND company_ref_id=1329900200001 AND factory_ref_id=1329900200002
  14. -- 目标:company_ref_id = factory_ref_id = 838257186320453
  15. -- (SysOrg.Id=838257186320453 / TenantId=838257186181189 / Code=UATTEST_CHL / Pid=0,
  16. -- 即 SysTenant(838257186181189).OrgId,与 B-1 后 AdoS0OrgScope 在该租户下的实际解析
  17. -- 结果 C4→F4 完全一致,故迁移后与新增行同口径。)
  18. -- 全 27 张含 company_ref_id 的表扫描结果:UAT 命中**只有 NbrControl 91 行**,
  19. -- 且 91 行的 (company_ref_id, factory_ref_id) 完全一致,无需分类处理。
  20. -- DepartmentMaster 在 UAT 下无跨租户行 → 不触碰,S8 App.json 的
  21. -- DepartmentFactoryRefId=1329900200002 本轮不改。
  22. --
  23. -- 唯一键 dry run(迁移前只读预演):
  24. -- NbrControl 唯一索引只有 PRIMARY(RecID) 与 uk_NbrControl_tenant_domain_nbrtype
  25. -- (tenant_id, domain_code, NbrType)——**不含 org 列**,改 org 结构上不可能撞唯一键;
  26. -- 模拟迁移后按该唯一键 GROUP BY HAVING COUNT(*)>1 实测 conflicts = 0。
  27. --
  28. -- 明确不做(本批边界):
  29. -- - 不动租户 797403760988229 的另外 167 行(B-2B 另批,口径待业务确认)
  30. -- - 不动 LEGACY-NUMERIC(1000 / 0 / 1)
  31. -- - 不改 SysOrg / SysTenant / 前端 / B-1 后端逻辑 / sysOrg:list / 1.0.431 / GrantMenu
  32. -- - 不改 Type=501 语义、不补 CustMaster/StdOpMaster 缺 tenant_id 的唯一键
  33. -- - 除两个 org 列外不写任何业务字段(NbrControl.UpdateTime 无 ON UPDATE CURRENT_TIMESTAMP,
  34. -- 本 UPDATE 不列它 → 业务字段与审计字段保持原值)
  35. --
  36. -- 安全护栏:EXISTS 子句确保目标组织确实属于该租户;目标组织不存在或归属不符时整条语句 0 行,
  37. -- 绝不把业务数据指向一个不属于本租户的组织。
  38. --
  39. -- 幂等:WHERE 精确命中旧值;首次 affected_rows=91,重复执行 affected_rows=0
  40. -- (旧值已不存在)。无该数据的库上同样为 0 行空操作。
  41. -- ============================================================================
  42. UPDATE `NbrControl`
  43. SET `company_ref_id` = 838257186320453,
  44. `factory_ref_id` = 838257186320453
  45. WHERE `tenant_id` = 838257186181189
  46. AND `company_ref_id` = 1329900200001
  47. AND `factory_ref_id` = 1329900200002
  48. AND EXISTS (
  49. SELECT 1 FROM `SysOrg` o
  50. WHERE o.`Id` = 838257186320453
  51. AND o.`TenantId` = 838257186181189
  52. );