-- ===========================================================================
-- UAT 租户占位菜单收口 —— 人工运维脚本（对账报表 + 回滚）
--
-- ⚠️ 本文件**不会**被 AutoVersionUpdate 自动执行：
--    LoadMigrationScripts（AutoVersionUpdate.cs:391-420）先排除 *.verify.sql，
--    再对 Path.GetFileNameWithoutExtension 做 Version.TryParse；
--    "UAT-PLACEHOLDER-MENU-HIDE.ops" 解析失败 → 该文件被过滤掉。
--    **不要给本文件加 1.0.<n> 版本号前缀**，否则会变成自动执行的迁移脚本。
--
--    自动执行的断言在 1.0.424.verify.sql（真值标量，环境无关）。
--    本文件供人工按需执行，两段互相独立，**不要整文件一次跑完**。
-- ===========================================================================


-- ###########################################################################
-- 第一段 · 对账报表（只读，可随时执行）
-- ###########################################################################

SET @t_uat := (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
               WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1 LIMIT 1);

-- R0 租户解析
SELECT 'R0 租户解析' AS Chk, @t_uat AS TenantId,
       (SELECT o.Code FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId WHERE t.Id = @t_uat) AS OrgCode;

-- R1 抑制清单明细
SELECT 'R1 抑制清单' AS Chk, s.MenuId, m.Path, m.Component, m.Status, s.Reason
FROM ado_tenant_menu_suppression s JOIN SysMenu m ON m.Id = s.MenuId
WHERE s.TenantId = @t_uat ORDER BY m.Path;

-- R2 该租户 SysTenantMenu 总行数（收口前 493 → 收口后 477）
SELECT 'R2 该租户租户菜单总行数' AS Chk, COUNT(*) AS Rows_
FROM SysTenantMenu WHERE TenantId = @t_uat;

-- R3 该租户当前仍可见的 planning 占位菜单（本轮范围内应为空；S9/S4/M11-M16 不在范围）
SELECT 'R3 仍可见的占位菜单' AS Chk, m.Path, m.Component
FROM SysMenu m
JOIN SysTenantMenu tm ON tm.MenuId = m.Id AND tm.TenantId = @t_uat
WHERE m.Status = 1 AND m.Type <> 3 AND m.Component = '/aidop/planning/index'
ORDER BY m.Path;

-- R4 跨租户对账：其余租户对这些菜单的授权行数（应各自保持原值不变）
SELECT 'R4 跨租户授权' AS Chk, t.Id AS TenantId, o.Code AS OrgCode,
       (SELECT COUNT(*) FROM SysTenantMenu tm
         WHERE tm.TenantId = t.Id
           AND tm.MenuId IN (SELECT MenuId FROM ado_tenant_menu_suppression WHERE TenantId = @t_uat)) AS GrantedRows
FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
WHERE t.Id <> @t_uat ORDER BY t.Id;

-- R5 SysRoleMenu 保留情况（本脚本从不改动它；用于确认回滚可精确还原）
SELECT 'R5 角色授权保留' AS Chk, COUNT(*) AS Rows_
FROM SysRoleMenu rm JOIN SysRole r ON r.Id = rm.RoleId
WHERE r.TenantId = @t_uat
  AND rm.MenuId IN (SELECT MenuId FROM ado_tenant_menu_suppression WHERE TenantId = @t_uat);


-- ###########################################################################
-- 第二段 · 回滚（会改数据，确认后再单独执行）
--
-- 步骤：执行下方 DELETE → 重启后端（restart_aidop.sh）。
--       AidopMenuLinkSync.EnsureLinked 会按原主键
--       CommonUtil.GetFixedHashCode(""+tid+menuId, 1300000000000)
--       把 SysTenantMenu 授权行原样补回；SysRoleMenu 全程未被改动，
--       因此可见性精确还原到收口之前。该路径已实测验证。
-- ###########################################################################

-- DELETE FROM ado_tenant_menu_suppression
--  WHERE TenantId = (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
--                     WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1 LIMIT 1);
