-- 个人助理项目服务记忆最小切片:候选确认、项目事实与版本快照。 CREATE TABLE IF NOT EXISTS `aihr_memory_candidate` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '候选ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '候选所属用户', `source_conversation_id` varchar(64) NOT NULL DEFAULT '' COMMENT '来源会话ID,无状态问答为空串', `source_request_id` varchar(64) NOT NULL COMMENT '来源问答请求ID', `candidate_hash` char(64) NOT NULL COMMENT '规范化候选SHA-256', `project_code` varchar(100) DEFAULT NULL COMMENT '经当前身份解析的真实项目编码', `work_date` date DEFAULT NULL COMMENT 'Asia/Shanghai 自然工作日期', `memory_type` varchar(30) NOT NULL COMMENT 'RESIDENT_NEED/FOLLOW_UP', `target_domain` varchar(30) NOT NULL DEFAULT 'PROJECT_SERVICE' COMMENT '目标记忆域', `status` varchar(20) NOT NULL COMMENT 'NEEDS_INPUT/DRAFT/CONFIRMED/DISMISSED/EXPIRED', `draft_json` json DEFAULT NULL COMMENT '可编辑的结构化草稿,不保存模型原始输出', `missing_fields_json` json DEFAULT NULL COMMENT '待补充字段', `source_snapshot_json` json DEFAULT NULL COMMENT '最小必要来源快照与受保护OSS引用', `confidence` decimal(5,4) NOT NULL DEFAULT 0 COMMENT '只用于展示建议', `target_id` bigint DEFAULT NULL COMMENT '确认后项目记忆ID', `target_version` int DEFAULT NULL COMMENT '确认结果版本', `version` int NOT NULL DEFAULT 1 COMMENT '候选乐观锁版本', `confirm_idempotency_key` varchar(100) DEFAULT NULL COMMENT '确认幂等键', `confirm_request_hash` char(64) DEFAULT NULL COMMENT '确认请求规范化哈希', `expires_at` datetime NOT NULL COMMENT '草稿过期时间', `confirmed_at` datetime DEFAULT NULL COMMENT '确认时间', `dismissed_at` datetime DEFAULT NULL COMMENT '忽略时间', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_memory_candidate_source` (`tenant_id`, `owner_user_id`, `source_request_id`, `candidate_hash`), UNIQUE KEY `uk_aihr_memory_candidate_confirm_key` (`tenant_id`, `owner_user_id`, `confirm_idempotency_key`), KEY `idx_aihr_memory_candidate_owner` (`tenant_id`, `owner_user_id`, `status`, `expires_at`), KEY `idx_aihr_memory_candidate_expiry` (`status`, `expires_at`), KEY `idx_aihr_memory_candidate_cleanup` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='个人助理长期记忆候选'; CREATE TABLE IF NOT EXISTS `aihr_service_memory` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '项目服务记忆ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `project_code` varchar(100) NOT NULL COMMENT '真实项目编码', `memory_type` varchar(30) NOT NULL COMMENT 'RESIDENT_NEED/FOLLOW_UP', `subject_type` varchar(20) NOT NULL DEFAULT 'LOCATION' COMMENT '当前无权威住户主数据,仅定位到房屋', `building_name` varchar(100) NOT NULL COMMENT '楼栋', `unit_name` varchar(100) NOT NULL COMMENT '单元', `room_no` varchar(100) NOT NULL COMMENT '房号', `category` varchar(50) NOT NULL COMMENT '需求分类', `title` varchar(500) NOT NULL COMMENT '标题', `summary` varchar(1000) NOT NULL COMMENT '最小必要摘要', `detail` text COMMENT '必要说明', `status` varchar(20) NOT NULL DEFAULT 'OPEN' COMMENT 'OPEN/IN_PROGRESS/RESOLVED/VOID', `occurred_at` datetime NOT NULL COMMENT '发生或获知时间', `follow_up_at` datetime DEFAULT NULL COMMENT '用户单独确认的跟进时间', `source_conversation_id` varchar(64) NOT NULL DEFAULT '' COMMENT '来源会话ID', `source_request_id` varchar(64) NOT NULL COMMENT '来源问答请求ID', `created_by` bigint NOT NULL COMMENT '记录人', `confirmed_by` bigint NOT NULL COMMENT '确认人', `version` int NOT NULL DEFAULT 1 COMMENT '当前版本', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_aihr_service_memory_scope` (`tenant_id`, `project_code`, `status`, `follow_up_at`), KEY `idx_aihr_service_memory_location` (`tenant_id`, `project_code`, `building_name`, `unit_name`, `room_no`), KEY `idx_aihr_service_memory_source` (`tenant_id`, `source_request_id`), FULLTEXT KEY `ft_aihr_service_memory_text` (`title`, `summary`, `detail`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目共享服务记忆'; CREATE TABLE IF NOT EXISTS `aihr_service_memory_version` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '版本ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `project_code` varchar(100) NOT NULL COMMENT '项目编码快照', `memory_id` bigint NOT NULL COMMENT '项目服务记忆ID', `version` int NOT NULL COMMENT '版本号', `snapshot_json` json NOT NULL COMMENT '业务字段快照', `change_type` varchar(30) NOT NULL COMMENT 'CONFIRM/UPDATE/STATUS/VOID', `change_reason` varchar(500) DEFAULT NULL COMMENT '变更原因', `operator_user_id` bigint NOT NULL COMMENT '操作人', `create_time` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_service_memory_version` (`memory_id`, `version`), KEY `idx_aihr_service_memory_version_scope` (`tenant_id`, `project_code`, `memory_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目服务记忆版本快照'; CREATE TABLE IF NOT EXISTS `aihr_assistant_capture` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '统一采集记录ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '记录员工', `project_code` varchar(100) DEFAULT NULL COMMENT '经当前身份确认的项目编码', `work_date` date DEFAULT NULL COMMENT 'Asia/Shanghai 自然工作日期', `save_scope` varchar(20) NOT NULL COMMENT 'PRIVATE/COMPANY', `suggested_type` varchar(30) NOT NULL COMMENT 'SERVICE_LEAD/RESIDENT_PROFILE/CASE/PERSONAL_NOTE/FOLLOW_UP/PROJECT_NOTE', `building_name` varchar(100) DEFAULT NULL COMMENT '可选楼栋', `unit_name` varchar(100) DEFAULT NULL COMMENT '可选单元', `room_no` varchar(100) DEFAULT NULL COMMENT '可选房号', `category` varchar(50) NOT NULL COMMENT '系统建议分类', `summary` varchar(1000) NOT NULL COMMENT '用户确认后的最小必要摘要', `detail` text COMMENT '用户确认后的必要补充', `occurred_at` datetime NOT NULL COMMENT '发生或获知时间', `follow_up_at` datetime DEFAULT NULL COMMENT '用户确认的跟进时间', `source_conversation_id` varchar(64) NOT NULL DEFAULT '' COMMENT '来源会话ID', `source_request_id` varchar(64) NOT NULL COMMENT '来源问答请求ID', `source_snapshot_json` json DEFAULT NULL COMMENT '最小必要来源快照与受保护OSS引用', `business_status` varchar(30) NOT NULL DEFAULT 'RECORDED' COMMENT 'RECORDED/PENDING/IN_PROGRESS/COMPLETED/VOID', `delivery_status` varchar(20) NOT NULL COMMENT 'NOT_REQUIRED/PENDING/DELIVERED/FAILED', `delivery_attempts` int NOT NULL DEFAULT 0 COMMENT '企业流转尝试次数', `next_delivery_at` datetime DEFAULT NULL COMMENT '下次流转时间', `external_record_id` varchar(100) DEFAULT NULL COMMENT '外部系统记录ID', `last_error` varchar(500) DEFAULT NULL COMMENT '最近一次公开错误', `confirm_idempotency_key` varchar(100) NOT NULL COMMENT '确认幂等键', `confirm_request_hash` char(64) NOT NULL COMMENT '确认请求规范化哈希', `version` int NOT NULL DEFAULT 1 COMMENT '记录版本', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_assistant_capture_confirm` (`tenant_id`, `owner_user_id`, `confirm_idempotency_key`), KEY `idx_aihr_assistant_capture_owner` (`tenant_id`, `owner_user_id`, `save_scope`, `create_time`), KEY `idx_aihr_assistant_capture_daily` (`tenant_id`, `project_code`, `work_date`, `owner_user_id`), KEY `idx_aihr_assistant_capture_delivery` (`delivery_status`, `next_delivery_at`, `id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作助手确认式统一采集记录'; CREATE TABLE IF NOT EXISTS `aihr_assistant_capture_status_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '状态变更ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `capture_id` bigint NOT NULL COMMENT '统一采集记录ID', `project_code` varchar(100) DEFAULT NULL COMMENT '项目编码', `from_status` varchar(30) NOT NULL COMMENT '变更前业务状态', `to_status` varchar(30) NOT NULL COMMENT '变更后业务状态', `note` varchar(500) DEFAULT NULL COMMENT '处理备注', `operator_user_id` bigint NOT NULL COMMENT '操作人', `idempotency_key` varchar(100) NOT NULL COMMENT '状态更新幂等键', `create_time` datetime NOT NULL COMMENT '操作时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_capture_status_idempotency` (`tenant_id`, `operator_user_id`, `idempotency_key`), KEY `idx_aihr_capture_status_capture` (`tenant_id`, `capture_id`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作助手业务状态变更历史'; CREATE TABLE IF NOT EXISTS `aihr_daily_work_result` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '今日工作成果ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `owner_user_id` bigint NOT NULL COMMENT '员工用户ID', `project_code` varchar(100) NOT NULL COMMENT '项目编码', `work_date` date NOT NULL COMMENT 'Asia/Shanghai 自然工作日期', `report_json` json NOT NULL COMMENT '确定性聚合后的成果快照', `source_capture_ids_json` json NOT NULL COMMENT '来源采集记录ID', `content_hash` char(64) NOT NULL DEFAULT '' COMMENT '忽略生成时间和版本的成果内容指纹', `version` int NOT NULL DEFAULT 1 COMMENT '重新生成版本', `generated_at` datetime NOT NULL COMMENT '生成时间', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_daily_work_result` (`tenant_id`, `owner_user_id`, `project_code`, `work_date`), KEY `idx_aihr_daily_work_result_project` (`tenant_id`, `project_code`, `work_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工按项目按自然日工作成果快照'; -- 生产旧库与 MySQL 8 新库的排序规则可能不同;以现有租户主表为事实源动态对齐。 SET @aihr_memory_collation := ( SELECT collation_name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'aihr_knowledge_info' AND column_name = 'tenant_id' LIMIT 1 ); SET @aihr_memory_collation := COALESCE(@aihr_memory_collation, @@collation_database); SET @aihr_memory_ddl := CONCAT('ALTER TABLE `aihr_memory_candidate` CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @aihr_memory_collation); PREPARE aihr_memory_stmt FROM @aihr_memory_ddl; EXECUTE aihr_memory_stmt; DEALLOCATE PREPARE aihr_memory_stmt; SET @aihr_memory_ddl := CONCAT('ALTER TABLE `aihr_service_memory` CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @aihr_memory_collation); PREPARE aihr_memory_stmt FROM @aihr_memory_ddl; EXECUTE aihr_memory_stmt; DEALLOCATE PREPARE aihr_memory_stmt; SET @aihr_memory_ddl := CONCAT('ALTER TABLE `aihr_service_memory_version` CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @aihr_memory_collation); PREPARE aihr_memory_stmt FROM @aihr_memory_ddl; EXECUTE aihr_memory_stmt; DEALLOCATE PREPARE aihr_memory_stmt; SET @aihr_memory_ddl := CONCAT('ALTER TABLE `aihr_assistant_capture` CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @aihr_memory_collation); PREPARE aihr_memory_stmt FROM @aihr_memory_ddl; EXECUTE aihr_memory_stmt; DEALLOCATE PREPARE aihr_memory_stmt; SET @aihr_memory_ddl := NULL; SET @aihr_memory_collation := NULL;