第六阶段开发。

This commit is contained in:
zfjia committed 2026-11-12 13:36:24 +08:00
1 parent 35751b4f00
commit bacdd15f3a
93 files changed
+10190 -22

No files matched your search

+91
View File
@@ -0,0 +1,91 @@
-- =============================================================================
-- 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;