20260722173146

This commit is contained in:
oneao committed 2026-07-22 17:31:48 +08:00
1 parent e9f099f044
commit d04fad24ed
24 files changed
+1309 -422

No files matched your search

@@ -0,0 +1,49 @@
-- 操作权限测试数据:生成 5000 条 b_user_power
-- 注意:会删除 admin 用户的旧权限记录,并移除 (b_user_id,b_power_id) 唯一约束。
-- 如需恢复约束,执行:
-- ALTER TABLE dbo.b_user_power ADD CONSTRAINT UQ_b_user_power UNIQUE (b_user_id, b_power_id);
BEGIN TRANSACTION;
DECLARE @AdminUserId bigint = (SELECT TOP 1 b_id FROM dbo.b_user WHERE b_canuse = 1);
IF @AdminUserId IS NULL BEGIN
RAISERROR('b_user 中没有 b_canuse=1 的用户', 16, 1);
ROLLBACK;
RETURN;
END;
DROP TABLE IF EXISTS #powers;
SELECT ROW_NUMBER() OVER (ORDER BY b_id) AS rn, b_id AS pid
INTO #powers
FROM dbo.b_module_power WHERE b_canuse = 1;
DECLARE @powerCount int = @@ROWCOUNT;
IF @powerCount = 0 BEGIN
RAISERROR('b_module_power 中没有 b_canuse=1 的权限', 16, 1);
ROLLBACK;
RETURN;
END;
-- 移除唯一约束以便灌入测试数据
IF EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'UQ_b_user_power' AND object_id = OBJECT_ID('dbo.b_user_power'))
ALTER TABLE dbo.b_user_power DROP CONSTRAINT UQ_b_user_power;
DELETE FROM dbo.b_user_power WHERE b_user_id = @AdminUserId;
WITH num AS (
SELECT TOP 5000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n
FROM sys.all_columns a CROSS JOIN sys.all_columns b
)
INSERT INTO dbo.b_user_power (b_id, b_user_id, b_power_id, b_inputuser_id, b_inputdatetime)
SELECT
9000000000000000000 + n,
@AdminUserId,
(SELECT pid FROM #powers WHERE rn = ((n - 1) % @powerCount) + 1),
@AdminUserId,
GETDATE()
FROM num;
PRINT '插入 ' + CAST(@@ROWCOUNT AS varchar) + ' 条';
DROP TABLE #powers;
COMMIT;
@@ -0,0 +1,53 @@
-- 006_module_power_mock.sql
-- 为「用户管理」模块(b_id = 829648877883461)插入 5000 条模拟操作权限(b_module_power)。
-- 幂等:每次执行先删除该模块下 mock_ 前缀的旧数据,再重新插入 5000 条,
-- 可重复运行而不会造成 (b_module_id, b_code) 或 b_id 冲突。
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @ModuleId bigint = 829648877883461;
-- 1) 校验目标模块存在
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_id = @ModuleId)
BEGIN
DECLARE @msg nvarchar(200) = N'未找到用户管理模块 b_id=' + CAST(@ModuleId AS nvarchar);
THROW 51001, @msg, 1;
END
-- 2) 清理旧的 mock 数据(避免重复累积)
DELETE FROM dbo.b_module_power WHERE b_module_id = @ModuleId AND b_code LIKE 'mock_%';
-- 4) 插入 5000 条模拟操作权限
WITH num AS (
SELECT TOP 5000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n
FROM sys.all_columns a CROSS JOIN sys.all_columns b
)
INSERT INTO dbo.b_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse)
SELECT
9100000000000000000 + n,
@ModuleId,
'mock_' + RIGHT('000000' + CAST(n AS varchar(10)), 6),
N'模拟操作 ' + RIGHT('000000' + CAST(n AS varchar(10)), 6),
'power.m_user.mock_' + RIGHT('000000' + CAST(n AS varchar(10)), 6),
n,
1
FROM num
WHERE NOT EXISTS (
SELECT 1 FROM dbo.b_module_power p
WHERE p.b_module_id = @ModuleId
AND p.b_code = 'mock_' + RIGHT('000000' + CAST(n AS varchar(10)), 6)
);
PRINT '插入 ' + CAST(@@ROWCOUNT AS varchar) + ' 条模拟操作权限(模块 b_id=' + CAST(@ModuleId AS varchar) + ')';
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;