-- iMeeting latest schema initialization script -- 用途: -- 1. 面向当前最新代码结构的全新部署 -- 2. 不再兼容或保留旧 users / roles / menus 等历史结构 -- 3. 仅负责建表,不写入基础角色/用户/菜单/参数等种子数据 -- 4. 本文件即为全量建表入口,无需执行历史 migrations 目录脚本 -- -- 执行顺序: -- 1. 先执行本文件 -- 2. 再执行 imeeting-seed-latest.sql SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- 兼容旧迁移中创建的 legacy views DROP VIEW IF EXISTS `users`; DROP VIEW IF EXISTS `roles`; DROP VIEW IF EXISTS `menus`; DROP VIEW IF EXISTS `role_menu_permissions`; DROP VIEW IF EXISTS `dict_data`; DROP VIEW IF EXISTS `system_parameters`; -- 清理旧结构与当前结构 DROP TABLE IF EXISTS `sys_role_menu_permissions`; DROP TABLE IF EXISTS `prompt_config`; DROP TABLE IF EXISTS `sys_user_mcp`; DROP TABLE IF EXISTS `user_logs`; DROP TABLE IF EXISTS `user_voiceprint`; DROP TABLE IF EXISTS `client_downloads`; DROP TABLE IF EXISTS `external_apps`; DROP TABLE IF EXISTS `terminals`; DROP TABLE IF EXISTS `knowledge_base_tasks`; DROP TABLE IF EXISTS `knowledge_bases`; DROP TABLE IF EXISTS `llm_tasks`; DROP TABLE IF EXISTS `transcript_segments`; DROP TABLE IF EXISTS `transcript_tasks`; DROP TABLE IF EXISTS `audio_files`; DROP TABLE IF EXISTS `attachments`; DROP TABLE IF EXISTS `attendees`; DROP TABLE IF EXISTS `meetings`; DROP TABLE IF EXISTS `tags`; DROP TABLE IF EXISTS `prompts`; DROP TABLE IF EXISTS `audio_model_config`; DROP TABLE IF EXISTS `llm_model_config`; DROP TABLE IF EXISTS `hot_word_item`; DROP TABLE IF EXISTS `hot_word_group`; DROP TABLE IF EXISTS `sys_system_parameters`; DROP TABLE IF EXISTS `sys_dict_data`; DROP TABLE IF EXISTS `sys_menus`; DROP TABLE IF EXISTS `sys_users`; DROP TABLE IF EXISTS `sys_roles`; -- 历史阶段遗留表,一并清理 DROP TABLE IF EXISTS `meeting_summaries`; DROP TABLE IF EXISTS `sys_user_prompt_config`; DROP TABLE IF EXISTS `ai_model_configs`; DROP TABLE IF EXISTS `ai_model_config`; DROP TABLE IF EXISTS `llm_model_configs`; DROP TABLE IF EXISTS `audio_model_configs`; DROP TABLE IF EXISTS `hot_words`; DROP TABLE IF EXISTS `system_parameters`; DROP TABLE IF EXISTS `dict_data`; DROP TABLE IF EXISTS `role_menu_permissions`; DROP TABLE IF EXISTS `menus`; DROP TABLE IF EXISTS `users`; DROP TABLE IF EXISTS `roles`; SET FOREIGN_KEY_CHECKS = 1; -- ===================================================================== -- 1. 基础系统表 -- ===================================================================== CREATE TABLE `sys_roles` ( `role_id` INT NOT NULL AUTO_INCREMENT, `role_name` VARCHAR(50) NOT NULL COMMENT '角色名称', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`role_id`), UNIQUE KEY `uk_sys_roles_name` (`role_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统角色表'; CREATE TABLE `sys_users` ( `user_id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL COMMENT '登录账号', `caption` VARCHAR(50) NOT NULL COMMENT '显示名称', `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱,可为空', `avatar_url` VARCHAR(255) DEFAULT NULL COMMENT '头像地址', `password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希', `role_id` INT NOT NULL DEFAULT 2 COMMENT '角色ID', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`user_id`), UNIQUE KEY `uk_sys_users_username` (`username`), UNIQUE KEY `uk_sys_users_email` (`email`), KEY `idx_sys_users_role_id` (`role_id`), KEY `idx_sys_users_created_at` (`created_at`), CONSTRAINT `fk_sys_users_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_roles` (`role_id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表'; CREATE TABLE `sys_menus` ( `menu_id` INT NOT NULL AUTO_INCREMENT, `menu_code` VARCHAR(50) NOT NULL COMMENT '菜单编码', `menu_name` VARCHAR(100) NOT NULL COMMENT '菜单名称', `menu_icon` VARCHAR(100) DEFAULT NULL COMMENT '菜单图标', `menu_url` VARCHAR(255) DEFAULT NULL COMMENT '前端路由', `menu_type` ENUM('action', 'link', 'divider') NOT NULL DEFAULT 'link' COMMENT '菜单类型', `parent_id` INT DEFAULT NULL COMMENT '父菜单ID', `menu_level` TINYINT NOT NULL DEFAULT 1 COMMENT '菜单层级(根节点为1)', `tree_path` VARCHAR(255) DEFAULT NULL COMMENT '树路径(如 /1/5)', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `is_visible` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否在侧边栏显示', `description` VARCHAR(255) DEFAULT NULL COMMENT '菜单说明', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`menu_id`), UNIQUE KEY `uk_sys_menus_code` (`menu_code`), KEY `idx_sys_menus_parent_id` (`parent_id`), KEY `idx_sys_menus_menu_level` (`menu_level`), KEY `idx_sys_menus_tree_path` (`tree_path`), KEY `idx_sys_menus_is_active` (`is_active`), KEY `idx_sys_menus_is_visible` (`is_visible`), CONSTRAINT `fk_sys_menus_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `sys_menus` (`menu_id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统菜单表'; CREATE TABLE `sys_dict_data` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `dict_type` VARCHAR(64) NOT NULL DEFAULT 'client_platform' COMMENT '字典类型', `dict_code` VARCHAR(64) NOT NULL COMMENT '业务编码', `parent_code` VARCHAR(64) NOT NULL DEFAULT 'ROOT' COMMENT '父级编码', `tree_path` VARCHAR(255) DEFAULT NULL COMMENT '树路径', `label_cn` VARCHAR(128) NOT NULL COMMENT '中文名称', `label_en` VARCHAR(128) DEFAULT NULL COMMENT '英文名称', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `extension_attr` LONGTEXT DEFAULT NULL COMMENT '扩展属性(JSON字符串)', `is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_sys_dict_data_type_code` (`dict_type`, `dict_code`), KEY `idx_sys_dict_data_type_parent` (`dict_type`, `parent_code`), KEY `idx_sys_dict_data_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统字典数据表'; CREATE TABLE `sys_system_parameters` ( `param_id` BIGINT NOT NULL AUTO_INCREMENT, `param_key` VARCHAR(128) NOT NULL COMMENT '参数键', `param_name` VARCHAR(255) NOT NULL COMMENT '参数名称', `param_value` TEXT DEFAULT NULL COMMENT '参数值', `value_type` VARCHAR(32) NOT NULL DEFAULT 'string' COMMENT '值类型', `category` VARCHAR(64) NOT NULL DEFAULT 'system' COMMENT '参数分类', `description` VARCHAR(500) DEFAULT NULL COMMENT '参数说明', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`param_id`), UNIQUE KEY `uk_sys_system_parameters_key` (`param_key`), KEY `idx_sys_system_parameters_category` (`category`), KEY `idx_sys_system_parameters_active` (`is_active`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统参数表'; CREATE TABLE `hot_word_group` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL COMMENT '热词组名称', `description` VARCHAR(500) DEFAULT NULL COMMENT '描述', `vocabulary_id` VARCHAR(255) DEFAULT NULL COMMENT '阿里云词表ID', `last_sync_time` DATETIME DEFAULT NULL COMMENT '最后同步时间', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_hot_word_group_name` (`name`), KEY `idx_hot_word_group_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='热词组主表'; CREATE TABLE `llm_model_config` ( `config_id` BIGINT NOT NULL AUTO_INCREMENT, `model_code` VARCHAR(128) NOT NULL COMMENT '模型编码', `model_name` VARCHAR(255) NOT NULL COMMENT '模型名称', `provider` VARCHAR(64) DEFAULT NULL COMMENT '供应商', `endpoint_url` VARCHAR(512) DEFAULT NULL COMMENT '模型接口地址', `api_key` VARCHAR(512) DEFAULT NULL COMMENT '接口密钥', `llm_model_name` VARCHAR(128) NOT NULL COMMENT '供应商模型名', `llm_timeout` INT NOT NULL DEFAULT 120 COMMENT '超时时间(秒)', `llm_temperature` DECIMAL(5,2) NOT NULL DEFAULT 0.70 COMMENT 'temperature', `llm_top_p` DECIMAL(5,2) NOT NULL DEFAULT 0.90 COMMENT 'top_p', `llm_max_tokens` INT NOT NULL DEFAULT 2048 COMMENT '最大token数', `llm_system_prompt` TEXT DEFAULT NULL COMMENT '系统提示词', `description` VARCHAR(500) DEFAULT NULL COMMENT '说明', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`config_id`), UNIQUE KEY `uk_llm_model_config_code` (`model_code`), KEY `idx_llm_model_config_active` (`is_active`), KEY `idx_llm_model_config_default` (`is_default`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='LLM模型配置表'; CREATE TABLE `audio_model_config` ( `config_id` BIGINT NOT NULL AUTO_INCREMENT, `model_code` VARCHAR(128) NOT NULL COMMENT '模型编码', `model_name` VARCHAR(255) NOT NULL COMMENT '模型名称', `audio_scene` VARCHAR(32) NOT NULL COMMENT 'asr / voiceprint', `provider` VARCHAR(64) DEFAULT NULL COMMENT '供应商', `endpoint_url` VARCHAR(512) DEFAULT NULL COMMENT '接口地址', `api_key` VARCHAR(512) DEFAULT NULL COMMENT '接口密钥', `request_timeout_seconds` INT NOT NULL DEFAULT 300 COMMENT '请求超时(秒)', `hot_word_group_id` INT DEFAULT NULL COMMENT '关联热词组', `extra_config` JSON DEFAULT NULL COMMENT '音频模型差异化配置', `description` VARCHAR(500) DEFAULT NULL COMMENT '说明', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`config_id`), UNIQUE KEY `uk_audio_model_config_code` (`model_code`), KEY `idx_audio_model_config_scene` (`audio_scene`), KEY `idx_audio_model_config_active` (`is_active`), KEY `idx_audio_model_config_default` (`is_default`), KEY `idx_audio_model_config_hot_word_group_id` (`hot_word_group_id`), CONSTRAINT `fk_audio_model_config_hot_word_group_id` FOREIGN KEY (`hot_word_group_id`) REFERENCES `hot_word_group` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='音频模型配置表'; CREATE TABLE `hot_word_item` ( `id` INT NOT NULL AUTO_INCREMENT, `group_id` INT NOT NULL COMMENT '热词组ID', `text` VARCHAR(255) NOT NULL COMMENT '热词内容', `weight` INT NOT NULL DEFAULT 4 COMMENT '权重', `lang` VARCHAR(20) NOT NULL DEFAULT 'zh' COMMENT '语言', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_hot_word_item_group_text` (`group_id`, `text`), KEY `idx_hot_word_item_group_id` (`group_id`), KEY `idx_hot_word_item_status` (`status`), CONSTRAINT `fk_hot_word_item_group_id` FOREIGN KEY (`group_id`) REFERENCES `hot_word_group` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='热词条目表'; CREATE TABLE `prompts` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL COMMENT '提示词名称', `task_type` ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL COMMENT '任务类型', `content` LONGTEXT NOT NULL COMMENT '提示词内容', `desc` VARCHAR(500) DEFAULT NULL COMMENT '模版简介', `is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `creator_id` INT NOT NULL COMMENT '创建者', `is_system` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否系统模版', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_prompts_creator_id` (`creator_id`), KEY `idx_prompts_task_scope_active` (`task_type`, `is_system`, `creator_id`, `is_active`, `is_default`), CONSTRAINT `fk_prompts_creator_id` FOREIGN KEY (`creator_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提示词模版表'; CREATE TABLE `prompt_config` ( `config_id` BIGINT NOT NULL AUTO_INCREMENT, `user_id` INT NOT NULL COMMENT '用户ID', `task_type` ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL COMMENT '任务类型', `prompt_id` INT NOT NULL COMMENT '模版ID', `is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`config_id`), UNIQUE KEY `uk_prompt_config_user_task_prompt` (`user_id`, `task_type`, `prompt_id`), KEY `idx_prompt_config_user_task_order` (`user_id`, `task_type`, `sort_order`), KEY `idx_prompt_config_prompt_id` (`prompt_id`), CONSTRAINT `fk_prompt_config_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `fk_prompt_config_prompt_id` FOREIGN KEY (`prompt_id`) REFERENCES `prompts` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户提示词配置表'; CREATE TABLE `sys_role_menu_permissions` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `role_id` INT NOT NULL COMMENT '角色ID', `menu_id` INT NOT NULL COMMENT '菜单ID', `granted_by` INT DEFAULT NULL COMMENT '授权人ID', `granted_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '授权时间', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_sys_role_menu_permissions_role_menu` (`role_id`, `menu_id`), KEY `idx_sys_role_menu_permissions_role_id` (`role_id`), KEY `idx_sys_role_menu_permissions_menu_id` (`menu_id`), KEY `idx_sys_role_menu_permissions_granted_by` (`granted_by`), KEY `idx_sys_role_menu_permissions_granted_at` (`granted_at`), CONSTRAINT `fk_sys_role_menu_permissions_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_roles` (`role_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `fk_sys_role_menu_permissions_menu_id` FOREIGN KEY (`menu_id`) REFERENCES `sys_menus` (`menu_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `fk_sys_role_menu_permissions_granted_by` FOREIGN KEY (`granted_by`) REFERENCES `sys_users` (`user_id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单授权表'; CREATE TABLE `sys_user_mcp` ( `id` INT NOT NULL AUTO_INCREMENT, `user_id` INT NOT NULL COMMENT '用户ID', `bot_id` VARCHAR(64) NOT NULL COMMENT '机器人ID', `bot_secret` VARCHAR(128) NOT NULL COMMENT '机器人密钥', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态', `last_used_at` DATETIME DEFAULT NULL COMMENT '最后使用时间', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_sys_user_mcp_user_id` (`user_id`), UNIQUE KEY `uk_sys_user_mcp_bot_id` (`bot_id`), KEY `idx_sys_user_mcp_status` (`status`), CONSTRAINT `fk_sys_user_mcp_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户MCP接入凭证表'; -- ===================================================================== -- 2. 业务表 -- ===================================================================== CREATE TABLE `tags` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL COMMENT '标签名称', `color` VARCHAR(7) NOT NULL DEFAULT '#409EFF' COMMENT '标签颜色', `creator_id` INT DEFAULT NULL COMMENT '创建人', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tags_name` (`name`), KEY `idx_tags_creator_id` (`creator_id`), CONSTRAINT `fk_tags_creator_id` FOREIGN KEY (`creator_id`) REFERENCES `sys_users` (`user_id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='标签表'; CREATE TABLE `meetings` ( `meeting_id` INT NOT NULL AUTO_INCREMENT, `user_id` INT NOT NULL COMMENT '创建人', `title` VARCHAR(255) NOT NULL COMMENT '会议标题', `tags` VARCHAR(255) DEFAULT NULL COMMENT '逗号分隔标签', `meeting_time` DATETIME DEFAULT NULL COMMENT '会议时间', `access_password` VARCHAR(32) DEFAULT NULL COMMENT '访问密码', `prompt_id` INT DEFAULT 0 COMMENT '选用提示词ID,0表示未指定', `user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示', `summary` LONGTEXT DEFAULT NULL COMMENT '会议总结', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`meeting_id`), KEY `idx_meetings_user_id` (`user_id`), KEY `idx_meetings_meeting_time` (`meeting_time`), KEY `idx_meetings_created_at` (`created_at`), KEY `idx_meetings_prompt_id` (`prompt_id`), CONSTRAINT `fk_meetings_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议表'; CREATE TABLE `attendees` ( `attendee_id` INT NOT NULL AUTO_INCREMENT, `meeting_id` INT NOT NULL COMMENT '会议ID', `user_id` INT NOT NULL COMMENT '参会用户ID', PRIMARY KEY (`attendee_id`), UNIQUE KEY `uk_attendees_meeting_user` (`meeting_id`, `user_id`), KEY `idx_attendees_meeting_id` (`meeting_id`), KEY `idx_attendees_user_id` (`user_id`), CONSTRAINT `fk_attendees_meeting_id` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `fk_attendees_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议参会人表'; CREATE TABLE `attachments` ( `attachment_id` INT NOT NULL AUTO_INCREMENT, `meeting_id` INT NOT NULL COMMENT '会议ID', `file_name` VARCHAR(255) NOT NULL COMMENT '文件名', `file_path` VARCHAR(512) NOT NULL COMMENT '文件路径', `file_type` VARCHAR(100) DEFAULT NULL COMMENT '文件类型', `uploaded_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间', PRIMARY KEY (`attachment_id`), KEY `idx_attachments_meeting_id` (`meeting_id`), CONSTRAINT `fk_attachments_meeting_id` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议附件表'; CREATE TABLE `audio_files` ( `audio_id` INT NOT NULL AUTO_INCREMENT, `meeting_id` INT NOT NULL COMMENT '会议ID', `file_path` VARCHAR(512) NOT NULL COMMENT '音频相对路径', `file_name` VARCHAR(255) DEFAULT NULL COMMENT '原始文件名', `file_size` BIGINT DEFAULT NULL COMMENT '文件大小(字节)', `duration` DECIMAL(10,2) DEFAULT NULL COMMENT '音频时长(秒)', `upload_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间', `processing_status` VARCHAR(20) NOT NULL DEFAULT 'uploaded' COMMENT '处理状态', `error_message` TEXT DEFAULT NULL COMMENT '错误信息', `task_id` VARCHAR(255) DEFAULT NULL COMMENT '最新转写任务ID', PRIMARY KEY (`audio_id`), UNIQUE KEY `uk_audio_files_meeting_id` (`meeting_id`), KEY `idx_audio_files_task_id` (`task_id`), KEY `idx_audio_files_processing_status` (`processing_status`), CONSTRAINT `fk_audio_files_meeting_id` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议音频表'; CREATE TABLE `transcript_tasks` ( `task_id` VARCHAR(100) NOT NULL COMMENT '业务任务ID', `paraformer_task_id` VARCHAR(100) DEFAULT NULL COMMENT '云端任务ID', `meeting_id` INT NOT NULL COMMENT '会议ID', `status` ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending' COMMENT '任务状态', `progress` INT NOT NULL DEFAULT 0 COMMENT '任务进度', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `completed_at` DATETIME DEFAULT NULL COMMENT '完成时间', `error_message` TEXT DEFAULT NULL COMMENT '错误信息', PRIMARY KEY (`task_id`), KEY `idx_transcript_tasks_meeting_id` (`meeting_id`), KEY `idx_transcript_tasks_status` (`status`), KEY `idx_transcript_tasks_created_at` (`created_at`), KEY `idx_transcript_tasks_paraformer_task_id` (`paraformer_task_id`), CONSTRAINT `fk_transcript_tasks_meeting_id` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转写任务表'; CREATE TABLE `transcript_segments` ( `segment_id` BIGINT NOT NULL AUTO_INCREMENT, `meeting_id` INT NOT NULL COMMENT '会议ID', `speaker_id` INT NOT NULL DEFAULT 0 COMMENT '说话人编号', `speaker_tag` VARCHAR(50) DEFAULT NULL COMMENT '说话人标签', `start_time_ms` INT NOT NULL COMMENT '开始时间(毫秒)', `end_time_ms` INT NOT NULL COMMENT '结束时间(毫秒)', `text_content` LONGTEXT NOT NULL COMMENT '转写文本', PRIMARY KEY (`segment_id`), KEY `idx_transcript_segments_meeting_id` (`meeting_id`), KEY `idx_transcript_segments_speaker_id` (`speaker_id`), KEY `idx_transcript_segments_start_time_ms` (`start_time_ms`), CONSTRAINT `fk_transcript_segments_meeting_id` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转写分段表'; CREATE TABLE `llm_tasks` ( `task_id` VARCHAR(100) NOT NULL COMMENT '总结任务ID', `meeting_id` INT NOT NULL COMMENT '会议ID', `user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示', `prompt_id` INT DEFAULT NULL COMMENT '使用的模版ID', `model_code` VARCHAR(128) DEFAULT NULL COMMENT '使用的模型编码', `status` ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending' COMMENT '任务状态', `progress` INT NOT NULL DEFAULT 0 COMMENT '任务进度', `result` LONGTEXT DEFAULT NULL COMMENT '总结结果', `error_message` TEXT DEFAULT NULL COMMENT '错误信息', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `completed_at` DATETIME DEFAULT NULL COMMENT '完成时间', PRIMARY KEY (`task_id`), KEY `idx_llm_tasks_meeting_id` (`meeting_id`), KEY `idx_llm_tasks_status` (`status`), KEY `idx_llm_tasks_created_at` (`created_at`), KEY `idx_llm_tasks_prompt_id` (`prompt_id`), KEY `idx_llm_tasks_model_code` (`model_code`), CONSTRAINT `fk_llm_tasks_meeting_id` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议总结任务表'; CREATE TABLE `knowledge_bases` ( `kb_id` INT NOT NULL AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL COMMENT '知识标题', `prompt_id` INT DEFAULT 0 COMMENT '使用的模版ID', `user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示', `content` LONGTEXT DEFAULT NULL COMMENT '知识内容', `creator_id` INT NOT NULL COMMENT '创建人', `is_shared` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否共享', `source_meeting_ids` VARCHAR(255) DEFAULT NULL COMMENT '来源会议ID列表', `tags` VARCHAR(255) DEFAULT NULL COMMENT '标签', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`kb_id`), KEY `idx_knowledge_bases_creator_id` (`creator_id`), KEY `idx_knowledge_bases_prompt_id` (`prompt_id`), KEY `idx_knowledge_bases_updated_at` (`updated_at`), KEY `idx_knowledge_bases_is_shared` (`is_shared`), CONSTRAINT `fk_knowledge_bases_creator_id` FOREIGN KEY (`creator_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='知识库表'; CREATE TABLE `knowledge_base_tasks` ( `task_id` VARCHAR(100) NOT NULL COMMENT '知识库任务ID', `user_id` INT NOT NULL COMMENT '发起人', `kb_id` INT NOT NULL COMMENT '知识库ID', `prompt_id` INT DEFAULT NULL COMMENT '使用的模版ID', `user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示', `status` ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending' COMMENT '任务状态', `progress` INT NOT NULL DEFAULT 0 COMMENT '任务进度', `error_message` TEXT DEFAULT NULL COMMENT '错误信息', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `completed_at` DATETIME DEFAULT NULL COMMENT '完成时间', PRIMARY KEY (`task_id`), KEY `idx_knowledge_base_tasks_user_id` (`user_id`), KEY `idx_knowledge_base_tasks_kb_id` (`kb_id`), KEY `idx_knowledge_base_tasks_status` (`status`), KEY `idx_knowledge_base_tasks_created_at` (`created_at`), CONSTRAINT `fk_knowledge_base_tasks_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT, CONSTRAINT `fk_knowledge_base_tasks_kb_id` FOREIGN KEY (`kb_id`) REFERENCES `knowledge_bases` (`kb_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='知识库生成任务表'; CREATE TABLE `client_downloads` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `platform_type` VARCHAR(50) DEFAULT NULL COMMENT '平台类型(兼容字段)', `platform_name` VARCHAR(50) DEFAULT NULL COMMENT '平台名称(兼容字段)', `platform_code` VARCHAR(64) NOT NULL COMMENT '平台编码', `version` VARCHAR(50) NOT NULL COMMENT '版本号', `version_code` INT NOT NULL COMMENT '版本序号', `download_url` VARCHAR(512) NOT NULL COMMENT '下载地址', `file_size` BIGINT DEFAULT NULL COMMENT '文件大小', `release_notes` TEXT DEFAULT NULL COMMENT '更新说明', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `is_latest` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否最新', `min_system_version` VARCHAR(50) DEFAULT NULL COMMENT '最低系统版本', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `created_by` INT DEFAULT NULL COMMENT '创建人', PRIMARY KEY (`id`), KEY `idx_client_downloads_platform_code` (`platform_code`), KEY `idx_client_downloads_platform_type_name` (`platform_type`, `platform_name`), KEY `idx_client_downloads_is_latest` (`is_latest`), KEY `idx_client_downloads_is_active` (`is_active`), KEY `idx_client_downloads_platform_code_version` (`platform_code`, `version_code`), CONSTRAINT `fk_client_downloads_created_by` FOREIGN KEY (`created_by`) REFERENCES `sys_users` (`user_id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户端下载管理表'; CREATE TABLE `external_apps` ( `id` INT NOT NULL AUTO_INCREMENT, `app_name` VARCHAR(100) NOT NULL COMMENT '应用名称', `app_type` ENUM('native', 'web') NOT NULL COMMENT '应用类型', `app_info` TEXT DEFAULT NULL COMMENT '应用信息(JSON字符串)', `icon_url` TEXT DEFAULT NULL COMMENT '图标地址', `description` TEXT DEFAULT NULL COMMENT '应用说明', `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序', `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `created_by` INT DEFAULT NULL COMMENT '创建人', PRIMARY KEY (`id`), KEY `idx_external_apps_type` (`app_type`), KEY `idx_external_apps_active` (`is_active`), KEY `idx_external_apps_sort_order` (`sort_order`), KEY `idx_external_apps_type_active` (`app_type`, `is_active`), CONSTRAINT `fk_external_apps_created_by` FOREIGN KEY (`created_by`) REFERENCES `sys_users` (`user_id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='外部应用管理表'; CREATE TABLE `terminals` ( `id` INT NOT NULL AUTO_INCREMENT, `imei` VARCHAR(64) NOT NULL COMMENT '终端唯一标识', `terminal_name` VARCHAR(100) DEFAULT NULL COMMENT '终端名称', `terminal_type` VARCHAR(50) NOT NULL COMMENT '终端类型编码', `description` VARCHAR(500) DEFAULT NULL COMMENT '说明', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态', `is_activated` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '激活状态', `activated_at` DATETIME DEFAULT NULL COMMENT '激活时间', `firmware_version` VARCHAR(50) DEFAULT NULL COMMENT '固件版本', `last_online_at` DATETIME DEFAULT NULL COMMENT '最后在线时间', `ip_address` VARCHAR(50) DEFAULT NULL COMMENT '最近在线IP', `mac_address` VARCHAR(64) DEFAULT NULL COMMENT 'MAC地址', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `created_by` INT DEFAULT NULL COMMENT '创建人', `current_user_id` INT DEFAULT NULL COMMENT '当前绑定用户', PRIMARY KEY (`id`), UNIQUE KEY `uk_terminals_imei` (`imei`), KEY `idx_terminals_terminal_type` (`terminal_type`), KEY `idx_terminals_status` (`status`), KEY `idx_terminals_created_by` (`created_by`), KEY `idx_terminals_current_user_id` (`current_user_id`), KEY `idx_terminals_last_online_at` (`last_online_at`), CONSTRAINT `fk_terminals_created_by` FOREIGN KEY (`created_by`) REFERENCES `sys_users` (`user_id`) ON DELETE SET NULL ON UPDATE RESTRICT, CONSTRAINT `fk_terminals_current_user_id` FOREIGN KEY (`current_user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE SET NULL ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='专用终端设备表'; CREATE TABLE `user_logs` ( `log_id` BIGINT NOT NULL AUTO_INCREMENT, `user_id` INT NOT NULL COMMENT '用户ID', `action_type` VARCHAR(50) NOT NULL COMMENT '行为类型', `ip_address` VARCHAR(50) DEFAULT NULL COMMENT 'IP地址', `user_agent` TEXT DEFAULT NULL COMMENT 'User-Agent', `metadata` LONGTEXT DEFAULT NULL COMMENT '扩展元数据(JSON字符串)', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`log_id`), KEY `idx_user_logs_user_id` (`user_id`), KEY `idx_user_logs_action_type` (`action_type`), KEY `idx_user_logs_created_at` (`created_at`), KEY `idx_user_logs_user_action` (`user_id`, `action_type`), CONSTRAINT `fk_user_logs_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户行为日志表'; CREATE TABLE `user_voiceprint` ( `vp_id` INT NOT NULL AUTO_INCREMENT, `user_id` INT NOT NULL COMMENT '用户ID', `file_path` VARCHAR(255) NOT NULL COMMENT '声纹文件路径', `file_size` BIGINT DEFAULT NULL COMMENT '文件大小', `duration_seconds` DECIMAL(5,2) DEFAULT 10.00 COMMENT '音频时长', `vector_data` LONGTEXT DEFAULT NULL COMMENT '声纹向量(JSON字符串)', `collected_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`vp_id`), UNIQUE KEY `uk_user_voiceprint_user_id` (`user_id`), KEY `idx_user_voiceprint_collected_at` (`collected_at`), CONSTRAINT `fk_user_voiceprint_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户声纹表'; SELECT 'imeeting-schema-latest.sql executed successfully' AS `message`;