datai/docs/archive/changelog/2026-01-25-002-06-changelog.md

248 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变更日志:日期格式化功能
## 元数据
- 变更编号2026-01-25-002-06-changelog
- 需求编号2026-01-21-002-06
- 功能名称:日期格式化功能
- 版本3.8.5
- 发布日期2026-01-25
- 变更类型:新功能
- 状态:已完成
- 阶段:阶段 8变更日志
## 变更概述
本次更新新增了日期格式化功能,支持根据用户地区显示日期,支持常用日期格式、日期时间格式化、短日期和长日期格式化。后端使用 Java 的 DateTimeFormatter 进行日期格式化,结合时区转换功能,支持多语言日期显示。
## 新增功能
### 1. 日期格式化功能
- **功能描述**支持常用日期格式ISO_8601、US、EU、CN、JP、KR 等)
- **影响范围**datai-common、datai-framework
- **相关文件**
- [DateConstants.java](file:///d:/idea_demo/datai/datai-common/src/main/java/com/datai/common/constant/DateConstants.java) - 日期格式常量类
- [@DateFormat.java](file:///d:/idea_demo/datai/datai-common/src/main/java/com/datai/common/annotation/DateFormat.java) - 日期格式化注解
- [DateFormatUtils.java](file:///d:/idea_demo/datai/datai-common/src/main/java/com/datai/common/utils/DateFormatUtils.java) - 日期格式化工具类
- [DateFormatAspect.java](file:///d:/idea_demo/datai/datai-framework/src/main/java/com/datai/framework/aspectj/DateFormatAspect.java) - 日期格式化 AOP 切面
### 2. 用户日期格式偏好管理
- **功能描述**:支持用户设置和切换日期格式偏好
- **影响范围**datai-common、datai-system、datai-admin
- **相关文件**
- [SysUser.java](file:///d:/idea_demo/datai/datai-common/src/main/java/com/datai/common/core/domain/entity/SysUser.java) - 添加日期格式偏好字段
- [ISysUserService.java](file:///d:/idea_demo/datai/datai-system/src/main/java/com/datai/system/service/ISysUserService.java) - 添加日期格式偏好管理方法
- [SysUserServiceImpl.java](file:///d:/idea_demo/datai/datai-system/src/main/java/com/datai/system/service/impl/SysUserServiceImpl.java) - 实现日期格式偏好管理逻辑
- [SysUserController.java](file:///d:/idea_demo/datai/datai-admin/src/main/java/com/datai/web/controller/system/SysUserController.java) - 添加日期格式偏好管理接口
### 3. 系统默认日期格式配置
- **功能描述**:支持在配置文件中设置系统默认日期格式
- **影响范围**datai-admin
- **相关文件**
- [application.yml](file:///d:/idea_demo/datai/datai-admin/src/main/resources/application.yml) - 添加系统默认日期格式配置
- [SysConfigController.java](file:///d:/idea_demo/datai/datai-admin/src/main/java/com/datai/web/controller/system/SysConfigController.java) - 添加系统默认日期格式接口
### 4. 缓存机制
- **功能描述**:使用 Redis 缓存用户日期格式偏好,提高查询性能
- **影响范围**datai-common、datai-system
- **相关文件**
- [CacheConstants.java](file:///d:/idea_demo/datai/datai-common/src/main/java/com/datai/common/constant/CacheConstants.java) - 添加日期格式缓存常量
- [SysUserServiceImpl.java](file:///d:/idea_demo/datai/datai-system/src/main/java/com/datai/system/service/impl/SysUserServiceImpl.java) - 实现缓存逻辑
### 5. 单元测试
- **功能描述**:为日期格式化功能添加单元测试
- **影响范围**datai-common、datai-framework
- **相关文件**
- [DateFormatUtilsTest.java](file:///d:/idea_demo/datai/datai-common/src/test/java/com/datai/common/utils/DateFormatUtilsTest.java) - DateFormatUtils 工具类单元测试
- [DateFormatAspectTest.java](file:///d:/idea_demo/datai/datai-framework/src/test/java/com/datai/framework/aspectj/DateFormatAspectTest.java) - DateFormatAspect AOP 切面单元测试
## 优化改进
### 1. 切面顺序控制
- **改进描述**:为 TimeZoneConvertAspect 添加 @Order(1) 注解,为 DateFormatAspect 添加 @Order(2) 注解,确保时区转换先于日期格式化执行
- **影响范围**datai-framework
- **相关文件**
- [TimeZoneConvertAspect.java](file:///d:/idea_demo/datai/datai-framework/src/main/java/com/datai/framework/aspectj/TimeZoneConvertAspect.java) - 添加 @Order(1) 注解
- [DateFormatAspect.java](file:///d:/idea_demo/datai/datai-framework/src/main/java/com/datai/framework/aspectj/DateFormatAspect.java) - 添加 @Order(2) 注解
### 2. 线程安全优化
- **改进描述**:使用 ConcurrentHashMap 缓存 DateTimeFormatter 和 SimpleDateFormat 实例,确保线程安全
- **影响范围**datai-common
- **相关文件**
- [DateFormatUtils.java](file:///d:/idea_demo/datai/datai-common/src/main/java/com/datai/common/utils/DateFormatUtils.java) - 使用 ConcurrentHashMap 缓存格式化器实例
### 3. 缓存一致性优化
- **改进描述**:用户切换日期格式偏好时立即清除缓存,确保缓存一致性
- **影响范围**datai-system
- **相关文件**
- [SysUserServiceImpl.java](file:///d:/idea_demo/datai/datai-system/src/main/java/com/datai/system/service/impl/SysUserServiceImpl.java) - 更新数据库后立即清除缓存
## 数据库变更
### 1. 扩展 SysUser 表
- **变更类型**:新增字段
- **变更内容**
```sql
ALTER TABLE sys_user ADD COLUMN date_format VARCHAR(50) DEFAULT NULL COMMENT '日期格式';
ALTER TABLE sys_user ADD COLUMN date_format_pattern VARCHAR(100) DEFAULT NULL COMMENT '日期格式模式';
```
- **影响范围**sys_user 表
- **相关文件**
- [2026-01-25-002-06-日期格式化.sql](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/sql/2026-01-25-002-06-日期格式化.sql) - 数据库变更脚本
## 配置变更
### 1. 系统默认日期格式配置
- **变更类型**:新增配置项
- **变更内容**
```yaml
user:
# 默认语言代码
defaultLangCode: zh_CN
# 默认日期格式
defaultDateFormat: yyyy-MM-dd
# 默认日期时间格式
defaultDateTimeFormat: yyyy-MM-dd HH:mm:ss
```
- **影响范围**application.yml
- **相关文件**
- [application.yml](file:///d:/idea_demo/datai/datai-admin/src/main/resources/application.yml) - 添加系统默认日期格式配置
## API 变更
### 1. 新增用户日期格式偏好管理接口
- **接口路径**/system/user/dateFormat
- **请求方法**GET
- **接口描述**:获取当前用户日期格式偏好
- **响应示例**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"userId": 1,
"dateFormat": "ISO_8601",
"dateFormatPattern": null
}
}
```
### 2. 新增切换用户日期格式偏好接口
- **接口路径**/system/user/switchDateFormat
- **请求方法**POST
- **接口描述**:切换用户日期格式偏好
- **请求示例**
```json
{
"dateFormat": "ISO_8601",
"dateFormatPattern": null
}
```
- **响应示例**
```json
{
"code": 200,
"msg": "操作成功"
}
```
### 3. 新增获取系统默认日期格式接口
- **接口路径**/system/config/defaultDateFormat
- **请求方法**GET
- **接口描述**:获取系统默认日期格式
- **响应示例**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-dd HH:mm:ss"
}
}
```
### 4. 新增获取常用日期格式列表接口
- **接口路径**/system/config/commonDateFormats
- **请求方法**GET
- **接口描述**:获取常用日期格式列表
- **响应示例**
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"dateFormats": {
"ISO_8601": "yyyy-MM-dd",
"US": "MM/dd/yyyy",
"EU": "dd/MM/yyyy",
"CN": "yyyy年MM月dd日",
"JP": "yyyy/MM/dd",
"KR": "yyyy. MM. dd."
},
"dateTimeFormats": {
"ISO_8601": "yyyy-MM-dd HH:mm:ss",
"US": "MM/dd/yyyy HH:mm:ss",
"EU": "dd/MM/yyyy HH:mm:ss",
"CN": "yyyy年MM月dd日 HH:mm:ss",
"JP": "yyyy/MM/dd HH:mm:ss",
"KR": "yyyy. MM. dd. HH:mm:ss"
}
}
}
```
## 依赖变更
本次更新无新增依赖,使用 Java 内置的 DateTimeFormatter 进行日期格式化。
## 兼容性说明
### 1. 向后兼容性
- 本次更新为新增功能,不影响现有功能
- 现有 API 接口保持不变
- 数据库变更为新增字段,不影响现有数据
### 2. 升级说明
- 执行数据库变更脚本:[2026-01-25-002-06-日期格式化.sql](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/sql/2026-01-25-002-06-日期格式化.sql)
- 更新配置文件:在 application.yml 中添加系统默认日期格式配置
- 重启应用:重启应用以加载新的配置和代码
### 3. 回滚说明
- 如需回滚,执行以下步骤:
1. 删除新增的数据库字段:`ALTER TABLE sys_user DROP COLUMN date_format; ALTER TABLE sys_user DROP COLUMN date_format_pattern;`
2. 删除新增的代码文件
3. 恢复修改的文件
4. 删除配置文件中的新增配置项
5. 重启应用
## 已知问题
本次更新无已知问题。
## 后续计划
1. 进行集成测试测试用户日期格式偏好接口、系统默认日期格式接口、AOP 切面功能、缓存功能、多语言日期显示功能、时区转换 + 日期格式化集成功能
2. 进行手动测试:测试不同日期格式的格式化、多语言日期显示、时区转换 + 日期格式化、用户日期格式偏好切换、缓存功能、嵌套对象格式化
3. 创建复盘文档:[2026-01-25-002-06-retro.md](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/retros/2026-01-25-002-06-retro.md)
4. 创建 API 文档:[2026-01-25-002-06-api.md](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-01-25-002-06-api.md)
## 相关文档
- [需求文档](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/requirements/2026-01-21-002-06-日期格式化需求.md)
- [设计文档](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/design/2026-01-21-002-06-日期格式化设计.md)
- [架构决策记录](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/decisions/adr/2026-01-25-002-06-ADR-日期格式化技术选型.md)
- [SQL 脚本](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/sql/2026-01-25-002-06-日期格式化.sql)
- [提示词文档](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/prompts/2026-01-25-002-06-prompt-日期格式化功能.md)
- [会话记录](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/sessions/2026-01-25-002-06-session.md)
- [复盘文档](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/retros/2026-01-25-002-06-retro.md) - 待创建
- [API 文档](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-01-25-002-06-api.md) - 待创建
## 变更统计
- 新增文件6 个
- 修改文件8 个
- 新增 API 接口4 个
- 数据库变更2 个字段
- 配置变更3 个配置项
- 单元测试2 个测试类30 个测试用例