datai/datai-scenes/datai-scene-salesforce/docs/changelog/2026-01-30-004-changelog.md

189 lines
6.9 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.

# 变更日志
## 元数据
- 需求编号001-04
- 变更时间2026-01-30
- 变更人AI Assistant
- 版本号v1.0.0
- 状态:已完成
## 变更概述
实现 Salesforce Partner API 的查询功能,包括 SOQL 查询Query、查询所有记录QueryAll、分页查询QueryMore和 SOSL 搜索Search四个核心功能。提供完整的 REST API 接口,支持查询结果分页、参数验证、异常处理和权限控制。
## 变更内容
### 新增功能
#### 1. SOQL 查询Query
- 执行标准 SOQL 查询语句
- 支持自定义批次大小1-2000默认 500
- 支持关系查询(如 Account.Name
- 返回查询结果、分页信息和记录数量
- 最多返回 50000 条记录
#### 2. 查询所有记录QueryAll
- 执行 SOQL 查询包括已删除的记录Recycle Bin 中的记录)
- 支持自定义批次大小
- 适用于数据恢复和审计场景
#### 3. 分页查询QueryMore
- 使用 QueryLocator 获取查询结果的下一页
- 支持 Query 和 QueryAll 结果的分页
- 自动处理分页边界条件
#### 4. SOSL 搜索Search
- 执行 SOSL 搜索语句
- 支持跨对象搜索
- 返回按对象类型分组的搜索结果
- 支持全文搜索和字段搜索
### 新增 DTO 类
1. **QueryDto.java** - SOQL 查询请求参数
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/QueryDto.java`
- 字段soql查询语句、batchSize批次大小
- 验证:@NotBlank、@Min(1)、@Max(2000)
2. **QueryAllDto.java** - QueryAll 请求参数
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/QueryAllDto.java`
- 字段soql查询语句、batchSize批次大小
- 验证:@NotBlank、@Min(1)、@Max(2000)
3. **QueryMoreDto.java** - QueryMore 请求参数
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/QueryMoreDto.java`
- 字段queryLocator查询定位器
- 验证:@NotBlank
4. **SearchDto.java** - SOSL 搜索请求参数
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/SearchDto.java`
- 字段sosl搜索语句
- 验证:@NotBlank
### 新增 VO 类
1. **QueryResultVo.java** - 查询结果
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/QueryResultVo.java`
- 字段records记录列表、queryLocator查询定位器、done是否完成、size记录数量、success是否成功、errors错误信息
2. **SearchResultVo.java** - 搜索结果
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SearchResultVo.java`
- 字段searchRecords搜索结果列表、success是否成功、errors错误信息
3. **SearchRecordVo.java** - 搜索记录
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SearchRecordVo.java`
- 字段type记录类型、record记录数据
### 新增 Service 接口和实现
1. **IPartnerQueryService.java** - 查询服务接口
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerQueryService.java`
- 方法query(QueryDto)、queryAll(QueryAllDto)、queryMore(QueryMoreDto)、search(SearchDto)
2. **PartnerQueryServiceImpl.java** - 查询服务实现
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerQueryServiceImpl.java`
- 功能:
- 通过 PartnerConnectionFactory 获取连接
- 设置查询选项(批次大小)
- 执行查询并处理结果
- 异常处理和日志记录
- SObject 到 Map 的转换
### 新增 Controller
**PartnerQueryController.java** - 查询控制器
- 路径:`datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerQueryController.java`
- 接口:
- POST `/partner/query` - 执行 SOQL 查询
- POST `/partner/queryAll` - 查询所有记录(包括已删除的)
- POST `/partner/queryMore` - 获取查询结果的下一页
- POST `/partner/search` - 执行 SOSL 搜索
- 权限控制:@PreAuthorize("@ss.hasLogin()")
- Swagger 文档:@Operation、@Tag
### 新增单元测试
**PartnerQueryServiceImplTest.java** - 查询服务单元测试
- 路径:`datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerQueryServiceImplTest.java`
- 测试用例:
- testQuerySuccess - 查询成功场景
- testQueryEmptyResult - 查询空结果场景
- testQueryConnectionException - 连接异常场景
- testQueryAllSuccess - QueryAll 成功场景
- testQueryMoreSuccess - QueryMore 成功场景
- testSearchSuccess - 搜索成功场景
- testSearchEmptyResult - 搜索空结果场景
- testSearchConnectionException - 搜索连接异常场景
### 新增文档
1. **设计文档**[2026-01-30-004-查询功能-设计.md](./design/2026-01-30-004-查询功能-设计.md)
2. **决策记录**[2026-01-30-004-ADR-查询功能技术选型.md](./decisions/2026-01-30-004-ADR-查询功能技术选型.md)
3. **提示词**[2026-01-30-004-prompt-查询功能.md](./prompts/2026-01-30-004-prompt-查询功能.md)
## 影响范围
### 模块级别
- **模块**`datai-salesforce-partner`
- **新增文件**11 个
- 4 个 DTO 类
- 3 个 VO 类
- 1 个 Service 接口
- 1 个 Service 实现
- 1 个 Controller
- 1 个单元测试类
### 功能级别
- **功能**Salesforce Partner API 查询功能
- **子功能**
- SOQL 查询Query
- 查询所有记录QueryAll
- 分页查询QueryMore
- SOSL 搜索Search
### 接口级别
- **新增接口**4 个 REST API 接口
- POST `/partner/query`
- POST `/partner/queryAll`
- POST `/partner/queryMore`
- POST `/partner/search`
### 依赖关系
- **依赖模块**`datai-salesforce-auth`
- PartnerConnectionFactory
- SessionManager
- **依赖模块**`datai-salesforce-common`
- SalesforceAuthException
- SalesforceOperationException
- ErrorVo
## 技术特性
### 查询选项
- 支持通过 `setQueryOptions(int)` 设置查询批处理大小
- 默认批次大小500
- 最大批次大小2000
### 结果处理
- SObject 数组转换为 List<Map<String, Object>>
- 支持关系字段访问(如 Account.Name
- 自动处理空结果和异常场景
### 分页机制
- 使用 QueryLocator 进行分页
- QueryMore 获取下一页结果
- 自动检测是否完成done 标志)
### 搜索功能
- 支持 SOSL 全文搜索
- 按对象类型分组返回结果
- 支持多对象搜索
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-001-04-查询功能.md)
- [设计文档](../design/2026-01-30-004-查询功能-设计.md)
- [决策记录](../decisions/2026-01-30-004-ADR-查询功能技术选型.md)
- [提示词文档](../prompts/2026-01-30-004-prompt-查询功能.md)
- [会话记录](../sessions/2026-01-28-001-session.md)
- [API 文档](../api-docs/2026-01-30-004-api.md)
- [复盘文档](../retros/2026-01-30-004-retro.md)