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

12 KiB
Raw Blame History

Requirements - 元数据拉取核心功能

需求信息

  • 需求名称: 元数据拉取核心功能
  • 需求类型: 功能需求
  • 需求编号: REQ-010-6
  • 父需求: REQ-010
  • 创建日期: 2026-01-17
  • 需求版本: v1.0.0
  • 需求提出人: 系统管理员
  • 需求状态: 已完成

输入引用

引用相关的 docs 文档链接:

Context Maps

强制列出本次需求依赖的 Canvas 文件:

需求目标

实现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 - 已完成

相关人员

  • 需求提出人: 系统管理员 - 联系方式
  • 需求负责人: 系统管理员 - 联系方式
  • 技术负责人: 开发工程师 - 联系方式
  • 测试负责人: 测试工程师 - 联系方式
  • 其他相关人员: - 联系方式

评审信息

  • 评审日期: -
  • 评审人员: -
  • 评审结果: -
  • 评审意见: -
  • 修改建议: -