-- 小红书(LIKE AI → OMS)模块表结构 -- 设计文档:E:\oms0414\docs\小红书模块设计-063001.md CREATE TABLE IF NOT EXISTS `t_xhs_agent` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID → t_customer.Id', `DeviceId` VARCHAR(64) NOT NULL COMMENT 'Agent 本机设备标识', `DeviceName` VARCHAR(128) NULL COMMENT '用户自定义名称', `AgentVersion` VARCHAR(32) NULL COMMENT 'Agent 版本号', `BridgePort` INT NOT NULL DEFAULT 9333 COMMENT 'Bridge WebSocket 端口', `Status` VARCHAR(16) NOT NULL DEFAULT 'offline' COMMENT 'online/offline', `EngineRunning` TINYINT NOT NULL DEFAULT 0 COMMENT 'Bridge 引擎是否运行', `ExtensionConnected` TINYINT NOT NULL DEFAULT 0 COMMENT 'Chrome 扩展是否连上 Bridge', `XhsLoggedIn` TINYINT NOT NULL DEFAULT 0 COMMENT '小红书是否已登录', `LastHeartbeatTime` DATETIME NULL COMMENT '最后心跳时间', `LastError` VARCHAR(512) NULL COMMENT '最近一次 Agent 上报错误摘要', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `UpdateUserId` INT NULL COMMENT '更新人', `UpdateTime` DATETIME NULL COMMENT '更新时间', PRIMARY KEY (`Id`), UNIQUE KEY `uk_xhs_agent_device` (`DeviceId`), KEY `idx_xhs_agent_customer` (`CustomerId`, `Status`) ) COMMENT='小红书本地 Agent 设备表'; CREATE TABLE IF NOT EXISTS `t_xhs_task` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID', `AgentId` INT NULL COMMENT '指定执行的 Agent;NULL 表示任意在线 Agent', `TaskType` VARCHAR(32) NOT NULL COMMENT '任务类型', `ToolName` VARCHAR(64) NULL COMMENT 'LIKE AI 工具名', `Priority` INT NOT NULL DEFAULT 0 COMMENT '越大越优先', `Status` VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/claimed/running/succeeded/failed/cancelled', `ArgumentsJson` JSON NOT NULL COMMENT '工具参数 JSON', `ProgressText` VARCHAR(512) NULL COMMENT '执行过程摘要', `ResultJson` JSON NULL COMMENT '成功时结构化结果', `ErrorMessage` VARCHAR(1024) NULL COMMENT '失败原因', `Source` VARCHAR(32) NOT NULL DEFAULT 'web' COMMENT 'web/schedule/skill', `SourceRefId` VARCHAR(64) NULL COMMENT '来源关联 ID', `ScheduledTime` DATETIME NULL COMMENT '计划执行时间', `ClaimedAt` DATETIME NULL COMMENT 'Agent 认领时间', `StartedAt` DATETIME NULL COMMENT '开始执行', `FinishedAt` DATETIME NULL COMMENT '结束时间', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()), `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), KEY `idx_xhs_task_poll` (`CustomerId`, `Status`, `ScheduledTime`, `Priority`), KEY `idx_xhs_task_agent` (`AgentId`, `Status`), KEY `idx_xhs_task_source` (`Source`, `SourceRefId`) ) COMMENT='小红书 Agent 任务队列表'; CREATE TABLE IF NOT EXISTS `t_xhs_publish_record` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID', `TaskId` INT NULL COMMENT '关联 t_xhs_task.Id', `ToolName` VARCHAR(64) NOT NULL COMMENT 'publish_content / publish_with_video', `Title` VARCHAR(256) NOT NULL COMMENT '笔记标题', `ContentPreview` VARCHAR(512) NULL COMMENT '正文摘要', `ContentFull` TEXT NULL COMMENT '完整正文', `MediaJson` JSON NULL COMMENT '图片/视频 URL 列表', `TagsJson` JSON NULL COMMENT '标签数组', `Visibility` VARCHAR(32) NULL COMMENT '可见范围', `Status` VARCHAR(16) NOT NULL DEFAULT 'draft' COMMENT 'draft/scheduled/publishing/succeeded/failed/cancelled', `Success` TINYINT NULL COMMENT '最终是否成功', `ResultSummary` VARCHAR(1024) NULL COMMENT 'Agent 回传结果摘要', `ScheduledTime` DATETIME NULL COMMENT '定时发布时间', `PublishedTime` DATETIME NULL COMMENT '实际发布完成时间', `SkillId` INT NULL COMMENT '若来自技能卡片', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()), `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), KEY `idx_xhs_publish_customer_time` (`CustomerId`, `CreateTime`), KEY `idx_xhs_publish_status_sched` (`CustomerId`, `Status`, `ScheduledTime`), KEY `idx_xhs_publish_task` (`TaskId`) ) COMMENT='小红书发布记录表'; CREATE TABLE IF NOT EXISTS `t_xhs_analysis_session` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID', `SessionName` VARCHAR(128) NULL COMMENT '用户备注名', `AnalysisType` VARCHAR(32) NOT NULL COMMENT 'home_feed/search/my_feeds/feed_detail', `Keyword` VARCHAR(128) NULL COMMENT '搜索关键词', `TaskId` INT NULL COMMENT '采集任务 ID', `FeedsJson` JSON NULL COMMENT '采集笔记列表', `SelectedFeedId` VARCHAR(64) NULL COMMENT '当前选中笔记 ID', `AiAnalysisMarkdown` MEDIUMTEXT NULL COMMENT 'AI 分析结果', `SkillId` INT NULL COMMENT '技能配方 ID', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()), `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), KEY `idx_xhs_analysis_customer` (`CustomerId`, `CreateTime`) ) COMMENT='小红书内容分析会话表'; CREATE TABLE IF NOT EXISTS `t_xhs_skill` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID;0 表示系统预置', `ExternalId` VARCHAR(32) NOT NULL COMMENT '对外稳定 ID', `Title` VARCHAR(256) NOT NULL COMMENT '技能名称', `SkillType` VARCHAR(32) NOT NULL DEFAULT 'ai_create' COMMENT '技能类型', `PresetId` VARCHAR(64) NULL COMMENT '内置预设标识', `RecipeJson` JSON NOT NULL COMMENT '配方 JSON', `SortOrder` INT NOT NULL DEFAULT 0 COMMENT '排序', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()), `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), UNIQUE KEY `uk_xhs_skill_external` (`CustomerId`, `ExternalId`), KEY `idx_xhs_skill_customer` (`CustomerId`, `SortOrder`) ) COMMENT='小红书技能卡片表'; CREATE TABLE IF NOT EXISTS `t_xhs_human_config` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID', `BehaviorJson` JSON NOT NULL COMMENT 'human_behavior 配置', `GuardJson` JSON NOT NULL COMMENT 'human_guard 配置', `Version` INT NOT NULL DEFAULT 1 COMMENT '配置版本', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()), `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), UNIQUE KEY `uk_xhs_human_customer` (`CustomerId`) ) COMMENT='小红书拟人行为与防封配置表'; CREATE TABLE IF NOT EXISTS `t_xhs_ai_provider` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID;0 表示全局', `ProviderKey` VARCHAR(32) NOT NULL COMMENT 'ai_chatgpt / ai_zhipu 等', `ProviderType` VARCHAR(32) NOT NULL COMMENT 'chatgpt/doubao/deepseek/zhipu', `DisplayName` VARCHAR(64) NOT NULL COMMENT '展示名', `BaseUrl` VARCHAR(512) NOT NULL COMMENT 'API Base URL', `ApiKeyEnc` VARCHAR(512) NULL COMMENT 'API Key(暂明文,后续可加密)', `ApiSecretEnc` VARCHAR(512) NULL COMMENT 'Secret/模型名', `IsDefault` TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认', `Enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()), `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), UNIQUE KEY `uk_xhs_ai_provider` (`CustomerId`, `ProviderKey`), KEY `idx_xhs_ai_customer` (`CustomerId`, `Enabled`) ) COMMENT='小红书 AI 提供商配置表'; CREATE TABLE IF NOT EXISTS `t_xhs_media` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CustomerId` INT NOT NULL COMMENT '客户ID', `FileName` VARCHAR(256) NOT NULL COMMENT '原始文件名', `StoragePath` VARCHAR(512) NOT NULL COMMENT '相对路径', `PublicUrl` VARCHAR(512) NOT NULL COMMENT '对外 HTTPS URL', `MimeType` VARCHAR(64) NULL COMMENT 'MIME', `FileSizeBytes` BIGINT NULL COMMENT '字节数', `IsDeleted` TINYINT NOT NULL DEFAULT 0, `CreateUserId` INT NOT NULL DEFAULT 0, `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `UpdateUserId` INT NULL, `UpdateTime` DATETIME NULL, PRIMARY KEY (`Id`), KEY `idx_xhs_media_customer` (`CustomerId`, `CreateTime`) ) COMMENT='小红书创作上传媒体表';