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

192 lines
8.6 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-21-002-03
- 创建时间2026-01-25
- 创建人SSOT 架构师
- 版本号v1.0.0
- 父需求2026-01-21-002-项目国际化需求
## 变更概述
实现数据库数据的国际化功能,包括字典数据、系统配置、菜单数据的国际化。通过在现有表中添加英文字段和预留 JSON 字段,支持中英文双语和未来多语言扩展。实现按语言分别缓存、数据回退、语言切换等核心功能。
## 变更内容
### 新增功能
#### 1. 字典数据国际化
- 实现字典数据SysDictData、SysDictType的国际化支持
- 在 sys_dict_data 表中添加 dict_label_en字典标签英文和 dict_label_i18n字典标签多语言JSON字段
- 在 sys_dict_type 表中添加 dict_name_en字典名称英文和 dict_name_i18n字典名称多语言JSON字段
- 支持根据用户语言偏好动态查询对应语言的字典数据
- 实现数据回退机制:国际化数据缺失时显示默认语言(中文)的数据
- 实现缓存刷新机制:修改字典数据后刷新相关缓存
#### 2. 系统配置国际化
- 实现系统配置SysConfig的国际化支持
- 在 sys_config 表中添加 config_name_en配置名称英文和 config_name_i18n配置名称多语言JSON字段
- 支持根据用户语言偏好动态查询对应语言的配置数据
- 实现数据回退机制:国际化数据缺失时显示默认语言(中文)的数据
- 实现缓存刷新机制:修改配置数据后刷新相关缓存
#### 3. 菜单数据国际化
- 实现菜单数据SysMenu的国际化支持
- 在 sys_menu 表中添加 menu_name_en菜单名称英文和 menu_name_i18n菜单名称多语言JSON字段
- 支持根据用户语言偏好动态查询对应语言的菜单数据
- 实现数据回退机制:国际化数据缺失时显示默认语言(中文)的数据
- 实现缓存刷新机制:修改菜单数据后刷新相关缓存
#### 4. 语言切换功能
- 创建 I18nController实现语言切换接口
- 支持用户在运行时动态切换语言
- 切换语言后清除当前用户的所有缓存,强制重新加载数据
- 支持的语言代码格式:{language}-{country}(如 zh-CN、en-US
#### 5. 缓存管理
- 实现按语言分别缓存的机制
- 缓存键格式:{数据类型}:{标识}:{语言代码}
- 修改数据后只清除受影响语言的缓存,减少缓存刷新范围
- 切换语言时清除当前用户的所有缓存
### 修改功能
#### 1. 实体类扩展
- **SysDictData.java**
- 添加 dictLabelEn 字段(字典标签英文)
- 添加 dictLabelI18n 字段字典标签多语言JSON
- 添加 getLocalizedDictLabel() 方法,根据用户语言偏好返回对应语言的字典标签
- **SysDictType.java**
- 添加 dictNameEn 字段(字典名称英文)
- 添加 dictNameI18n 字段字典名称多语言JSON
- 添加 getLocalizedDictName() 方法,根据用户语言偏好返回对应语言的字典名称
- **SysConfig.java**
- 添加 configNameEn 字段(配置名称英文)
- 添加 configNameI18n 字段配置名称多语言JSON
- 添加 getLocalizedConfigName() 方法,根据用户语言偏好返回对应语言的配置名称
- **SysMenu.java**
- 添加 menuNameEn 字段(菜单名称英文)
- 添加 menuNameI18n 字段菜单名称多语言JSON
- 添加 getLocalizedMenuName() 方法,根据用户语言偏好返回对应语言的菜单名称
#### 2. Mapper XML 扩展
- **SysDictDataMapper.xml**
- 添加 dict_label_en 和 dict_label_i18n 字段的查询
- 添加 dict_label_en 和 dict_label_i18n 字段的更新
- **SysDictTypeMapper.xml**
- 添加 dict_name_en 和 dict_name_i18n 字段的查询
- 添加 dict_name_en 和 dict_name_i18n 字段的更新
- **SysConfigMapper.xml**
- 添加 config_name_en 和 config_name_i18n 字段的查询
- 添加 config_name_en 和 config_name_i18n 字段的更新
- **SysMenuMapper.xml**
- 添加 menu_name_en 和 menu_name_i18n 字段的查询
- 添加 menu_name_en 和 menu_name_i18n 字段的更新
#### 3. Service 层扩展
- **SysDictDataServiceImpl.java**
- 添加数据验证逻辑
- 添加缓存刷新逻辑
- **SysDictTypeServiceImpl.java**
- 添加数据验证逻辑
- 添加缓存刷新逻辑
- **SysConfigServiceImpl.java**
- 添加数据验证逻辑
- 添加缓存刷新逻辑
- **SysMenuServiceImpl.java**
- 添加数据验证逻辑
- 添加缓存刷新逻辑
#### 4. 工具类扩展
- **DictUtils.java**
- 添加根据语言偏好获取字典标签的方法
- 支持动态查询对应语言的字典数据
### 新增文档
#### 需求文档
- [需求文档](../requirements/2026-01-21-002-03-数据库国际化需求.md)
#### 设计文档
- [设计文档](../design/2026-01-21-002-03-数据库国际化设计.md)
#### 架构决策记录
- [架构决策记录](../decisions/adr/2026-01-25-002-03-ADR-数据库国际化架构决策.md)
#### SQL 脚本
- [SQL 脚本](../sql/2026-01-25-002-03-数据库国际化.sql)
#### 提示词文档
- [数据库国际化功能实现提示词](../prompts/2026-01-25-002-03-prompt-数据库国际化功能.md)
- [数据库国际化功能补充实现提示词](../prompts/2026-01-25-002-03-prompt-数据库国际化功能-补充.md)
#### 参考代码文档
- [参考代码文档](../reference-code/2026-01-25-002-03-code-数据库国际化功能.md)
#### 实施方案文档
- [实施方案文档](../implementation/2026-01-25-002-03-implementation-数据库国际化功能.md)
#### 会话记录
- [会话记录](../sessions/2026-01-21-002-03-session.md)
### 新增代码文件
#### 实体类
- `datai-common/src/main/java/com/datai/common/core/domain/entity/SysDictData.java`(修改)
- `datai-common/src/main/java/com/datai/common/core/domain/entity/SysDictType.java`(修改)
- `datai-system/src/main/java/com/datai/system/domain/SysConfig.java`(修改)
- `datai-common/src/main/java/com/datai/common/core/domain/entity/SysMenu.java`(修改)
#### Mapper XML
- `datai-system/src/main/resources/mapper/system/SysDictDataMapper.xml`(修改)
- `datai-system/src/main/resources/mapper/system/SysDictTypeMapper.xml`(修改)
- `datai-system/src/main/resources/mapper/system/SysConfigMapper.xml`(修改)
- `datai-system/src/main/resources/mapper/system/SysMenuMapper.xml`(修改)
#### Service 层
- `datai-system/src/main/java/com/datai/system/service/impl/SysDictDataServiceImpl.java`(修改)
- `datai-system/src/main/java/com/datai/system/service/impl/SysDictTypeServiceImpl.java`(修改)
- `datai-system/src/main/java/com/datai/system/service/impl/SysConfigServiceImpl.java`(修改)
- `datai-system/src/main/java/com/datai/system/service/impl/SysMenuServiceImpl.java`(修改)
#### Controller 层
- `datai-admin/src/main/java/com/datai/web/controller/system/I18nController.java`(新增)
#### 工具类
- `datai-common/src/main/java/com/datai/common/utils/DictUtils.java`(修改)
## 影响范围
### 模块级别
- `datai-common`:实体类和工具类修改
- `datai-system`Service 层和 Mapper XML 修改
- `datai-admin`:新增 I18nController
### 数据库级别
- `sys_dict_data`:添加 dict_label_en 和 dict_label_i18n 字段
- `sys_dict_type`:添加 dict_name_en 和 dict_name_i18n 字段
- `sys_config`:添加 config_name_en 和 config_name_i18n 字段
- `sys_menu`:添加 menu_name_en 和 menu_name_i18n 字段
### 功能级别
- 字典管理:支持国际化
- 系统配置:支持国际化
- 菜单管理:支持国际化
- 语言切换:新增功能
### 兼容性
- 向后兼容:现有功能不受影响
- 数据兼容:现有数据不受影响,英文字段为空时回退到中文字段
## 相关文档
- [需求文档](../requirements/2026-01-21-002-03-数据库国际化需求.md)
- [设计文档](../design/2026-01-21-002-03-数据库国际化设计.md)
- [架构决策记录](../decisions/adr/2026-01-25-002-03-ADR-数据库国际化架构决策.md)
- [SQL 脚本](../sql/2026-01-25-002-03-数据库国际化.sql)
- [参考代码文档](../reference-code/2026-01-25-002-03-code-数据库国际化功能.md)
- [实施方案文档](../implementation/2026-01-25-002-03-implementation-数据库国际化功能.md)
- [会话记录](../sessions/2026-01-21-002-03-session.md)
- [父需求](../requirements/2026-01-21-002-项目国际化需求.md)
- [前端国际化需求](../requirements/2026-01-21-002-01-前端国际化需求.md)
- [后端国际化需求](../requirements/2026-01-21-002-02-后端国际化需求.md)
- [后端国际化设计](../design/2026-01-21-002-02-后端国际化设计.md)