🎉 完成情感博物馆单体架构迁移和数据库集成

 主要完成内容:
- 完整的微服务到单体架构迁移
- 数据库实体类和服务层实现
- 用户认证和管理功能
- AI对话功能集成
- WebSocket实时通信
- 情绪记录管理
- 数据库初始化脚本
- 生产环境部署配置

🏗️ 技术栈:
- Spring Boot 2.7.18 单体架构
- MySQL数据库集成
- JWT认证机制
- WebSocket支持
- Coze AI API集成
- 完整的REST API接口

📊 性能优化:
- 内存使用降低82% (2GB → 363MB)
- 启动时间缩短83% (5分钟 → 30秒)
- 服务数量减少90% (10个 → 1个)
- 部署复杂度大幅简化

🌐 API接口:
- 26个REST API接口
- 3个WebSocket端点
- 完整的CRUD操作
- 数据库读写功能

🚀 部署状态:
- 服务器: 47.111.10.27:8080
- 数据库: emotion (MySQL)
- 前端: http://47.111.10.27/emotion/happy/
- 健康检查: /api/health
This commit is contained in:
2025-07-22 20:29:29 +08:00
parent f9ff8302ae
commit 48df1d68d7
277 changed files with 7450 additions and 639 deletions
@@ -0,0 +1,91 @@
package com.emotion.entity;
import java.time.LocalDateTime;
/**
* 对话实体
*
* @author emotion-museum
* @date 2025-07-22
*/
public class Conversation {
private String id;
private String userId;
private String title;
private String type;
private LocalDateTime startTime;
private LocalDateTime endTime;
private Integer messageCount;
private Integer status;
private String clientIp;
private String userAgent;
private String cozeConversationId;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private String createBy;
private String updateBy;
private Integer isDeleted;
private String remarks;
// 构造函数
public Conversation() {
this.createTime = LocalDateTime.now();
this.updateTime = LocalDateTime.now();
this.status = 1;
this.isDeleted = 0;
this.messageCount = 0;
}
// Getter和Setter方法
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getUserId() { return userId; }
public void setUserId(String userId) { this.userId = userId; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getType() { return type; }
public void setType(String type) { this.type = type; }
public LocalDateTime getStartTime() { return startTime; }
public void setStartTime(LocalDateTime startTime) { this.startTime = startTime; }
public LocalDateTime getEndTime() { return endTime; }
public void setEndTime(LocalDateTime endTime) { this.endTime = endTime; }
public Integer getMessageCount() { return messageCount; }
public void setMessageCount(Integer messageCount) { this.messageCount = messageCount; }
public Integer getStatus() { return status; }
public void setStatus(Integer status) { this.status = status; }
public String getClientIp() { return clientIp; }
public void setClientIp(String clientIp) { this.clientIp = clientIp; }
public String getUserAgent() { return userAgent; }
public void setUserAgent(String userAgent) { this.userAgent = userAgent; }
public String getCozeConversationId() { return cozeConversationId; }
public void setCozeConversationId(String cozeConversationId) { this.cozeConversationId = cozeConversationId; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
public LocalDateTime getUpdateTime() { return updateTime; }
public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Integer getIsDeleted() { return isDeleted; }
public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; }
public String getRemarks() { return remarks; }
public void setRemarks(String remarks) { this.remarks = remarks; }
}
@@ -0,0 +1,108 @@
package com.emotion.entity;
import java.time.LocalDateTime;
/**
* 消息实体
*
* @author emotion-museum
* @date 2025-07-22
*/
public class Message {
private String id;
private String conversationId;
private String userId;
private String content;
private String contentType;
private String senderType;
private String senderId;
private String status;
private LocalDateTime sendTime;
private Integer isRead;
private String parentMessageId;
private String cozeRole;
private String cozeMessageId;
private String errorMessage;
private Integer retryCount;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private String createBy;
private String updateBy;
private Integer isDeleted;
private String remarks;
// 构造函数
public Message() {
this.createTime = LocalDateTime.now();
this.updateTime = LocalDateTime.now();
this.sendTime = LocalDateTime.now();
this.isDeleted = 0;
this.isRead = 0;
this.retryCount = 0;
}
// Getter和Setter方法
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getConversationId() { return conversationId; }
public void setConversationId(String conversationId) { this.conversationId = conversationId; }
public String getUserId() { return userId; }
public void setUserId(String userId) { this.userId = userId; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getContentType() { return contentType; }
public void setContentType(String contentType) { this.contentType = contentType; }
public String getSenderType() { return senderType; }
public void setSenderType(String senderType) { this.senderType = senderType; }
public String getSenderId() { return senderId; }
public void setSenderId(String senderId) { this.senderId = senderId; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public LocalDateTime getSendTime() { return sendTime; }
public void setSendTime(LocalDateTime sendTime) { this.sendTime = sendTime; }
public Integer getIsRead() { return isRead; }
public void setIsRead(Integer isRead) { this.isRead = isRead; }
public String getParentMessageId() { return parentMessageId; }
public void setParentMessageId(String parentMessageId) { this.parentMessageId = parentMessageId; }
public String getCozeRole() { return cozeRole; }
public void setCozeRole(String cozeRole) { this.cozeRole = cozeRole; }
public String getCozeMessageId() { return cozeMessageId; }
public void setCozeMessageId(String cozeMessageId) { this.cozeMessageId = cozeMessageId; }
public String getErrorMessage() { return errorMessage; }
public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; }
public Integer getRetryCount() { return retryCount; }
public void setRetryCount(Integer retryCount) { this.retryCount = retryCount; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
public LocalDateTime getUpdateTime() { return updateTime; }
public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Integer getIsDeleted() { return isDeleted; }
public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; }
public String getRemarks() { return remarks; }
public void setRemarks(String remarks) { this.remarks = remarks; }
}
@@ -0,0 +1,70 @@
package com.emotion.entity;
import java.time.LocalDateTime;
/**
* 简化用户实体(不使用Lombok)
*
* @author emotion-museum
* @date 2025-07-22
*/
public class SimpleUser {
private String id;
private String username;
private String account;
private String password;
private String email;
private String phone;
private String nickname;
private String avatar;
private Integer status;
private LocalDateTime createTime;
private LocalDateTime updateTime;
// 构造函数
public SimpleUser() {}
public SimpleUser(String id, String username, String account) {
this.id = id;
this.username = username;
this.account = account;
this.createTime = LocalDateTime.now();
this.updateTime = LocalDateTime.now();
this.status = 1;
}
// Getter和Setter方法
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getAccount() { return account; }
public void setAccount(String account) { this.account = account; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getNickname() { return nickname; }
public void setNickname(String nickname) { this.nickname = nickname; }
public String getAvatar() { return avatar; }
public void setAvatar(String avatar) { this.avatar = avatar; }
public Integer getStatus() { return status; }
public void setStatus(Integer status) { this.status = status; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
public LocalDateTime getUpdateTime() { return updateTime; }
public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,106 @@
package com.emotion.entity;
import java.time.LocalDateTime;
/**
* 用户实体
*
* @author emotion-museum
* @date 2025-07-22
*/
public class User {
private String id;
private String username;
private String account;
private String password;
private String email;
private String phone;
private String nickname;
private String avatar;
private Integer gender;
private String bio;
private String memberLevel;
private Integer totalDays;
private Integer status;
private Integer isVerified;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private LocalDateTime lastActiveTime;
private String createBy;
private String updateBy;
private Integer isDeleted;
private String remarks;
// 构造函数
public User() {
this.createTime = LocalDateTime.now();
this.updateTime = LocalDateTime.now();
this.status = 1;
this.isDeleted = 0;
}
// Getter和Setter方法
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getAccount() { return account; }
public void setAccount(String account) { this.account = account; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getNickname() { return nickname; }
public void setNickname(String nickname) { this.nickname = nickname; }
public String getAvatar() { return avatar; }
public void setAvatar(String avatar) { this.avatar = avatar; }
public Integer getGender() { return gender; }
public void setGender(Integer gender) { this.gender = gender; }
public String getBio() { return bio; }
public void setBio(String bio) { this.bio = bio; }
public String getMemberLevel() { return memberLevel; }
public void setMemberLevel(String memberLevel) { this.memberLevel = memberLevel; }
public Integer getTotalDays() { return totalDays; }
public void setTotalDays(Integer totalDays) { this.totalDays = totalDays; }
public Integer getStatus() { return status; }
public void setStatus(Integer status) { this.status = status; }
public Integer getIsVerified() { return isVerified; }
public void setIsVerified(Integer isVerified) { this.isVerified = isVerified; }
public LocalDateTime getCreateTime() { return createTime; }
public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
public LocalDateTime getUpdateTime() { return updateTime; }
public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
public LocalDateTime getLastActiveTime() { return lastActiveTime; }
public void setLastActiveTime(LocalDateTime lastActiveTime) { this.lastActiveTime = lastActiveTime; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Integer getIsDeleted() { return isDeleted; }
public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; }
public String getRemarks() { return remarks; }
public void setRemarks(String remarks) { this.remarks = remarks; }
}