datai/docs/archive/REQ-010-6.md

276 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Requirements - 元数据拉取核心功能
## 需求信息
- **需求名称**: 元数据拉取核心功能
- **需求类型**: 功能需求
- **需求编号**: REQ-010-6
- **父需求**: REQ-010
- **创建日期**: 2026-01-17
- **需求版本**: v1.0.0
- **需求提出人**: 系统管理员
- **需求状态**: 已完成
## 输入引用
引用相关的 docs 文档链接:
- [REQ-010.md](REQ-010.md) - Salesforce元数据拉取和部署主需求文档
- [REQ-010-1.md](REQ-010-1.md) - 数据库表结构设计和创建
- [REQ-010-2.md](REQ-010-2.md) - 基础实体类和Mapper创建
- [REQ-010-3.md](REQ-010-3.md) - Salesforce组织配置管理
- [REQ-010-4.md](REQ-010-4.md) - 元数据任务定义管理
- [REQ-010-5.md](REQ-010-5.md) - Metadata API客户端封装
- [010-metadata-retrieve-deploy-sub-requirements.md](010-metadata-retrieve-deploy-sub-requirements.md) - REQ-010子需求拆分文档
- [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 客户端参考文档(唯一真源)
## Context Maps
强制列出本次需求依赖的 Canvas 文件:
- [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示
- **相关节点**: [集成核心](node_integration_core) - 提供与Salesforce的各种连接方式
- **相关节点**: [SessionManager](node_session_manager_detail) - 会话管理,提供登录服务
## 需求目标
实现Salesforce元数据拉取的核心功能使用Metadata API的retrieve()方法支持异步执行、状态轮询、Zip文件下载。
## 需求描述
### 概述
本需求旨在实现Salesforce元数据拉取的核心功能包括手动触发拉取、异步拉取执行、状态监控、拉取历史记录、拉取进度查询、拉取取消功能等。
### 详细需求
#### 1. 手动触发拉取功能
- **需求描述**: 实现手动触发拉取功能,创建作业执行记录
- **优先级**: 高
- **验收标准**:
- 能够成功手动触发拉取
- 支持选择任务IDtaskId
- 支持选择组织配置orgConfigId
- 触发成功返回作业执行记录ID
- 创建作业执行记录到datai_meta_job_execution表
- 记录任务类型jobTyperetrieve/deploy
- 记录初始状态statusPending
- API接口符合RESTful规范
- 使用@Valid注解进行参数验证
- **依赖关系**: 依赖于REQ-010-1, REQ-010-2, REQ-010-3, REQ-010-4, REQ-010-5
- **实现建议**: 使用MetadataApiClient调用retrieve()方法使用异步线程池执行拉取任务创建DataiMetaJobExecution记录
#### 2. 异步拉取执行
- **需求描述**: 实现异步拉取执行,避免阻塞主线程
- **优先级**: 高
- **验收标准**:
- 异步拉取执行正常工作
- 使用线程池管理异步任务
- 支持并发拉取
- 拉取任务不阻塞系统响应
- 使用@Async注解实现异步执行
- 使用ThreadPoolTaskExecutor配置线程池
- 使用CompletableFuture支持异步结果
- 更新作业执行记录的asyncProcessId字段
- **依赖关系**: 依赖于手动触发拉取功能
- **实现建议**: 使用Spring的@Async注解或线程池实现异步执行使用ConcurrentHashMap存储正在运行的作业
#### 3. 状态监控
- **需求描述**: 实现拉取状态监控Pending/Processing/Success/Failed/Partial_Success/Cancelled
- **优先级**: 高
- **验收标准**:
- 状态监控正常工作
- 使用状态机管理拉取状态
- 支持状态查询
- 状态更新及时
- 更新作业执行记录的status字段
- 更新作业执行记录的state字段Salesforce作业状态
- 更新作业执行记录的startTime和endTime字段
- 计算并更新durationSeconds字段
- 支持多种状态Pending/Processing/Success/Failed/Partial_Success/Cancelled
- **依赖关系**: 依赖于异步拉取执行
- **实现建议**: 使用状态机管理拉取状态,使用轮询机制检查拉取状态,使用枚举类定义拉取状态
#### 4. 拉取历史记录
- **需求描述**: 实现拉取历史记录功能,查询作业执行记录
- **优先级**: 高
- **验收标准**:
- 拉取历史记录成功
- 支持分页查询
- 支持条件查询按taskId、orgConfigId、jobType、status等
- 历史记录完整
- 支持导出功能
- 使用MyBatis Plus的BaseMapper实现历史记录查询
- 使用QueryWrapper实现条件查询
- 使用分页插件实现分页查询
- **依赖关系**: 依赖于状态监控
- **实现建议**: 使用MyBatis Plus的BaseMapper实现历史记录查询使用DataiMetaJobExecutionMapper
#### 5. 拉取进度查询
- **需求描述**: 实现拉取进度查询功能,实时显示拉取进度
- **优先级**: 高
- **验收标准**:
- 拉取进度查询成功
- 支持实时进度查询
- 进度信息准确
- 支持进度百分比显示
- 更新作业执行记录的progressPercent字段
- 计算进度百分比(已处理组件数/总组件数)
- 支持缓存提高查询性能
- 使用轮询机制获取进度
- **依赖关系**: 依赖于状态监控
- **实现建议**: 使用轮询机制获取进度,使用缓存提高查询性能,计算进度百分比
#### 6. 拉取取消功能
- **需求描述**: 实现拉取取消功能,取消正在进行的拉取任务
- **优先级**: 高
- **验收标准**:
- 拉取取消功能正常工作
- 支持取消正在进行的拉取任务
- 取消后资源正确释放
- 取消状态更新及时
- 使用Future.cancel()取消异步任务
- 更新作业执行记录的status字段为Cancelled
- 更新作业执行记录的errorMessage字段
- 使用状态机管理取消状态
- 使用异常处理机制处理取消异常
- **依赖关系**: 依赖于异步拉取执行
- **实现建议**: 使用Future.cancel()取消异步任务使用状态机管理取消状态使用ConcurrentHashMap管理正在运行的作业
#### 7. 作业执行记录管理
- **需求描述**: 实现作业执行记录的完整管理功能
- **优先级**: 高
- **验收标准**:
- 支持查询作业执行记录列表
- 支持获取作业执行记录详情
- 支持新增作业执行记录
- 支持修改作业执行记录
- 支持删除作业执行记录
- 支持批量删除作业执行记录
- 支持导出作业执行记录
- 记录详细的作业执行信息(包括组件数、测试结果等)
- 使用DataiMetaJobExecution实体类
- 使用DataiMetaJobExecutionController提供RESTful API接口
- 权限标识为metadata:execution:*
- **依赖关系**: 依赖于所有拉取功能
- **实现建议**: 使用MyBatis Plus的BaseMapper实现CRUD使用@PreAuthorize注解进行权限控制
## 约束
- **技术栈限制**: 必须基于现有的Spring Boot 3 + Vue 3技术栈
- **架构约束**: 必须遵循Authentication.canvas中定义的架构和调用关系
- **模块约束**: 必须在datai-salesforce-metadata模块下实现
- **数据库约束**: 必须使用MyBatis Plus作为持久层框架
- **认证约束**: 必须使用SessionManager进行会话管理和自动重新登录
- **API约束**: 必须使用现有的集成核心功能进行Salesforce API调用
- **异步约束**: 必须使用异步线程池执行长时间任务
- **文档约束**: 必须遵循REQ-010中定义的验收标准
- **依赖约束**: 必须依赖于REQ-010-1, REQ-010-2, REQ-010-3, REQ-010-4, REQ-010-5
- **数据模型约束**: 必须使用DataiMetaJobExecution实体类包含以下字段
- id: 主键ID
- taskId: 任务ID
- orgConfigId: 组织配置ID
- jobType: 作业类型retrieve/deploy
- status: 状态Pending/Processing/Success/Failed/Partial_Success/Cancelled
- jobId: Salesforce作业ID
- asyncProcessId: 异步进程ID
- state: 作业状态Salesforce作业状态
- startTime: 开始时间
- endTime: 结束时间
- durationSeconds: 耗时(秒)
- progressPercent: 进度百分比
- numberComponentsTotal: 总组件数
- numberComponentsDeployed: 已部署组件数
- numberComponentErrors: 错误组件数
- numberTestWarnings: 测试警告数
- numberTestErrors: 测试错误数
- numberTestsTotal: 总测试数
- numberTestsCompleted: 已完成测试数
- runTestResult: 测试结果
- deployDetails: 部署详情
- errorMessage: 错误信息
- deptId: 部门ID
- **API设计约束**: 必须提供RESTful API接口包括/list、/export、/{id}、POST、PUT、DELETE/{ids}等接口
- **权限约束**: 必须使用@PreAuthorize注解进行权限控制权限标识为metadata:execution:*
- **异步执行约束**: 必须使用Spring的@Async注解实现异步执行
- **线程池约束**: 必须使用ThreadPoolTaskExecutor配置线程池
- **轮询机制约束**: 必须使用轮询机制检查拉取状态
- **状态机约束**: 必须使用状态机管理拉取状态转换
- **并发控制约束**: 必须使用ConcurrentHashMap存储正在运行的作业
## Rule Set
"请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。"
**具体规则**
- 必须使用Canvas中定义的类名和方法名
- 必须遵循Canvas中定义的调用关系
- 必须参考Canvas中的流程图逻辑
- 必须使用SessionManager进行会话管理和自动重新登录
- 必须使用现有的认证模块进行OAuth认证
- 必须使用现有的集成核心功能进行API调用
- 必须遵循现有的异常处理机制
- 必须遵循现有的日志记录规范
## 验收标准
- **功能完整性**: 所有拉取功能能够正常工作,异步执行机制正常
- **性能指标**: 拉取操作不影响系统响应,状态轮询频率合理
- **代码规范性**: 代码符合项目编码规范,有清晰的注释
- **可维护性**: 代码结构清晰,易于扩展和维护
- **可测试性**: 代码易于单元测试和集成测试
## 风险
- **异步执行风险**: 异步执行机制复杂可能导致状态管理困难
- **状态轮询风险**: 状态轮询频率不当可能导致API限流
- **拉取取消风险**: 拉取取消功能复杂可能导致资源泄漏
- **历史记录风险**: 拉取历史记录过多可能影响查询性能
- **进度查询风险**: 进度查询不准确可能导致用户体验差
- **并发控制风险**: ConcurrentHashMap使用不当可能导致线程安全问题
- **状态机风险**: 状态机设计不当可能导致状态转换错误
- **Future.cancel()风险**: Future.cancel()调用不当可能导致任务无法正确取消
- **ConcurrentHashMap风险**: ConcurrentHashMap使用不当可能导致内存泄漏
- **作业执行记录风险**: DataiMetaJobExecution实体类字段过多可能导致查询性能下降
- **权限控制风险**: @PreAuthorize注解配置不当可能导致权限漏洞
- **参数验证风险**: @Valid注解配置不当可能导致参数验证失败
- **事务一致性风险**: @Transactional注解使用不当可能导致数据不一致
- **异常处理风险**: 异常处理不完善可能导致任务失败无法恢复
- **日志记录风险**: 日志记录不完善可能导致问题排查困难
- **测试覆盖率风险**: 单元测试不完善可能导致代码质量问题
- **轮询超时风险**: 轮询超时设置不当可能导致任务失败
- **进度计算风险**: 进度百分比计算错误可能导致用户体验差
- **作业状态更新风险**: 作业状态更新不及时可能导致用户看到过期信息
- **批量删除风险**: 批量删除作业执行记录可能导致数据丢失
## 需求变更记录
| 日期 | 变更内容 | 变更原因 | 变更人 | 审核人 | 状态 |
|------|---------|---------|--------|--------|------|
| 2026-01-17 | 创建需求文档 | 初始需求 | 系统管理员 | - | 待审核 |
| 2026-01-18 | 完成需求实现 | 完成6个阶段的开发流程 | Datai Team | - | 已完成 |
## 相关人员
- **需求提出人**: 系统管理员 - 联系方式
- **需求负责人**: 系统管理员 - 联系方式
- **技术负责人**: 开发工程师 - 联系方式
- **测试负责人**: 测试工程师 - 联系方式
- **其他相关人员**: - 联系方式
## 评审信息
- **评审日期**: -
- **评审人员**: -
- **评审结果**: -
- **评审意见**: -
- **修改建议**: -