feat: 完善后端架构和service层实现

- 创建完整的entity实体类体系,包括所有业务实体
- 实现BaseEntity基类,统一管理公共字段
- 创建雪花算法ID生成器和自动填充处理器
- 简化所有mapper接口,只继承BaseMapper
- 重构service层,使用LambdaQueryWrapper进行数据库操作
- 创建BasePageRequest分页查询基类
- 完善用户上下文管理和JWT认证
- 新增WebSocket聊天功能和相关控制器
- 更新前端配置和组件,完善用户认证流程
- 同步数据库建表脚本
This commit is contained in:
2025-07-24 00:37:23 +08:00
parent 645036fcd2
commit 880e0e3c88
87 changed files with 8114 additions and 1106 deletions
@@ -8,9 +8,9 @@ spring:
# 数据库配置 - 本地MySQL
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/emotion?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
url: jdbc:mysql://47.111.10.27:3306/emotion?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
password: EmotionMuseum2025*#
hikari:
minimum-idle: 5
maximum-pool-size: 20
@@ -52,9 +52,13 @@ emotion:
# 文件上传路径 - 本地开发
upload:
path: ./uploads/emotion-museum
# 开发模式配置
dev:
mock-enabled: true
debug-mode: true
hot-reload: true
# 雪花算法配置
snowflake:
machine-id: 1
@@ -8,7 +8,7 @@ spring:
# 数据库配置 - 生产MySQL
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/emotion?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
url: jdbc:mysql://47.111.10.27:3306/emotion?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: emotion
password: EmotionDB2024!
hikari:
@@ -63,7 +63,7 @@ management:
emotion:
# JWT配置
jwt:
secret: EmotionMuseumJWTSecretKey2025ForAuthenticationAndAuthorization
secret: EmotionMuseumJWTSecretKey2025ForAuthenticationAndAuthorizationSecureEnoughForHS512Algorithm
expiration: 86400000 # 24小时
header: Authorization
prefix: "Bearer "
@@ -71,9 +71,14 @@ emotion:
# Coze API配置 - 所有环境统一
coze:
api:
token: pat_7523042446285439016_emotion_museum_2025
token: pat_GCR4qKzqpf90wMCvKsldMrB18KG3QsLDci65bZthssKsbLxu8X70BKYumleDcabO
base-url: https://api.coze.cn
bot-id: 7523042446285439016
# 对话聊天
chat:
bot-id: 7523042446285439016
# 聊天记录总结
summary:
bot-id: 7529062814150295595
workflow-id: 7523047462895796287
timeout: 30000
retry-count: 3
@@ -1,183 +0,0 @@
-- 情感博物馆数据库初始化脚本
-- 作者: emotion-museum
-- 日期: 2025-07-22
-- 创建数据库
CREATE DATABASE IF NOT EXISTS emotion DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE emotion;
-- 删除已存在的表(开发阶段)
DROP TABLE IF EXISTS message;
DROP TABLE IF EXISTS conversation;
DROP TABLE IF EXISTS coze_api_call;
DROP TABLE IF EXISTS emotion_record;
DROP TABLE IF EXISTS user;
-- 创建用户表
CREATE TABLE user (
id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '用户ID',
username VARCHAR(50) NOT NULL COMMENT '用户名',
account VARCHAR(50) NOT NULL UNIQUE COMMENT '账号',
password VARCHAR(255) NOT NULL COMMENT '密码',
email VARCHAR(100) COMMENT '邮箱',
phone VARCHAR(20) COMMENT '手机号',
nickname VARCHAR(50) COMMENT '昵称',
avatar VARCHAR(500) COMMENT '头像URL',
gender TINYINT DEFAULT 0 COMMENT '性别:0-未知,1-男,2-女',
bio TEXT COMMENT '个人简介',
member_level VARCHAR(20) DEFAULT 'free' COMMENT '会员等级',
total_days INT DEFAULT 0 COMMENT '总天数',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-正常',
is_verified TINYINT DEFAULT 0 COMMENT '是否验证:0-未验证,1-已验证',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
last_active_time DATETIME COMMENT '最后活跃时间',
create_by VARCHAR(32) COMMENT '创建人',
update_by VARCHAR(32) COMMENT '更新人',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
remarks TEXT COMMENT '备注',
INDEX idx_account (account),
INDEX idx_email (email),
INDEX idx_phone (phone),
INDEX idx_status (status),
INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- 创建对话表
CREATE TABLE conversation (
id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '对话ID',
user_id VARCHAR(32) COMMENT '用户ID',
title VARCHAR(200) NOT NULL COMMENT '对话标题',
type VARCHAR(20) DEFAULT 'user' COMMENT '对话类型:user-用户对话,guest-访客对话',
start_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '开始时间',
end_time DATETIME COMMENT '结束时间',
message_count INT DEFAULT 0 COMMENT '消息数量',
status TINYINT DEFAULT 1 COMMENT '状态:0-结束,1-进行中',
client_ip VARCHAR(50) COMMENT '客户端IP(访客模式)',
user_agent TEXT COMMENT '用户代理(访客模式)',
coze_conversation_id VARCHAR(100) COMMENT 'Coze对话ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
create_by VARCHAR(32) COMMENT '创建人',
update_by VARCHAR(32) COMMENT '更新人',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
remarks TEXT COMMENT '备注',
INDEX idx_user_id (user_id),
INDEX idx_type (type),
INDEX idx_status (status),
INDEX idx_create_time (create_time),
INDEX idx_client_ip (client_ip)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='对话表';
-- 创建消息表
CREATE TABLE message (
id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '消息ID',
conversation_id VARCHAR(32) NOT NULL COMMENT '对话ID',
user_id VARCHAR(32) COMMENT '用户ID',
content TEXT NOT NULL COMMENT '消息内容',
content_type VARCHAR(20) DEFAULT 'text' COMMENT '消息类型:text-文本,image-图片,file-文件',
sender_type VARCHAR(20) NOT NULL COMMENT '发送者类型:user-用户,ai-AIsystem-系统',
sender_id VARCHAR(32) COMMENT '发送者ID',
status VARCHAR(20) DEFAULT 'sent' COMMENT '消息状态:sending-发送中,sent-已发送,delivered-已送达,read-已读,failed-失败',
send_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
is_read TINYINT DEFAULT 0 COMMENT '是否已读:0-未读,1-已读',
parent_message_id VARCHAR(32) COMMENT '父消息ID(用于回复链)',
coze_role VARCHAR(20) COMMENT 'Coze消息角色 (user/assistant/system)',
coze_message_id VARCHAR(100) COMMENT 'Coze消息ID',
error_message TEXT COMMENT '错误信息',
retry_count INT DEFAULT 0 COMMENT '重试次数',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
create_by VARCHAR(32) COMMENT '创建人',
update_by VARCHAR(32) COMMENT '更新人',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
remarks TEXT COMMENT '备注',
INDEX idx_conversation_id (conversation_id),
INDEX idx_user_id (user_id),
INDEX idx_sender_type (sender_type),
INDEX idx_send_time (send_time),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息表';
-- 创建Coze API调用记录表
CREATE TABLE coze_api_call (
id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '记录ID',
conversation_id VARCHAR(32) COMMENT '对话ID',
user_id VARCHAR(32) COMMENT '用户ID',
user_message TEXT COMMENT '用户消息',
ai_reply TEXT COMMENT 'AI回复',
api_request_data TEXT COMMENT 'API请求数据',
api_response_data TEXT COMMENT 'API响应数据',
call_status TINYINT DEFAULT 1 COMMENT '调用状态:1-成功,0-失败',
error_message TEXT COMMENT '错误信息',
response_time_ms INT COMMENT '响应时间(毫秒)',
api_type VARCHAR(20) DEFAULT 'chat' COMMENT 'API类型:chat-聊天,emotion-情绪分析',
client_ip VARCHAR(50) COMMENT '客户端IP',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
create_by VARCHAR(32) COMMENT '创建人',
update_by VARCHAR(32) COMMENT '更新人',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
remarks TEXT COMMENT '备注',
INDEX idx_conversation_id (conversation_id),
INDEX idx_user_id (user_id),
INDEX idx_call_status (call_status),
INDEX idx_create_time (create_time),
INDEX idx_api_type (api_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Coze API调用记录表';
-- 创建情绪记录表
CREATE TABLE emotion_record (
id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '记录ID',
user_id VARCHAR(32) NOT NULL COMMENT '用户ID',
record_date DATE NOT NULL COMMENT '记录日期',
emotion_type VARCHAR(20) NOT NULL COMMENT '情绪类型:joy-喜悦,sadness-悲伤,anger-愤怒,fear-恐惧,surprise-惊讶,neutral-平静',
intensity DECIMAL(3,2) DEFAULT 0.50 COMMENT '情绪强度 (0.00-1.00)',
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 '备注',
analysis_result TEXT COMMENT '情绪分析结果',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
create_by VARCHAR(32) COMMENT '创建人',
update_by VARCHAR(32) COMMENT '更新人',
is_deleted TINYINT DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除',
remarks TEXT COMMENT '备注',
INDEX idx_user_id (user_id),
INDEX idx_record_date (record_date),
INDEX idx_emotion_type (emotion_type),
INDEX idx_create_time (create_time),
UNIQUE KEY uk_user_date (user_id, record_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='情绪记录表';
-- 插入测试数据
INSERT INTO user (id, username, account, password, email, nickname, member_level, total_days, status, is_verified, last_active_time) VALUES
('admin001', 'admin', 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iKXgwkOBbYbqnhHGGGKTAiYOUFlW', 'admin@emotion.com', '管理员', 'premium', 365, 1, 1, NOW()),
('test001', 'testuser', 'test', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iKXgwkOBbYbqnhHGGGKTAiYOUFlW', 'test@emotion.com', '测试用户', 'free', 30, 1, 1, NOW());
-- 插入测试对话
INSERT INTO conversation (id, user_id, title, type, start_time, message_count, status, client_ip) VALUES
('conv001', 'admin001', '我的第一次对话', 'user', NOW(), 2, 1, '127.0.0.1'),
('conv002', 'test001', '情绪咨询', 'user', NOW(), 1, 1, '127.0.0.1');
-- 插入测试消息
INSERT INTO message (id, conversation_id, user_id, content, sender_type, sender_id, status, send_time) VALUES
('msg001', 'conv001', 'admin001', '你好,我想了解一下情绪管理', 'user', 'admin001', 'sent', NOW()),
('msg002', 'conv001', 'admin001', '你好!我很高兴为你介绍情绪管理的相关知识。情绪管理是一项重要的生活技能...', 'ai', 'ai-assistant', 'sent', NOW()),
('msg003', 'conv002', 'test001', '我最近感觉压力很大', 'user', 'test001', 'sent', NOW());
-- 插入测试情绪记录
INSERT INTO emotion_record (id, user_id, record_date, emotion_type, intensity, triggers, description, tags, weather, location, activity) VALUES
('record001', 'admin001', CURDATE(), 'joy', 0.80, '完成了重要项目', '今天心情很好,完成了一个重要的项目', '["工作", "成就感"]', '晴天', '办公室', '工作'),
('record002', 'test001', CURDATE(), 'sadness', 0.60, '工作压力', '感觉有些压力和焦虑', '["工作", "压力"]', '阴天', '家里', '思考');
COMMIT;
-- 显示创建结果
SELECT 'Database initialization completed successfully!' as status;
@@ -0,0 +1,854 @@
-- ============================================================================
-- 情绪博物馆数据库完整部署脚本
-- 版本: 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 user_stats;
DROP TABLE IF EXISTS guest_user;
DROP TABLE IF EXISTS reward;
DROP TABLE IF EXISTS achievement;
DROP TABLE IF EXISTS comment;
DROP TABLE IF EXISTS community_post;
DROP TABLE IF EXISTS location_pin;
DROP TABLE IF EXISTS topic_interaction;
DROP TABLE IF EXISTS growth_topic;
DROP TABLE IF EXISTS emotion_record;
DROP TABLE IF EXISTS emotion_analysis;
DROP TABLE IF EXISTS coze_api_call;
DROP TABLE IF EXISTS message;
DROP TABLE IF EXISTS conversation;
DROP TABLE IF EXISTS user;
-- ============================================================================
-- 1. 用户表 (user)
-- ============================================================================
CREATE TABLE user (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
account VARCHAR(50) NOT NULL UNIQUE, -- 账号
password VARCHAR(255) NOT NULL, -- 密码(加密后)
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名
email VARCHAR(100) NOT NULL UNIQUE, -- 邮箱
phone VARCHAR(20) UNIQUE, -- 手机号
avatar VARCHAR(500), -- 头像URL
nickname VARCHAR(50) NOT NULL, -- 昵称
birth_date DATE, -- 生日
location VARCHAR(100), -- 所在地
bio TEXT, -- 个人简介
member_level VARCHAR(20) NOT NULL DEFAULT 'free', -- 会员等级
total_days INT NOT NULL DEFAULT 0, -- 使用天数
-- 成长数据
self_awareness DECIMAL(5, 2) NOT NULL DEFAULT 50.00, -- 自我感知
emotional_resilience DECIMAL(5, 2) NOT NULL DEFAULT 50.00, -- 情绪韧性
action_power DECIMAL(5, 2) NOT NULL DEFAULT 50.00, -- 行动力
empathy DECIMAL(5, 2) NOT NULL DEFAULT 50.00, -- 共情力
life_enthusiasm DECIMAL(5, 2) NOT NULL DEFAULT 50.00, -- 生活热度
-- 状态字段
status TINYINT NOT NULL DEFAULT 1, -- 状态: 0-禁用, 1-正常
is_verified TINYINT NOT NULL DEFAULT 0, -- 是否已验证: 0-未验证, 1-已验证
last_active_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 最后活跃时间
-- 第三方登录字段
third_party_id VARCHAR(128), -- 第三方平台ID
third_party_type VARCHAR(32), -- 第三方平台类型: wechat, qq, wechat-mp
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表';
-- ============================================================================
-- 2. 对话表 (conversation)
-- 关联说明: user_id 关联 user.id,通过代码逻辑维护关联关系
-- ============================================================================
CREATE TABLE conversation (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
user_id VARCHAR(36) NOT NULL, -- 用户ID (关联user.id)
user_type VARCHAR(20) NOT NULL DEFAULT 'registered', -- 用户类型: registered-注册用户, guest-访客用户
title VARCHAR(200), -- 对话标题
type VARCHAR(50) NOT NULL DEFAULT 'emotion_chat', -- 对话类型
status VARCHAR(20) NOT NULL DEFAULT 'active', -- 状态: active-活跃, ended-结束, archived-归档
coze_conversation_id VARCHAR(100), -- Coze对话ID
bot_id VARCHAR(50), -- 使用的Bot ID
workflow_id VARCHAR(50), -- 使用的Workflow ID
initial_message TEXT, -- 初始消息
context TEXT, -- 上下文信息
primary_emotion VARCHAR(50), -- 主要情绪
emotion_intensity DECIMAL(3, 2), -- 情绪强度
emotion_trend VARCHAR(50), -- 情绪趋势
keywords JSON, -- 关键词
ai_insights TEXT, -- AI洞察
confidence DECIMAL(3, 2), -- 分析置信度
start_time DATETIME, -- 开始时间
end_time DATETIME, -- 结束时间
last_active_time DATETIME DEFAULT CURRENT_TIMESTAMP, -- 最后活跃时间
message_count INT NOT NULL DEFAULT 0, -- 消息数量
total_tokens INT DEFAULT 0, -- 总Token使用量
total_cost DECIMAL(10, 4) DEFAULT 0.0000, -- 总费用
client_ip VARCHAR(45), -- 客户端IP地址 (支持IPv6)
user_agent TEXT, -- 用户代理信息
summary TEXT, -- 对话摘要
tags JSON, -- 标签
metadata JSON, -- 扩展元数据
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '对话表';
-- ============================================================================
-- 3. 消息表 (message)
-- 关联说明: conversation_id 关联 conversation.id,通过代码逻辑维护关联关系
-- ============================================================================
CREATE TABLE message (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
conversation_id VARCHAR(36) NOT NULL, -- 对话ID (关联conversation.id)
content TEXT NOT NULL, -- 消息内容
type VARCHAR(50) NOT NULL DEFAULT 'text', -- 消息类型
sender VARCHAR(20) NOT NULL, -- 发送者: user-用户, assistant-AI助手
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 消息时间戳
coze_chat_id VARCHAR(50), -- Coze平台的聊天ID
coze_message_id VARCHAR(50), -- Coze平台的消息ID
status VARCHAR(20) DEFAULT 'sent', -- 消息状态: sending/sent/failed/processing
error_message TEXT, -- 错误信息
emotion_score DECIMAL(3, 2), -- 情绪评分
emotion_type VARCHAR(50), -- 情绪类型
emotion_confidence DECIMAL(3, 2), -- 情绪分析置信度
prompt_tokens INT DEFAULT 0, -- 输入Token数
completion_tokens INT DEFAULT 0, -- 输出Token数
total_tokens INT DEFAULT 0, -- 总Token数
api_cost DECIMAL(10, 6) DEFAULT 0.000000, -- API调用费用
is_read TINYINT NOT NULL DEFAULT 0, -- 是否已读: 0-未读, 1-已读
parent_message_id VARCHAR(36), -- 父消息ID(用于回复链)
emotion_analysis JSON, -- 情绪分析结果
metadata JSON, -- 扩展元数据
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '消息表';
-- ============================================================================
-- 4. Coze API调用记录表 (coze_api_call) - 优化版本
-- ============================================================================
CREATE TABLE coze_api_call (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
conversation_id VARCHAR(36), -- 对话ID
message_id VARCHAR(36), -- 消息ID
-- Coze API 信息
coze_chat_id VARCHAR(50), -- Coze聊天ID
coze_conversation_id VARCHAR(50), -- Coze对话ID
bot_id VARCHAR(50) NOT NULL, -- Bot ID
workflow_id VARCHAR(50), -- Workflow ID
user_id VARCHAR(36) NOT NULL, -- 用户ID
-- 请求信息
request_type VARCHAR(20) NOT NULL, -- 请求类型: chat/stream/retrieve/messages
request_url VARCHAR(500), -- 请求URL
request_body JSON, -- 请求体
request_headers JSON, -- 请求头
-- 用户消息内容
user_message TEXT, -- 用户输入的消息内容
user_message_type VARCHAR(20) DEFAULT 'text', -- 用户消息类型: text/image/file
-- AI回复内容
ai_reply TEXT, -- AI回复的消息内容
ai_reply_type VARCHAR(20) DEFAULT 'text', -- AI回复类型: text/image/file
-- 响应信息
response_status INT, -- HTTP状态码
response_body JSON, -- 响应体
response_headers JSON, -- 响应头
-- 轮询信息
poll_count INT DEFAULT 0, -- 轮询次数
poll_start_time DATETIME, -- 轮询开始时间
poll_end_time DATETIME, -- 轮询结束时间
final_status VARCHAR(20), -- 最终状态: completed/failed/timeout
-- 状态和时间
status VARCHAR(20) NOT NULL, -- 调用状态: pending/success/failed/timeout
start_time DATETIME NOT NULL, -- 开始时间
end_time DATETIME, -- 结束时间
duration_ms INT, -- 耗时(毫秒)
-- 使用统计
prompt_tokens INT DEFAULT 0, -- 输入Token数
completion_tokens INT DEFAULT 0, -- 输出Token数
total_tokens INT DEFAULT 0, -- 总Token数
cost DECIMAL(10, 6) DEFAULT 0.000000, -- 费用
-- 功能调用信息
function_calls JSON, -- 函数调用记录
function_results JSON, -- 函数调用结果
-- 错误信息
error_code VARCHAR(50), -- 错误代码
error_message TEXT, -- 错误信息
-- 扩展信息
client_ip VARCHAR(45), -- 客户端IP
user_agent TEXT, -- 用户代理
session_id VARCHAR(100), -- 会话ID
trace_id VARCHAR(100), -- 追踪ID
metadata JSON, -- 扩展元数据
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Coze API调用记录表 - 完整版本';
-- ============================================================================
-- 5. 情绪分析表 (emotion_analysis)
-- ============================================================================
CREATE TABLE emotion_analysis (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
user_id VARCHAR(36) NOT NULL, -- 用户ID
message_id VARCHAR(36), -- 关联消息ID
text TEXT NOT NULL, -- 分析文本
primary_emotion VARCHAR(50), -- 主要情绪
intensity DECIMAL(3, 2), -- 情绪强度
polarity VARCHAR(20), -- 情绪极性: positive-积极, negative-消极, neutral-中性
confidence DECIMAL(3, 2), -- 置信度
emotions JSON, -- 情绪分布详情
keywords JSON, -- 关键词列表
suggestion TEXT, -- 建议
analysis_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 分析时间
metadata JSON, -- 扩展元数据
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '情绪分析表';
-- ============================================================================
-- 6. 情绪记录表 (emotion_record)
-- ============================================================================
CREATE TABLE emotion_record (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
user_id VARCHAR(36) NOT NULL, -- 用户ID
record_date DATE NOT NULL, -- 记录日期
emotion_type VARCHAR(50) NOT NULL, -- 情绪类型
intensity DECIMAL(3, 2) NOT NULL, -- 情绪强度
triggers TEXT, -- 触发因素
description TEXT, -- 描述
tags JSON, -- 标签
weather VARCHAR(50), -- 天气
location VARCHAR(100), -- 地点
activity VARCHAR(100), -- 活动
people VARCHAR(200), -- 相关人物
notes TEXT, -- 备注
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '情绪记录表';
-- ============================================================================
-- 7. 成长课题表 (growth_topic)
-- ============================================================================
CREATE TABLE growth_topic (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
title VARCHAR(100) NOT NULL, -- 课题标题
category VARCHAR(50) NOT NULL, -- 分类
difficulty VARCHAR(20) NOT NULL, -- 难度: easy-简单, medium-中等, hard-困难
description TEXT, -- 描述
content TEXT, -- 内容
duration_days INT, -- 持续天数
unlock_conditions JSON, -- 解锁条件
is_unlocked TINYINT NOT NULL DEFAULT 1, -- 是否解锁
progress DECIMAL(5, 2) NOT NULL DEFAULT 0.00, -- 进度百分比
completed_time DATETIME, -- 完成时间
rewards JSON, -- 奖励
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成长课题表';
-- ============================================================================
-- 8. 课题互动表 (topic_interaction)
-- ============================================================================
CREATE TABLE topic_interaction (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
topic_id VARCHAR(36) NOT NULL, -- 课题ID
type VARCHAR(50) NOT NULL, -- 互动类型
content TEXT, -- 内容
user_input TEXT, -- 用户输入
ai_response TEXT, -- AI回应
rating INT, -- 评分
feedback TEXT, -- 反馈
completed_time DATETIME, -- 完成时间
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '课题互动表';
-- ============================================================================
-- 9. 地点标记表 (location_pin)
-- ============================================================================
CREATE TABLE location_pin (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
name VARCHAR(100) NOT NULL, -- 地点名称
type VARCHAR(50) NOT NULL, -- 地点类型
category VARCHAR(50), -- 地点分类
latitude DECIMAL(10, 8) NOT NULL, -- 纬度
longitude DECIMAL(11, 8) NOT NULL, -- 经度
address VARCHAR(200), -- 地址
description TEXT, -- 描述
created_by VARCHAR(36), -- 创建者
likes INT NOT NULL DEFAULT 0, -- 点赞数
visits INT NOT NULL DEFAULT 0, -- 访问数
is_bookmarked TINYINT NOT NULL DEFAULT 0, -- 是否收藏
last_visit_time DATETIME, -- 最后访问时间
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '地点标记表';
-- ============================================================================
-- 10. 社区帖子表 (community_post)
-- ============================================================================
CREATE TABLE community_post (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
user_id VARCHAR(36) NOT NULL, -- 用户ID
location_id VARCHAR(36), -- 地点ID
title VARCHAR(200), -- 标题
content TEXT NOT NULL, -- 内容
type VARCHAR(50) NOT NULL, -- 帖子类型
images JSON, -- 图片列表
tags JSON, -- 标签
likes INT NOT NULL DEFAULT 0, -- 点赞数
view_count INT NOT NULL DEFAULT 0, -- 浏览数
comment_count INT NOT NULL DEFAULT 0, -- 评论数
is_private TINYINT NOT NULL DEFAULT 0, -- 是否私密
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社区帖子表';
-- ============================================================================
-- 11. 评论表 (comment)
-- ============================================================================
CREATE TABLE comment (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
post_id VARCHAR(36) NOT NULL, -- 帖子ID
user_id VARCHAR(36) NOT NULL, -- 用户ID
content TEXT NOT NULL, -- 评论内容
reply_to_id VARCHAR(36), -- 回复的评论ID
likes INT NOT NULL DEFAULT 0, -- 点赞数
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '评论表';
-- ============================================================================
-- 12. 成就表 (achievement)
-- ============================================================================
CREATE TABLE achievement (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
title VARCHAR(100) NOT NULL, -- 成就标题
description TEXT, -- 描述
category VARCHAR(50) NOT NULL, -- 分类
icon VARCHAR(200), -- 图标
rarity VARCHAR(20) NOT NULL, -- 稀有度
condition_type VARCHAR(50), -- 条件类型
condition_value JSON, -- 条件值
rewards JSON, -- 奖励
unlocked_time DATETIME, -- 解锁时间
progress DECIMAL(5, 2) NOT NULL DEFAULT 0.00, -- 进度
is_hidden TINYINT NOT NULL DEFAULT 0, -- 是否隐藏
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '成就表';
-- ============================================================================
-- 13. 奖励表 (reward)
-- ============================================================================
CREATE TABLE reward (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
topic_id VARCHAR(36), -- 课题ID
achievement_id VARCHAR(36), -- 成就ID
type VARCHAR(50) NOT NULL, -- 奖励类型
name VARCHAR(100) NOT NULL, -- 奖励名称
description TEXT, -- 描述
icon VARCHAR(200), -- 图标
rarity VARCHAR(20), -- 稀有度
value JSON, -- 奖励值
earned_time DATETIME, -- 获得时间
is_new TINYINT NOT NULL DEFAULT 1, -- 是否新获得
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '奖励表';
-- ============================================================================
-- 14. 访客用户表 (guest_user)
-- ============================================================================
CREATE TABLE guest_user (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
guest_user_id VARCHAR(50) NOT NULL UNIQUE, -- 访客用户ID (格式: guest_xxx)
ip_address VARCHAR(45) NOT NULL, -- 客户端IP地址 (支持IPv6)
user_agent TEXT, -- 用户代理信息
nickname VARCHAR(50), -- 访客昵称
avatar VARCHAR(500), -- 访客头像
last_active_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 最后活跃时间
conversation_count INT NOT NULL DEFAULT 0, -- 会话数量
message_count INT NOT NULL DEFAULT 0, -- 消息数量
location VARCHAR(100), -- IP地址的地理位置信息
device_info VARCHAR(200), -- 设备信息
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '访客用户表';
-- ============================================================================
-- 15. 用户统计表 (user_stats)
-- ============================================================================
CREATE TABLE user_stats (
id VARCHAR(36) PRIMARY KEY, -- UUID主键
user_id VARCHAR(36) NOT NULL UNIQUE, -- 用户ID
total_conversations INT NOT NULL DEFAULT 0, -- 总对话数
total_messages INT NOT NULL DEFAULT 0, -- 总消息数
total_emotions_recorded INT NOT NULL DEFAULT 0, -- 总情绪记录数
topics_completed INT NOT NULL DEFAULT 0, -- 完成的课题数
achievements_unlocked INT NOT NULL DEFAULT 0, -- 解锁的成就数
total_points INT NOT NULL DEFAULT 0, -- 总积分
consecutive_days INT NOT NULL DEFAULT 0, -- 连续使用天数
max_consecutive_days INT NOT NULL DEFAULT 0, -- 最大连续天数
locations_visited INT NOT NULL DEFAULT 0, -- 访问的地点数
posts_created INT NOT NULL DEFAULT 0, -- 创建的帖子数
comments_made INT NOT NULL DEFAULT 0, -- 评论数
likes_received INT NOT NULL DEFAULT 0, -- 收到的点赞数
social_interactions INT NOT NULL DEFAULT 0, -- 社交互动数
-- 公共字段
create_by VARCHAR(36), -- 创建人ID
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间
update_by VARCHAR(36), -- 更新人ID
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间
is_deleted TINYINT NOT NULL DEFAULT 0, -- 是否删除: 0-未删除, 1-已删除
remarks VARCHAR(500) -- 备注
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户统计表';
-- ============================================================================
-- 创建索引以提高查询性能
-- 注意: MySQL的CREATE INDEX不支持IF NOT EXISTS
-- 如果索引已存在,重复执行会产生警告但不会中断脚本执行
-- ============================================================================
-- user表索引
CREATE INDEX idx_user_account ON user (account);
CREATE INDEX idx_user_username ON user (username);
CREATE INDEX idx_user_email ON user (email);
CREATE INDEX idx_user_phone ON user (phone);
CREATE INDEX idx_user_last_active_time ON user (last_active_time);
CREATE INDEX idx_user_create_time ON user (create_time);
CREATE INDEX idx_user_member_level ON user (member_level);
CREATE INDEX idx_user_status ON user (status);
CREATE INDEX idx_user_is_verified ON user (is_verified);
CREATE INDEX idx_user_create_by ON user (create_by);
CREATE INDEX idx_user_update_by ON user (update_by);
CREATE INDEX idx_user_is_deleted ON user (is_deleted);
CREATE INDEX idx_user_third_party_id ON user (third_party_id);
CREATE INDEX idx_user_third_party_type ON user (third_party_type);
-- conversation表索引
CREATE INDEX idx_conversation_user_id ON conversation (user_id);
CREATE INDEX idx_conversation_start_time ON conversation (start_time);
CREATE INDEX idx_conversation_user_id_start_time ON conversation (user_id, start_time);
CREATE INDEX idx_conversation_primary_emotion ON conversation (primary_emotion);
CREATE INDEX idx_conversation_end_time ON conversation (end_time);
CREATE INDEX idx_conversation_create_time ON conversation (create_time);
CREATE INDEX idx_conversation_coze_conversation_id ON conversation (coze_conversation_id);
CREATE INDEX idx_conversation_status ON conversation (status);
CREATE INDEX idx_conversation_last_active_time ON conversation (last_active_time);
CREATE INDEX idx_conversation_create_by ON conversation (create_by);
CREATE INDEX idx_conversation_update_by ON conversation (update_by);
CREATE INDEX idx_conversation_is_deleted ON conversation (is_deleted);
CREATE INDEX idx_conversation_user_type ON conversation (user_type);
CREATE INDEX idx_conversation_emotion_trend ON conversation (emotion_trend);
CREATE INDEX idx_conversation_confidence ON conversation (confidence);
CREATE INDEX idx_conversation_client_ip ON conversation (client_ip);
-- message表索引
CREATE INDEX idx_message_conversation_id ON message (conversation_id);
CREATE INDEX idx_message_timestamp ON message (timestamp);
CREATE INDEX idx_message_conversation_id_timestamp ON message (conversation_id, timestamp);
CREATE INDEX idx_message_sender ON message (sender);
CREATE INDEX idx_message_type ON message (type);
CREATE INDEX idx_message_is_read ON message (is_read);
CREATE INDEX idx_message_create_time ON message (create_time);
CREATE INDEX idx_message_coze_chat_id ON message (coze_chat_id);
CREATE INDEX idx_message_status ON message (status);
CREATE INDEX idx_message_parent_message_id ON message (parent_message_id);
CREATE INDEX idx_message_create_by ON message (create_by);
CREATE INDEX idx_message_update_by ON message (update_by);
CREATE INDEX idx_message_is_deleted ON message (is_deleted);
-- coze_api_call表索引
CREATE INDEX idx_coze_api_call_conversation_id ON coze_api_call (conversation_id);
CREATE INDEX idx_coze_api_call_message_id ON coze_api_call (message_id);
CREATE INDEX idx_coze_api_call_coze_chat_id ON coze_api_call (coze_chat_id);
CREATE INDEX idx_coze_api_call_bot_id ON coze_api_call (bot_id);
CREATE INDEX idx_coze_api_call_user_id ON coze_api_call (user_id);
CREATE INDEX idx_coze_api_call_status ON coze_api_call (status);
CREATE INDEX idx_coze_api_call_final_status ON coze_api_call (final_status);
CREATE INDEX idx_coze_api_call_start_time ON coze_api_call (start_time);
CREATE INDEX idx_coze_api_call_request_type ON coze_api_call (request_type);
CREATE INDEX idx_coze_api_call_client_ip ON coze_api_call (client_ip);
CREATE INDEX idx_coze_api_call_session_id ON coze_api_call (session_id);
CREATE INDEX idx_coze_api_call_trace_id ON coze_api_call (trace_id);
CREATE INDEX idx_coze_api_call_user_status ON coze_api_call (user_id, status);
CREATE INDEX idx_coze_api_call_conversation_time ON coze_api_call (conversation_id, start_time);
-- emotion_analysis表索引
CREATE INDEX idx_emotion_analysis_user_id ON emotion_analysis (user_id);
CREATE INDEX idx_emotion_analysis_message_id ON emotion_analysis (message_id);
CREATE INDEX idx_emotion_analysis_primary_emotion ON emotion_analysis (primary_emotion);
CREATE INDEX idx_emotion_analysis_analysis_time ON emotion_analysis (analysis_time);
CREATE INDEX idx_emotion_analysis_create_time ON emotion_analysis (create_time);
CREATE INDEX idx_emotion_analysis_create_by ON emotion_analysis (create_by);
CREATE INDEX idx_emotion_analysis_update_by ON emotion_analysis (update_by);
CREATE INDEX idx_emotion_analysis_is_deleted ON emotion_analysis (is_deleted);
-- emotion_record表索引
CREATE INDEX idx_emotion_record_user_id ON emotion_record (user_id);
CREATE INDEX idx_emotion_record_date ON emotion_record (record_date);
CREATE INDEX idx_emotion_record_emotion_type ON emotion_record (emotion_type);
CREATE INDEX idx_emotion_record_user_id_date ON emotion_record (user_id, record_date);
CREATE INDEX idx_emotion_record_user_id_emotion_type ON emotion_record (user_id, emotion_type);
CREATE INDEX idx_emotion_record_intensity ON emotion_record (intensity);
CREATE INDEX idx_emotion_record_create_time ON emotion_record (create_time);
CREATE INDEX idx_emotion_record_create_by ON emotion_record (create_by);
CREATE INDEX idx_emotion_record_update_by ON emotion_record (update_by);
CREATE INDEX idx_emotion_record_is_deleted ON emotion_record (is_deleted);
-- growth_topic表索引
CREATE INDEX idx_growth_topic_category ON growth_topic (category);
CREATE INDEX idx_growth_topic_difficulty ON growth_topic (difficulty);
CREATE INDEX idx_growth_topic_is_unlocked ON growth_topic (is_unlocked);
CREATE INDEX idx_growth_topic_progress ON growth_topic (progress);
CREATE INDEX idx_growth_topic_completed_time ON growth_topic (completed_time);
CREATE INDEX idx_growth_topic_category_difficulty ON growth_topic (category, difficulty);
CREATE INDEX idx_growth_topic_create_time ON growth_topic (create_time);
-- topic_interaction表索引
CREATE INDEX idx_topic_interaction_topic_id ON topic_interaction (topic_id);
CREATE INDEX idx_topic_interaction_type ON topic_interaction (type);
CREATE INDEX idx_topic_interaction_completed_time ON topic_interaction (completed_time);
CREATE INDEX idx_topic_interaction_rating ON topic_interaction (rating);
CREATE INDEX idx_topic_interaction_topic_id_type ON topic_interaction (topic_id, type);
CREATE INDEX idx_topic_interaction_create_time ON topic_interaction (create_time);
-- location_pin表索引
CREATE INDEX idx_location_pin_latitude_longitude ON location_pin (latitude, longitude);
CREATE INDEX idx_location_pin_type ON location_pin (type);
CREATE INDEX idx_location_pin_category ON location_pin (category);
CREATE INDEX idx_location_pin_created_by ON location_pin (created_by);
CREATE INDEX idx_location_pin_likes ON location_pin (likes);
CREATE INDEX idx_location_pin_visits ON location_pin (visits);
CREATE INDEX idx_location_pin_is_bookmarked ON location_pin (is_bookmarked);
CREATE INDEX idx_location_pin_type_category ON location_pin (type, category);
CREATE INDEX idx_location_pin_create_time ON location_pin (create_time);
CREATE INDEX idx_location_pin_last_visit_time ON location_pin (last_visit_time);
-- community_post表索引
CREATE INDEX idx_community_post_user_id ON community_post (user_id);
CREATE INDEX idx_community_post_location_id ON community_post (location_id);
CREATE INDEX idx_community_post_create_time ON community_post (create_time);
CREATE INDEX idx_community_post_type ON community_post (type);
CREATE INDEX idx_community_post_likes ON community_post (likes);
CREATE INDEX idx_community_post_view_count ON community_post (view_count);
CREATE INDEX idx_community_post_is_private ON community_post (is_private);
CREATE INDEX idx_community_post_user_id_create_time ON community_post (user_id, create_time);
CREATE INDEX idx_community_post_type_create_time ON community_post (type, create_time);
-- comment表索引
CREATE INDEX idx_comment_post_id ON comment (post_id);
CREATE INDEX idx_comment_user_id ON comment (user_id);
CREATE INDEX idx_comment_reply_to_id ON comment (reply_to_id);
CREATE INDEX idx_comment_create_time ON comment (create_time);
CREATE INDEX idx_comment_likes ON comment (likes);
CREATE INDEX idx_comment_post_id_create_time ON comment (post_id, create_time);
-- achievement表索引
CREATE INDEX idx_achievement_category ON achievement (category);
CREATE INDEX idx_achievement_rarity ON achievement (rarity);
CREATE INDEX idx_achievement_unlocked_time ON achievement (unlocked_time);
CREATE INDEX idx_achievement_is_hidden ON achievement (is_hidden);
CREATE INDEX idx_achievement_progress ON achievement (progress);
CREATE INDEX idx_achievement_category_rarity ON achievement (category, rarity);
CREATE INDEX idx_achievement_create_time ON achievement (create_time);
-- reward表索引
CREATE INDEX idx_reward_topic_id ON reward (topic_id);
CREATE INDEX idx_reward_achievement_id ON reward (achievement_id);
CREATE INDEX idx_reward_type ON reward (type);
CREATE INDEX idx_reward_earned_time ON reward (earned_time);
CREATE INDEX idx_reward_rarity ON reward (rarity);
CREATE INDEX idx_reward_is_new ON reward (is_new);
CREATE INDEX idx_reward_type_earned_time ON reward (type, earned_time);
CREATE INDEX idx_reward_create_time ON reward (create_time);
-- user_stats表索引
CREATE INDEX idx_user_stats_user_id ON user_stats (user_id);
CREATE INDEX idx_user_stats_total_points ON user_stats (total_points);
CREATE INDEX idx_user_stats_consecutive_days ON user_stats (consecutive_days);
CREATE INDEX idx_user_stats_max_consecutive_days ON user_stats (max_consecutive_days);
CREATE INDEX idx_user_stats_social_interactions ON user_stats (social_interactions);
CREATE INDEX idx_user_stats_update_time ON user_stats (update_time);
CREATE INDEX idx_user_stats_create_time ON user_stats (create_time);
-- guest_user表索引
CREATE INDEX idx_guest_user_guest_user_id ON guest_user (guest_user_id);
CREATE INDEX idx_guest_user_ip_address ON guest_user (ip_address);
CREATE INDEX idx_guest_user_last_active_time ON guest_user (last_active_time);
CREATE INDEX idx_guest_user_conversation_count ON guest_user (conversation_count);
CREATE INDEX idx_guest_user_message_count ON guest_user (message_count);
CREATE INDEX idx_guest_user_create_time ON guest_user (create_time);
CREATE INDEX idx_guest_user_create_by ON guest_user (create_by);
CREATE INDEX idx_guest_user_update_by ON guest_user (update_by);
CREATE INDEX idx_guest_user_is_deleted ON guest_user (is_deleted);
-- ============================================================================
-- 数据库统计信息
-- ============================================================================
SELECT
COUNT(*) as total_tables
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'emotion_museum';
-- 显示创建的表
SELECT
TABLE_NAME as table_name,
TABLE_COMMENT as comment,
ENGINE as engine
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'emotion_museum'
ORDER BY
TABLE_NAME;
-- 提交事务
COMMIT;