-- 小红书模块:建表 + 业务种子数据(在 OMS 库 fake_simple_admin / oms 执行) -- 执行顺序:本文件 → seed_xhs_rbac_menu.sql(RBAC 库 menu 表)→ seed_xhs_role_permissions.sql -- -- Navicat:选中 OMS 业务库后运行本文件 -- ========== 1. 建表 migrate_t_xhs.sql ========== -- (内容与 migrate_t_xhs.sql 相同,便于一键安装) 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='小红书创作上传媒体表'; -- ========== 2. 种子 seed_xhs_skills + seed_xhs_ai_providers ========== INSERT INTO `t_xhs_skill` ( `CustomerId`, `ExternalId`, `Title`, `SkillType`, `PresetId`, `RecipeJson`, `SortOrder`, `IsDeleted`, `CreateUserId`, `CreateTime` ) VALUES (0, '5a9d3c012d50', '数字型/疑问型 · 物流知识 · 图文', 'ai_create', NULL, '{"formula":["emotion","utility","visual","social"],"title_types":["number","question"],"body":{"domain":"物流知识","content_type":"干货教程","emotion":"生活场景","social":"知识炫耀"},"image_modes":["cover_impact"],"video_modes":[],"notes":"讲解9610的简易申报和汇总申报,退税,以及申报要求"}', 1, 0, 0, NOW()), (0, '7dd58bfe4770', '效率工具 · 干货教程(新号)', 'ai_create', 'efficiency_tutorial', '{"formula":["emotion","utility","visual","social"],"title_types":["number","question"],"body":{"domain":"效率工具","content_type":"干货教程","emotion":"焦虑共鸣","social":"价值传递"},"image_modes":["cover_impact","step_cards"],"video_modes":[],"notes":"话题示例:笔记工具提升效率"}', 2, 0, 0, NOW()), (0, '3f6ed9f62afd', '职场发展 · 经验分享', 'ai_create', 'career_experience', '{"formula":["emotion","utility","social"],"title_types":["story","compare"],"body":{"domain":"职场发展","content_type":"经验分享","emotion":"理想生活","social":"身份标签"},"image_modes":["cover_impact","lifestyle"],"video_modes":[],"notes":"话题示例:职场人际关系"}', 3, 0, 0, NOW()), (0, '61a4d4febada', '情感共鸣 · 真实场景', 'ai_create', 'emotional_relatable', '{"formula":["emotion","social"],"title_types":["story","question"],"body":{"domain":"情感共鸣","content_type":"经验分享","emotion":"生活场景","social":"情感支持"},"image_modes":["lifestyle"],"video_modes":["vlog_clip"],"notes":"让读者觉得这也太真实了"}', 4, 0, 0, NOW()), (0, 'ec62cc03eea9', '避坑指南 · 观点表达', 'ai_create', 'pitfall_opinion', '{"formula":["emotion","utility","visual","social"],"title_types":["number"],"body":{"domain":"职场发展","content_type":"避坑指南","emotion":"吐槽宣泄","social":"观点表达"},"image_modes":["info_chart"],"video_modes":["talking_head"],"notes":"话题示例:避坑指南"}', 5, 0, 0, NOW()) ON DUPLICATE KEY UPDATE `Title` = VALUES(`Title`), `RecipeJson` = VALUES(`RecipeJson`); INSERT INTO `t_xhs_ai_provider` ( `CustomerId`, `ProviderKey`, `ProviderType`, `DisplayName`, `BaseUrl`, `ApiKeyEnc`, `ApiSecretEnc`, `IsDefault`, `Enabled`, `IsDeleted`, `CreateUserId`, `CreateTime` ) VALUES (0, 'ai_zhipu', 'zhipu', '智谱 AI', 'https://open.bigmodel.cn/api/paas/v4', NULL, 'glm-4-flash', 1, 0, 0, 0, NOW()), (0, 'ai_deepseek', 'deepseek', 'DeepSeek', 'https://api.deepseek.com/v1', NULL, 'deepseek-chat', 0, 0, 0, 0, NOW()), (0, 'ai_chatgpt', 'chatgpt', 'OpenAI', 'https://api.openai.com/v1', NULL, 'gpt-4o-mini', 0, 0, 0, 0, NOW()) ON DUPLICATE KEY UPDATE `DisplayName` = VALUES(`DisplayName`), `BaseUrl` = VALUES(`BaseUrl`);