增加后台管理模块

This commit is contained in:
2025-10-27 23:57:31 +08:00
parent 3c1ba8e801
commit 0016453f20
420 changed files with 5650 additions and 1449 deletions
+940
View File
@@ -0,0 +1,940 @@
-- ============================================================================
-- 情绪博物馆数据库完整部署脚本
-- 版本: 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和特殊字符
-- ============================================================================
-- 删除现有表(开发阶段确保表结构最新)
-- 警告: 这会删除所有数据!
-- ============================================================================
DROP TABLE IF EXISTS t_user_stats;
DROP TABLE IF EXISTS t_guest_user;
DROP TABLE IF EXISTS t_reward;
DROP TABLE IF EXISTS t_achievement;
DROP TABLE IF EXISTS t_comment;
DROP TABLE IF EXISTS t_community_post;
DROP TABLE IF EXISTS t_location_pin;
DROP TABLE IF EXISTS t_topic_interaction;
DROP TABLE IF EXISTS t_growth_topic;
DROP TABLE IF EXISTS t_emotion_record;
DROP TABLE IF EXISTS t_emotion_analysis;
DROP TABLE IF EXISTS t_coze_api_call;
DROP TABLE IF EXISTS t_message;
DROP TABLE IF EXISTS t_conversation;
DROP TABLE IF EXISTS t_diary_post;
DROP TABLE IF EXISTS t_diary_comment;
DROP TABLE IF EXISTS t_user;
DROP TABLE IF EXISTS t_admin;
-- ============================================================================
-- 1. 用户表 (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,通过代码逻辑维护关联关系
-- ============================================================================
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,通过代码逻辑维护关联关系
-- ============================================================================
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 '消息内容', -- 消息内容
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) - 优化版本
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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,通过代码逻辑维护关联关系
-- ============================================================================
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.iduser_id 关联 t_user.id,通过代码逻辑维护关联关系
-- ============================================================================
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)
-- ============================================================================
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)
-- ============================================================================
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;
-- 提交事务
COMMIT;