datai/docs/archive/changelog/20260118-metadata-retrieve-core.md

267 lines
9.1 KiB
Markdown

# 变更记录 - 元数据拉取核心功能
## 变更信息
- **变更编号**: Change-016
- **变更日期**: 2026-01-18
- **变更类型**: 新增功能
- **变更版本**: 0.1.18
- **相关需求**: [REQ-010-6](../requirements/REQ-010-6.md) - 元数据拉取核心功能
- **相关决策**: [ADR-0015](../decisions/adr/0015-metadata-retrieve-core.md) - 元数据拉取核心功能架构决策
- **相关会话**: [Session-20260118-003](../sessions/20260118-metadata-retrieve-core.md) - 元数据拉取核心功能执行会话
## 变更摘要
实现了完整的 Salesforce 元数据拉取核心功能,包括手动触发拉取、异步拉取执行、状态监控、拉取历史记录、拉取进度查询、拉取取消功能。
## 变更详情
### 新增功能
#### 1. RetrieveStatus 枚举
**描述**: 创建 RetrieveStatus 枚举,定义拉取状态。
**实现内容**:
- Pending: 待处理
- Processing: 处理中
- Success: 成功
- Failed: 失败
- Partial_Success: 部分成功
- Cancelled: 已取消
**技术实现**:
- 使用 Java 枚举类型
- 使用 `@EnumValue` 注解映射数据库值
- 使用 `@JsonValue` 注解序列化为 JSON
#### 2. MetadataRetrieveController 控制器
**描述**: 创建 MetadataRetrieveController 控制器,提供 RESTful API 接口。
**实现内容**:
- POST /metadata/retrieve/trigger - 触发拉取
- GET /metadata/retrieve/progress/{jobId} - 查询拉取进度
- DELETE /metadata/retrieve/{jobId} - 取消拉取
- GET /metadata/retrieve/history - 查询拉取历史
**技术实现**:
- 使用 `@RestController``@RequestMapping` 注解标注控制器
- 使用 `@Valid` 注解进行参数验证
- 使用 Swagger 注解生成 API 文档
- 返回统一的 AjaxResult 对象
#### 3. IMetadataRetrieveService 服务接口
**描述**: 创建 IMetadataRetrieveService 服务接口,定义元数据拉取服务接口。
**实现内容**:
- triggerRetrieve: 触发拉取
- getRetrieveProgress: 查询拉取进度
- cancelRetrieve: 取消拉取
- getRetrieveHistory: 查询拉取历史
**技术实现**:
- 使用 Java 接口定义服务方法
- 使用 MyBatis Plus 的 IPage 对象实现分页
#### 4. MetadataRetrieveServiceImpl 服务实现
**描述**: 创建 MetadataRetrieveServiceImpl 服务实现,实现元数据拉取服务。
**实现内容**:
- triggerRetrieve: 触发拉取,创建作业执行记录,异步执行拉取
- getRetrieveProgress: 查询拉取进度,从缓存中获取进度信息
- cancelRetrieve: 取消拉取,调用 MetadataApiService 的 cancelJob() 方法
- getRetrieveHistory: 查询拉取历史,使用 MyBatis Plus 的分页查询
**技术实现**:
- 使用 `@Service` 注解标注服务类
- 使用 `@Async` 注解实现异步执行
- 使用 `@Transactional` 注解进行事务管理
- 使用 ConcurrentHashMap 缓存进度信息
- 使用 MyBatis Plus 的 QueryWrapper 构建查询条件
#### 5. DTO 类
**描述**: 创建 DTO 类,封装请求和响应数据。
**实现内容**:
- RetrieveTriggerRequest: 拉取触发请求
- RetrieveTriggerResponse: 拉取触发响应
- RetrieveProgressResponse: 拉取进度响应
- RetrieveHistoryResponse: 拉取历史响应
**技术实现**:
- 使用 `@Valid` 注解进行参数验证
- 使用 Swagger 注解生成 API 文档
- 使用 Lombok 的 `@Data` 注解简化代码
#### 6. 前端组件
**描述**: 创建 MetadataRetrieve.vue 前端组件,提供元数据拉取界面。
**实现内容**:
- 拉取触发界面
- 拉取进度查询界面
- 拉取取消界面
- 拉取历史记录界面
**技术实现**:
- 使用 Vue 3 和 Element Plus 进行开发
- 使用 Axios 调用后端 API
- 使用定时器轮询拉取进度
- 使用 Element Plus 的组件库
### 数据库变更
**无**: 本次变更不涉及数据库表结构的变更,使用现有的 datai_meta_job_execution 表。
### API 变更
#### 新增接口
1. **POST /metadata/retrieve/trigger** - 触发拉取
- 请求参数: taskId, orgConfigId, createdBy
- 响应: Result<RetrieveTriggerResponse>
- 描述: 触发 Salesforce 元数据拉取
2. **GET /metadata/retrieve/progress/{jobId}** - 查询拉取进度
- 请求参数: jobId (path)
- 响应: Result<RetrieveProgressResponse>
- 描述: 查询拉取任务进度
3. **DELETE /metadata/retrieve/{jobId}** - 取消拉取
- 请求参数: jobId (path)
- 响应: Result<Void>
- 描述: 取消拉取任务
4. **GET /metadata/retrieve/history** - 查询拉取历史
- 请求参数: pageNum, pageSize, taskId, orgConfigId, status
- 响应: Result<IPage<RetrieveHistoryResponse>>
- 描述: 查询拉取历史记录(支持分页和条件查询)
### 代码变更
#### 新增文件
**后端文件**:
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/enums/RetrieveStatus.java` - 拉取状态枚举
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/controller/MetadataRetrieveController.java` - 元数据拉取控制器
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/service/IMetadataRetrieveService.java` - 元数据拉取服务接口
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/service/impl/MetadataRetrieveServiceImpl.java` - 元数据拉取服务实现
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/dto/RetrieveTriggerRequest.java` - 拉取触发请求
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/dto/RetrieveTriggerResponse.java` - 拉取触发响应
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/dto/RetrieveProgressResponse.java` - 拉取进度响应
- `datai-salesforce-metadata/src/main/java/com/datai/metadata/dto/RetrieveHistoryResponse.java` - 拉取历史响应
**前端文件**:
- `datai-salesforce-metadata/src/main/resources/views/MetadataRetrieve.vue` - 元数据拉取前端组件
**测试文件**:
- `datai-salesforce-metadata/src/test/java/com/datai/metadata/service/MetadataRetrieveServiceImplTest.java` - 元数据拉取服务测试
- `datai-salesforce-metadata/src/test/java/com/datai/metadata/controller/MetadataRetrieveControllerTest.java` - 元数据拉取控制器测试
## 变更影响
### 对现有功能的影响
- **无影响**: 本次变更新增了独立的功能模块,不影响现有功能
### 对数据库的影响
- **无修改**: 未修改现有表结构,使用现有的 datai_meta_job_execution 表
### 对 API 的影响
- **新增接口**: 新增了 4 个 RESTful API 接口
- **无修改**: 未修改现有接口
### 对前端的影响
- **新增页面**: 新增了元数据拉取页面
- **无修改**: 未修改现有页面
## 测试结果
### 单元测试
- ✅ MetadataRetrieveServiceImpl - 所有测试通过
- ✅ MetadataRetrieveController - 所有测试通过
### 集成测试
- ✅ 手动触发拉取测试 - 所有测试通过
- ✅ 异步拉取执行测试 - 所有测试通过
- ✅ 状态监控测试 - 所有测试通过
- ✅ 拉取历史记录测试 - 所有测试通过
- ✅ 拉取进度查询测试 - 所有测试通过
- ✅ 拉取取消测试 - 所有测试通过
### 手动测试
- ✅ 触发拉取 - 测试通过
- ✅ 查询拉取进度 - 测试通过
- ✅ 取消拉取 - 测试通过
- ✅ 查询拉取历史 - 测试通过
## 部署说明
### 数据库部署
无需数据库部署,使用现有的 datai_meta_job_execution 表。
### 后端部署
1. 编译项目:`mvn clean package`
2. 部署 JAR 包到服务器
3. 启动应用:`java -jar datai-salesforce-metadata.jar`
### 前端部署
1. 构建前端项目:`npm run build`
2. 部署 dist 目录到 Web 服务器
### 配置更新
无需额外配置更新。
## 回滚方案
如果需要回滚本次变更,执行以下步骤:
1. **删除后端代码**:
- 删除 datai-salesforce-metadata/src/main/java/com/datai/metadata/enums/RetrieveStatus.java
- 删除 datai-salesforce-metadata/src/main/java/com/datai/metadata/controller/MetadataRetrieveController.java
- 删除 datai-salesforce-metadata/src/main/java/com/datai/metadata/service/ 目录下的所有文件
- 删除 datai-salesforce-metadata/src/main/java/com/datai/metadata/dto/ 目录下的所有文件
2. **删除前端代码**:
- 删除 datai-salesforce-metadata/src/main/resources/views/MetadataRetrieve.vue
3. **删除测试代码**:
- 删除所有相关的测试文件
4. **重新部署**: 重新编译和部署项目
## 相关文档
- [REQ-010-6.md](../requirements/REQ-010-6.md) - 元数据拉取核心功能需求
- [ADR-0015.md](../decisions/adr/0015-metadata-retrieve-core.md) - 元数据拉取核心功能架构决策
- [Prompt-016.md](../prompts/016-metadata-retrieve-core.md) - 元数据拉取核心功能实现提示词
- [Session-20260118-003.md](../sessions/20260118-metadata-retrieve-core.md) - 元数据拉取核心功能执行会话
- [metadata-module.md](../reference-code/com/docs/metadata-module.md) - Salesforce Metadata API 模块说明
- [index.md](../reference-code/com/docs/index.md) - Salesforce SOAP API Java 客户端参考文档
## 审核记录
| 日期 | 审核人 | 审核结果 | 审核意见 |
|------|--------|----------|----------|
| 2026-01-18 | Datai Team | 已通过 | 变更完整,符合需求 |
## 变更历史
| 日期 | 版本 | 变更内容 | 变更人 |
|------|------|---------|--------|
| 2026-01-18 | v1.0.0 | 初始版本 | Datai Team |