Files
jcgl-dev/dev/sql/apt_rev01/29_it6_permissions.sql
T
2026-11-12 13:36:24 +08:00

92 lines
5.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- IT-6 权限点与查询索引(增量,可重放)
-- 范围:上报续传(outbox/水位)、M4 人员关联、M5 设备指令入队
-- 口径:
-- 1) 只新增 F 权限点,不新增页面菜单(duty 入口与 M4/M5 页面不在本轮交付);
-- 2) 权限点挂在 3000 公寓端目录下,与既有 3230~3240 作业权限并列;
-- 3) 索引只补查询路径,不改任何业务列。
-- =============================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------------------
-- 1. 权限点(F)
-- -----------------------------------------------------------------------------
INSERT INTO sys_menu
(menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
VALUES
(3250, '上报队列查询', 3000, 30, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:report:list', '#', 'IT-6', NOW(3), 'outbox 列表:bizType/state/时间'),
(3251, '上报统计查询', 3000, 31, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:report:query', '#', 'IT-6', NOW(3), '队列汇总 + 水位 + 心跳偏差'),
(3252, '上报重试', 3000, 32, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:report:retry', '#', 'IT-6', NOW(3), 'FAILED/DEAD 重新入队,复用原幂等键'),
(3253, '人员列表', 3000, 33, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:person:list', '#', 'IT-6', NOW(3), 'M4 人员列表'),
(3254, '人员详情', 3000, 34, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:person:query', '#', 'IT-6', NOW(3), 'M4 人员详情与关联 Tab'),
(3255, '人员修改(拒绝)', 3000, 35, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:person:edit', '#', 'IT-6', NOW(3), '快照只读,写入口固定返回 40904'),
(3256, '设备列表', 3000, 36, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:device:list', '#', 'IT-6', NOW(3), 'M5 设备档案与在线态'),
(3257, '设备详情', 3000, 37, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:device:query', '#', 'IT-6', NOW(3), 'M5 设备详情与指令记录'),
(3258, '设备指令入队', 3000, 38, '', '', '', '', 1, 0, 'F', '0', '0',
'apt:device:enqueue', '#', 'IT-6', NOW(3), '只入队 PENDING,不伪造 ACKED')
ON DUPLICATE KEY UPDATE menu_name = VALUES(menu_name), parent_id = VALUES(parent_id),
order_num = VALUES(order_num), menu_type = VALUES(menu_type), status = VALUES(status),
perms = VALUES(perms), remark = VALUES(remark);
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, m.menu_id FROM sys_menu m
WHERE m.menu_id BETWEEN 3250 AND 3258
AND m.menu_type = 'F'
AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = 1 AND rm.menu_id = m.menu_id);
-- -----------------------------------------------------------------------------
-- 2. 查询索引
-- -----------------------------------------------------------------------------
SET @apt_idx_outbox_time = (SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_report_outbox'
AND INDEX_NAME = 'idx_outbox_gyid_occurred');
SET @apt_sql_outbox_time = IF(@apt_idx_outbox_time = 0,
'ALTER TABLE apt_report_outbox ADD KEY idx_outbox_gyid_occurred (gyid, occurred_at)',
'SELECT 1');
PREPARE stmt_outbox_time FROM @apt_sql_outbox_time;
EXECUTE stmt_outbox_time;
DEALLOCATE PREPARE stmt_outbox_time;
SET @apt_idx_cmd_device = (SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_device_command'
AND INDEX_NAME = 'idx_devcmd_gyid_device_state');
SET @apt_sql_cmd_device = IF(@apt_idx_cmd_device = 0,
'ALTER TABLE apt_device_command ADD KEY idx_devcmd_gyid_device_state (gyid, device_code, state, create_time)',
'SELECT 1');
PREPARE stmt_cmd_device FROM @apt_sql_cmd_device;
EXECUTE stmt_cmd_device;
DEALLOCATE PREPARE stmt_cmd_device;
-- -----------------------------------------------------------------------------
-- 3. 校验
-- -----------------------------------------------------------------------------
SELECT '=== 57. IT-6 权限点(应 9)===' AS section;
SELECT menu_id, perms, menu_name FROM sys_menu
WHERE menu_id BETWEEN 3250 AND 3258 ORDER BY menu_id;
SELECT '=== 58. 超管已绑定(应 9)===' AS section;
SELECT COUNT(*) AS admin_bound
FROM sys_role_menu rm JOIN sys_menu m ON m.menu_id = rm.menu_id
WHERE rm.role_id = 1 AND m.menu_id BETWEEN 3250 AND 3258 AND m.menu_type = 'F';
SELECT '=== 59. IT-6 索引(应 2)===' AS section;
SELECT TABLE_NAME, INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND INDEX_NAME IN ('idx_outbox_gyid_occurred', 'idx_devcmd_gyid_device_state')
GROUP BY TABLE_NAME, INDEX_NAME;
SELECT '=== 60. outbox / 水位 / 指令表可读(应各 1 行)===' AS section;
SELECT 'outbox' AS t, COUNT(*) AS cnt FROM apt_report_outbox
UNION ALL SELECT 'watermark', COUNT(*) FROM apt_report_watermark
UNION ALL SELECT 'device_command', COUNT(*) FROM apt_device_command;