优化调整
This commit is contained in:
@@ -3,6 +3,9 @@ package com.emotion.common;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
@@ -14,6 +17,9 @@ import java.time.LocalDateTime;
|
||||
* @date 2025-07-22
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BaseEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.emotion.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* 多线程异步任务线程池配置
|
||||
*/
|
||||
@Configuration
|
||||
@EnableAsync
|
||||
public class AsyncConfig {
|
||||
|
||||
@Value("${async.core-pool-size:10}")
|
||||
private int corePoolSize;
|
||||
|
||||
@Value("${async.max-pool-size:50}")
|
||||
private int maxPoolSize;
|
||||
|
||||
@Value("${async.queue-capacity:200}")
|
||||
private int queueCapacity;
|
||||
|
||||
@Value("${async.keep-alive-seconds:60}")
|
||||
private int keepAliveSeconds;
|
||||
|
||||
@Value("${async.thread-name-prefix:single-async-}")
|
||||
private String threadNamePrefix;
|
||||
|
||||
@Bean(name = "taskExecutor")
|
||||
public Executor taskExecutor() {
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
executor.setCorePoolSize(corePoolSize);
|
||||
executor.setMaxPoolSize(maxPoolSize);
|
||||
executor.setQueueCapacity(queueCapacity);
|
||||
executor.setKeepAliveSeconds(keepAliveSeconds);
|
||||
executor.setThreadNamePrefix(threadNamePrefix);
|
||||
executor.setRejectedExecutionHandler(new java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy());
|
||||
executor.initialize();
|
||||
return executor;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,8 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -29,16 +30,11 @@ public class EmotionSummaryController {
|
||||
@Operation(summary = "生成用户当天的情绪记录总结", description = "基于用户当天的聊天记录生成情绪分析和记录")
|
||||
@PostMapping("/generate")
|
||||
public Result<Map<String, Object>> generateEmotionSummary() {
|
||||
|
||||
try {
|
||||
// 从上下文中获取当前用户ID
|
||||
String userId = CurrentUserUtil.requireCurrentUserId();
|
||||
|
||||
log.info("收到生成情绪记录总结请求: userId={}", userId);
|
||||
|
||||
// 调用AI服务生成情绪总结
|
||||
Map<String, Object> result = aiChatService.generateEmotionSummary(userId);
|
||||
|
||||
// 调用AI服务异步生成情绪总结(阻塞获取结果)
|
||||
Map<String, Object> result = aiChatService.generateEmotionSummaryAsync(userId).get();
|
||||
if ((Boolean) result.get("success")) {
|
||||
log.info("情绪记录总结生成成功: userId={}", userId);
|
||||
return Result.success("情绪记录总结生成成功", result);
|
||||
@@ -47,7 +43,6 @@ public class EmotionSummaryController {
|
||||
log.warn("情绪记录总结生成失败: userId={}, message={}", userId, message);
|
||||
return Result.error(message);
|
||||
}
|
||||
|
||||
} catch (IllegalStateException e) {
|
||||
log.warn("用户认证失败: {}", e.getMessage());
|
||||
return Result.error(e.getMessage());
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("achievement")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 评论实体类
|
||||
@@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("comment")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 社区帖子实体类
|
||||
@@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("community_post")
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Builder;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("conversation")
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.emotion.entity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.Builder;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("coze_api_call")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("emotion_analysis")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDate;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("emotion_record")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("growth_topic")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("guest_user")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("location_pin")
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Builder;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("message")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("reward")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("topic_interaction")
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Builder;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@@ -20,7 +20,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("user")
|
||||
|
||||
@@ -2,11 +2,11 @@ package com.emotion.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.emotion.common.BaseEntity;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 用户统计实体类
|
||||
@@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName("user_stats")
|
||||
|
||||
@@ -1,76 +1,110 @@
|
||||
package com.emotion.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* AI聊天服务接口
|
||||
*
|
||||
*
|
||||
* @author emotion-museum
|
||||
* @date 2025-07-24
|
||||
*/
|
||||
public interface AiChatService {
|
||||
|
||||
/**
|
||||
* 发送聊天消息
|
||||
* 发送聊天消息(保存用户消息和AI回复)
|
||||
* @param conversationId 会话ID
|
||||
* @param message 用户消息内容
|
||||
* @param userId 用户ID
|
||||
* @return AI回复内容
|
||||
*/
|
||||
String sendChatMessage(String conversationId, String message, String userId);
|
||||
|
||||
/**
|
||||
* 发送聊天消息(仅获取AI回复,不保存用户消息)
|
||||
* 用于WebSocket场景,避免重复保存用户消息
|
||||
* WebSocket方式发送聊天消息(只保存AI回复)
|
||||
* @param conversationId 会话ID
|
||||
* @param message 用户消息内容
|
||||
* @param userId 用户ID
|
||||
* @return AI回复内容
|
||||
*/
|
||||
String sendChatMessageForWebSocket(String conversationId, String message, String userId);
|
||||
|
||||
/**
|
||||
* 生成对话总结
|
||||
* @param conversationId 会话ID
|
||||
* @param userId 用户ID
|
||||
* @return 总结内容
|
||||
*/
|
||||
String generateConversationSummary(String conversationId, String userId);
|
||||
|
||||
/**
|
||||
* 检查服务是否可用
|
||||
* 检查AI服务是否可用
|
||||
* @return 可用返回true,否则false
|
||||
*/
|
||||
boolean isServiceAvailable();
|
||||
|
||||
/**
|
||||
* 获取服务状态
|
||||
* 获取AI服务状态
|
||||
* @return "available" 或 "unavailable"
|
||||
*/
|
||||
String getServiceStatus();
|
||||
|
||||
/**
|
||||
* 发送消息到Coze AI
|
||||
* 发送消息到Coze AI(不保存消息,仅AI交互)
|
||||
* @param conversationId 会话ID
|
||||
* @param userMessage 用户消息内容
|
||||
* @param userId 用户ID
|
||||
* @return AI回复内容
|
||||
*/
|
||||
String sendMessage(String conversationId, String userMessage, String userId);
|
||||
|
||||
/**
|
||||
* 访客聊天(不需要登录)
|
||||
* 访客聊天(不登录情况下)
|
||||
* @param message 用户消息内容
|
||||
* @param clientIp 客户端IP
|
||||
* @return 包含AI回复等信息的Map
|
||||
*/
|
||||
Map<String, Object> guestChat(String message, String clientIp);
|
||||
java.util.Map<String, Object> guestChat(String message, String clientIp);
|
||||
|
||||
/**
|
||||
* 创建对话
|
||||
* 创建新对话
|
||||
* @param userId 用户ID
|
||||
* @param title 对话标题
|
||||
* @return 包含对话信息的Map
|
||||
*/
|
||||
Map<String, Object> createConversation(String userId, String title);
|
||||
java.util.Map<String, Object> createConversation(String userId, String title);
|
||||
|
||||
/**
|
||||
* 获取访客用户信息
|
||||
* @param clientIp 客户端IP
|
||||
* @return 包含访客信息的Map
|
||||
*/
|
||||
Map<String, Object> getGuestUserInfo(String clientIp);
|
||||
java.util.Map<String, Object> getGuestUserInfo(String clientIp);
|
||||
|
||||
/**
|
||||
* 流式聊天
|
||||
* 流式聊天(暂时降级为普通聊天)
|
||||
* @param conversationId 会话ID
|
||||
* @param message 用户消息内容
|
||||
* @param userId 用户ID
|
||||
* @return AI回复内容
|
||||
*/
|
||||
String streamChat(String conversationId, String message, String userId);
|
||||
|
||||
/**
|
||||
* 健康检查
|
||||
* @return 健康返回true,否则false
|
||||
*/
|
||||
boolean healthCheck();
|
||||
|
||||
/**
|
||||
* 生成用户当天的情绪记录总结
|
||||
*
|
||||
* 生成用户情绪记录总结
|
||||
* @param userId 用户ID
|
||||
* @return 情绪记录结果
|
||||
* @return 包含情绪总结等信息的Map
|
||||
*/
|
||||
Map<String, Object> generateEmotionSummary(String userId);
|
||||
java.util.Map<String, Object> generateEmotionSummary(String userId);
|
||||
|
||||
/**
|
||||
* 异步生成用户情绪记录总结
|
||||
* @param userId 用户ID
|
||||
* @return 包含情绪总结等信息的CompletableFuture
|
||||
*/
|
||||
java.util.concurrent.CompletableFuture<java.util.Map<String, Object>> generateEmotionSummaryAsync(String userId);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.math.BigDecimal;
|
||||
@@ -34,6 +36,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* AI聊天服务实现类
|
||||
@@ -1017,12 +1020,12 @@ public class AiChatServiceImpl implements AiChatService {
|
||||
String chatHistory = integrateChatHistory(todayMessages);
|
||||
log.info("聊天记录整合完成,总长度: {}", chatHistory.length());
|
||||
|
||||
// 构建情绪分析提示词
|
||||
String emotionPrompt = buildEmotionAnalysisPrompt(chatHistory);
|
||||
// Coze 中已经在工作流设置了提示词,目前不需要构建情绪分析提示词
|
||||
// String emotionPrompt = buildEmotionAnalysisPrompt(chatHistory);
|
||||
|
||||
// 调用Coze API进行情绪分析总结
|
||||
String conversationId = "emotion_summary_" + userId + "_" + today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
||||
String emotionSummary = sendSummaryMessage(conversationId, emotionPrompt, userId);
|
||||
String emotionSummary = sendSummaryMessage(conversationId, chatHistory, userId);
|
||||
log.info("情绪分析总结生成完成: {}", emotionSummary);
|
||||
|
||||
// 解析AI返回的情绪分析结果
|
||||
@@ -1049,6 +1052,13 @@ public class AiChatServiceImpl implements AiChatService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Async("taskExecutor")
|
||||
public CompletableFuture<Map<String, Object>> generateEmotionSummaryAsync(String userId) {
|
||||
Map<String, Object> result = generateEmotionSummary(userId);
|
||||
return CompletableFuture.completedFuture(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 整合聊天记录
|
||||
*/
|
||||
@@ -1106,7 +1116,7 @@ public class AiChatServiceImpl implements AiChatService {
|
||||
return EmotionAnalysis.builder()
|
||||
.primaryEmotion(json.getString("primaryEmotion"))
|
||||
.intensity(BigDecimal.valueOf(json.getDoubleValue("intensity")))
|
||||
.keywords(json.getString("triggers"))
|
||||
.keywords(JSON.toJSONString(Arrays.asList(json.getString("triggers"))))
|
||||
.suggestion(json.getString("suggestions"))
|
||||
.text(summary)
|
||||
.polarity(determinePolarity(json.getString("primaryEmotion")))
|
||||
@@ -1122,7 +1132,7 @@ public class AiChatServiceImpl implements AiChatService {
|
||||
return EmotionAnalysis.builder()
|
||||
.primaryEmotion("平静")
|
||||
.intensity(BigDecimal.valueOf(0.5))
|
||||
.keywords("日常对话")
|
||||
.keywords(JSON.toJSONString(Arrays.asList("日常对话")))
|
||||
.suggestion("保持当前的积极状态")
|
||||
.text(summary)
|
||||
.polarity("neutral")
|
||||
@@ -1192,7 +1202,7 @@ public class AiChatServiceImpl implements AiChatService {
|
||||
.triggers(analysisResult.getKeywords())
|
||||
.description(analysisResult.getText())
|
||||
.notes("基于当天聊天记录自动生成的情绪分析")
|
||||
.tags("AI分析,聊天记录,情绪总结")
|
||||
.tags(JSON.toJSONString(Arrays.asList("AI分析", "聊天记录", "情绪总结")))
|
||||
.build();
|
||||
|
||||
emotionRecordService.save(record);
|
||||
|
||||
@@ -103,3 +103,10 @@ emotion:
|
||||
- /api/actuator/**
|
||||
- /api/websocket/**
|
||||
- /api/ai/guest/**
|
||||
|
||||
async:
|
||||
core-pool-size: 10
|
||||
max-pool-size: 50
|
||||
queue-capacity: 200
|
||||
keep-alive-seconds: 60
|
||||
thread-name-prefix: single-async-
|
||||
|
||||
@@ -74,7 +74,7 @@ DROP TABLE IF EXISTS user;
|
||||
-- 1. 用户表 (user)
|
||||
-- ============================================================================
|
||||
CREATE TABLE user (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
account VARCHAR(50) UNIQUE COMMENT '账号', -- 账号
|
||||
password VARCHAR(255) COMMENT '密码(加密后)', -- 密码(加密后)
|
||||
username VARCHAR(50) UNIQUE COMMENT '用户名', -- 用户名
|
||||
@@ -101,9 +101,9 @@ CREATE TABLE user (
|
||||
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(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -114,8 +114,8 @@ CREATE TABLE user (
|
||||
-- 关联说明: user_id 关联 user.id,通过代码逻辑维护关联关系
|
||||
-- ============================================================================
|
||||
CREATE TABLE conversation (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
user_id VARCHAR(36) COMMENT '用户ID (关联user.id)', -- 用户ID (关联user.id)
|
||||
id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
user_id VARCHAR(64) COMMENT '用户ID (关联user.id)', -- 用户ID (关联user.id)
|
||||
user_type VARCHAR(20) DEFAULT 'registered' COMMENT '用户类型: registered-注册用户, guest-访客用户', -- 用户类型: registered-注册用户, guest-访客用户
|
||||
title VARCHAR(200) COMMENT '对话标题', -- 对话标题
|
||||
type VARCHAR(50) DEFAULT 'emotion_chat' COMMENT '对话类型', -- 对话类型
|
||||
@@ -143,9 +143,9 @@ CREATE TABLE conversation (
|
||||
tags JSON COMMENT '标签', -- 标签
|
||||
metadata JSON COMMENT '扩展元数据', -- 扩展元数据
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -156,8 +156,8 @@ CREATE TABLE conversation (
|
||||
-- 关联说明: conversation_id 关联 conversation.id,通过代码逻辑维护关联关系
|
||||
-- ============================================================================
|
||||
CREATE TABLE message (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
conversation_id VARCHAR(36) COMMENT '对话ID (关联conversation.id)', -- 对话ID (关联conversation.id)
|
||||
id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
conversation_id VARCHAR(64) COMMENT '对话ID (关联conversation.id)', -- 对话ID (关联conversation.id)
|
||||
content TEXT COMMENT '消息内容', -- 消息内容
|
||||
type VARCHAR(50) DEFAULT 'text' COMMENT '消息类型', -- 消息类型
|
||||
sender VARCHAR(20) COMMENT '发送者: user-用户, assistant-AI助手', -- 发送者: user-用户, assistant-AI助手
|
||||
@@ -174,17 +174,17 @@ CREATE TABLE message (
|
||||
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(36) COMMENT '父消息ID(用于回复链)', -- 父消息ID(用于回复链)
|
||||
parent_message_id VARCHAR(64) COMMENT '父消息ID(用于回复链)', -- 父消息ID(用于回复链)
|
||||
emotion_analysis JSON COMMENT '情绪分析结果', -- 情绪分析结果
|
||||
metadata JSON COMMENT '扩展元数据', -- 扩展元数据
|
||||
user_id VARCHAR(36) COMMENT '用户ID (注册用户或访客用户)', -- 用户ID (注册用户或访客用户)
|
||||
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(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -194,15 +194,15 @@ CREATE TABLE message (
|
||||
-- 4. Coze API调用记录表 (coze_api_call) - 优化版本
|
||||
-- ============================================================================
|
||||
CREATE TABLE coze_api_call (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
conversation_id VARCHAR(36) COMMENT '对话ID', -- 对话ID
|
||||
message_id VARCHAR(36) COMMENT '消息ID', -- 消息ID
|
||||
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(36) COMMENT '用户ID', -- 用户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
|
||||
@@ -246,9 +246,9 @@ CREATE TABLE coze_api_call (
|
||||
trace_id VARCHAR(100) COMMENT '追踪ID', -- 追踪ID
|
||||
metadata JSON COMMENT '扩展元数据', -- 扩展元数据
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -258,9 +258,9 @@ CREATE TABLE coze_api_call (
|
||||
-- 5. 情绪分析表 (emotion_analysis)
|
||||
-- ============================================================================
|
||||
CREATE TABLE emotion_analysis (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
user_id VARCHAR(36) COMMENT '用户ID', -- 用户ID
|
||||
message_id VARCHAR(36) COMMENT '关联消息ID', -- 关联消息ID
|
||||
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 '情绪强度', -- 情绪强度
|
||||
@@ -272,9 +272,9 @@ CREATE TABLE emotion_analysis (
|
||||
analysis_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '分析时间', -- 分析时间
|
||||
metadata JSON COMMENT '扩展元数据', -- 扩展元数据
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -284,8 +284,8 @@ CREATE TABLE emotion_analysis (
|
||||
-- 6. 情绪记录表 (emotion_record)
|
||||
-- ============================================================================
|
||||
CREATE TABLE emotion_record (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
user_id VARCHAR(36) COMMENT '用户ID', -- 用户ID
|
||||
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 '情绪强度', -- 情绪强度
|
||||
@@ -298,9 +298,9 @@ CREATE TABLE emotion_record (
|
||||
people VARCHAR(200) COMMENT '相关人物', -- 相关人物
|
||||
notes TEXT COMMENT '备注', -- 备注
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -310,7 +310,7 @@ CREATE TABLE emotion_record (
|
||||
-- 7. 成长课题表 (growth_topic)
|
||||
-- ============================================================================
|
||||
CREATE TABLE growth_topic (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
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-困难
|
||||
@@ -323,9 +323,9 @@ CREATE TABLE growth_topic (
|
||||
completed_time DATETIME COMMENT '完成时间', -- 完成时间
|
||||
rewards JSON COMMENT '奖励', -- 奖励
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -335,8 +335,8 @@ CREATE TABLE growth_topic (
|
||||
-- 8. 课题互动表 (topic_interaction)
|
||||
-- ============================================================================
|
||||
CREATE TABLE topic_interaction (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
topic_id VARCHAR(36) COMMENT '课题ID', -- 课题ID
|
||||
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 '用户输入', -- 用户输入
|
||||
@@ -345,9 +345,9 @@ CREATE TABLE topic_interaction (
|
||||
feedback TEXT COMMENT '反馈', -- 反馈
|
||||
completed_time DATETIME COMMENT '完成时间', -- 完成时间
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -357,7 +357,7 @@ CREATE TABLE topic_interaction (
|
||||
-- 9. 地点标记表 (location_pin)
|
||||
-- ============================================================================
|
||||
CREATE TABLE location_pin (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
name VARCHAR(100) COMMENT '地点名称', -- 地点名称
|
||||
type VARCHAR(50) COMMENT '地点类型', -- 地点类型
|
||||
category VARCHAR(50) COMMENT '地点分类', -- 地点分类
|
||||
@@ -365,15 +365,15 @@ CREATE TABLE location_pin (
|
||||
longitude DECIMAL(11, 8) COMMENT '经度', -- 经度
|
||||
address VARCHAR(200) COMMENT '地址', -- 地址
|
||||
description TEXT COMMENT '描述', -- 描述
|
||||
created_by VARCHAR(36) COMMENT '创建者', -- 创建者
|
||||
created_by VARCHAR(64) 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(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -383,9 +383,9 @@ CREATE TABLE location_pin (
|
||||
-- 10. 社区帖子表 (community_post)
|
||||
-- ============================================================================
|
||||
CREATE TABLE community_post (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
user_id VARCHAR(36) COMMENT '用户ID', -- 用户ID
|
||||
location_id VARCHAR(36) COMMENT '地点ID', -- 地点ID
|
||||
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 '帖子类型', -- 帖子类型
|
||||
@@ -396,9 +396,9 @@ CREATE TABLE community_post (
|
||||
comment_count INT DEFAULT 0 COMMENT '评论数', -- 评论数
|
||||
is_private TINYINT DEFAULT 0 COMMENT '是否私密', -- 是否私密
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -408,16 +408,16 @@ CREATE TABLE community_post (
|
||||
-- 11. 评论表 (comment)
|
||||
-- ============================================================================
|
||||
CREATE TABLE comment (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
post_id VARCHAR(36) COMMENT '帖子ID', -- 帖子ID
|
||||
user_id VARCHAR(36) COMMENT '用户ID', -- 用户ID
|
||||
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(36) COMMENT '回复的评论ID', -- 回复的评论ID
|
||||
reply_to_id VARCHAR(64) COMMENT '回复的评论ID', -- 回复的评论ID
|
||||
likes INT DEFAULT 0 COMMENT '点赞数', -- 点赞数
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -427,7 +427,7 @@ CREATE TABLE comment (
|
||||
-- 12. 成就表 (achievement)
|
||||
-- ============================================================================
|
||||
CREATE TABLE achievement (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
title VARCHAR(100) COMMENT '成就标题', -- 成就标题
|
||||
description TEXT COMMENT '描述', -- 描述
|
||||
category VARCHAR(50) COMMENT '分类', -- 分类
|
||||
@@ -440,9 +440,9 @@ CREATE TABLE achievement (
|
||||
progress DECIMAL(5, 2) DEFAULT 0.00 COMMENT '进度', -- 进度
|
||||
is_hidden TINYINT DEFAULT 0 COMMENT '是否隐藏', -- 是否隐藏
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -452,9 +452,9 @@ CREATE TABLE achievement (
|
||||
-- 13. 奖励表 (reward)
|
||||
-- ============================================================================
|
||||
CREATE TABLE reward (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
topic_id VARCHAR(36) COMMENT '课题ID', -- 课题ID
|
||||
achievement_id VARCHAR(36) COMMENT '成就ID', -- 成就ID
|
||||
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 '描述', -- 描述
|
||||
@@ -464,9 +464,9 @@ CREATE TABLE reward (
|
||||
earned_time DATETIME COMMENT '获得时间', -- 获得时间
|
||||
is_new TINYINT DEFAULT 1 COMMENT '是否新获得', -- 是否新获得
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -476,7 +476,7 @@ CREATE TABLE reward (
|
||||
-- 14. 访客用户表 (guest_user)
|
||||
-- ============================================================================
|
||||
CREATE TABLE guest_user (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
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 '用户代理信息', -- 用户代理信息
|
||||
@@ -488,9 +488,9 @@ CREATE TABLE guest_user (
|
||||
location VARCHAR(100) COMMENT 'IP地址的地理位置信息', -- IP地址的地理位置信息
|
||||
device_info VARCHAR(200) COMMENT '设备信息', -- 设备信息
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
@@ -500,8 +500,8 @@ CREATE TABLE guest_user (
|
||||
-- 15. 用户统计表 (user_stats)
|
||||
-- ============================================================================
|
||||
CREATE TABLE user_stats (
|
||||
id VARCHAR(36) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
|
||||
user_id VARCHAR(36) UNIQUE COMMENT '用户ID', -- 用户ID
|
||||
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 '总情绪记录数', -- 总情绪记录数
|
||||
@@ -516,9 +516,9 @@ CREATE TABLE user_stats (
|
||||
likes_received INT DEFAULT 0 COMMENT '收到的点赞数', -- 收到的点赞数
|
||||
social_interactions INT DEFAULT 0 COMMENT '社交互动数', -- 社交互动数
|
||||
-- 公共字段
|
||||
create_by VARCHAR(36) COMMENT '创建人ID', -- 创建人ID
|
||||
create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
|
||||
update_by VARCHAR(36) COMMENT '更新人ID', -- 更新人ID
|
||||
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 '备注' -- 备注
|
||||
|
||||
Reference in New Issue
Block a user