datai/docs/archive/sessions/20260116-sync-progress-tracking.md

5.9 KiB
Raw Permalink Blame History

会话记录syncObjectData 同步进度跟踪实现

现状

当前 syncObjectData 方法在执行同步操作时,用户无法获知同步的实际进度,只能等待同步完成。这导致用户体验不佳,特别是在处理大量数据时,用户无法判断同步是否正常进行、还需要多长时间完成。

目标

实现 syncObjectData 同步进度跟踪功能,包括:

  1. 创建进度信息数据结构SyncProgress 实体类)
  2. 创建进度跟踪服务接口和实现类
  3. 在 Controller 中添加进度查询接口
  4. 在 Service 中集成进度跟踪功能
  5. 同步任务完成后立即清除该同步进度信息,不保留历史记录

输入链接

Prompt 文件

Context Snapshot

记录本次会话参考了哪些 Canvas 节点:

执行过程

详细记录本次会话的执行过程,包括:

  1. 创建 SyncProgress 实体类

    • 文件路径:datai-salesforce-integration/src/main/java/com/datai/integration/model/domain/SyncProgress.java
    • 包含字段objectId、syncType、totalBatches、processedBatches、currentBatch、progressPercentage、startTime、endTime、status、errorMessage
    • 使用 Lombok 注解(@Data、@Builder、@NoArgsConstructor、@AllArgsConstructor
  2. 创建 ISyncProgressService 接口

    • 文件路径:datai-salesforce-integration/src/main/java/com/datai/integration/service/ISyncProgressService.java
    • 包含方法startProgressTracking、updateProgress、completeProgress、failProgress、getProgress、getAllProgress、getAllRunningProgress
  3. 创建 SyncProgressServiceImpl 实现类

    • 文件路径:datai-salesforce-integration/src/main/java/com/datai/integration/service/impl/SyncProgressServiceImpl.java
    • 使用 ConcurrentHashMap 存储进度信息
    • completeProgress 和 failProgress 方法在完成后立即清除该同步进度信息
    • 使用 @Service 注解,添加日志记录
  4. 在 DataiIntegrationObjectController 中添加进度查询接口

    • 文件路径:datai-salesforce-integration/src/main/java/com/datai/integration/controller/DataiIntegrationObjectController.java
    • 添加接口:GET /integration/object/progress/{objectId} - 查询指定对象的同步进度
    • 添加接口:GET /integration/object/progress - 查询所有正在同步的对象进度
    • 注入 ISyncProgressService
  5. 在 DataiIntegrationObjectServiceImpl 中集成进度跟踪

    • 文件路径:datai-salesforce-integration/src/main/java/com/datai/integration/service/impl/DataiIntegrationObjectServiceImpl.java
    • 注入 ISyncProgressService
    • 在 syncFullData 方法中:
      • 开始时调用 startProgressTracking
      • 每个批次完成后调用 updateProgress
      • 完成时调用 completeProgress
      • 失败时调用 failProgress
    • 在 syncIncrementalData 方法中:
      • 开始时调用 startProgressTracking
      • 同步前后调用 updateProgress
      • 完成时调用 completeProgress
      • 失败时调用 failProgress

关键产出

记录本次会话的关键产出,例如:

  • 生成的代码文件:
    • SyncProgress.java - 进度信息实体类
    • ISyncProgressService.java - 进度跟踪服务接口
    • SyncProgressServiceImpl.java - 进度跟踪服务实现类
    • DataiIntegrationObjectController.java更新- 添加进度查询接口
    • DataiIntegrationObjectServiceImpl.java更新- 集成进度跟踪
  • 解决的问题syncObjectData 同步进度跟踪
  • 达成的共识:使用内存存储方案,同步任务完成后立即清除进度信息,不保留历史记录

质疑与替代方案

记录在执行过程中提出的质疑和考虑的替代方案:

  • 质疑:是否需要将同步进度数据同步到数据库?

    • 替代方案:将进度数据存储在数据库中,支持历史记录查询
    • 评估:不采用,因为会增加数据库写入开销,影响同步性能。采用内存存储方案,同步任务完成后立即清除进度信息。
  • 质疑:是否需要定时清理过期进度数据?

    • 替代方案:使用定时任务每小时清理一次超过 24 小时的进度记录
    • 评估:不采用,因为同步任务完成后立即清除进度信息,无需定时清理任务。

结论

总结本次会话的结果,包括:

  • 完成的工作:实现了 syncObjectData 同步进度跟踪功能
  • 达成的目标:用户可以实时查询同步进度,提升用户体验
  • 后续的行动计划:测试进度跟踪功能,验证性能指标
  • 需要跟进的事项:验证进度查询接口响应时间 < 100ms

Design Update

  • 是否需要更新 Canvas?
  • Authentication.canvas
  • 其他 Canvas 文件: ____________________

复现步骤

提供复现本次会话结果的具体步骤:

  1. 创建 SyncProgress 实体类
  2. 创建 ISyncProgressService 接口和 SyncProgressServiceImpl 实现类
  3. 在 DataiIntegrationObjectController 中添加进度查询接口
  4. 在 DataiIntegrationObjectServiceImpl 中集成进度跟踪
  5. 测试进度跟踪功能,验证进度查询接口响应时间