-- 创建system_config表(纵表设计) CREATE TABLE IF NOT EXISTS `system_config` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `config_key` varchar(100) NOT NULL COMMENT '配置键名', `config_value` varchar(500) NOT NULL COMMENT '配置值', `config_type` enum('int','string','bool','json') DEFAULT 'string' COMMENT '配置值类型', `description` varchar(255) DEFAULT NULL COMMENT '配置描述', `is_system` tinyint(1) DEFAULT '1' COMMENT '是否为系统配置:1-是,0-否', `is_editable` tinyint(1) DEFAULT '1' COMMENT '是否可编辑:1-是,0-否', `is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除:0-否,1-是', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_config_key` (`config_key`, `is_deleted`) COMMENT '配置键唯一约束' ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表(纵表设计)'; -- 为 api_keys 表添加 updated_at 字段 ALTER TABLE `api_keys` ADD COLUMN `updated_at` datetime DEFAULT NULL COMMENT '更新时间'; -- 创建 sessions 表 CREATE TABLE IF NOT EXISTS `sessions` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `session_id` varchar(64) NOT NULL COMMENT '会话ID', `user_id` int(11) NOT NULL COMMENT '用户ID', `machine_code` varchar(100) DEFAULT NULL COMMENT '机器码', `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址', `user_agent` text COMMENT '用户代理', `is_active` tinyint(1) DEFAULT '1' COMMENT '是否激活:0-否,1-是', `expires_at` datetime NOT NULL COMMENT '过期时间', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `last_activity` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后活动时间', PRIMARY KEY (`id`), UNIQUE KEY `ix_sessions_session_id` (`session_id`), KEY `ix_sessions_user_id` (`user_id`), KEY `ix_sessions_is_active` (`is_active`), KEY `ix_sessions_expires_at` (`expires_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户会话表'; -- 插入默认配置数据(纵表结构) INSERT INTO `system_config` (`config_key`, `config_value`, `config_type`, `description`, `is_system`, `is_editable`) VALUES ('heartbeat_interval_seconds', '30', 'int', '心跳间隔秒数(默认30秒)', 1, 1), ('key_overlap_minutes', '30', 'int', '新旧密钥共存分钟数', 1, 1), ('key_expire_minutes', '60', 'int', '密钥过期分钟数(从创建时间算起)', 1, 1), ('max_heartbeat_failures', '10', 'int', '最大心跳失败次数,超过后暂停检测', 1, 1), ('max_network_failures', '15', 'int', '网络异常最大失败次数,超过后登出', 1, 1), ('prevent_duplicate_login', '1', 'bool', '是否防止重复登录:0-否,1-是', 1, 1), ('timestamp_tolerance_seconds', '300', 'int', '时间戳容忍秒数(前后5分钟)', 1, 1), ('session_extend_enabled', '1', 'bool', '是否启用心跳延长session:0-否,1-是', 1, 1), ('session_extend_threshold_hours', '4', 'int', 'session延长阈值(小时),距离过期小于此值时延长', 1, 1), ('session_extend_hours', '2', 'int', '每次心跳延长的小时数', 1, 1), ('api_timeout_seconds', '30', 'int', 'API请求超时秒数', 1, 1), ('client_heartbeat_interval_seconds', '30', 'int', '客户端心跳间隔秒数', 1, 1) ON DUPLICATE KEY UPDATE `config_value` = VALUES(`config_value`), `config_type` = VALUES(`config_type`), `description` = VALUES(`description`), `is_system` = VALUES(`is_system`), `is_editable` = VALUES(`is_editable`), `updated_at` = NOW();