- 添加 target/ 到 .gitignore - 从 git 暂存区移除已追踪的 target 目录 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
324 lines
7.5 KiB
Markdown
324 lines
7.5 KiB
Markdown
# 项目技术栈补充实施报告
|
||
|
||
**实施日期**: 2026-03-13
|
||
**实施人**: reading-platform
|
||
**状态**: ✅ 已完成
|
||
|
||
---
|
||
|
||
## 实施概述
|
||
|
||
根据 `F:/统一开发规范.md` 中的后端技术栈要求,对项目进行了全面补充,新增了 6 个核心组件,提升了项目的规范化和开发效率。
|
||
|
||
---
|
||
|
||
## 实施内容
|
||
|
||
### 1. BaseEntity 实体基类 ✅
|
||
|
||
**文件路径**: `reading-platform-java/src/main/java/com/reading/platform/entity/BaseEntity.java`
|
||
|
||
**实现内容**:
|
||
- 包含公共字段:id, createdAt, updatedAt, deleted
|
||
- 使用 MyBatis-Plus 的 `@TableId`, `@TableField`, `@TableLogic` 注解
|
||
- 使用 Lombok 简化代码
|
||
|
||
**使用示例**:
|
||
```java
|
||
@Data
|
||
@TableName("tenants")
|
||
public class Tenant extends BaseEntity {
|
||
private String name;
|
||
private String code;
|
||
// ... 其他业务字段
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 2. RedisUtils 工具类 ✅
|
||
|
||
**文件路径**: `reading-platform-java/src/main/java/com/reading/platform/common/util/RedisUtils.java`
|
||
|
||
**实现内容**:
|
||
- 封装常用的 Redis 操作(String、Hash、List、Set、ZSet)
|
||
- 支持过期时间设置
|
||
- 使用 RedisTemplate 进行操作
|
||
|
||
**主要方法**:
|
||
| 方法 | 说明 |
|
||
|------|------|
|
||
| `set/get` | String 操作 |
|
||
| `hashSet/hashGet` | Hash 操作 |
|
||
| `listLeftPush/listRightPush` | List 操作 |
|
||
| `setAdd/setMembers` | Set 操作 |
|
||
| `zSetAdd/zSetRange` | ZSet 操作 |
|
||
| `expire/delete/exists` | 通用操作 |
|
||
|
||
**使用示例**:
|
||
```java
|
||
@Autowired
|
||
private RedisUtils redisUtils;
|
||
|
||
// 存储
|
||
redisUtils.set("user:1", user, 1, TimeUnit.HOURS);
|
||
|
||
// 获取
|
||
User user = redisUtils.get("user:1", User.class);
|
||
|
||
// Hash 操作
|
||
redisUtils.hashSet("config", "key", "value");
|
||
```
|
||
|
||
---
|
||
|
||
### 3. @Log 注解 ✅
|
||
|
||
**文件路径**: `reading-platform-java/src/main/java/com/reading/platform/common/annotation/Log.java`
|
||
|
||
**实现内容**:
|
||
- 定义操作日志注解
|
||
- 包含模块、操作类型、描述等属性
|
||
- 支持是否记录请求参数配置
|
||
|
||
**属性说明**:
|
||
| 属性 | 类型 | 说明 | 默认值 |
|
||
|------|------|------|--------|
|
||
| module | String | 操作模块 | "" |
|
||
| type | String | 操作类型 | "" |
|
||
| description | String | 操作描述 | "" |
|
||
| recordParams | boolean | 是否记录参数 | true |
|
||
|
||
**使用示例**:
|
||
```java
|
||
@Log(module = "用户管理", type = "新增", description = "创建新用户")
|
||
@PostMapping
|
||
public Result<User> create(@RequestBody UserDto dto) {
|
||
// ...
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 4. LogAspect 日志切面 ✅
|
||
|
||
**文件路径**: `reading-platform-java/src/main/java/com/reading/platform/common/aspect/LogAspect.java`
|
||
|
||
**实现内容**:
|
||
- 拦截 @Log 注解
|
||
- 记录操作日志到数据库
|
||
- 包含请求参数、操作人、操作时间等信息
|
||
- 支持异常日志记录
|
||
|
||
**配套组件**:
|
||
- `OperationLogService` - 操作日志服务
|
||
- `OperationLogServiceImpl` - 服务实现类
|
||
|
||
**日志记录内容**:
|
||
- 操作模块
|
||
- 操作描述
|
||
- 操作人 ID 和角色
|
||
- 请求 IP 地址
|
||
- User-Agent
|
||
- 请求参数
|
||
- 异常信息(如有)
|
||
|
||
---
|
||
|
||
### 5. OssConfig + OssUtils 阿里云 OSS 工具类 ✅
|
||
|
||
**文件路径**:
|
||
- `reading-platform-java/src/main/java/com/reading/platform/common/config/OssConfig.java`
|
||
- `reading-platform-java/src/main/java/com/reading/platform/common/util/OssUtils.java`
|
||
|
||
**实现内容**:
|
||
- OssConfig: OSS 配置类,包含 bucket、endpoint、accessKey 等
|
||
- OssUtils: 文件上传、下载、删除等工具方法
|
||
- 支持文件类型校验和大小限制
|
||
- 支持自定义存储路径
|
||
|
||
**配置示例** (`application.yml`):
|
||
```yaml
|
||
aliyun:
|
||
oss:
|
||
endpoint: oss-cn-hangzhou.aliyuncs.com
|
||
access-key-id: ${OSS_ACCESS_KEY_ID}
|
||
access-key-secret: ${OSS_ACCESS_KEY_SECRET}
|
||
bucket-name: reading-platform
|
||
max-file-size: 10485760 # 10MB
|
||
```
|
||
|
||
**使用示例**:
|
||
```java
|
||
@Autowired
|
||
private OssUtils ossUtils;
|
||
|
||
// 上传文件
|
||
String fileUrl = ossUtils.uploadFile(file);
|
||
|
||
// 上传文件(自定义路径)
|
||
String avatarUrl = ossUtils.uploadFile(file, "avatar/");
|
||
|
||
// 删除文件
|
||
ossUtils.deleteFile(fileUrl);
|
||
|
||
// 批量删除
|
||
List<String> failed = ossUtils.deleteFiles(fileUrls);
|
||
```
|
||
|
||
**pom.xml 新增依赖**:
|
||
```xml
|
||
<dependency>
|
||
<groupId>com.aliyun.oss</groupId>
|
||
<artifactId>aliyun-sdk-oss</artifactId>
|
||
<version>3.17.1</version>
|
||
</dependency>
|
||
```
|
||
|
||
---
|
||
|
||
### 6. JsonUtils 工具类 ✅
|
||
|
||
**文件路径**: `reading-platform-java/src/main/java/com/reading/platform/common/util/JsonUtils.java`
|
||
|
||
**实现内容**:
|
||
- 封装 FastJSON 的序列化和反序列化方法
|
||
- 提供便捷的 JSON 转换工具
|
||
- 支持泛型转换
|
||
|
||
**主要方法**:
|
||
| 方法 | 说明 |
|
||
|------|------|
|
||
| `toJson()` | 对象转 JSON 字符串 |
|
||
| `toPrettyJson()` | 对象转格式化 JSON 字符串 |
|
||
| `fromJson()` | JSON 转对象 |
|
||
| `parseList()` | JSON 转 List |
|
||
| `toMap()` | 对象转 Map |
|
||
| `fromMap()` | Map 转对象 |
|
||
|
||
**使用示例**:
|
||
```java
|
||
// 对象转 JSON
|
||
String json = JsonUtils.toJson(user);
|
||
|
||
// JSON 转对象
|
||
User user = JsonUtils.fromJson(json, User.class);
|
||
|
||
// JSON 转 List
|
||
List<User> users = JsonUtils.parseList(json, User.class);
|
||
|
||
// 格式化 JSON
|
||
String prettyJson = JsonUtils.toPrettyJson(user);
|
||
```
|
||
|
||
---
|
||
|
||
## 新增文件列表
|
||
|
||
| 文件 | 说明 | 类型 |
|
||
|------|------|------|
|
||
| `BaseEntity.java` | 实体基类 | Entity |
|
||
| `RedisUtils.java` | Redis 工具类 | Util |
|
||
| `Log.java` | 日志注解 | Annotation |
|
||
| `LogAspect.java` | 日志切面 | Aspect |
|
||
| `OssConfig.java` | OSS 配置类 | Config |
|
||
| `OssUtils.java` | OSS 工具类 | Util |
|
||
| `JsonUtils.java` | JSON 工具类 | Util |
|
||
| `OperationLogService.java` | 操作日志服务 | Service |
|
||
| `OperationLogServiceImpl.java` | 操作日志服务实现 | Service |
|
||
|
||
---
|
||
|
||
## 修改文件列表
|
||
|
||
| 文件 | 修改内容 |
|
||
|------|----------|
|
||
| `pom.xml` | 添加阿里云 OSS SDK 依赖 |
|
||
|
||
---
|
||
|
||
## 验证结果
|
||
|
||
### 编译验证
|
||
```bash
|
||
$ export JAVA_HOME="/f/Java/jdk-17"
|
||
$ cd reading-platform-java
|
||
$ mvn clean compile -DskipTests
|
||
|
||
[INFO] BUILD SUCCESS
|
||
[INFO] Total time: 7.178 s
|
||
```
|
||
|
||
✅ 编译通过,无错误。
|
||
|
||
---
|
||
|
||
## 使用说明
|
||
|
||
### 1. 实体类继承 BaseEntity
|
||
|
||
建议将现有实体类逐步改为继承 `BaseEntity`,例如:
|
||
|
||
```java
|
||
@Data
|
||
@TableName("tenants")
|
||
public class Tenant extends BaseEntity {
|
||
private String name;
|
||
private String code;
|
||
// 删除重复的 id, createdAt, updatedAt, deleted 字段
|
||
}
|
||
```
|
||
|
||
### 2. 配置 OSS
|
||
|
||
在 `application-dev.yml` 中添加:
|
||
```yaml
|
||
aliyun:
|
||
oss:
|
||
endpoint: oss-cn-hangzhou.aliyuncs.com
|
||
access-key-id: your-access-key-id
|
||
access-key-secret: your-access-key-secret
|
||
bucket-name: your-bucket-name
|
||
```
|
||
|
||
### 3. 使用日志注解
|
||
|
||
在 Controller 方法上添加 `@Log` 注解:
|
||
```java
|
||
@Log(module = "学校管理", type = "新增", description = "创建新学校")
|
||
@PostMapping
|
||
public Result<School> createSchool(@RequestBody SchoolDto dto) {
|
||
// ...
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 后续建议
|
||
|
||
### 高优先级
|
||
|
||
1. **实体类迁移**: 将现有实体类逐步改为继承 `BaseEntity`
|
||
2. **OSS 配置**: 在开发环境配置 OSS 进行测试
|
||
3. **日志测试**: 在 Controller 中添加 @Log 注解测试日志记录
|
||
|
||
### 中优先级
|
||
|
||
1. **日志查询接口**: 添加操作日志查询 API
|
||
2. **日志管理页面**: 前端添加日志管理界面
|
||
3. **Redis 缓存**: 使用 RedisUtils 优化热点数据查询
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
本次实施共新增 9 个文件,修改 1 个文件,完成了所有高优先级和中优先级的组件补充。项目现在具备:
|
||
|
||
- ✅ 统一的实体基类
|
||
- ✅ 完整的 Redis 操作封装
|
||
- ✅ 操作日志记录功能
|
||
- ✅ 阿里云 OSS 文件存储支持
|
||
- ✅ 便捷的 JSON 转换工具
|
||
|
||
所有代码已通过编译验证,可以立即使用。
|