datai/datai-scenes/datai-scene-salesforce/docs/prompts/2026-02-03-003-04-prompt-异步操作.md

3.9 KiB
Raw Permalink Blame History

提示词:异步操作管理

引用真源

需求描述

根据需求文档,实现 Salesforce Metadata API 的异步操作管理功能,包括:

  1. 获取异步操作结果:根据 asyncId 查询操作状态和结果。
  2. 轮询异步操作状态:实现服务端同步轮询,支持超时和间隔配置。
  3. 取消异步操作:支持取消正在进行的异步操作。
  4. 获取异步操作历史:从数据库查询异步操作的历史记录。
  5. 数据持久化:将每次操作的状态记录到数据库表 datai_metadata_async

设计方案

根据设计文档,采用以下技术方案:

  1. 架构分层
    • Controller:暴露 REST API (/api/metadata/async)。
    • Service:封装 Metadata API 调用、轮询逻辑和数据库操作。
    • Mapper:使用 MyBatis Plus 操作数据库。
  2. 核心依赖
    • 使用 datai-salesforce-authSessionManagerMetadataConnectionFactory
    • 使用 metadata.jar 中的 AsyncResult, AsyncRequestState
    • 使用 datai-salesforce-common 中的异常类 SalesforceOperationException
  3. 轮询策略
    • 采用 Thread.sleep 进行同步阻塞轮询。
    • 必须处理 InterruptedException
    • 必须检查超时时间。
  4. 异常处理
    • 捕获 ConnectionException 并转换为 SalesforceOperationException
    • 记录详细的错误日志。

输出格式要求

  1. 必须包含以下文件
    • ControllerMetadataAsyncController.java (路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/controller/MetadataAsyncController.java)
    • ServiceMetadataAsyncService.java (路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/service/MetadataAsyncService.java)
    • EntityMetadataAsyncEntity.java (路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/domain/MetadataAsyncEntity.java)
    • MapperMetadataAsyncMapper.java (路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/mapper/MetadataAsyncMapper.java)
  2. 必须包含单元测试
    • MetadataAsyncServiceTest.java (路径:datai-modules-salesforce/src/test/java/com/datai/modules/salesforce/service/MetadataAsyncServiceTest.java)
  3. 技术栈要求
    • Spring Boot 2.7.x
    • MyBatis Plus 3.5.x
    • JUnit 5 & Mockito

代码规范要求

  1. 命名规范
    • 类名:UpperCamelCase (如 MetadataAsyncService)
    • 方法名:lowerCamelCase (如 getAsyncResult)
    • 常量:UPPER_SNAKE_CASE (如 DEFAULT_POLL_INTERVAL)
  2. 注释规范
    • 类必须包含 @author@date
    • 所有 public 方法必须包含 Javadoc描述参数、返回值和异常。
  3. 代码结构
    • 使用 @Autowired 或构造函数注入依赖。
    • 使用 Lombok 的 @Data, @Slf4j 等注解简化代码。
    • 避免魔法数字,使用常量代替。

测试要求

  1. 覆盖率:核心业务逻辑覆盖率不低于 80%。
  2. 测试场景
    • getAsyncResult: 成功获取、获取失败(异常)。
    • pollAsyncResult: 轮询成功、轮询超时、轮询中断。
    • cancelAsyncResult: 取消成功、取消失败。
  3. Mocking
    • 使用 Mockito 模拟 MetadataConnectionFactoryMetadataConnection
    • 模拟 AsyncResult 的返回状态。

注意事项

  1. 依赖检查:确保引入了 datai-salesforce-authdatai-salesforce-common
  2. 数据库兼容性Entity 类必须匹配 SQL 脚本中的表结构 datai_metadata_async
  3. 安全性:确保 asyncId 的合法性检查(虽然主要由 Salesforce 验证)。