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

8.1 KiB
Raw Permalink Blame History

执行会话记录 - 元数据拉取核心功能

会话信息

  • 会话编号: Session-20260118-003
  • 创建日期: 2026-01-18
  • 相关需求: REQ-010-6 - 元数据拉取核心功能
  • 相关决策: ADR-0015 - 元数据拉取核心功能架构决策
  • 相关提示词: Prompt-016 - 元数据拉取核心功能实现提示词

现状

当前系统已经完成了以下工作:

  1. 数据库表结构设计: 已完成 9 张表的设计和创建REQ-010-1
  2. 基础实体类和 Mapper 创建: 已完成基础实体类和 Mapper 的创建REQ-010-2
  3. Salesforce 组织配置管理: 已完成组织配置管理的实现REQ-010-3
  4. 元数据任务定义管理: 已完成任务定义管理的实现REQ-010-4
  5. Metadata API 客户端封装: 已完成 Metadata API 客户端的封装REQ-010-5
  6. 元数据拉取核心功能需求: 已完成需求文档的编写REQ-010-6
  7. 架构决策: 已完成元数据拉取核心功能的架构决策ADR-0015
  8. 提示词资产化: 已完成元数据拉取核心功能的提示词编写Prompt-016

目标

实现 Salesforce 元数据拉取的核心功能,包括手动触发拉取、异步拉取执行、状态监控、拉取历史记录、拉取进度查询、拉取取消功能。

执行过程

步骤1创建 RetrieveStatus 枚举

操作

创建 RetrieveStatus 枚举,定义拉取状态,包含以下状态:

  • Pending: 待处理
  • Processing: 处理中
  • Success: 成功
  • Failed: 失败
  • Partial_Success: 部分成功
  • Cancelled: 已取消

结果

RetrieveStatus 枚举创建成功,使用 @EnumValue 注解映射数据库值,使用 @JsonValue 注解序列化为 JSON。

步骤2创建 DTO 类

操作

创建以下 DTO 类:

  • RetrieveTriggerRequest: 拉取触发请求
  • RetrieveTriggerResponse: 拉取触发响应
  • RetrieveProgressResponse: 拉取进度响应
  • RetrieveHistoryResponse: 拉取历史响应

结果

DTO 类创建成功,使用 @Valid 注解进行参数验证,使用 Swagger 注解生成 API 文档。

步骤3创建 IMetadataRetrieveService 接口

操作

创建 IMetadataRetrieveService 接口,定义以下方法:

  • triggerRetrieve: 触发拉取
  • getRetrieveProgress: 查询拉取进度
  • cancelRetrieve: 取消拉取
  • getRetrieveHistory: 查询拉取历史

结果

Service 接口创建成功,定义了清晰的接口方法。

步骤4创建 MetadataRetrieveServiceImpl 实现类

操作

创建 MetadataRetrieveServiceImpl 实现类,实现以下方法:

  • triggerRetrieve: 触发拉取,创建作业执行记录,异步执行拉取
  • getRetrieveProgress: 查询拉取进度,从缓存中获取进度信息
  • cancelRetrieve: 取消拉取,调用 MetadataApiService 的 cancelJob() 方法
  • getRetrieveHistory: 查询拉取历史,使用 MyBatis Plus 的分页查询

结果

Service 实现类创建成功,使用 @Service 注解进行标注,使用 @Async 注解实现异步执行,使用 @Transactional 注解进行事务管理。

步骤5创建 MetadataRetrieveController 控制器

操作

创建 MetadataRetrieveController 控制器,实现以下接口:

  • POST /metadata/retrieve/trigger - 触发拉取
  • GET /metadata/retrieve/progress/{jobId} - 查询拉取进度
  • DELETE /metadata/retrieve/{jobId} - 取消拉取
  • GET /metadata/retrieve/history - 查询拉取历史

结果

Controller 层创建成功,使用 @RestController@RequestMapping 注解进行标注,使用 Swagger 注解生成 API 文档。

步骤6创建前端组件

操作

创建 MetadataRetrieve.vue 前端组件,实现以下功能:

  • 拉取触发界面
  • 拉取进度查询界面
  • 拉取取消界面
  • 拉取历史记录界面

结果

前端组件创建成功,使用 Vue 3 和 Element Plus 进行开发。

AI 质疑和替代方案

质疑1为什么使用 ConcurrentHashMap 缓存进度信息而不是 Redis

AI 质疑: 为什么选择使用 ConcurrentHashMap 缓存进度信息,而不是使用 Redis

回答: 根据 ADR-0015 的决策,选择使用 ConcurrentHashMap 是因为:

  1. 对于单机部署,使用 ConcurrentHashMap 足够
  2. 无需额外引入 Redis减少了系统复杂度
  3. 无需额外的运维成本
  4. 对于简单的进度查询,使用 Redis 是过度设计

替代方案: 如果未来需要支持分布式部署,可以考虑使用 Redis 缓存进度信息。

质疑2为什么使用轮询机制而不是 WebSocket 实现实时进度推送?

AI 质疑: 为什么选择使用轮询机制查询进度,而不是使用 WebSocket 实现实时进度推送?

回答: 选择使用轮询机制是因为:

  1. 轮询机制简单易用,无需额外引入其他库
  2. 可以实时获取拉取进度
  3. 对于简单的进度查询,使用 WebSocket 是过度设计
  4. 减少了系统的复杂度

替代方案: 如果未来需要更实时的进度推送,可以考虑使用 WebSocket。

质疑3为什么使用 MyBatis Plus 的分页查询而不是自定义 SQL

AI 质疑: 为什么选择使用 MyBatis Plus 的分页查询,而不是使用自定义 SQL

回答: 选择使用 MyBatis Plus 的分页查询是因为:

  1. MyBatis Plus 提供了强大的分页功能,无需编写 SQL
  2. 支持条件查询,使用 QueryWrapper
  3. 与项目现有的持久层框架保持一致
  4. 易于维护和扩展

替代方案: 如果需要更复杂的查询逻辑,可以考虑使用自定义 SQL。

最终复现步骤

1. 创建 RetrieveStatus 枚举

创建 RetrieveStatus.java 枚举。

2. 创建 DTO 类

创建以下 DTO 类:

  • RetrieveTriggerRequest.java
  • RetrieveTriggerResponse.java
  • RetrieveProgressResponse.java
  • RetrieveHistoryResponse.java

3. 创建 IMetadataRetrieveService 接口

创建 IMetadataRetrieveService.java 接口。

4. 创建 MetadataRetrieveServiceImpl 实现类

创建 MetadataRetrieveServiceImpl.java 实现类。

5. 创建 MetadataRetrieveController 控制器

创建 MetadataRetrieveController.java 控制器。

6. 创建前端组件

创建 MetadataRetrieve.vue 前端组件。

7. 编写单元测试

为以下类编写单元测试:

  • MetadataRetrieveServiceImpl
  • MetadataRetrieveController

8. 编写集成测试

编写以下集成测试:

  • 手动触发拉取测试
  • 异步拉取执行测试
  • 状态监控测试
  • 拉取历史记录测试
  • 拉取进度查询测试
  • 拉取取消测试

9. 编写 API 文档

为以下接口编写 API 文档:

  • POST /metadata/retrieve/trigger - 触发拉取
  • GET /metadata/retrieve/progress/{jobId} - 查询拉取进度
  • DELETE /metadata/retrieve/{jobId} - 取消拉取
  • GET /metadata/retrieve/history - 查询拉取历史

执行结果

成功实现的功能

  1. RetrieveStatus 枚举创建成功
  2. DTO 类创建成功
  3. IMetadataRetrieveService 接口创建成功
  4. MetadataRetrieveServiceImpl 实现类创建成功
  5. MetadataRetrieveController 控制器创建成功
  6. 前端组件创建成功

未实现的功能

遇到的问题

相关文档

审核记录

日期 审核人 审核结果 审核意见
2026-01-18 Datai Team 已通过 实现完整,符合需求

变更历史

日期 版本 变更内容 变更人
2026-01-18 v1.0.0 初始版本 Datai Team