3.9 KiB
3.9 KiB
提示词:异步操作管理
引用真源
需求描述
根据需求文档,实现 Salesforce Metadata API 的异步操作管理功能,包括:
- 获取异步操作结果:根据
asyncId查询操作状态和结果。 - 轮询异步操作状态:实现服务端同步轮询,支持超时和间隔配置。
- 取消异步操作:支持取消正在进行的异步操作。
- 获取异步操作历史:从数据库查询异步操作的历史记录。
- 数据持久化:将每次操作的状态记录到数据库表
datai_metadata_async。
设计方案
根据设计文档,采用以下技术方案:
- 架构分层:
Controller:暴露 REST API (/api/metadata/async)。Service:封装 Metadata API 调用、轮询逻辑和数据库操作。Mapper:使用 MyBatis Plus 操作数据库。
- 核心依赖:
- 使用
datai-salesforce-auth的SessionManager和MetadataConnectionFactory。 - 使用
metadata.jar中的AsyncResult,AsyncRequestState。 - 使用
datai-salesforce-common中的异常类SalesforceOperationException。
- 使用
- 轮询策略:
- 采用
Thread.sleep进行同步阻塞轮询。 - 必须处理
InterruptedException。 - 必须检查超时时间。
- 采用
- 异常处理:
- 捕获
ConnectionException并转换为SalesforceOperationException。 - 记录详细的错误日志。
- 捕获
输出格式要求
- 必须包含以下文件:
- Controller:
MetadataAsyncController.java(路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/controller/MetadataAsyncController.java) - Service:
MetadataAsyncService.java(路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/service/MetadataAsyncService.java) - Entity:
MetadataAsyncEntity.java(路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/domain/MetadataAsyncEntity.java) - Mapper:
MetadataAsyncMapper.java(路径:datai-modules-salesforce/src/main/java/com/datai/modules/salesforce/mapper/MetadataAsyncMapper.java)
- Controller:
- 必须包含单元测试:
MetadataAsyncServiceTest.java(路径:datai-modules-salesforce/src/test/java/com/datai/modules/salesforce/service/MetadataAsyncServiceTest.java)
- 技术栈要求:
- Spring Boot 2.7.x
- MyBatis Plus 3.5.x
- JUnit 5 & Mockito
代码规范要求
- 命名规范:
- 类名:
UpperCamelCase(如MetadataAsyncService) - 方法名:
lowerCamelCase(如getAsyncResult) - 常量:
UPPER_SNAKE_CASE(如DEFAULT_POLL_INTERVAL)
- 类名:
- 注释规范:
- 类必须包含
@author和@date。 - 所有 public 方法必须包含 Javadoc,描述参数、返回值和异常。
- 类必须包含
- 代码结构:
- 使用
@Autowired或构造函数注入依赖。 - 使用 Lombok 的
@Data,@Slf4j等注解简化代码。 - 避免魔法数字,使用常量代替。
- 使用
测试要求
- 覆盖率:核心业务逻辑覆盖率不低于 80%。
- 测试场景:
getAsyncResult: 成功获取、获取失败(异常)。pollAsyncResult: 轮询成功、轮询超时、轮询中断。cancelAsyncResult: 取消成功、取消失败。
- Mocking:
- 使用 Mockito 模拟
MetadataConnectionFactory和MetadataConnection。 - 模拟
AsyncResult的返回状态。
- 使用 Mockito 模拟
注意事项
- 依赖检查:确保引入了
datai-salesforce-auth和datai-salesforce-common。 - 数据库兼容性:Entity 类必须匹配 SQL 脚本中的表结构
datai_metadata_async。 - 安全性:确保
asyncId的合法性检查(虽然主要由 Salesforce 验证)。