-- 公司消息 R2:单文件异步提炼、原文件受控下载及消息追问上下文。 -- 可重复执行,需在 aihr_20260723_broadcast_targeting_mysql8.sql 之后执行。 CREATE TABLE IF NOT EXISTS `aihr_broadcast_attachment` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '公司文件ID', `tenant_id` varchar(20) NOT NULL COMMENT '租户编号', `message_id` bigint DEFAULT NULL COMMENT '绑定的公司消息ID', `oss_id` bigint NOT NULL COMMENT '原文件OSS编号', `file_name` varchar(255) NOT NULL COMMENT '原文件名', `file_size` bigint NOT NULL COMMENT '文件字节数', `content_type` varchar(100) NOT NULL COMMENT '内容类型', `status` varchar(20) NOT NULL DEFAULT 'QUEUED' COMMENT 'QUEUED/PROCESSING/READY/FAILED', `extracted_text` longtext DEFAULT NULL COMMENT '提取文本,仅供服务端上下文使用', `summary` varchar(1000) DEFAULT NULL COMMENT 'AI提炼摘要', `error_message` varchar(500) DEFAULT NULL COMMENT '公开失败说明', `uploaded_by` bigint NOT NULL COMMENT '上传账号ID', `create_time` datetime NOT NULL COMMENT '上传时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_broadcast_attachment_oss` (`tenant_id`, `oss_id`), UNIQUE KEY `uk_aihr_broadcast_attachment_message` (`tenant_id`, `message_id`), KEY `idx_aihr_broadcast_attachment_queue` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='银城大喇叭公司文件提炼'; SET @has_broadcast_attachment_id := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_message' AND column_name = 'attachment_id' ); SET @broadcast_attachment_ddl := IF( @has_broadcast_attachment_id = 0, 'ALTER TABLE aihr_broadcast_message ADD COLUMN attachment_id bigint DEFAULT NULL COMMENT ''公司文件ID'' AFTER content, ADD KEY idx_aihr_broadcast_message_attachment (tenant_id, attachment_id)', 'SELECT 1' ); PREPARE aihr_broadcast_attachment_stmt FROM @broadcast_attachment_ddl; EXECUTE aihr_broadcast_attachment_stmt; DEALLOCATE PREPARE aihr_broadcast_attachment_stmt; SET @broadcast_attachment_target_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 @broadcast_attachment_target_collation := COALESCE(@broadcast_attachment_target_collation, @@collation_database); SET @broadcast_attachment_table_collation := ( SELECT table_collation FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'aihr_broadcast_attachment' LIMIT 1 ); SET @broadcast_attachment_ddl := IF( @broadcast_attachment_table_collation = @broadcast_attachment_target_collation, 'SELECT 1', CONCAT('ALTER TABLE aihr_broadcast_attachment CONVERT TO CHARACTER SET utf8mb4 COLLATE ', @broadcast_attachment_target_collation) ); PREPARE aihr_broadcast_attachment_stmt FROM @broadcast_attachment_ddl; EXECUTE aihr_broadcast_attachment_stmt; DEALLOCATE PREPARE aihr_broadcast_attachment_stmt; SET @has_broadcast_attachment_id := NULL; SET @broadcast_attachment_target_collation := NULL; SET @broadcast_attachment_table_collation := NULL; SET @broadcast_attachment_ddl := NULL;