-- ============================================================================ -- 情绪博物馆数据库完整部署脚本 -- 版本: v3.0 Final (雪花算法主键版本) - 开发版本 -- 创建时间: 2025-07-13 -- 数据库类型: MySQL 8.0+ -- 说明: 包含完整表结构、索引、初始数据的一体化部署脚本 -- 主键类型: VARCHAR(36) 使用雪花算法生成,避免前端精度丢失问题 -- 关联策略: 不使用外键约束,通过代码中的ID字段关联 -- 特性: 开发阶段 - 先删除表再重新创建,确保表结构是最新的 -- 警告: 此脚本会删除现有表和数据,仅适用于开发环境! -- ============================================================================ -- 设置SQL模式和字符集 SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; -- 创建数据库 CREATE DATABASE IF NOT EXISTS emotion_museum DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE emotion_museum; -- ============================================================================ -- 数据库设计原则 -- ============================================================================ -- 1. 主键策略: 使用VARCHAR(36)雪花算法ID,避免前端精度丢失 -- 2. 关联策略: 不使用外键约束,通过代码中的ID字段维护关联关系 -- 3. 公共字段: 所有表继承BaseEntity的公共字段 -- 4. 索引优化: 为查询频繁的字段创建合适的索引 -- 5. 字符集: 统一使用utf8mb4支持emoji和特殊字符 -- ============================================================================ -- ============================================================================ -- 1. 用户表 (user) -- ============================================================================ DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 account VARCHAR(50) UNIQUE COMMENT '账号', -- 账号 password VARCHAR(255) COMMENT '密码(加密后)', -- 密码(加密后) username VARCHAR(50) UNIQUE COMMENT '用户名', -- 用户名 email VARCHAR(100) UNIQUE COMMENT '邮箱', -- 邮箱 phone VARCHAR(20) UNIQUE COMMENT '手机号', -- 手机号 avatar VARCHAR(500) COMMENT '头像URL', -- 头像URL nickname VARCHAR(50) COMMENT '昵称', -- 昵称 birth_date DATE COMMENT '生日', -- 生日 location VARCHAR(100) COMMENT '所在地', -- 所在地 bio TEXT COMMENT '个人简介', -- 个人简介 member_level VARCHAR(20) DEFAULT 'free' COMMENT '会员等级', -- 会员等级 total_days INT DEFAULT 0 COMMENT '使用天数', -- 使用天数 -- 成长数据 self_awareness DECIMAL(5, 2) DEFAULT 50.00 COMMENT '自我感知', -- 自我感知 emotional_resilience DECIMAL(5, 2) DEFAULT 50.00 COMMENT '情绪韧性', -- 情绪韧性 action_power DECIMAL(5, 2) DEFAULT 50.00 COMMENT '行动力', -- 行动力 empathy DECIMAL(5, 2) DEFAULT 50.00 COMMENT '共情力', -- 共情力 life_enthusiasm DECIMAL(5, 2) DEFAULT 50.00 COMMENT '生活热度', -- 生活热度 -- 状态字段 status TINYINT DEFAULT 1 COMMENT '状态: 0-禁用, 1-正常', -- 状态: 0-禁用, 1-正常 is_verified TINYINT DEFAULT 0 COMMENT '是否已验证: 0-未验证, 1-已验证', -- 是否已验证: 0-未验证, 1-已验证 last_active_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '最后活跃时间', -- 最后活跃时间 -- 第三方登录字段 third_party_id VARCHAR(128) COMMENT '第三方平台ID', -- 第三方平台ID third_party_type VARCHAR(32) COMMENT '第三方平台类型: wechat, qq, wechat-mp', -- 第三方平台类型: wechat, qq, wechat-mp -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表 (t_user)'; -- ============================================================================ -- 2. 对话表 (t_conversation) -- 关联说明: user_id 关联 t_user.id,通过代码逻辑维护关联关系 -- ============================================================================ DROP TABLE IF EXISTS t_conversation; CREATE TABLE t_conversation ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)', -- 用户ID (关联t_user.id) user_type VARCHAR(20) DEFAULT 'registered' COMMENT '用户类型: registered-注册用户, guest-访客用户', -- 用户类型: registered-注册用户, guest-访客用户 title VARCHAR(200) COMMENT '对话标题', -- 对话标题 type VARCHAR(50) DEFAULT 'emotion_chat' COMMENT '对话类型', -- 对话类型 status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active-活跃, ended-结束, archived-归档', -- 状态: active-活跃, ended-结束, archived-归档 coze_conversation_id VARCHAR(100) COMMENT 'Coze对话ID', -- Coze对话ID bot_id VARCHAR(50) COMMENT '使用的Bot ID', -- 使用的Bot ID workflow_id VARCHAR(50) COMMENT '使用的Workflow ID', -- 使用的Workflow ID initial_message TEXT COMMENT '初始消息', -- 初始消息 context TEXT COMMENT '上下文信息', -- 上下文信息 primary_emotion VARCHAR(50) COMMENT '主要情绪', -- 主要情绪 emotion_intensity DECIMAL(3, 2) COMMENT '情绪强度', -- 情绪强度 emotion_trend VARCHAR(50) COMMENT '情绪趋势', -- 情绪趋势 keywords JSON COMMENT '关键词', -- 关键词 ai_insights TEXT COMMENT 'AI洞察', -- AI洞察 confidence DECIMAL(3, 2) COMMENT '分析置信度', -- 分析置信度 start_time DATETIME COMMENT '开始时间', -- 开始时间 end_time DATETIME COMMENT '结束时间', -- 结束时间 last_active_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '最后活跃时间', -- 最后活跃时间 message_count INT DEFAULT 0 COMMENT '消息数量', -- 消息数量 total_tokens INT DEFAULT 0 COMMENT '总Token使用量', -- 总Token使用量 total_cost DECIMAL(10, 4) DEFAULT 0.0000 COMMENT '总费用', -- 总费用 client_ip VARCHAR(45) COMMENT '客户端IP地址 (支持IPv6)', -- 客户端IP地址 (支持IPv6) user_agent TEXT COMMENT '用户代理信息', -- 用户代理信息 summary TEXT COMMENT '对话摘要', -- 对话摘要 tags JSON COMMENT '标签', -- 标签 metadata JSON COMMENT '扩展元数据', -- 扩展元数据 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '对话表 (t_conversation)'; -- ============================================================================ -- 3. 消息表 (t_message) -- 关联说明: conversation_id 关联 t_conversation.id,通过代码逻辑维护关联关系 -- ============================================================================ DROP TABLE IF EXISTS t_message; CREATE TABLE t_message ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 conversation_id VARCHAR(64) COMMENT '对话ID (关联t_conversation.id)', -- 对话ID (关联t_conversation.id) content TEXT COMMENT '消息内容', -- 消息内容 message_order BIGINT COMMENT '消息顺序', type VARCHAR(50) DEFAULT 'text' COMMENT '消息类型', -- 消息类型 sender VARCHAR(20) COMMENT '发送者: user-用户, assistant-AI助手', -- 发送者: user-用户, assistant-AI助手 timestamp DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '消息时间戳', -- 消息时间戳 coze_chat_id VARCHAR(50) COMMENT 'Coze平台的聊天ID', -- Coze平台的聊天ID coze_message_id VARCHAR(50) COMMENT 'Coze平台的消息ID', -- Coze平台的消息ID status VARCHAR(20) DEFAULT 'sent' COMMENT '消息状态: sending/sent/failed/processing', -- 消息状态: sending/sent/failed/processing error_message TEXT COMMENT '错误信息', -- 错误信息 emotion_score DECIMAL(3, 2) COMMENT '情绪评分', -- 情绪评分 emotion_type VARCHAR(50) COMMENT '情绪类型', -- 情绪类型 emotion_confidence DECIMAL(3, 2) COMMENT '情绪分析置信度', -- 情绪分析置信度 prompt_tokens INT DEFAULT 0 COMMENT '输入Token数', -- 输入Token数 completion_tokens INT DEFAULT 0 COMMENT '输出Token数', -- 输出Token数 total_tokens INT DEFAULT 0 COMMENT '总Token数', -- 总Token数 api_cost DECIMAL(10, 6) DEFAULT 0.000000 COMMENT 'API调用费用', -- API调用费用 is_read TINYINT DEFAULT 0 COMMENT '是否已读: 0-未读, 1-已读', -- 是否已读: 0-未读, 1-已读 parent_message_id VARCHAR(64) COMMENT '父消息ID(用于回复链)', -- 父消息ID(用于回复链) emotion_analysis JSON COMMENT '情绪分析结果', -- 情绪分析结果 metadata JSON COMMENT '扩展元数据', -- 扩展元数据 user_id VARCHAR(64) COMMENT '用户ID (注册用户或访客用户)', -- 用户ID (注册用户或访客用户) user_type VARCHAR(20) COMMENT '用户类型 (registered/guest)', -- 用户类型 (registered/guest) coze_role VARCHAR(20) COMMENT 'Coze消息角色 (user/assistant/system)', -- Coze消息角色 (user/assistant/system) coze_content_type VARCHAR(50) COMMENT 'Coze消息内容类型 (text/image/file等)', -- Coze消息内容类型 (text/image/file等) -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表 (t_message)'; -- ============================================================================ -- 4. Coze API调用记录表 (coze_api_call) - 优化版本 -- ============================================================================ DROP TABLE IF EXISTS t_coze_api_call; CREATE TABLE t_coze_api_call ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 conversation_id VARCHAR(64) COMMENT '对话ID', -- 对话ID message_id VARCHAR(64) COMMENT '消息ID', -- 消息ID -- Coze API 信息 coze_chat_id VARCHAR(50) COMMENT 'Coze聊天ID', -- Coze聊天ID coze_conversation_id VARCHAR(50) COMMENT 'Coze对话ID', -- Coze对话ID bot_id VARCHAR(50) COMMENT 'Bot ID', -- Bot ID workflow_id VARCHAR(50) COMMENT 'Workflow ID', -- Workflow ID user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID -- 请求信息 request_type VARCHAR(20) COMMENT '请求类型: chat/stream/retrieve/messages', -- 请求类型: chat/stream/retrieve/messages request_url VARCHAR(500) COMMENT '请求URL', -- 请求URL request_body JSON COMMENT '请求体', -- 请求体 request_headers JSON COMMENT '请求头', -- 请求头 -- 用户消息内容 user_message TEXT COMMENT '用户输入的消息内容', -- 用户输入的消息内容 user_message_type VARCHAR(20) DEFAULT 'text' COMMENT '用户消息类型: text/image/file', -- 用户消息类型: text/image/file -- AI回复内容 ai_reply TEXT COMMENT 'AI回复的消息内容', -- AI回复的消息内容 ai_reply_type VARCHAR(20) DEFAULT 'text' COMMENT 'AI回复类型: text/image/file', -- AI回复类型: text/image/file -- 响应信息 response_status INT COMMENT 'HTTP状态码', -- HTTP状态码 response_body JSON COMMENT '响应体', -- 响应体 response_headers JSON COMMENT '响应头', -- 响应头 -- 轮询信息 poll_count INT DEFAULT 0 COMMENT '轮询次数', -- 轮询次数 poll_start_time DATETIME COMMENT '轮询开始时间', -- 轮询开始时间 poll_end_time DATETIME COMMENT '轮询结束时间', -- 轮询结束时间 final_status VARCHAR(20) COMMENT '最终状态: completed/failed/timeout', -- 最终状态: completed/failed/timeout -- 状态和时间 status VARCHAR(20) COMMENT '调用状态: pending/success/failed/timeout', -- 调用状态: pending/success/failed/timeout start_time DATETIME COMMENT '开始时间', -- 开始时间 end_time DATETIME COMMENT '结束时间', -- 结束时间 duration_ms INT COMMENT '耗时(毫秒)', -- 耗时(毫秒) -- 使用统计 prompt_tokens INT DEFAULT 0 COMMENT '输入Token数', -- 输入Token数 completion_tokens INT DEFAULT 0 COMMENT '输出Token数', -- 输出Token数 total_tokens INT DEFAULT 0 COMMENT '总Token数', -- 总Token数 cost DECIMAL(10, 6) DEFAULT 0.000000 COMMENT '费用', -- 费用 -- 功能调用信息 function_calls JSON COMMENT '函数调用记录', -- 函数调用记录 function_results JSON COMMENT '函数调用结果', -- 函数调用结果 -- 错误信息 error_code VARCHAR(50) COMMENT '错误代码', -- 错误代码 error_message TEXT COMMENT '错误信息', -- 错误信息 -- 扩展信息 client_ip VARCHAR(45) COMMENT '客户端IP', -- 客户端IP user_agent TEXT COMMENT '用户代理', -- 用户代理 session_id VARCHAR(100) COMMENT '会话ID', -- 会话ID trace_id VARCHAR(100) COMMENT '追踪ID', -- 追踪ID metadata JSON COMMENT '扩展元数据', -- 扩展元数据 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Coze API调用记录表 - 完整版本 (t_coze_api_call)'; -- ============================================================================ -- 5. 情绪分析表 (emotion_analysis) -- ============================================================================ DROP TABLE IF EXISTS t_emotion_analysis; CREATE TABLE t_emotion_analysis ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID message_id VARCHAR(64) COMMENT '关联消息ID', -- 关联消息ID text TEXT COMMENT '分析文本', -- 分析文本 primary_emotion VARCHAR(50) COMMENT '主要情绪', -- 主要情绪 intensity DECIMAL(3, 2) COMMENT '情绪强度', -- 情绪强度 polarity VARCHAR(20) COMMENT '情绪极性: positive-积极, negative-消极, neutral-中性', -- 情绪极性: positive-积极, negative-消极, neutral-中性 confidence DECIMAL(3, 2) COMMENT '置信度', -- 置信度 emotions JSON COMMENT '情绪分布详情', -- 情绪分布详情 keywords JSON COMMENT '关键词列表', -- 关键词列表 suggestion TEXT COMMENT '建议', -- 建议 analysis_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '分析时间', -- 分析时间 metadata JSON COMMENT '扩展元数据', -- 扩展元数据 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '情绪分析表 (t_emotion_analysis)'; -- ============================================================================ -- 6. 情绪记录表 (emotion_record) -- ============================================================================ DROP TABLE IF EXISTS t_emotion_record; CREATE TABLE t_emotion_record ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID record_date DATE COMMENT '记录日期', -- 记录日期 emotion_type VARCHAR(50) COMMENT '情绪类型', -- 情绪类型 intensity DECIMAL(3, 2) COMMENT '情绪强度', -- 情绪强度 triggers TEXT COMMENT '触发因素', -- 触发因素 description TEXT COMMENT '描述', -- 描述 tags JSON COMMENT '标签', -- 标签 weather VARCHAR(50) COMMENT '天气', -- 天气 location VARCHAR(100) COMMENT '地点', -- 地点 activity VARCHAR(100) COMMENT '活动', -- 活动 people VARCHAR(200) COMMENT '相关人物', -- 相关人物 notes TEXT COMMENT '备注', -- 备注 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '情绪记录表 (t_emotion_record)'; -- ============================================================================ -- 7. 成长课题表 (growth_topic) -- ============================================================================ DROP TABLE IF EXISTS t_growth_topic; CREATE TABLE t_growth_topic ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 title VARCHAR(100) COMMENT '课题标题', -- 课题标题 category VARCHAR(50) COMMENT '分类', -- 分类 difficulty VARCHAR(20) COMMENT '难度: easy-简单, medium-中等, hard-困难', -- 难度: easy-简单, medium-中等, hard-困难 description TEXT COMMENT '描述', -- 描述 content TEXT COMMENT '内容', -- 内容 duration_days INT COMMENT '持续天数', -- 持续天数 unlock_conditions JSON COMMENT '解锁条件', -- 解锁条件 is_unlocked TINYINT DEFAULT 1 COMMENT '是否解锁', -- 是否解锁 progress DECIMAL(5, 2) DEFAULT 0.00 COMMENT '进度百分比', -- 进度百分比 completed_time DATETIME COMMENT '完成时间', -- 完成时间 rewards JSON COMMENT '奖励', -- 奖励 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成长课题表 (t_growth_topic)'; -- ============================================================================ -- 8. 课题互动表 (topic_interaction) -- ============================================================================ DROP TABLE IF EXISTS t_topic_interaction; CREATE TABLE t_topic_interaction ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 topic_id VARCHAR(64) COMMENT '课题ID', -- 课题ID type VARCHAR(50) COMMENT '互动类型', -- 互动类型 content TEXT COMMENT '内容', -- 内容 user_input TEXT COMMENT '用户输入', -- 用户输入 ai_response TEXT COMMENT 'AI回应', -- AI回应 rating INT COMMENT '评分', -- 评分 feedback TEXT COMMENT '反馈', -- 反馈 completed_time DATETIME COMMENT '完成时间', -- 完成时间 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '课题互动表 (t_topic_interaction)'; -- ============================================================================ -- 9. 地点标记表 (location_pin) -- ============================================================================ DROP TABLE IF EXISTS t_location_pin; CREATE TABLE t_location_pin ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 name VARCHAR(100) COMMENT '地点名称', -- 地点名称 type VARCHAR(50) COMMENT '地点类型', -- 地点类型 category VARCHAR(50) COMMENT '地点分类', -- 地点分类 latitude DECIMAL(10, 8) COMMENT '纬度', -- 纬度 longitude DECIMAL(11, 8) COMMENT '经度', -- 经度 address VARCHAR(200) COMMENT '地址', -- 地址 description TEXT COMMENT '描述', -- 描述 likes INT DEFAULT 0 COMMENT '点赞数', -- 点赞数 visits INT DEFAULT 0 COMMENT '访问数', -- 访问数 is_bookmarked TINYINT DEFAULT 0 COMMENT '是否收藏', -- 是否收藏 last_visit_time DATETIME COMMENT '最后访问时间', -- 最后访问时间 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '地点标记表 (t_location_pin)'; -- ============================================================================ -- 10. 社区帖子表 (community_post) -- ============================================================================ DROP TABLE IF EXISTS t_community_post; CREATE TABLE t_community_post ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID location_id VARCHAR(64) COMMENT '地点ID', -- 地点ID title VARCHAR(200) COMMENT '标题', -- 标题 content TEXT COMMENT '内容', -- 内容 type VARCHAR(50) COMMENT '帖子类型', -- 帖子类型 images JSON COMMENT '图片列表', -- 图片列表 tags JSON COMMENT '标签', -- 标签 likes INT DEFAULT 0 COMMENT '点赞数', -- 点赞数 view_count INT DEFAULT 0 COMMENT '浏览数', -- 浏览数 comment_count INT DEFAULT 0 COMMENT '评论数', -- 评论数 is_private TINYINT DEFAULT 0 COMMENT '是否私密', -- 是否私密 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社区帖子表 (t_community_post)'; -- ============================================================================ -- 11. 评论表 (comment) -- ============================================================================ DROP TABLE IF EXISTS t_comment; CREATE TABLE t_comment ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 post_id VARCHAR(64) COMMENT '帖子ID', -- 帖子ID user_id VARCHAR(64) COMMENT '用户ID', -- 用户ID content TEXT COMMENT '评论内容', -- 评论内容 reply_to_id VARCHAR(64) COMMENT '回复的评论ID', -- 回复的评论ID likes INT DEFAULT 0 COMMENT '点赞数', -- 点赞数 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '评论表 (t_comment)'; -- ============================================================================ -- 12. 成就表 (achievement) -- ============================================================================ DROP TABLE IF EXISTS t_achievement; CREATE TABLE t_achievement ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 title VARCHAR(100) COMMENT '成就标题', -- 成就标题 description TEXT COMMENT '描述', -- 描述 category VARCHAR(50) COMMENT '分类', -- 分类 icon VARCHAR(200) COMMENT '图标', -- 图标 rarity VARCHAR(20) COMMENT '稀有度', -- 稀有度 condition_type VARCHAR(50) COMMENT '条件类型', -- 条件类型 condition_value JSON COMMENT '条件值', -- 条件值 rewards JSON COMMENT '奖励', -- 奖励 unlocked_time DATETIME COMMENT '解锁时间', -- 解锁时间 progress DECIMAL(5, 2) DEFAULT 0.00 COMMENT '进度', -- 进度 is_hidden TINYINT DEFAULT 0 COMMENT '是否隐藏', -- 是否隐藏 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成就表 (t_achievement)'; -- ============================================================================ -- 13. 奖励表 (reward) -- ============================================================================ DROP TABLE IF EXISTS t_reward; CREATE TABLE t_reward ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 topic_id VARCHAR(64) COMMENT '课题ID', -- 课题ID achievement_id VARCHAR(64) COMMENT '成就ID', -- 成就ID type VARCHAR(50) COMMENT '奖励类型', -- 奖励类型 name VARCHAR(100) COMMENT '奖励名称', -- 奖励名称 description TEXT COMMENT '描述', -- 描述 icon VARCHAR(200) COMMENT '图标', -- 图标 rarity VARCHAR(20) COMMENT '稀有度', -- 稀有度 value JSON COMMENT '奖励值', -- 奖励值 earned_time DATETIME COMMENT '获得时间', -- 获得时间 is_new TINYINT DEFAULT 1 COMMENT '是否新获得', -- 是否新获得 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '奖励表 (t_reward)'; -- ============================================================================ -- 14. 用户统计表 (user_stats) -- ============================================================================ DROP TABLE IF EXISTS t_user_stats; CREATE TABLE t_user_stats ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 user_id VARCHAR(64) UNIQUE COMMENT '用户ID', -- 用户ID total_conversations INT DEFAULT 0 COMMENT '总对话数', -- 总对话数 total_messages INT DEFAULT 0 COMMENT '总消息数', -- 总消息数 total_emotions_recorded INT DEFAULT 0 COMMENT '总情绪记录数', -- 总情绪记录数 topics_completed INT DEFAULT 0 COMMENT '完成的课题数', -- 完成的课题数 achievements_unlocked INT DEFAULT 0 COMMENT '解锁的成就数', -- 解锁的成就数 total_points INT DEFAULT 0 COMMENT '总积分', -- 总积分 consecutive_days INT DEFAULT 0 COMMENT '连续使用天数', -- 连续使用天数 max_consecutive_days INT DEFAULT 0 COMMENT '最大连续天数', -- 最大连续天数 locations_visited INT DEFAULT 0 COMMENT '访问的地点数', -- 访问的地点数 posts_created INT DEFAULT 0 COMMENT '创建的帖子数', -- 创建的帖子数 comments_made INT DEFAULT 0 COMMENT '评论数', -- 评论数 likes_received INT DEFAULT 0 COMMENT '收到的点赞数', -- 收到的点赞数 social_interactions INT DEFAULT 0 COMMENT '社交互动数', -- 社交互动数 -- 日记相关统计 diary_posts_created INT DEFAULT 0 COMMENT '创建的日记数', -- 创建的日记数 diary_likes_received INT DEFAULT 0 COMMENT '日记收到的点赞数', -- 日记收到的点赞数 diary_comments_received INT DEFAULT 0 COMMENT '日记收到的评论数', -- 日记收到的评论数 diary_views_received INT DEFAULT 0 COMMENT '日记收到的浏览数', -- 日记收到的浏览数 diary_shares_received INT DEFAULT 0 COMMENT '日记收到的分享数', -- 日记收到的分享数 diary_comments_made INT DEFAULT 0 COMMENT '发表的日记评论数', -- 发表的日记评论数 diary_likes_given INT DEFAULT 0 COMMENT '给他人日记的点赞数', -- 给他人日记的点赞数 featured_diary_count INT DEFAULT 0 COMMENT '精选日记数量', -- 精选日记数量 ai_comments_received INT DEFAULT 0 COMMENT '收到的AI评论数', -- 收到的AI评论数 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户统计表 (t_user_stats)'; -- ============================================================================ -- 16. 用户日记表 (t_diary_post) - 类似朋友圈功能 -- 关联说明: user_id 关联 t_user.id,通过代码逻辑维护关联关系 -- ============================================================================ DROP TABLE IF EXISTS t_diary_post; CREATE TABLE t_diary_post ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)', -- 用户ID (关联t_user.id) title VARCHAR(200) COMMENT '日记标题', -- 日记标题 content TEXT COMMENT '日记内容', -- 日记内容 images JSON COMMENT '图片列表 (存储图片URL数组)', -- 图片列表 (存储图片URL数组) videos JSON COMMENT '视频列表 (存储视频URL数组)', -- 视频列表 (存储视频URL数组) location VARCHAR(200) COMMENT '发布地点', -- 发布地点 latitude DECIMAL(10, 8) COMMENT '纬度', -- 纬度 longitude DECIMAL(11, 8) COMMENT '经度', -- 经度 weather VARCHAR(50) COMMENT '天气信息', -- 天气信息 mood VARCHAR(50) COMMENT '心情状态', -- 心情状态 mood_score DECIMAL(3, 2) COMMENT '心情评分 (0-10)', -- 心情评分 (0-10) tags JSON COMMENT '标签列表', -- 标签列表 is_public TINYINT DEFAULT 1 COMMENT '是否公开: 0-仅自己可见, 1-公开', -- 是否公开: 0-仅自己可见, 1-公开 is_anonymous TINYINT DEFAULT 0 COMMENT '是否匿名发布: 0-实名, 1-匿名', -- 是否匿名发布: 0-实名, 1-匿名 view_count INT DEFAULT 0 COMMENT '浏览数', -- 浏览数 like_count INT DEFAULT 0 COMMENT '点赞数', -- 点赞数 comment_count INT DEFAULT 0 COMMENT '评论数', -- 评论数 share_count INT DEFAULT 0 COMMENT '分享数', -- 分享数 ai_comment TEXT COMMENT 'AI评论内容', -- AI评论内容 ai_comment_time DATETIME COMMENT 'AI评论时间', -- AI评论时间 ai_emotion_analysis JSON COMMENT 'AI情绪分析结果', -- AI情绪分析结果 ai_sentiment_score DECIMAL(3, 2) COMMENT 'AI情感评分 (-1到1)', -- AI情感评分 (-1到1) ai_keywords JSON COMMENT 'AI提取的关键词', -- AI提取的关键词 ai_suggestions TEXT COMMENT 'AI建议', -- AI建议 publish_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间', -- 发布时间 last_comment_time DATETIME COMMENT '最后评论时间', -- 最后评论时间 status VARCHAR(20) DEFAULT 'published' COMMENT '状态: draft-草稿, published-已发布, hidden-隐藏, deleted-已删除', -- 状态: draft-草稿, published-已发布, hidden-隐藏, deleted-已删除 priority INT DEFAULT 0 COMMENT '优先级 (用于置顶功能)', -- 优先级 (用于置顶功能) featured TINYINT DEFAULT 0 COMMENT '是否精选: 0-普通, 1-精选', -- 是否精选: 0-普通, 1-精选 metadata JSON COMMENT '扩展元数据', -- 扩展元数据 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户日记表 - 类似朋友圈功能 (t_diary_post)'; -- ============================================================================ -- 17. 日记评论表 (t_diary_comment) -- 关联说明: diary_id 关联 t_diary_post.id,user_id 关联 t_user.id,通过代码逻辑维护关联关系 -- ============================================================================ DROP TABLE IF EXISTS t_diary_comment; CREATE TABLE t_diary_comment ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 diary_id VARCHAR(64) COMMENT '日记ID (关联t_diary_post.id)', -- 日记ID (关联t_diary_post.id) user_id VARCHAR(64) COMMENT '评论用户ID (关联t_user.id)', -- 评论用户ID (关联t_user.id) parent_comment_id VARCHAR(64) COMMENT '父评论ID (用于回复功能)', -- 父评论ID (用于回复功能) content TEXT COMMENT '评论内容', -- 评论内容 images JSON COMMENT '评论图片 (存储图片URL数组)', -- 评论图片 (存储图片URL数组) comment_type VARCHAR(20) DEFAULT 'user' COMMENT '评论类型: user-用户评论, ai-AI评论, system-系统评论', -- 评论类型: user-用户评论, ai-AI评论, system-系统评论 ai_comment_source VARCHAR(50) COMMENT 'AI评论来源 (如: emotion_analysis, sentiment_analysis)', -- AI评论来源 (如: emotion_analysis, sentiment_analysis) like_count INT DEFAULT 0 COMMENT '点赞数', -- 点赞数 reply_count INT DEFAULT 0 COMMENT '回复数', -- 回复数 is_anonymous TINYINT DEFAULT 0 COMMENT '是否匿名评论: 0-实名, 1-匿名', -- 是否匿名评论: 0-实名, 1-匿名 is_top TINYINT DEFAULT 0 COMMENT '是否置顶: 0-普通, 1-置顶', -- 是否置顶: 0-普通, 1-置顶 status VARCHAR(20) DEFAULT 'published' COMMENT '状态: published-已发布, hidden-隐藏, deleted-已删除', -- 状态: published-已发布, hidden-隐藏, deleted-已删除 publish_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间', -- 发布时间 last_reply_time DATETIME COMMENT '最后回复时间', -- 最后回复时间 emotion_score DECIMAL(3, 2) COMMENT '情绪评分', -- 情绪评分 sentiment_score DECIMAL(3, 2) COMMENT '情感评分', -- 情感评分 metadata JSON COMMENT '扩展元数据', -- 扩展元数据 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '日记评论表 (t_diary_comment)'; -- ============================================================================ -- 18. 访客用户表 (guest_user) -- ============================================================================ DROP TABLE IF EXISTS t_guest_user; CREATE TABLE t_guest_user ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 guest_user_id VARCHAR(50) UNIQUE COMMENT '访客用户ID (格式: guest_xxx)', -- 访客用户ID (格式: guest_xxx) ip_address VARCHAR(45) COMMENT '客户端IP地址 (支持IPv6)', -- 客户端IP地址 (支持IPv6) user_agent TEXT COMMENT '用户代理信息', -- 用户代理信息 nickname VARCHAR(50) COMMENT '访客昵称', -- 访客昵称 avatar VARCHAR(500) COMMENT '访客头像', -- 访客头像 last_active_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '最后活跃时间', -- 最后活跃时间 conversation_count INT DEFAULT 0 COMMENT '会话数量', -- 会话数量 message_count INT DEFAULT 0 COMMENT '消息数量', -- 消息数量 location VARCHAR(100) COMMENT 'IP地址的地理位置信息', -- IP地址的地理位置信息 device_info VARCHAR(200) COMMENT '设备信息', -- 设备信息 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '访客用户表 (t_guest_user)'; -- ============================================================================ -- 创建索引以提高查询性能 -- 注意: MySQL的CREATE INDEX不支持IF NOT EXISTS -- 如果索引已存在,重复执行会产生警告但不会中断脚本执行 -- ============================================================================ -- t_user表索引 CREATE INDEX idx_user_account ON t_user (account); CREATE INDEX idx_user_username ON t_user (username); CREATE INDEX idx_user_email ON t_user (email); CREATE INDEX idx_user_phone ON t_user (phone); CREATE INDEX idx_user_last_active_time ON t_user (last_active_time); CREATE INDEX idx_user_create_time ON t_user (create_time); CREATE INDEX idx_user_member_level ON t_user (member_level); CREATE INDEX idx_user_status ON t_user (status); CREATE INDEX idx_user_is_verified ON t_user (is_verified); CREATE INDEX idx_user_create_by ON t_user (create_by); CREATE INDEX idx_user_update_by ON t_user (update_by); CREATE INDEX idx_user_is_deleted ON t_user (is_deleted); CREATE INDEX idx_user_third_party_id ON t_user (third_party_id); CREATE INDEX idx_user_third_party_type ON t_user (third_party_type); -- t_conversation表索引 CREATE INDEX idx_conversation_user_id ON t_conversation (user_id); CREATE INDEX idx_conversation_start_time ON t_conversation (start_time); CREATE INDEX idx_conversation_user_id_start_time ON t_conversation (user_id, start_time); CREATE INDEX idx_conversation_primary_emotion ON t_conversation (primary_emotion); CREATE INDEX idx_conversation_end_time ON t_conversation (end_time); CREATE INDEX idx_conversation_create_time ON t_conversation (create_time); CREATE INDEX idx_conversation_coze_conversation_id ON t_conversation (coze_conversation_id); CREATE INDEX idx_conversation_status ON t_conversation (status); CREATE INDEX idx_conversation_last_active_time ON t_conversation (last_active_time); CREATE INDEX idx_conversation_create_by ON t_conversation (create_by); CREATE INDEX idx_conversation_update_by ON t_conversation (update_by); CREATE INDEX idx_conversation_is_deleted ON t_conversation (is_deleted); CREATE INDEX idx_conversation_user_type ON t_conversation (user_type); CREATE INDEX idx_conversation_emotion_trend ON t_conversation (emotion_trend); CREATE INDEX idx_conversation_confidence ON t_conversation (confidence); CREATE INDEX idx_conversation_client_ip ON t_conversation (client_ip); -- t_message表索引 CREATE INDEX idx_message_conversation_id ON t_message (conversation_id); CREATE INDEX idx_message_timestamp ON t_message (timestamp); CREATE INDEX idx_message_conversation_id_timestamp ON t_message (conversation_id, timestamp); CREATE INDEX idx_message_sender ON t_message (sender); CREATE INDEX idx_message_type ON t_message (type); CREATE INDEX idx_message_is_read ON t_message (is_read); CREATE INDEX idx_message_create_time ON t_message (create_time); CREATE INDEX idx_message_coze_chat_id ON t_message (coze_chat_id); CREATE INDEX idx_message_status ON t_message (status); CREATE INDEX idx_message_parent_message_id ON t_message (parent_message_id); CREATE INDEX idx_message_create_by ON t_message (create_by); CREATE INDEX idx_message_update_by ON t_message (update_by); CREATE INDEX idx_message_is_deleted ON t_message (is_deleted); -- t_coze_api_call表索引 CREATE INDEX idx_coze_api_call_conversation_id ON t_coze_api_call (conversation_id); CREATE INDEX idx_coze_api_call_message_id ON t_coze_api_call (message_id); CREATE INDEX idx_coze_api_call_coze_chat_id ON t_coze_api_call (coze_chat_id); CREATE INDEX idx_coze_api_call_bot_id ON t_coze_api_call (bot_id); CREATE INDEX idx_coze_api_call_user_id ON t_coze_api_call (user_id); CREATE INDEX idx_coze_api_call_status ON t_coze_api_call (status); CREATE INDEX idx_coze_api_call_final_status ON t_coze_api_call (final_status); CREATE INDEX idx_coze_api_call_start_time ON t_coze_api_call (start_time); CREATE INDEX idx_coze_api_call_request_type ON t_coze_api_call (request_type); CREATE INDEX idx_coze_api_call_client_ip ON t_coze_api_call (client_ip); CREATE INDEX idx_coze_api_call_session_id ON t_coze_api_call (session_id); CREATE INDEX idx_coze_api_call_trace_id ON t_coze_api_call (trace_id); CREATE INDEX idx_coze_api_call_user_status ON t_coze_api_call (user_id, status); CREATE INDEX idx_coze_api_call_conversation_time ON t_coze_api_call (conversation_id, start_time); -- t_emotion_analysis表索引 CREATE INDEX idx_emotion_analysis_user_id ON t_emotion_analysis (user_id); CREATE INDEX idx_emotion_analysis_message_id ON t_emotion_analysis (message_id); CREATE INDEX idx_emotion_analysis_primary_emotion ON t_emotion_analysis (primary_emotion); CREATE INDEX idx_emotion_analysis_analysis_time ON t_emotion_analysis (analysis_time); CREATE INDEX idx_emotion_analysis_create_time ON t_emotion_analysis (create_time); CREATE INDEX idx_emotion_analysis_create_by ON t_emotion_analysis (create_by); CREATE INDEX idx_emotion_analysis_update_by ON t_emotion_analysis (update_by); CREATE INDEX idx_emotion_analysis_is_deleted ON t_emotion_analysis (is_deleted); -- t_emotion_record表索引 CREATE INDEX idx_emotion_record_user_id ON t_emotion_record (user_id); CREATE INDEX idx_emotion_record_date ON t_emotion_record (record_date); CREATE INDEX idx_emotion_record_emotion_type ON t_emotion_record (emotion_type); CREATE INDEX idx_emotion_record_user_id_date ON t_emotion_record (user_id, record_date); CREATE INDEX idx_emotion_record_user_id_emotion_type ON t_emotion_record (user_id, emotion_type); CREATE INDEX idx_emotion_record_intensity ON t_emotion_record (intensity); CREATE INDEX idx_emotion_record_create_time ON t_emotion_record (create_time); CREATE INDEX idx_emotion_record_create_by ON t_emotion_record (create_by); CREATE INDEX idx_emotion_record_update_by ON t_emotion_record (update_by); CREATE INDEX idx_emotion_record_is_deleted ON t_emotion_record (is_deleted); -- t_growth_topic表索引 CREATE INDEX idx_growth_topic_category ON t_growth_topic (category); CREATE INDEX idx_growth_topic_difficulty ON t_growth_topic (difficulty); CREATE INDEX idx_growth_topic_is_unlocked ON t_growth_topic (is_unlocked); CREATE INDEX idx_growth_topic_progress ON t_growth_topic (progress); CREATE INDEX idx_growth_topic_completed_time ON t_growth_topic (completed_time); CREATE INDEX idx_growth_topic_category_difficulty ON t_growth_topic (category, difficulty); CREATE INDEX idx_growth_topic_create_time ON t_growth_topic (create_time); -- t_topic_interaction表索引 CREATE INDEX idx_topic_interaction_topic_id ON t_topic_interaction (topic_id); CREATE INDEX idx_topic_interaction_type ON t_topic_interaction (type); CREATE INDEX idx_topic_interaction_completed_time ON t_topic_interaction (completed_time); CREATE INDEX idx_topic_interaction_rating ON t_topic_interaction (rating); CREATE INDEX idx_topic_interaction_topic_id_type ON t_topic_interaction (topic_id, type); CREATE INDEX idx_topic_interaction_create_time ON t_topic_interaction (create_time); -- t_location_pin表索引 CREATE INDEX idx_location_pin_latitude_longitude ON t_location_pin (latitude, longitude); CREATE INDEX idx_location_pin_type ON t_location_pin (type); CREATE INDEX idx_location_pin_category ON t_location_pin (category); CREATE INDEX idx_location_pin_create_by ON t_location_pin (create_by); CREATE INDEX idx_location_pin_likes ON t_location_pin (likes); CREATE INDEX idx_location_pin_visits ON t_location_pin (visits); CREATE INDEX idx_location_pin_is_bookmarked ON t_location_pin (is_bookmarked); CREATE INDEX idx_location_pin_type_category ON t_location_pin (type, category); CREATE INDEX idx_location_pin_create_time ON t_location_pin (create_time); CREATE INDEX idx_location_pin_last_visit_time ON t_location_pin (last_visit_time); -- t_community_post表索引 CREATE INDEX idx_community_post_user_id ON t_community_post (user_id); CREATE INDEX idx_community_post_location_id ON t_community_post (location_id); CREATE INDEX idx_community_post_create_time ON t_community_post (create_time); CREATE INDEX idx_community_post_type ON t_community_post (type); CREATE INDEX idx_community_post_likes ON t_community_post (likes); CREATE INDEX idx_community_post_view_count ON t_community_post (view_count); CREATE INDEX idx_community_post_is_private ON t_community_post (is_private); CREATE INDEX idx_community_post_user_id_create_time ON t_community_post (user_id, create_time); CREATE INDEX idx_community_post_type_create_time ON t_community_post (type, create_time); -- t_comment表索引 CREATE INDEX idx_comment_post_id ON t_comment (post_id); CREATE INDEX idx_comment_user_id ON t_comment (user_id); CREATE INDEX idx_comment_reply_to_id ON t_comment (reply_to_id); CREATE INDEX idx_comment_create_time ON t_comment (create_time); CREATE INDEX idx_comment_likes ON t_comment (likes); CREATE INDEX idx_comment_post_id_create_time ON t_comment (post_id, create_time); -- t_achievement表索引 CREATE INDEX idx_achievement_category ON t_achievement (category); CREATE INDEX idx_achievement_rarity ON t_achievement (rarity); CREATE INDEX idx_achievement_unlocked_time ON t_achievement (unlocked_time); CREATE INDEX idx_achievement_is_hidden ON t_achievement (is_hidden); CREATE INDEX idx_achievement_progress ON t_achievement (progress); CREATE INDEX idx_achievement_category_rarity ON t_achievement (category, rarity); CREATE INDEX idx_achievement_create_time ON t_achievement (create_time); -- t_reward表索引 CREATE INDEX idx_reward_topic_id ON t_reward (topic_id); CREATE INDEX idx_reward_achievement_id ON t_reward (achievement_id); CREATE INDEX idx_reward_type ON t_reward (type); CREATE INDEX idx_reward_earned_time ON t_reward (earned_time); CREATE INDEX idx_reward_rarity ON t_reward (rarity); CREATE INDEX idx_reward_is_new ON t_reward (is_new); CREATE INDEX idx_reward_type_earned_time ON t_reward (type, earned_time); CREATE INDEX idx_reward_create_time ON t_reward (create_time); -- t_user_stats表索引 CREATE INDEX idx_user_stats_user_id ON t_user_stats (user_id); CREATE INDEX idx_user_stats_total_points ON t_user_stats (total_points); CREATE INDEX idx_user_stats_consecutive_days ON t_user_stats (consecutive_days); CREATE INDEX idx_user_stats_max_consecutive_days ON t_user_stats (max_consecutive_days); CREATE INDEX idx_user_stats_social_interactions ON t_user_stats (social_interactions); CREATE INDEX idx_user_stats_update_time ON t_user_stats (update_time); CREATE INDEX idx_user_stats_create_time ON t_user_stats (create_time); -- t_user_stats表日记相关索引 CREATE INDEX idx_user_stats_diary_posts_created ON t_user_stats (diary_posts_created); CREATE INDEX idx_user_stats_diary_likes_received ON t_user_stats (diary_likes_received); CREATE INDEX idx_user_stats_diary_comments_received ON t_user_stats (diary_comments_received); CREATE INDEX idx_user_stats_diary_views_received ON t_user_stats (diary_views_received); CREATE INDEX idx_user_stats_featured_diary_count ON t_user_stats (featured_diary_count); CREATE INDEX idx_user_stats_ai_comments_received ON t_user_stats (ai_comments_received); -- t_diary_post表索引 CREATE INDEX idx_diary_post_user_id ON t_diary_post (user_id); CREATE INDEX idx_diary_post_publish_time ON t_diary_post (publish_time); CREATE INDEX idx_diary_post_last_comment_time ON t_diary_post (last_comment_time); CREATE INDEX idx_diary_post_status ON t_diary_post (status); CREATE INDEX idx_diary_post_priority ON t_diary_post (priority); CREATE INDEX idx_diary_post_featured ON t_diary_post (featured); CREATE INDEX idx_diary_post_create_time ON t_diary_post (create_time); -- t_diary_comment表索引 CREATE INDEX idx_diary_comment_diary_id ON t_diary_comment (diary_id); CREATE INDEX idx_diary_comment_user_id ON t_diary_comment (user_id); CREATE INDEX idx_diary_comment_parent_comment_id ON t_diary_comment (parent_comment_id); CREATE INDEX idx_diary_comment_publish_time ON t_diary_comment (publish_time); CREATE INDEX idx_diary_comment_last_reply_time ON t_diary_comment (last_reply_time); CREATE INDEX idx_diary_comment_emotion_score ON t_diary_comment (emotion_score); CREATE INDEX idx_diary_comment_sentiment_score ON t_diary_comment (sentiment_score); CREATE INDEX idx_diary_comment_create_time ON t_diary_comment (create_time); -- t_diary_post表复合索引和功能索引 CREATE INDEX idx_diary_post_user_publish ON t_diary_post (user_id, publish_time); CREATE INDEX idx_diary_post_user_status ON t_diary_post (user_id, status); CREATE INDEX idx_diary_post_public_publish ON t_diary_post (is_public, publish_time); CREATE INDEX idx_diary_post_featured_publish ON t_diary_post (featured, publish_time); CREATE INDEX idx_diary_post_mood_score ON t_diary_post (mood_score); CREATE INDEX idx_diary_post_ai_sentiment ON t_diary_post (ai_sentiment_score); CREATE INDEX idx_diary_post_location ON t_diary_post (latitude, longitude); CREATE INDEX idx_diary_post_like_count ON t_diary_post (like_count); CREATE INDEX idx_diary_post_comment_count ON t_diary_post (comment_count); CREATE INDEX idx_diary_post_view_count ON t_diary_post (view_count); CREATE INDEX idx_diary_post_create_by ON t_diary_post (create_by); CREATE INDEX idx_diary_post_update_by ON t_diary_post (update_by); CREATE INDEX idx_diary_post_is_deleted ON t_diary_post (is_deleted); -- t_diary_comment表复合索引和功能索引 CREATE INDEX idx_diary_comment_diary_publish ON t_diary_comment (diary_id, publish_time); CREATE INDEX idx_diary_comment_diary_type ON t_diary_comment (diary_id, comment_type); CREATE INDEX idx_diary_comment_user_publish ON t_diary_comment (user_id, publish_time); CREATE INDEX idx_diary_comment_parent_publish ON t_diary_comment (parent_comment_id, publish_time); CREATE INDEX idx_diary_comment_type_publish ON t_diary_comment (comment_type, publish_time); CREATE INDEX idx_diary_comment_status ON t_diary_comment (status); CREATE INDEX idx_diary_comment_is_top ON t_diary_comment (is_top); CREATE INDEX idx_diary_comment_like_count ON t_diary_comment (like_count); CREATE INDEX idx_diary_comment_reply_count ON t_diary_comment (reply_count); CREATE INDEX idx_diary_comment_ai_source ON t_diary_comment (ai_comment_source); CREATE INDEX idx_diary_comment_create_by ON t_diary_comment (create_by); CREATE INDEX idx_diary_comment_update_by ON t_diary_comment (update_by); CREATE INDEX idx_diary_comment_is_deleted ON t_diary_comment (is_deleted); -- t_guest_user表索引 CREATE INDEX idx_guest_user_guest_user_id ON t_guest_user (guest_user_id); CREATE INDEX idx_guest_user_ip_address ON t_guest_user (ip_address); CREATE INDEX idx_guest_user_last_active_time ON t_guest_user (last_active_time); CREATE INDEX idx_guest_user_conversation_count ON t_guest_user (conversation_count); CREATE INDEX idx_guest_user_message_count ON t_guest_user (message_count); CREATE INDEX idx_guest_user_create_time ON t_guest_user (create_time); CREATE INDEX idx_guest_user_create_by ON t_guest_user (create_by); CREATE INDEX idx_guest_user_update_by ON t_guest_user (update_by); CREATE INDEX idx_guest_user_is_deleted ON t_guest_user (is_deleted); -- ============================================================================ -- 18. 管理员用户表 (admin) -- ============================================================================ DROP TABLE IF EXISTS t_admin; CREATE TABLE t_admin ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键 account VARCHAR(50) NOT NULL UNIQUE COMMENT '管理员账号', -- 管理员账号 password VARCHAR(255) NOT NULL COMMENT '密码(加密后)', -- 密码(加密后) username VARCHAR(50) NOT NULL COMMENT '管理员姓名', -- 管理员姓名 email VARCHAR(100) UNIQUE COMMENT '邮箱', -- 邮箱 phone VARCHAR(20) UNIQUE COMMENT '手机号', -- 手机号 avatar VARCHAR(500) COMMENT '头像URL', -- 头像URL role VARCHAR(20) NOT NULL DEFAULT 'admin' COMMENT '角色: super_admin-超级管理员, admin-管理员, operator-运营', -- 角色: super_admin-超级管理员, admin-管理员, operator-运营 permissions JSON COMMENT '权限列表', -- 权限列表 status TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 0-禁用, 1-正常', -- 状态: 0-禁用, 1-正常 last_login_time DATETIME COMMENT '最后登录时间', -- 最后登录时间 last_login_ip VARCHAR(45) COMMENT '最后登录IP (支持IPv6)', -- 最后登录IP (支持IPv6) login_count INT DEFAULT 0 COMMENT '登录次数', -- 登录次数 department VARCHAR(50) COMMENT '所属部门', -- 所属部门 position VARCHAR(50) COMMENT '职位', -- 职位 -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '管理员用户表 (t_admin)'; -- 管理员表索引 CREATE INDEX idx_admin_account ON t_admin (account); CREATE INDEX idx_admin_email ON t_admin (email); CREATE INDEX idx_admin_phone ON t_admin (phone); CREATE INDEX idx_admin_role ON t_admin (role); CREATE INDEX idx_admin_status ON t_admin (status); CREATE INDEX idx_admin_create_time ON t_admin (create_time); CREATE INDEX idx_admin_update_time ON t_admin (update_time); CREATE INDEX idx_admin_is_deleted ON t_admin (is_deleted); -- 初始化管理员数据 -- 默认超级管理员账号: admin, 密码: admin123 (BCrypt加密后) INSERT INTO t_admin (id, account, password, username, email, phone, avatar, role, permissions, status, login_count, department, position, create_time, update_time, is_deleted) VALUES ( REPLACE(UUID(), '-', ''), 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z2EHCYAKMRgAXMqV.N8VXXxu', '系统管理员', 'admin@emotion-museum.com', '13800138000', NULL, 'super_admin', '["*"]', 1, 0, '技术部', '系统管理员', NOW(), NOW(), 0 ); -- ============================================================================ -- 数据库统计信息 -- ============================================================================ SELECT COUNT(*) as total_tables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'emotion' AND TABLE_NAME LIKE 't\_%' ESCAPE '\\'; -- 显示创建的表 SELECT TABLE_NAME as table_name, TABLE_COMMENT as comment, ENGINE as engine FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'emotion' AND TABLE_NAME LIKE 't\_%' ESCAPE '\\' ORDER BY TABLE_NAME; -- ============================================================================ -- 19. AI接口配置表 (t_ai_config) -- 用于存储各种AI接口的调用配置,支持从配置文件迁移到数据库管理 -- ============================================================================ DROP TABLE IF EXISTS t_ai_config; CREATE TABLE t_ai_config ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', config_name VARCHAR(100) NOT NULL COMMENT '配置名称', config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键值 (唯一标识)', config_type VARCHAR(50) NOT NULL DEFAULT 'coze' COMMENT '配置类型: coze-扣子, openai-OpenAI, claude-Claude, gemini-Gemini等', provider VARCHAR(50) NOT NULL COMMENT '服务提供商: coze, openai, anthropic, google等', -- API基础配置 api_base_url VARCHAR(500) NOT NULL COMMENT 'API基础URL', api_token VARCHAR(1000) NOT NULL COMMENT 'API访问令牌 (加密存储)', api_version VARCHAR(20) COMMENT 'API版本', -- 模型配置 model_name VARCHAR(100) COMMENT '模型名称', bot_id VARCHAR(100) COMMENT 'Bot ID (Coze专用)', workflow_id VARCHAR(100) COMMENT 'Workflow ID (Coze专用)', -- 请求配置 timeout_ms INT DEFAULT 30000 COMMENT '超时时间(毫秒)', retry_count INT DEFAULT 3 COMMENT '重试次数', retry_delay_ms INT DEFAULT 1000 COMMENT '重试延迟(毫秒)', max_tokens INT DEFAULT 4000 COMMENT '最大Token数', temperature DECIMAL(3,2) DEFAULT 0.7 COMMENT '温度参数 (0.0-2.0)', top_p DECIMAL(3,2) DEFAULT 1.0 COMMENT 'Top-p参数 (0.0-1.0)', -- 功能配置 support_stream TINYINT DEFAULT 1 COMMENT '是否支持流式输出: 0-不支持, 1-支持', support_function_call TINYINT DEFAULT 0 COMMENT '是否支持函数调用: 0-不支持, 1-支持', support_vision TINYINT DEFAULT 0 COMMENT '是否支持视觉理解: 0-不支持, 1-支持', support_file_upload TINYINT DEFAULT 0 COMMENT '是否支持文件上传: 0-不支持, 1-支持', -- 使用场景配置 usage_scenario VARCHAR(100) NOT NULL COMMENT '使用场景: chat-聊天, summary-总结, emotion_analysis-情绪分析, content_generation-内容生成等', priority INT DEFAULT 0 COMMENT '优先级 (数值越大优先级越高)', -- 费用配置 input_price_per_1k DECIMAL(10,6) DEFAULT 0.000000 COMMENT '输入Token价格(每1K)', output_price_per_1k DECIMAL(10,6) DEFAULT 0.000000 COMMENT '输出Token价格(每1K)', currency VARCHAR(10) DEFAULT 'USD' COMMENT '货币单位', -- 限制配置 rate_limit_per_minute INT DEFAULT 60 COMMENT '每分钟请求限制', rate_limit_per_hour INT DEFAULT 3600 COMMENT '每小时请求限制', rate_limit_per_day INT DEFAULT 86400 COMMENT '每日请求限制', -- 状态配置 is_enabled TINYINT DEFAULT 1 COMMENT '是否启用: 0-禁用, 1-启用', is_default TINYINT DEFAULT 0 COMMENT '是否为默认配置: 0-否, 1-是', environment VARCHAR(20) DEFAULT 'production' COMMENT '环境: development-开发, testing-测试, production-生产', -- 扩展配置 custom_headers JSON COMMENT '自定义请求头', custom_params JSON COMMENT '自定义参数', webhook_url VARCHAR(500) COMMENT 'Webhook回调地址', -- 监控配置 health_check_url VARCHAR(500) COMMENT '健康检查URL', health_check_interval_minutes INT DEFAULT 5 COMMENT '健康检查间隔(分钟)', -- 描述信息 description TEXT COMMENT '配置描述', usage_notes TEXT COMMENT '使用说明', -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'AI接口配置表 (t_ai_config)'; -- AI配置表索引 CREATE INDEX idx_ai_config_config_key ON t_ai_config (config_key); CREATE INDEX idx_ai_config_config_type ON t_ai_config (config_type); CREATE INDEX idx_ai_config_provider ON t_ai_config (provider); CREATE INDEX idx_ai_config_usage_scenario ON t_ai_config (usage_scenario); CREATE INDEX idx_ai_config_is_enabled ON t_ai_config (is_enabled); CREATE INDEX idx_ai_config_is_default ON t_ai_config (is_default); CREATE INDEX idx_ai_config_environment ON t_ai_config (environment); CREATE INDEX idx_ai_config_priority ON t_ai_config (priority); CREATE INDEX idx_ai_config_create_time ON t_ai_config (create_time); CREATE INDEX idx_ai_config_update_time ON t_ai_config (update_time); CREATE INDEX idx_ai_config_is_deleted ON t_ai_config (is_deleted); CREATE INDEX idx_ai_config_scenario_enabled ON t_ai_config (usage_scenario, is_enabled); CREATE INDEX idx_ai_config_type_enabled ON t_ai_config (config_type, is_enabled); -- ============================================================================ -- AI配置初始化数据 -- 基于AiChatServiceImpl.java中的配置参数创建默认配置 -- ============================================================================ -- 1. Coze聊天配置 (默认聊天场景) INSERT INTO t_ai_config ( id, config_name, config_key, config_type, provider, api_base_url, api_token, api_version, bot_id, workflow_id, timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature, support_stream, support_function_call, support_vision, support_file_upload, usage_scenario, priority, is_enabled, is_default, environment, input_price_per_1k, output_price_per_1k, currency, rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day, description, usage_notes, create_time, update_time, is_deleted ) VALUES ( REPLACE(UUID(), '-', ''), 'Coze聊天机器人配置', 'coze.chat.default', 'coze', 'coze', 'https://api.coze.cn', 'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL', 'v3', '7523042446285439016', '7523047462895796287', 30000, 3, 1000, 4000, 0.7, 1, 1, 0, 0, 'chat', 100, 1, 1, 'production', 0.001000, 0.002000, 'USD', 60, 3600, 86400, 'Coze平台的默认聊天机器人配置,用于日常情绪对话', '1. 需要配置有效的API Token\n2. 需要配置Bot ID和Workflow ID\n3. 支持流式输出和函数调用', NOW(), NOW(), 0 ); -- 2. Coze总结配置 (专用于对话总结) INSERT INTO t_ai_config ( id, config_name, config_key, config_type, provider, api_base_url, api_token, api_version, bot_id, workflow_id, timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature, support_stream, support_function_call, support_vision, support_file_upload, usage_scenario, priority, is_enabled, is_default, environment, input_price_per_1k, output_price_per_1k, currency, rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day, description, usage_notes, create_time, update_time, is_deleted ) VALUES ( REPLACE(UUID(), '-', ''), 'Coze对话总结配置', 'coze.summary.default', 'coze', 'coze', 'https://api.coze.cn', 'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL', 'v3', '7529062814150295595', '7523047462895796287', 30000, 3, 1000, 8000, 0.3, 0, 0, 0, 0, 'summary', 90, 1, 1, 'production', 0.001000, 0.002000, 'USD', 30, 1800, 43200, 'Coze平台的对话总结配置,专门用于生成对话摘要和情绪分析', '1. 使用较低的temperature以获得更稳定的总结结果\n2. 增加max_tokens以支持长文本总结\n3. 不支持流式输出', NOW(), NOW(), 0 ); -- 3. Coze情绪分析配置 (专用于情绪分析) INSERT INTO t_ai_config ( id, config_name, config_key, config_type, provider, api_base_url, api_token, api_version, bot_id, workflow_id, timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature, support_stream, support_function_call, support_vision, support_file_upload, usage_scenario, priority, is_enabled, is_default, environment, input_price_per_1k, output_price_per_1k, currency, rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day, description, usage_notes, create_time, update_time, is_deleted ) VALUES ( REPLACE(UUID(), '-', ''), 'Coze情绪分析配置', 'coze.emotion_analysis.default', 'coze', 'coze', 'https://api.coze.cn', 'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL', 'v3', '7529062814150295595', -- 复用总结bot,或配置专门的情绪分析bot '7523047462895796287', -- 复用总结workflow,或配置专门的情绪分析workflow 45000, 3, 1500, 6000, 0.2, 0, 1, 0, 0, 'emotion_analysis', 95, 1, 1, 'production', 0.001000, 0.002000, 'USD', 20, 1200, 28800, 'Coze平台的情绪分析配置,用于分析用户聊天记录的情绪状态', '1. 使用最低的temperature以获得准确的情绪分析\n2. 支持函数调用以获取结构化的分析结果\n3. 增加超时时间以处理复杂的情绪分析', NOW(), NOW(), 0 ); -- 4. 备用OpenAI配置 (作为备选方案) INSERT INTO t_ai_config ( id, config_name, config_key, config_type, provider, api_base_url, api_token, api_version, model_name, timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature, top_p, support_stream, support_function_call, support_vision, support_file_upload, usage_scenario, priority, is_enabled, is_default, environment, input_price_per_1k, output_price_per_1k, currency, rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day, description, usage_notes, create_time, update_time, is_deleted ) VALUES ( REPLACE(UUID(), '-', ''), 'OpenAI GPT-4备用配置', 'openai.gpt4.backup', 'openai', 'openai', 'https://api.openai.com/v1', 'sk-placeholder-openai-api-key-here', -- 需要配置实际的OpenAI API Key 'v1', 'gpt-4-turbo-preview', 30000, 3, 2000, 4000, 0.7, 1.0, 1, 1, 1, 1, 'chat', 50, 0, 0, 'production', -- 默认禁用,作为备用 0.010000, 0.030000, 'USD', 60, 3600, 86400, 'OpenAI GPT-4备用配置,当Coze服务不可用时的备选方案', '1. 需要配置有效的OpenAI API Key\n2. 支持视觉理解和文件上传\n3. 成本较高,建议作为备用方案', NOW(), NOW(), 0 ); -- 5. 开发环境测试配置 INSERT INTO t_ai_config ( id, config_name, config_key, config_type, provider, api_base_url, api_token, api_version, bot_id, workflow_id, timeout_ms, retry_count, retry_delay_ms, max_tokens, temperature, support_stream, support_function_call, support_vision, support_file_upload, usage_scenario, priority, is_enabled, is_default, environment, input_price_per_1k, output_price_per_1k, currency, rate_limit_per_minute, rate_limit_per_hour, rate_limit_per_day, description, usage_notes, create_time, update_time, is_deleted ) VALUES ( REPLACE(UUID(), '-', ''), 'Coze开发环境测试配置', 'coze.chat.development', 'coze', 'coze', 'https://api.coze.cn', 'sat_WgqusMh5gTfgRhsEFycGA5n9NailrJYV1rHeruJCHNB1gAvJz4laprLsvK8i2jEL', -- 开发环境可使用相同token或配置专门的开发token 'v3', '7523042446285439016', -- 开发环境可使用相同bot-id或配置专门的开发bot-id '7523047462895796287', -- 开发环境可使用相同workflow-id或配置专门的开发workflow-id 10000, 2, 500, 2000, 0.8, 1, 1, 0, 0, 'chat', 80, 1, 0, 'development', 0.000500, 0.001000, 'USD', 120, 7200, 172800, 'Coze平台开发环境测试配置,用于开发和调试', '1. 开发环境专用配置\n2. 较短的超时时间和更高的请求限制\n3. 用于功能测试和调试', NOW(), NOW(), 0 ); -- ============================================================================ -- 19. 用户档案表 (t_user_profile) -- ============================================================================ DROP TABLE IF EXISTS t_user_profile; CREATE TABLE t_user_profile ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)', nickname VARCHAR(50) NOT NULL COMMENT '昵称 (必填)', gender VARCHAR(20) DEFAULT 'secret' COMMENT '性别', zodiac VARCHAR(20) COMMENT '星座', mbti VARCHAR(20) NOT NULL COMMENT 'MBTI人格类型 (必填)', hobbies JSON COMMENT '兴趣爱好列表', childhood_date DATE COMMENT '童年记忆日期', childhood_content TEXT COMMENT '童年记忆内容', peak_date DATE COMMENT '高光时刻日期', peak_content TEXT COMMENT '高光时刻内容', valley_date DATE COMMENT '低谷时刻日期', valley_content TEXT COMMENT '低谷时刻内容', future_vision TEXT COMMENT '未来愿景', ideal_life TEXT COMMENT '理想生活状态', scripts JSON COMMENT '生成的剧本列表 (JSON)', paths JSON COMMENT '选择的路径列表 (JSON)', status TINYINT DEFAULT 1 COMMENT '状态: 0-禁用, 1-正常', -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间 update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间 is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除 remarks VARCHAR(500) COMMENT '备注' -- 备注 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT '用户个人信息表 (t_user_profile)'; -- t_user_profile表索引 CREATE INDEX idx_user_profile_user_id ON t_user_profile (user_id); CREATE INDEX idx_user_profile_create_time ON t_user_profile (create_time); -- ============================================================================ -- 20. 生命事件表 (t_life_event) -- 存储用户的人生轨迹事件,包括日期、标题、内容、AI回复等 -- 关联说明: user_id 关联 t_user.id -- ============================================================================ DROP TABLE IF EXISTS t_life_event; CREATE TABLE t_life_event ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)', -- 事件信息 event_type VARCHAR(50) DEFAULT 'daily_log' COMMENT '事件类型: daily_log-日常记录, milestone-里程碑', event_date DATETIME COMMENT '事件日期', title VARCHAR(200) COMMENT '事件标题', content TEXT COMMENT '事件内容', ai_reply TEXT COMMENT 'AI疗愈回复', -- 情绪分析 emotion_type VARCHAR(50) COMMENT '情绪类型', emotion_score DECIMAL(3, 2) COMMENT '情绪评分', -- 标签 tags JSON COMMENT '标签列表', -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_by VARCHAR(64) COMMENT '更新人ID', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', remarks VARCHAR(500) COMMENT '备注' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '生命事件表 (t_life_event)'; -- t_life_event表索引 CREATE INDEX idx_life_event_user_id ON t_life_event (user_id); CREATE INDEX idx_life_event_event_date ON t_life_event (event_date); CREATE INDEX idx_life_event_user_date ON t_life_event (user_id, event_date); CREATE INDEX idx_life_event_event_type ON t_life_event (event_type); CREATE INDEX idx_life_event_create_time ON t_life_event (create_time); CREATE INDEX idx_life_event_is_deleted ON t_life_event (is_deleted); -- ============================================================================ -- 21. 爽文剧本表 (t_epic_script) -- 存储用户生成的爽文剧本,包括主题、风格、剧情章节等 -- 关联说明: user_id 关联 t_user.id -- ============================================================================ DROP TABLE IF EXISTS t_epic_script; CREATE TABLE t_epic_script ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)', -- 剧本基本信息 title VARCHAR(200) COMMENT '剧本标题', theme TEXT COMMENT '剧本主题/渴望', style VARCHAR(50) COMMENT '剧本风格: career-职场逆袭, love-情感圆满, fantasy-玄幻觉醒', length VARCHAR(20) DEFAULT 'medium' COMMENT '篇幅长度: medium-标准篇, long-长篇', -- 剧情内容 (四章结构) plot_intro TEXT COMMENT '序幕:低谷回响', plot_turning TEXT COMMENT '转折:契机出现', plot_climax TEXT COMMENT '高潮:命运抉择', plot_ending TEXT COMMENT '结局:新的开始', -- 完整剧情JSON (备用) plot_json JSON COMMENT '完整剧情JSON结构', -- 状态 is_selected TINYINT DEFAULT 0 COMMENT '是否当前选中: 0-否, 1-是', -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_by VARCHAR(64) COMMENT '更新人ID', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', remarks VARCHAR(500) COMMENT '备注' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '爽文剧本表 (t_epic_script)'; -- t_epic_script表索引 CREATE INDEX idx_epic_script_user_id ON t_epic_script (user_id); CREATE INDEX idx_epic_script_style ON t_epic_script (style); CREATE INDEX idx_epic_script_user_selected ON t_epic_script (user_id, is_selected); CREATE INDEX idx_epic_script_create_time ON t_epic_script (create_time); CREATE INDEX idx_epic_script_is_deleted ON t_epic_script (is_deleted); -- ============================================================================ -- 22. 实现路径表 (t_life_path) -- 存储基于剧本生成的实现路径规划 -- 关联说明: user_id 关联 t_user.id, script_id 关联 t_epic_script.id -- ============================================================================ DROP TABLE IF EXISTS t_life_path; CREATE TABLE t_life_path ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)', script_id VARCHAR(64) NOT NULL COMMENT '关联剧本ID (关联t_epic_script.id)', -- 路径基本信息 title VARCHAR(200) COMMENT '路径标题', description TEXT COMMENT '路径描述', -- 路径步骤 (JSON数组) steps JSON COMMENT '路径步骤列表', -- 状态 status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active-进行中, completed-已完成, archived-已归档', progress DECIMAL(5, 2) DEFAULT 0.00 COMMENT '完成进度百分比', -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_by VARCHAR(64) COMMENT '更新人ID', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', remarks VARCHAR(500) COMMENT '备注' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '实现路径表 (t_life_path)'; -- t_life_path表索引 CREATE INDEX idx_life_path_user_id ON t_life_path (user_id); CREATE INDEX idx_life_path_script_id ON t_life_path (script_id); CREATE INDEX idx_life_path_user_script ON t_life_path (user_id, script_id); CREATE INDEX idx_life_path_status ON t_life_path (status); CREATE INDEX idx_life_path_create_time ON t_life_path (create_time); CREATE INDEX idx_life_path_is_deleted ON t_life_path (is_deleted); -- ============================================================================ -- 23. 路径步骤表 (t_life_path_step) - 可选,用于更细粒度的步骤管理 -- 存储路径的每个步骤详情 -- 关联说明: path_id 关联 t_life_path.id -- ============================================================================ DROP TABLE IF EXISTS t_life_path_step; CREATE TABLE t_life_path_step ( id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', path_id VARCHAR(64) NOT NULL COMMENT '路径ID (关联t_life_path.id)', user_id VARCHAR(64) NOT NULL COMMENT '用户ID (关联t_user.id)', -- 步骤信息 step_order INT DEFAULT 0 COMMENT '步骤顺序', phase VARCHAR(100) COMMENT '阶段名称', time_frame VARCHAR(50) COMMENT '时间范围', content TEXT COMMENT '核心策略内容', action TEXT COMMENT '关键行动', resources TEXT COMMENT '所需资源', habit TEXT COMMENT '养成习惯', -- 状态 status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending-待开始, in_progress-进行中, completed-已完成', completed_time DATETIME COMMENT '完成时间', -- 公共字段 create_by VARCHAR(64) COMMENT '创建人ID', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_by VARCHAR(64) COMMENT '更新人ID', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', remarks VARCHAR(500) COMMENT '备注' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '路径步骤表 (t_life_path_step)'; -- t_life_path_step表索引 CREATE INDEX idx_life_path_step_path_id ON t_life_path_step (path_id); CREATE INDEX idx_life_path_step_user_id ON t_life_path_step (user_id); CREATE INDEX idx_life_path_step_order ON t_life_path_step (path_id, step_order); CREATE INDEX idx_life_path_step_status ON t_life_path_step (status); CREATE INDEX idx_life_path_step_is_deleted ON t_life_path_step (is_deleted); -- 提交事务 COMMIT;