feat: 项目初始化及当前全部内容提交

This commit is contained in:
2025-07-15 17:37:50 +08:00
parent ec817067f1
commit e78f192d34
622 changed files with 75174 additions and 383 deletions
@@ -0,0 +1,168 @@
# 情绪博物馆数据库雪花算法主键实施总结
## 📋 任务完成情况
### ✅ 已完成任务
1. **收集和分析数据库相关文件**
- 扫描了项目中所有的数据库变更语句、实体类和相关配置文件
- 分析了当前数据库结构和实体类继承关系
2. **生成终版数据库初始化脚本**
- 更新了 `backend/mysql_emotion_museum_final.sql` 为 v3.0 版本
- 所有主键使用 VARCHAR(36) 类型,支持雪花算法生成的字符串ID
- 添加了缺失的 `guest_user`
- 完善了所有表的索引配置
3. **实现雪花算法工具类**
- 创建了 `SnowflakeIdGenerator` 类,支持高性能ID生成
- 创建了 `SnowflakeConfig` 配置类,支持自动机器ID分配
- 实现了完整的测试用例,验证了并发安全性和唯一性
4. **更新EmotionMetaObjectHandler**
- 增加了主键自动填充逻辑
- 当ID为空时自动使用雪花算法生成ID
- 保持了异常安全性,不影响业务逻辑
5. **更新BaseEntity和所有实体类**
- 更新了 `BaseEntity` 使用 `IdType.INPUT` 配置
- 修复了 `GuestUser` 实体类,使其继承 `BaseEntity`
- 为所有模块创建了完整的实体类
6. **验证和测试**
- 项目编译成功,无语法错误
- 雪花算法测试全部通过
- 验证了ID生成的唯一性和并发安全性
## 🏗️ 架构改进
### 主键策略
- **类型**: VARCHAR(36) → 避免前端JavaScript精度丢失
- **生成**: 雪花算法 → 保证全局唯一性和高性能
- **配置**: 自动机器ID分配 → 支持分布式部署
### 关联策略
- **无外键约束**: 不使用数据库外键,避免复杂的约束管理
- **代码关联**: 通过业务代码中的ID字段维护表间关联关系
- **性能优化**: 减少数据库约束检查,提高插入和更新性能
- **灵活性**: 便于数据迁移和表结构调整
### 数据库表结构
- **15个核心表**: 覆盖用户、对话、情绪、成长、探索、奖励、统计等功能
- **统一字段**: 所有表继承公共字段(id, create_by, create_time, update_by, update_time, is_deleted, remarks
- **完整索引**: 针对查询场景优化的索引配置
### 实体类设计
- **继承体系**: 所有实体类继承 `BaseEntity`
- **字段映射**: 使用 `@TableField` 注解明确字段映射
- **类型处理**: JSON字段使用 `JacksonTypeHandler`
## 📁 文件清单
### 新增文件
```
backend/emotion-common/src/main/java/com/emotionmuseum/common/util/SnowflakeIdGenerator.java
backend/emotion-common/src/main/java/com/emotionmuseum/common/config/SnowflakeConfig.java
backend/emotion-common/src/test/java/com/emotionmuseum/common/util/SnowflakeIdGeneratorTest.java
backend/emotion-record/src/main/java/com/emotionmuseum/record/entity/EmotionRecord.java
backend/emotion-growth/src/main/java/com/emotionmuseum/growth/entity/GrowthTopic.java
backend/emotion-growth/src/main/java/com/emotionmuseum/growth/entity/TopicInteraction.java
backend/emotion-explore/src/main/java/com/emotionmuseum/explore/entity/LocationPin.java
backend/emotion-explore/src/main/java/com/emotionmuseum/explore/entity/CommunityPost.java
backend/emotion-explore/src/main/java/com/emotionmuseum/explore/entity/Comment.java
backend/emotion-reward/src/main/java/com/emotionmuseum/reward/entity/Achievement.java
backend/emotion-reward/src/main/java/com/emotionmuseum/reward/entity/Reward.java
backend/emotion-stats/src/main/java/com/emotionmuseum/stats/entity/UserStats.java
```
### 修改文件
```
backend/mysql_emotion_museum_final.sql (v2.1 → v3.0)
backend/emotion-common/src/main/java/com/emotionmuseum/common/entity/BaseEntity.java
backend/emotion-common/src/main/java/com/emotionmuseum/common/handler/EmotionMetaObjectHandler.java
backend/emotion-ai/src/main/java/com/emotionmuseum/ai/entity/GuestUser.java
```
## 🔧 技术特性
### 雪花算法特性
- **高性能**: 单机每毫秒可生成4096个ID
- **全局唯一**: 64位长整型,转换为字符串避免精度丢失
- **时间有序**: ID包含时间戳信息,天然有序
- **分布式友好**: 支持1024个机器节点
### 自动填充特性
- **主键自动生成**: ID为空时自动生成雪花算法ID
- **时间自动填充**: 自动填充创建时间和更新时间
- **用户信息填充**: 支持创建人和更新人信息
- **逻辑删除**: 自动设置删除标记默认值
### 配置灵活性
- **机器ID配置**: 支持配置文件指定或自动分配
- **异常安全**: 自动填充失败不影响业务逻辑
- **扩展性**: 支持批量ID生成和解析功能
## 🚀 使用方式
### 1. 数据库初始化
```bash
mysql -u root -p < backend/mysql_emotion_museum_final.sql
```
### 2. 配置机器ID(可选)
```yaml
# application.yml
snowflake:
machine-id: 1 # 可选,不配置则自动分配
```
### 3. 实体类使用
```java
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("your_table")
public class YourEntity extends BaseEntity {
// 业务字段
@TableField("your_field")
private String yourField;
}
```
### 4. 手动生成ID
```java
@Autowired
private SnowflakeIdGenerator snowflakeIdGenerator;
public void generateId() {
String id = snowflakeIdGenerator.nextIdAsString();
// 使用生成的ID
}
```
## ✅ 验证结果
- ✅ 项目编译成功
- ✅ 雪花算法测试通过(唯一性、并发安全性)
- ✅ 数据库脚本语法正确
- ✅ 实体类继承关系正确
- ✅ 自动填充逻辑完整
## 📝 注意事项
1. **时钟回退**: 雪花算法依赖系统时钟,需要确保服务器时钟同步
2. **机器ID**: 分布式部署时需要确保不同节点使用不同的机器ID
3. **ID长度**: 生成的ID为19位数字字符串,前端需要使用字符串类型处理
4. **数据库兼容**: 脚本针对MySQL 8.0+优化,其他版本可能需要调整
## 🎯 后续建议
1. **监控**: 建议添加ID生成性能监控
2. **配置中心**: 考虑使用配置中心管理机器ID
3. **测试**: 建议在生产环境前进行压力测试
4. **文档**: 为开发团队提供使用指南
---
**实施完成时间**: 2025-07-13
**版本**: v3.0 Final (雪花算法主键版本)
**状态**: ✅ 全部完成