-- 个人 AI 助理独立知识空间。 -- 个人知识仅按 tenant_id + owner_user_id 隔离,不修改或复用企业 aihr_knowledge_* 表。 -- 个人资料使用独立私有桶;不得修改企业知识使用的默认 MinIO 配置。 INSERT INTO `sys_oss_config` (`oss_config_id`, `tenant_id`, `config_key`, `access_key`, `secret_key`, `bucket_name`, `prefix`, `endpoint`, `domain`, `is_https`, `region`, `access_policy`, `status`, `ext1`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) SELECT 9001, source.`tenant_id`, 'personal-minio', source.`access_key`, source.`secret_key`, 'ruoyi-personal', '', source.`endpoint`, source.`domain`, source.`is_https`, source.`region`, '0', '1', '', source.`create_dept`, source.`create_by`, CURRENT_TIMESTAMP, source.`update_by`, CURRENT_TIMESTAMP, '个人AI助理专用私有对象存储' FROM `sys_oss_config` source WHERE source.`tenant_id` = '000000' AND source.`config_key` = 'minio' AND NOT EXISTS ( SELECT 1 FROM `sys_oss_config` target WHERE target.`tenant_id` = source.`tenant_id` AND target.`config_key` = 'personal-minio' ); CREATE TABLE IF NOT EXISTS `aihr_personal_space` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '个人空间所属用户ID', `owner_ext_party_id` varchar(100) DEFAULT NULL COMMENT '外部组织主体ID', `status` varchar(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '空间状态', `quota_bytes` bigint NOT NULL DEFAULT 524288000 COMMENT '空间配额,默认500MB', `used_bytes` bigint NOT NULL DEFAULT 0 COMMENT '已使用字节数', `item_count` int NOT NULL DEFAULT 0 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_personal_space_owner` (`tenant_id`, `owner_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理知识空间'; CREATE TABLE IF NOT EXISTS `aihr_personal_item` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `space_id` bigint NOT NULL COMMENT '个人空间ID', `owner_user_id` bigint NOT NULL COMMENT '资料所属用户ID', `source_type` varchar(20) NOT NULL COMMENT '来源类型: text/file/url', `title` varchar(500) NOT NULL COMMENT '资料标题', `original_url` varchar(2000) DEFAULT NULL COMMENT '原始网址', `oss_id` bigint DEFAULT NULL COMMENT '对象存储ID', `mime_type` varchar(100) DEFAULT NULL COMMENT 'MIME类型', `size_bytes` bigint NOT NULL DEFAULT 0 COMMENT '资料大小', `content_hash` varchar(64) NOT NULL COMMENT '内容摘要哈希', `status` varchar(20) NOT NULL DEFAULT 'QUEUED' COMMENT '处理状态', `attempt_count` int NOT NULL DEFAULT 0 COMMENT '处理尝试次数', `error_code` varchar(80) DEFAULT NULL COMMENT '错误代码', `error_message` varchar(500) DEFAULT NULL COMMENT '错误信息', `summary` text COMMENT '资料摘要', `tags_json` json COMMENT '标签JSON', `captured_at` datetime NOT NULL COMMENT '采集完成时间', `parsed_at` datetime DEFAULT NULL COMMENT '解析完成时间', `deleted_at` datetime DEFAULT NULL 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`), KEY `idx_personal_item_owner` (`tenant_id`, `owner_user_id`, `status`, `create_time`), KEY `idx_personal_item_date` (`tenant_id`, `owner_user_id`, `captured_at`), KEY `idx_personal_item_hash` (`space_id`, `content_hash`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理资料'; CREATE TABLE IF NOT EXISTS `aihr_personal_fragment` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `space_id` bigint NOT NULL COMMENT '个人空间ID', `owner_user_id` bigint NOT NULL COMMENT '片段所属用户ID', `item_id` bigint NOT NULL COMMENT '个人资料ID', `idx` int NOT NULL COMMENT '片段序号', `content` text NOT NULL COMMENT '片段内容', `token_count` int NOT NULL DEFAULT 0 COMMENT '估算Token数', `embedding_json` longtext COMMENT '向量JSON', `embedding_model` varchar(100) DEFAULT NULL COMMENT '向量模型', `embedding_time` datetime DEFAULT NULL COMMENT '向量生成时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_personal_fragment_idx` (`item_id`, `idx`), KEY `idx_personal_fragment_owner` (`tenant_id`, `owner_user_id`, `item_id`), FULLTEXT KEY `ft_personal_fragment_content` (`content`) WITH PARSER ngram ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理知识片段'; CREATE TABLE IF NOT EXISTS `aihr_personal_chat_session` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '会话所属用户ID', `title` varchar(200) NOT NULL COMMENT '会话标题', `status` varchar(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '会话状态', `default_scope` varchar(50) NOT NULL DEFAULT 'PERSONAL' 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`), KEY `idx_personal_session_owner` (`tenant_id`, `owner_user_id`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理对话会话'; CREATE TABLE IF NOT EXISTS `aihr_personal_chat_message` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '消息所属用户ID', `session_id` bigint NOT NULL COMMENT '对话会话ID', `role` varchar(20) NOT NULL COMMENT '消息角色: user/assistant/system', `content` longtext NOT NULL COMMENT '消息内容', `scope_json` json COMMENT '本轮检索范围JSON', `citations_json` json COMMENT '引用来源JSON', `model_name` varchar(100) DEFAULT NULL COMMENT '模型名称', `prompt_version` varchar(100) DEFAULT NULL COMMENT '提示词版本', `input_tokens` int NOT NULL DEFAULT 0 COMMENT '输入Token数', `output_tokens` int NOT NULL DEFAULT 0 COMMENT '输出Token数', `latency_ms` bigint NOT NULL DEFAULT 0 COMMENT '响应耗时毫秒', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_personal_message_session` (`session_id`, `create_time`), KEY `idx_personal_message_owner` (`tenant_id`, `owner_user_id`, `session_id`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理对话消息'; CREATE TABLE IF NOT EXISTS `aihr_personal_cleanup_job` ( `id` bigint NOT NULL COMMENT '清理任务ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '资料所属用户ID', `item_id` bigint NOT NULL COMMENT '资料ID', `status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/RETRY/DONE', `attempt_count` int NOT NULL DEFAULT 0 COMMENT '执行次数', `last_error` varchar(100) DEFAULT NULL COMMENT '脱敏后的错误类型', `completed_at` datetime DEFAULT NULL 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_personal_cleanup_item` (`tenant_id`, `owner_user_id`, `item_id`), KEY `idx_personal_cleanup_status` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理资料清理任务'; CREATE TABLE IF NOT EXISTS `aihr_personal_ocr_job` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'OCR任务ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '资料所属用户ID', `item_id` bigint NOT NULL COMMENT '资料ID', `status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/RUNNING/RETRY/COMPLETED/FAILED', `total_pages` int NOT NULL COMMENT 'PDF总页数', `processed_pages` int NOT NULL DEFAULT 0 COMMENT '已处理页数', `success_pages` int NOT NULL DEFAULT 0 COMMENT '识别成功页数', `failed_pages` int NOT NULL DEFAULT 0 COMMENT '识别失败页数', `failed_page_numbers_json` json COMMENT '识别失败页码JSON', `next_page` int NOT NULL DEFAULT 1 COMMENT '下一待处理页码,从1开始', `attempt_count` int NOT NULL DEFAULT 0 COMMENT '任务领取次数', `last_error_code` varchar(80) DEFAULT NULL COMMENT '脱敏后的错误码', `lease_until` datetime DEFAULT NULL 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_personal_ocr_job_item` (`tenant_id`, `owner_user_id`, `item_id`), KEY `idx_personal_ocr_job_status` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理扫描PDF OCR任务'; CREATE TABLE IF NOT EXISTS `aihr_personal_ocr_page` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'OCR页记录ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '资料所属用户ID', `item_id` bigint NOT NULL COMMENT '资料ID', `page_number` int NOT NULL COMMENT '页码,从1开始', `status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/RUNNING/SUCCESS/FAILED', `ocr_text` longtext COMMENT '页级OCR文本', `attempt_count` int NOT NULL DEFAULT 0 COMMENT '识别尝试次数', `last_error_code` varchar(80) DEFAULT NULL 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_personal_ocr_page_number` (`tenant_id`, `owner_user_id`, `item_id`, `page_number`), KEY `idx_personal_ocr_page_status` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理扫描PDF OCR页结果'; CREATE TABLE IF NOT EXISTS `aihr_personal_export_task` ( `id` bigint NOT NULL COMMENT '导出任务ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '任务所属用户ID', `session_id` bigint NOT NULL COMMENT '来源会话ID', `outline_json` json NOT NULL COMMENT '可编辑大纲及不可变来源JSON', `outline_confirmed` tinyint(1) NOT NULL DEFAULT 0 COMMENT '大纲是否已确认', `template_code` varchar(50) NOT NULL DEFAULT 'standard' COMMENT 'PPT模板代码', `status` varchar(20) NOT NULL DEFAULT 'DRAFT' COMMENT 'DRAFT/CONFIRMED/PENDING/RUNNING/READY/FAILED', `oss_id` bigint DEFAULT NULL COMMENT '生成PPTX的私有OSS ID', `error_message` varchar(500) DEFAULT NULL COMMENT '公开错误信息', `confirmed_at` datetime DEFAULT NULL 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`), KEY `idx_personal_export_owner` (`tenant_id`, `owner_user_id`, `update_time`), KEY `idx_personal_export_status` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人AI助理汇报导出任务'; CREATE TABLE IF NOT EXISTS `aihr_personal_publish_request` ( `id` bigint NOT NULL COMMENT '发布申请ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `item_id` bigint NOT NULL COMMENT '个人资料ID', `applicant_user_id` bigint NOT NULL COMMENT '申请人用户ID', `target_scope` varchar(100) NOT NULL COMMENT '目标范围,阶段二仅POSITION:生活顾问', `reason` varchar(500) NOT NULL COMMENT '申请原因', `status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/APPROVED/REJECTED', `reviewer_user_id` bigint DEFAULT NULL COMMENT '审核人用户ID', `review_comment` varchar(500) DEFAULT NULL COMMENT '审核意见', `review_time` datetime DEFAULT NULL COMMENT '审核时间', `published_knowledge_id` bigint DEFAULT NULL COMMENT '企业知识库副本ID', `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`), KEY `idx_personal_publish_applicant` (`tenant_id`, `applicant_user_id`, `create_time`), KEY `idx_personal_publish_status` (`tenant_id`, `status`, `update_time`), KEY `idx_personal_publish_item` (`tenant_id`, `item_id`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='个人知识申请沉淀企业知识审核';