datai/docs/archive/REQ-011.md

310 lines
16 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 - Salesforce文件上传下载功能
## 需求信息
- **需求名称**: Salesforce文件上传下载功能支持Attachment、ContentDocument、Document
- **需求类型**: 功能需求
- **需求编号**: REQ-011
- **父需求**: 无
- **创建日期**: 2026-01-19
- **需求版本**: v2.0.0
- **需求提出人**: 系统管理员
- **需求状态**: 待审核
## 输入引用
引用相关的 docs 文档链接:
- [Attachment文件上传.md](../reference-code/data-dump/Attachment文件上传.md) - Salesforce Attachment 上传实现逻辑
- [Attachment文件下载.md](../reference-code/data-dump/Attachment文件下载.md) - Salesforce Attachment 下载实现逻辑
- [Document上传下载.md](../reference-code/data-dump/Document上传下载.md) - Salesforce Document 上传下载实现逻辑
- [ContentVersion上传下载.md](../reference-code/data-dump/ContentVersion上传下载.md) - Salesforce ContentVersion (ContentDocument) 上传下载实现逻辑
- [大文件上传下载.md](../reference-code/data-dump/大文件上传下载.md) - 大文件上传下载实现逻辑Multipart/form-data
- [CommonServiceImpl.java](../reference-code/data-dump/CommonServiceImpl.java) - 现有的文件上传下载实现逻辑
## Context Maps
强制列出本次需求依赖的 Canvas 文件:
- [Authentication.canvas](../Authentication.canvas) - 项目架构视觉化展示
- **相关节点**: [集成核心](node_integration_core) - 提供与Salesforce的各种连接方式
- **相关节点**: [SessionManager](node_session_manager_detail) - 会话管理,提供登录服务
## 需求目标
在 datai-salesforce-integration 模块新增一个 controller实现 Salesforce 的文件指定 org 上传下载功能,支持用户通过指定组织配置 ID 上传和下载 Salesforce 三种文件对象类型的文件:
- **Attachment**:传统附件对象(已弃用,但需兼容旧系统)
- **ContentDocument/ContentVersion**现代文件对象推荐使用支持版本控制、多记录关联、最大2GB
- **Document**文档对象用于存储Email模板Logo、Classic模式附件等最大20-30MB
## 子需求列表
本需求已拆分为以下 6 个子需求,可逐一独立实现:
| 子需求编号 | 子需求名称 | 描述 | 依赖关系 | 优先级 |
|-----------|-----------|------|---------|--------|
| [REQ-011-1](./REQ-011-1.md) | 基础设施和枚举定义 | 定义文件对象类型枚举、参数类、异常类和验证工具类 | 无 | 高 |
| [REQ-011-2](./REQ-011-2.md) | Attachment 文件上传下载功能 | 实现 Attachment 对象的文件上传下载功能,使用 REST API + Base64 编码 | REQ-011-1 | 高 |
| [REQ-011-3](./REQ-011-3.md) | ContentDocument/ContentVersion 文件上传下载功能 | 实现 ContentDocument/ContentVersion 对象的文件上传下载功能,使用 REST API + Multipart/form-data | REQ-011-1 | 高 |
| [REQ-011-4](./REQ-011-4.md) | Document 文件上传下载功能 | 实现 Document 对象的文件上传下载功能,使用 Partner API (SOAP) | REQ-011-1 | 高 |
| [REQ-011-5](./REQ-011-5.md) | 文件上传下载 Controller 和 API 接口 | 创建 FileController提供文件上传下载的 RESTful API 接口 | REQ-011-1, REQ-011-2, REQ-011-3, REQ-011-4 | 高 |
| [REQ-011-6](./REQ-011-6.md) | 错误处理和异常机制完善 | 实现完善的错误处理机制,包括自定义异常类、全局异常处理器、错误日志记录 | REQ-011-1 | 高 |
### 实现顺序建议
建议按照以下顺序实现子需求:
1. **REQ-011-1**:基础设施和枚举定义(无依赖,优先实现)
2. **REQ-011-2**Attachment 文件上传下载功能(依赖 REQ-011-1
3. **REQ-011-3**ContentDocument/ContentVersion 文件上传下载功能(依赖 REQ-011-1
4. **REQ-011-4**Document 文件上传下载功能(依赖 REQ-011-1
5. **REQ-011-6**:错误处理和异常机制完善(依赖 REQ-011-1可与 REQ-011-2/3/4 并行)
6. **REQ-011-5**:文件上传下载 Controller 和 API 接口(依赖所有前面的子需求)
## 需求描述
### 概述
本需求旨在在 datai-salesforce-integration 模块新增一个 controller实现 Salesforce 的文件上传下载功能。用户可以通过指定组织配置 ID将本地文件上传到 Salesforce 的三种文件对象Attachment、ContentDocument、Document或从这些对象下载文件到本地。
### 三种文件对象对比
| 特性 | Attachment | ContentDocument/ContentVersion | Document |
|------|-----------|-------------------------------|----------|
| **主要用途** | 传统附件(已弃用) | 现代文件管理、版本控制 | Email模板Logo、Classic附件 |
| **单文件限制** | 50MBBase64编码后约33MB | 2GB | 20-30MB |
| **版本管理** | 不支持 | 支持多版本 | 不支持(只能覆盖) |
| **关联方式** | 绑定到ParentId | 通过ContentDocumentLink关联到多个记录 | 存储在DocumentFolder |
| **上传方式** | REST API (JSON + Base64) | REST API (Multipart/form-data) | Partner API (SOAP) |
| **推荐等级** | 仅兼容旧系统 | **强烈推荐** | 仅用于特定遗留功能 |
| **必填字段** | ParentId, Name, Body | Title, PathOnClient, VersionData | FolderId, Name, Body |
### 详细需求
#### 1. 文件上传功能(支持三种对象类型)
- **需求描述**: 实现将本地文件上传到 Salesforce Attachment、ContentDocument、Document 三种对象的功能
- **优先级**: 高
- **验收标准**:
- **Attachment 上传**
- 能够成功上传本地文件到 Salesforce Attachment 对象
- 支持指定组织配置 ID
- 支持指定 ParentId关联的记录 ID
- 支持指定文件名
- 文件内容使用 Base64 编码
- 上传成功返回 Attachment ID
- 支持文件大小限制(建议不超过 50MB
- **ContentDocument/ContentVersion 上传**
- 能够成功上传本地文件到 Salesforce ContentVersion 对象
- 支持指定组织配置 ID
- 支持指定 FirstPublishLocationId关联的记录 ID可选
- 支持指定文件名Title 和 PathOnClient
- 使用 Multipart/form-data 格式上传
- 上传成功返回 ContentVersion ID
- 支持大文件上传(最大 2GB
- 使用流式处理避免内存溢出
- **Document 上传**
- 能够成功上传本地文件到 Salesforce Document 对象
- 支持指定组织配置 ID
- 支持指定 FolderId必填
- 支持指定文件名和 DeveloperName
- 文件内容使用 Base64 编码
- 上传成功返回 Document ID
- 支持文件大小限制(建议不超过 20-30MB
- **通用要求**
- API 接口符合 RESTful 规范
- 支持文件类型验证
- 支持文件大小验证
- **依赖关系**: 依赖于 datai-salesforce-integration 模块的 SessionManager 和 RESTConnection/PartnerV1Connection
- **实现建议**:
- **Attachment**: 使用 HttpClient 发送 POST 请求到 Salesforce REST API使用 Base64 编码文件内容
- **ContentDocument/ContentVersion**: 使用 Apache HttpClient 发送 Multipart/form-data 请求到 Salesforce REST API使用流式处理
- **Document**: 使用 Partner API (SOAP) 创建 Document 对象
- 使用 SessionManager 获取 Access Token
- 使用 @Valid 注解进行参数验证
- 使用策略模式封装三种上传方式
#### 2. 文件下载功能(支持三种对象类型)
- **需求描述**: 实现从 Salesforce Attachment、ContentDocument、Document 三种对象下载文件到本地的功能
- **优先级**: 高
- **验收标准**:
- **Attachment 下载**
- 能够成功从 Salesforce Attachment 对象下载文件到本地
- 支持指定组织配置 ID
- 支持指定 Attachment ID
- 支持指定保存路径
- 使用流式处理避免内存溢出
- 下载成功返回文件信息
- **ContentDocument/ContentVersion 下载**
- 能够成功从 Salesforce ContentVersion 对象下载文件到本地
- 支持指定组织配置 ID
- 支持指定 ContentVersion ID
- 支持指定保存路径
- 使用流式处理避免内存溢出
- 下载成功返回文件信息
- 支持大文件下载(最大 2GB
- **Document 下载**
- 能够成功从 Salesforce Document 对象下载文件到本地
- 支持指定组织配置 ID
- 支持指定 Document ID
- 支持指定保存路径
- 使用流式处理避免内存溢出
- 下载成功返回文件信息
- **通用要求**
- API 接口符合 RESTful 规范
- 支持大文件下载
- 支持断点续传(可选)
- **依赖关系**: 依赖于 datai-salesforce-integration 模块的 SessionManager 和 RESTConnection/PartnerV1Connection
- **实现建议**:
- **Attachment/ContentDocument**: 使用 HttpClient 发送 GET 请求到 Salesforce REST API使用 InputStream 流式处理文件内容
- **Document**: 使用 Partner API (SOAP) 查询 Document 对象的 Body 字段
- 使用 SessionManager 获取 Access Token
- 使用 FileOutputStream 保存文件到本地
- 使用 @Valid 注解进行参数验证
- 使用策略模式封装三种下载方式
#### 3. 指定组织配置
- **需求描述**: 支持用户指定组织配置 ID使用指定的组织配置进行文件上传下载
- **优先级**: 高
- **验收标准**:
- 能够根据指定的组织配置 ID 获取对应的 Access Token
- 支持多个组织配置的文件上传下载
- 组织配置 ID 参数验证
- 组织配置不存在时返回错误信息
- **依赖关系**: 依赖于 datai-salesforce-integration 模块的 SessionManager
- **实现建议**:
- 使用 SessionManager 根据组织配置 ID 获取 Access Token
- 使用 @Valid 注解进行参数验证
- 使用自定义异常处理组织配置不存在的情况
#### 4. 错误处理机制
- **需求描述**: 实现完善的错误处理机制,包括文件上传下载失败、组织配置不存在、文件不存在、文件大小超限等错误
- **优先级**: 高
- **验收标准**:
- 文件上传失败时返回详细的错误信息
- 文件下载失败时返回详细的错误信息
- 组织配置不存在时返回错误信息
- 文件不存在时返回错误信息
- 文件大小超限时返回错误信息
- 文件类型不支持时返回错误信息
- 使用统一的异常处理机制
- 错误信息清晰易懂
- **依赖关系**: 依赖于文件上传下载功能
- **实现建议**:
- 使用自定义异常类封装错误信息
- 使用 GlobalExceptionHandler 统一处理异常
- 使用 Slf4j 记录错误日志
#### 5. 文件对象类型枚举
- **需求描述**: 定义文件对象类型枚举,支持 Attachment、ContentDocument、Document 三种类型
- **优先级**: 高
- **验收标准**:
- 定义 FileObjectType 枚举类
- 包含 ATTACHMENT、CONTENT_DOCUMENT、DOCUMENT 三个枚举值
- 提供枚举值的描述信息
- 提供枚举值到字符串的转换方法
- 提供字符串到枚举值的转换方法
- **依赖关系**: 无
- **实现建议**:
- 使用 Java 枚举定义 FileObjectType
- 添加枚举值的描述字段
- 添加静态方法进行转换
## 约束
- **技术栈限制**: 必须基于现有的 Spring Boot 3 技术栈
- **架构约束**: 必须遵循 Authentication.canvas 中定义的架构和调用关系
- **模块约束**: 必须在 datai-salesforce-integration 模块下实现
- **认证约束**: 必须使用 SessionManager 进行会话管理和自动重新登录
- **API约束**:
- Attachment 和 ContentDocument/ContentVersion 必须使用 Salesforce REST API
- Document 必须使用 Salesforce Partner API (SOAP)
- **文件大小约束**:
- Attachment: 单个文件大小建议不超过 50MB
- ContentDocument/ContentVersion: 单个文件大小最大 2GB
- Document: 单个文件大小建议不超过 20-30MB
- **内存约束**: 必须使用流式处理避免内存溢出(特别是 ContentDocument/ContentVersion
- **依赖约束**: ContentDocument/ContentVersion 需要引入 Apache HttpClient 依赖
- **文档约束**: 必须遵循 SSOT 方法论
- **设计模式约束**: 必须使用策略模式封装三种文件对象的上传下载逻辑
## Rule Set
"请严格参考 @Authentication.canvas 中的状态机转移逻辑,不要自行发挥。"
**具体规则**
- 必须使用 Canvas 中定义的类名和方法名
- 必须遵循 Canvas 中定义的调用关系
- 必须参考 Canvas 中的流程图逻辑
- 必须使用 SessionManager 进行会话管理和自动重新登录
- 必须使用现有的认证模块进行 OAuth 认证
- 必须遵循现有的异常处理机制
- 必须遵循现有的日志记录规范
- 必须使用策略模式封装三种文件对象Attachment、ContentDocument、Document的上传下载逻辑
- 必须使用 RESTConnection 处理 Attachment 和 ContentDocument/ContentVersion 的 REST API 调用
- 必须使用 PartnerV1Connection 处理 Document 的 SOAP API 调用
- 必须使用流式处理处理大文件ContentDocument/ContentVersion
## 验收标准
- **功能完整性**: 文件上传下载功能能够正常工作,支持指定组织配置 ID支持 Attachment、ContentDocument、Document 三种文件对象类型
- **性能指标**:
- 文件上传下载不影响系统响应
- 大文件处理性能良好(特别是 ContentDocument/ContentVersion 的 2GB 文件)
- 流式处理有效避免内存溢出
- **代码规范性**:
- 代码符合项目编码规范,有清晰的注释
- 使用策略模式封装三种文件对象的上传下载逻辑
- 遵循单一职责原则和开闭原则
- **可维护性**:
- 代码结构清晰,易于扩展和维护
- 新增文件对象类型时只需添加新的策略实现
- 配置与代码分离,易于调整
- **可测试性**:
- 代码易于单元测试和集成测试
- 每个策略可以独立测试
- 提供完整的测试用例覆盖
## 风险
- **文件大小风险**:
- 大文件上传下载可能导致内存溢出(特别是 Attachment 和 Document
- ContentDocument/ContentVersion 的 2GB 文件需要流式处理
- **API 限流风险**: 频繁的 API 调用可能导致 Salesforce API 限流
- **认证失效风险**: Access Token 失效可能导致文件上传下载失败
- **网络异常风险**: 网络异常可能导致文件上传下载失败
- **并发风险**: 并发上传下载可能导致资源竞争
- **文件对象类型风险**:
- Attachment 已被 Salesforce 弃用,未来可能被移除
- Document 功能受限,仅适用于特定场景
- 不同文件对象类型的 API 调用方式不同,增加实现复杂度
- **依赖风险**: ContentDocument/ContentVersion 需要引入 Apache HttpClient 依赖,可能与其他依赖冲突
- **兼容性风险**: 三种文件对象类型的字段和 API 行为不同,需要仔细处理兼容性问题
## 需求变更记录
| 日期 | 变更内容 | 变更原因 | 变更人 | 审核人 | 状态 |
|------|---------|---------|--------|--------|------|
| 2026-01-19 | 创建需求文档 | 初始需求 | 系统管理员 | - | 待审核 |
| 2026-01-19 | 优化需求文档,添加对 ContentDocument 和 Document 对象的支持 | 扩展文件对象类型支持,从单一 Attachment 扩展到三种文件对象类型 | 系统管理员 | - | 待审核 |
## 相关人员
- **需求提出人**: 系统管理员 - 联系方式
- **需求负责人**: 系统管理员 - 联系方式
- **技术负责人**: 开发工程师 - 联系方式
- **测试负责人**: 测试工程师 - 联系方式
- **其他相关人员**: - 联系方式
## 评审信息
- **评审日期**: -
- **评审人员**: -
- **评审结果**: -
- **评审意见**: -
- **修改建议**: -