91 lines
5.1 KiB
SQL
91 lines
5.1 KiB
SQL
-- =============================================================================
|
||||
|
|
-- 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;
|