init.sql 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. CREATE DATABASE IF NOT EXISTS `mqtt_vue_dashboard` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  4. USE `mqtt_vue_dashboard`;
  5. DROP TABLE IF EXISTS `users`;
  6. CREATE TABLE `users` (
  7. `id` varchar(36) NOT NULL COMMENT '用户ID',
  8. `username` varchar(50) NOT NULL COMMENT '用户名',
  9. `password` varchar(255) NOT NULL COMMENT '密码(加密)',
  10. `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  11. `role` enum('admin','user','viewer') NOT NULL DEFAULT 'user',
  12. `created_at` timestamp NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  13. `updated_at` timestamp NOT NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  14. PRIMARY KEY (`id`),
  15. UNIQUE KEY `username` (`username`)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
  17. INSERT INTO `users` (`id`, `username`, `password`, `email`, `role`) VALUES
  18. (UUID(), 'admin', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'admin@example.com', 'admin');
  19. DROP TABLE IF EXISTS `pages`;
  20. CREATE TABLE `pages` (
  21. `id` int NOT NULL AUTO_INCREMENT,
  22. `name` varchar(50) NOT NULL COMMENT '页面名称',
  23. `path` varchar(100) NOT NULL COMMENT '页面路径',
  24. `description` varchar(200) DEFAULT NULL COMMENT '页面描述',
  25. `created_at` timestamp NULL DEFAULT current_timestamp,
  26. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP,
  27. PRIMARY KEY (`id`),
  28. UNIQUE KEY `uk_path` (`path`)
  29. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  30. INSERT INTO `pages` (`name`, `path`, `description`) VALUES
  31. ('仪表板', '/dashboard', '系统概览和数据统计'),
  32. ('设备管理', '/devices', '设备列表和状态监控'),
  33. ('房间管理', '/rooms', '房间和设备绑定'),
  34. ('OTA升级', '/ota', '固件管理和OTA升级'),
  35. ('连接管理', '/connections', 'MQTT连接监控'),
  36. ('消息管理', '/messages', 'MQTT消息查看'),
  37. ('传感器数据', '/sensor-data', '传感器数据可视化'),
  38. ('客户端认证', '/client-auth', 'MQTT客户端认证管理'),
  39. ('访问控制', '/client-acl', 'MQTT客户端ACL管理'),
  40. ('认证日志', '/auth-log', '认证操作日志'),
  41. ('系统日志', '/system-log', '系统运行日志'),
  42. ('系统设置', '/settings', '系统配置管理');
  43. DROP TABLE IF EXISTS `user_permissions`;
  44. CREATE TABLE `user_permissions` (
  45. `id` int NOT NULL AUTO_INCREMENT,
  46. `user_id` varchar(36) NOT NULL,
  47. `page_id` int NOT NULL,
  48. `created_at` timestamp NULL DEFAULT current_timestamp,
  49. PRIMARY KEY (`id`),
  50. UNIQUE KEY `uk_user_page` (`user_id`, `page_id`)
  51. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  52. DROP TABLE IF EXISTS `devices`;
  53. CREATE TABLE `devices` (
  54. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备ID',
  55. `clientid` varchar(100) NOT NULL COMMENT 'MQTT客户端ID',
  56. `device_name` varchar(100) DEFAULT NULL COMMENT '设备名称',
  57. `username` varchar(100) DEFAULT NULL,
  58. `firmware_version` varchar(50) DEFAULT NULL COMMENT '固件版本',
  59. `device_ip_port` varchar(100) DEFAULT NULL COMMENT '设备IP:端口',
  60. `last_ip_port` varchar(100) DEFAULT NULL COMMENT '最后连接的IP:端口',
  61. `status` enum('online','offline','unknown') DEFAULT 'unknown' COMMENT '设备状态',
  62. `last_event_time` datetime DEFAULT NULL COMMENT '最后事件时间',
  63. `last_online_time` datetime DEFAULT NULL COMMENT '最后上线时间',
  64. `last_offline_time` datetime DEFAULT NULL COMMENT '最后下线时间',
  65. `online_duration` int DEFAULT 0 COMMENT '累计在线时长(秒)',
  66. `connect_count` int DEFAULT 0 COMMENT '累计连接次数',
  67. `rssi` int DEFAULT NULL COMMENT 'WiFi信号强度(dBm)',
  68. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '设备创建时间',
  69. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '设备更新时间',
  70. PRIMARY KEY (`id`),
  71. UNIQUE KEY `clientid` (`clientid`),
  72. KEY `idx_status` (`status`),
  73. KEY `idx_ip_port` (`device_ip_port`)
  74. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备管理表';
  75. DROP TABLE IF EXISTS `rooms`;
  76. CREATE TABLE `rooms` (
  77. `id` int NOT NULL AUTO_INCREMENT COMMENT '房间唯一标识ID',
  78. `name` varchar(100) NOT NULL COMMENT '房间名称',
  79. `floor_id` int NOT NULL COMMENT '所在楼层ID',
  80. `room_number` varchar(20) NOT NULL COMMENT '房间编号',
  81. `room_type` varchar(50) NOT NULL COMMENT '房间类型',
  82. `area` decimal(8,2) DEFAULT NULL COMMENT '房间面积(平方米)',
  83. `description` text DEFAULT NULL COMMENT '房间描述',
  84. `status` enum('active','inactive','maintenance') DEFAULT 'active' COMMENT '房间状态',
  85. `orientation` varchar(20) DEFAULT '东' COMMENT '房间朝向',
  86. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间',
  87. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  88. PRIMARY KEY (`id`),
  89. KEY `idx_floor_id` (`floor_id`),
  90. KEY `idx_status` (`status`)
  91. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间表';
  92. DROP TABLE IF EXISTS `room_devices`;
  93. CREATE TABLE `room_devices` (
  94. `id` int NOT NULL AUTO_INCREMENT COMMENT '设备唯一标识ID',
  95. `name` varchar(100) NOT NULL COMMENT '设备名称',
  96. `type` varchar(50) NOT NULL COMMENT '设备类型',
  97. `model` varchar(100) DEFAULT NULL COMMENT '设备型号',
  98. `room_id` int NOT NULL COMMENT '所属房间ID',
  99. `status` enum('online','offline','error') DEFAULT 'offline' COMMENT '设备状态',
  100. `last_seen` timestamp NULL DEFAULT NULL COMMENT '最后在线时间',
  101. `properties` longtext DEFAULT NULL COMMENT '设备属性JSON',
  102. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间',
  103. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  104. PRIMARY KEY (`id`),
  105. KEY `idx_room_id` (`room_id`),
  106. KEY `idx_status` (`status`),
  107. CONSTRAINT `room_devices_ibfk_1` FOREIGN KEY (`room_id`) REFERENCES `rooms` (`id`) ON DELETE CASCADE
  108. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间设备表';
  109. DROP TABLE IF EXISTS `device_bindings`;
  110. CREATE TABLE `device_bindings` (
  111. `id` int NOT NULL AUTO_INCREMENT,
  112. `device_clientid` varchar(100) NOT NULL COMMENT '设备客户端ID',
  113. `room_id` int NOT NULL COMMENT '房间ID',
  114. `device_name` varchar(255) DEFAULT NULL COMMENT '在房间中的设备显示名称',
  115. `device_type` varchar(100) DEFAULT NULL COMMENT '在房间中的设备类型',
  116. `properties` text DEFAULT NULL COMMENT 'JSON格式额外属性',
  117. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间',
  118. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  119. PRIMARY KEY (`id`),
  120. UNIQUE KEY `unique_device_binding` (`device_clientid`),
  121. KEY `idx_room_id` (`room_id`)
  122. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备与房间绑定关系表';
  123. DROP TABLE IF EXISTS `mqtt_messages`;
  124. CREATE TABLE `mqtt_messages` (
  125. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  126. `clientid` varchar(100) NOT NULL COMMENT '客户端ID',
  127. `topic` varchar(512) NOT NULL COMMENT '消息主题',
  128. `payload` text DEFAULT NULL COMMENT '消息内容',
  129. `qos` tinyint NOT NULL DEFAULT 0 COMMENT 'QoS等级',
  130. `retain` tinyint(1) NOT NULL DEFAULT 0 COMMENT '保留标志',
  131. `message_id` varchar(64) DEFAULT NULL COMMENT 'MQTT消息ID',
  132. `message_type` enum('publish','subscribe','unsubscribe') NOT NULL DEFAULT 'publish' COMMENT '消息类型',
  133. `timestamp` bigint NOT NULL COMMENT '消息时间戳(毫秒)',
  134. `node` varchar(100) NOT NULL DEFAULT '' COMMENT '节点',
  135. `username` varchar(100) DEFAULT NULL COMMENT '用户名',
  136. `proto_ver` tinyint NOT NULL DEFAULT 4 COMMENT 'MQTT协议版本',
  137. `payload_format` varchar(50) DEFAULT 'text' COMMENT '消息格式',
  138. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '记录创建时间',
  139. `message_time` datetime NOT NULL DEFAULT current_timestamp COMMENT '消息时间',
  140. PRIMARY KEY (`id`),
  141. KEY `idx_clientid` (`clientid`),
  142. KEY `idx_topic` (`topic`(255)),
  143. KEY `idx_timestamp` (`timestamp`)
  144. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MQTT消息存储表';
  145. DROP TABLE IF EXISTS `client_connections`;
  146. CREATE TABLE `client_connections` (
  147. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  148. `username` varchar(100) DEFAULT NULL COMMENT '客户端用户名',
  149. `clientid` varchar(100) NOT NULL COMMENT '客户端ID',
  150. `event` varchar(50) NOT NULL COMMENT '事件类型',
  151. `timestamp` datetime DEFAULT NULL COMMENT '事件时间',
  152. `connected_at` datetime DEFAULT NULL COMMENT '连接时间',
  153. `node` varchar(100) NOT NULL DEFAULT '' COMMENT '节点',
  154. `peername` varchar(100) DEFAULT NULL COMMENT '客户端地址',
  155. `sockname` varchar(100) DEFAULT NULL COMMENT '服务端地址',
  156. `proto_name` varchar(20) NOT NULL DEFAULT 'MQTT' COMMENT '协议名称',
  157. `proto_ver` int NOT NULL DEFAULT 4 COMMENT '协议版本',
  158. `keepalive` int NOT NULL DEFAULT 60 COMMENT '心跳间隔(秒)',
  159. `clean_start` tinyint(1) DEFAULT 1 COMMENT '是否清洁会话',
  160. `reason` varchar(50) DEFAULT NULL COMMENT '断开原因',
  161. `connection_duration` int DEFAULT NULL COMMENT '连接持续时间(秒)',
  162. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '记录创建时间',
  163. PRIMARY KEY (`id`),
  164. KEY `idx_clientid` (`clientid`),
  165. KEY `idx_timestamp` (`timestamp`),
  166. KEY `idx_event` (`event`)
  167. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户端连接事件表';
  168. DROP TABLE IF EXISTS `client_auth`;
  169. CREATE TABLE `client_auth` (
  170. `id` int NOT NULL AUTO_INCREMENT COMMENT '客户端认证记录ID',
  171. `username` varchar(255) NOT NULL COMMENT '客户端用户名',
  172. `clientid` varchar(255) NOT NULL COMMENT '客户端ID',
  173. `password_hash` varchar(255) NOT NULL COMMENT '密码哈希值',
  174. `salt` varchar(255) DEFAULT NULL,
  175. `status` enum('enabled','disabled') DEFAULT 'enabled' COMMENT '客户端状态',
  176. `device_type` varchar(100) DEFAULT 'unknown' COMMENT '设备类型',
  177. `auth_method` enum('password','token','certificate','external') NOT NULL DEFAULT 'password' COMMENT '认证方法',
  178. `description` text DEFAULT NULL COMMENT '客户端描述',
  179. `is_superuser` tinyint(1) DEFAULT 0 COMMENT '是否为超级用户',
  180. `use_salt` tinyint(1) DEFAULT 1 COMMENT '是否使用盐值加密',
  181. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间',
  182. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  183. `last_login_at` timestamp NULL DEFAULT NULL COMMENT '最后登录时间',
  184. PRIMARY KEY (`id`),
  185. UNIQUE KEY `unique_username_clientid` (`username`, `clientid`),
  186. KEY `idx_username` (`username`),
  187. KEY `idx_clientid` (`clientid`),
  188. KEY `idx_status` (`status`)
  189. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户端认证表';
  190. DROP TABLE IF EXISTS `client_acl`;
  191. CREATE TABLE `client_acl` (
  192. `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  193. `username` varchar(100) NOT NULL COMMENT '用户名',
  194. `topic` varchar(255) NOT NULL COMMENT 'MQTT主题',
  195. `action` enum('publish','subscribe','pubsub') NOT NULL COMMENT '操作类型',
  196. `permission` enum('allow','deny') NOT NULL DEFAULT 'allow' COMMENT '权限类型',
  197. `priority` int DEFAULT 0 COMMENT '权限优先级',
  198. `description` text DEFAULT NULL COMMENT '权限规则描述',
  199. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间',
  200. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  201. PRIMARY KEY (`id`),
  202. KEY `idx_topic` (`topic`),
  203. KEY `idx_action` (`action`),
  204. KEY `idx_permission` (`permission`),
  205. KEY `idx_username` (`username`)
  206. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户端访问控制列表';
  207. DROP TABLE IF EXISTS `auth_log`;
  208. CREATE TABLE `auth_log` (
  209. `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  210. `clientid` varchar(255) NOT NULL COMMENT '客户端ID',
  211. `username` varchar(255) NOT NULL COMMENT '用户名',
  212. `ip_address` varchar(45) NOT NULL COMMENT '客户端IP地址',
  213. `operation_type` enum('connect','publish','subscribe','disconnect') NOT NULL COMMENT '操作类型',
  214. `auth_method` varchar(50) DEFAULT NULL COMMENT '认证方法',
  215. `result` enum('success','failure') NOT NULL COMMENT '认证结果',
  216. `reason` varchar(255) DEFAULT NULL COMMENT '认证失败原因',
  217. `topic` varchar(255) DEFAULT NULL COMMENT 'MQTT主题',
  218. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '日志记录时间',
  219. PRIMARY KEY (`id`),
  220. KEY `idx_clientid` (`clientid`),
  221. KEY `idx_username` (`username`),
  222. KEY `idx_operation_type` (`operation_type`),
  223. KEY `idx_result` (`result`),
  224. KEY `idx_created_at` (`created_at`)
  225. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='认证日志表';
  226. DROP TABLE IF EXISTS `sensor_data`;
  227. CREATE TABLE `sensor_data` (
  228. `id` bigint NOT NULL AUTO_INCREMENT,
  229. `device_id` varchar(100) NOT NULL COMMENT '设备ID',
  230. `topic` varchar(200) NOT NULL COMMENT 'MQTT主题',
  231. `data_type` varchar(50) DEFAULT NULL COMMENT '数据类型',
  232. `value` text DEFAULT NULL COMMENT '原始数据',
  233. `timestamp` datetime NOT NULL COMMENT '数据时间戳',
  234. `created_at` timestamp NULL DEFAULT current_timestamp,
  235. PRIMARY KEY (`id`),
  236. KEY `idx_device_timestamp` (`device_id`, `timestamp`),
  237. KEY `idx_topic` (`topic`),
  238. KEY `idx_data_type` (`data_type`)
  239. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='传感器数据表';
  240. DROP TABLE IF EXISTS `firmware_files`;
  241. CREATE TABLE `firmware_files` (
  242. `id` int NOT NULL AUTO_INCREMENT,
  243. `version` varchar(50) NOT NULL,
  244. `filename` varchar(255) NOT NULL,
  245. `filepath` varchar(255) NOT NULL,
  246. `filesize` bigint NOT NULL,
  247. `md5sum` varchar(32) NOT NULL,
  248. `description` text DEFAULT NULL,
  249. `status` enum('active','inactive') DEFAULT 'active',
  250. `created_by` varchar(50) DEFAULT NULL,
  251. `created_at` timestamp NULL DEFAULT current_timestamp,
  252. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP,
  253. PRIMARY KEY (`id`),
  254. UNIQUE KEY `version` (`version`),
  255. KEY `idx_status` (`status`)
  256. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='固件文件表';
  257. DROP TABLE IF EXISTS `ota_tasks`;
  258. CREATE TABLE `ota_tasks` (
  259. `id` int NOT NULL AUTO_INCREMENT,
  260. `device_id` varchar(255) NOT NULL,
  261. `firmware_id` int NOT NULL,
  262. `status` enum('pending','downloading','installing','success','failed') DEFAULT 'pending',
  263. `progress` int DEFAULT 0,
  264. `error_message` text DEFAULT NULL,
  265. `start_time` timestamp NULL DEFAULT NULL,
  266. `end_time` timestamp NULL DEFAULT NULL,
  267. `created_at` timestamp NULL DEFAULT current_timestamp,
  268. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP,
  269. PRIMARY KEY (`id`),
  270. KEY `idx_device_id` (`device_id`),
  271. KEY `idx_firmware_id` (`firmware_id`),
  272. KEY `idx_status` (`status`),
  273. CONSTRAINT `ota_tasks_ibfk_1` FOREIGN KEY (`firmware_id`) REFERENCES `firmware_files` (`id`) ON DELETE CASCADE
  274. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OTA升级任务表';
  275. DROP TABLE IF EXISTS `system_logs`;
  276. CREATE TABLE `system_logs` (
  277. `id` int NOT NULL AUTO_INCREMENT,
  278. `level` enum('info','warn','error','debug') NOT NULL COMMENT '日志级别',
  279. `message` text NOT NULL COMMENT '日志消息',
  280. `source` varchar(255) NOT NULL COMMENT '日志来源',
  281. `module` varchar(255) DEFAULT NULL COMMENT '模块名称',
  282. `user_id` int DEFAULT NULL COMMENT '用户ID',
  283. `username` varchar(255) DEFAULT NULL COMMENT '用户名',
  284. `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址',
  285. `details` text DEFAULT NULL COMMENT '详细信息',
  286. `created_at` datetime DEFAULT current_timestamp COMMENT '创建时间',
  287. PRIMARY KEY (`id`),
  288. KEY `idx_level` (`level`),
  289. KEY `idx_source` (`source`),
  290. KEY `idx_module` (`module`),
  291. KEY `idx_created_at` (`created_at`),
  292. KEY `idx_user_id` (`user_id`)
  293. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统运行日志表';
  294. DROP TABLE IF EXISTS `wifi_configurations`;
  295. CREATE TABLE `wifi_configurations` (
  296. `id` int NOT NULL AUTO_INCREMENT,
  297. `device_clientid` varchar(255) NOT NULL COMMENT '设备客户端ID',
  298. `ssid` varchar(32) NOT NULL COMMENT 'WiFi SSID',
  299. `password` varchar(64) NOT NULL COMMENT 'WiFi密码',
  300. `status` enum('pending','sent','applied','failed') DEFAULT 'sent' COMMENT '配置状态',
  301. `sent_at` timestamp NULL DEFAULT NULL COMMENT '发送时间',
  302. `applied_at` timestamp NULL DEFAULT NULL COMMENT '应用时间',
  303. `created_at` timestamp NULL DEFAULT current_timestamp COMMENT '创建时间',
  304. `updated_at` timestamp NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  305. PRIMARY KEY (`id`),
  306. KEY `idx_device_clientid` (`device_clientid`),
  307. KEY `idx_status` (`status`),
  308. KEY `idx_created_at` (`created_at`)
  309. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备WiFi配置表';
  310. CREATE OR REPLACE VIEW `vw_client_connections` AS
  311. SELECT `clientid`, `username`, `peername`, `connected_at`, `timestamp` AS `disconnected_at`,
  312. `reason`, `timestamp`, `event`, `node`, `sockname`, `proto_name`, `proto_ver`
  313. FROM `client_connections`;
  314. CREATE OR REPLACE VIEW `vw_device_logs` AS
  315. SELECT
  316. NULL as id,
  317. cc.clientid,
  318. CASE
  319. WHEN cc.event = 'client.connected' THEN 'connect'
  320. WHEN cc.event = 'client.disconnected' THEN 'disconnect'
  321. ELSE 'unknown'
  322. END as event_type,
  323. cc.timestamp as event_time,
  324. NULL as topic,
  325. NULL as payload,
  326. NULL as qos,
  327. cc.username,
  328. cc.peername,
  329. cc.proto_ver,
  330. cc.node,
  331. cc.reason as details,
  332. cc.timestamp as created_at
  333. FROM client_connections cc
  334. WHERE cc.event IN ('client.connected', 'client.disconnected')
  335. UNION ALL
  336. SELECT
  337. mm.id,
  338. mm.clientid,
  339. CASE
  340. WHEN mm.message_type = 'publish' THEN 'publish'
  341. WHEN mm.message_type = 'subscribe' THEN 'subscribe'
  342. WHEN mm.message_type = 'unsubscribe' THEN 'unsubscribe'
  343. ELSE mm.message_type
  344. END as event_type,
  345. mm.message_time as event_time,
  346. mm.topic,
  347. mm.payload,
  348. mm.qos,
  349. mm.username,
  350. NULL as peername,
  351. mm.proto_ver,
  352. mm.node,
  353. NULL as details,
  354. mm.created_at
  355. FROM mqtt_messages mm
  356. WHERE mm.message_type IN ('publish', 'subscribe', 'unsubscribe')
  357. ORDER BY event_time DESC;
  358. SET FOREIGN_KEY_CHECKS = 1;