1066 lines
74 KiB
Markdown
1066 lines
74 KiB
Markdown
# 会话记录
|
||
|
||
## 元数据
|
||
- 需求编号:001
|
||
- 开始时间:2026-01-28
|
||
- 结束时间:2026-02-02
|
||
- 当前阶段:阶段 9:闭环复盘和接口文档(高级功能)
|
||
- 状态:已完成(认证和会话管理已完成,CRUD 操作已完成,批量操作已完成,查询功能已完成,描述功能已完成,高级功能已完成阶段 9)
|
||
|
||
## 需求澄清记录
|
||
|
||
### 原始需求
|
||
严格遵守项目规则,现在我有个需求,想将 `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\reference-code\sforce\docs\partner-module.md` 中的功能结合当前模块的实际情况,在 `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-partner` 模块下进行实现,默认实现源org类型
|
||
|
||
### 第一轮澄清
|
||
**AI 提问**:
|
||
1. 这个功能的核心目标是什么?
|
||
2. 这个功能涉及哪些业务场景?
|
||
3. 这个功能需要支持哪些用户角色?
|
||
4. 功能边界:根据 `partner-module.md` 文档,Partner API 包含大量功能(CRUD、批量操作、查询、描述、认证、高级功能等)。您希望实现所有功能?还是优先实现核心功能?哪些功能是必须实现的?
|
||
5. 使用场景:这个模块的主要使用场景是什么?
|
||
6. 用户角色:谁会使用这个模块?
|
||
7. 依赖包:我看到 `datai-salesforce-partner/src/main/resources/lib/partner.jar` 已经存在,这个是 Salesforce 官方的 Partner API 客户端吗?我们需要基于这个包进行封装吗?
|
||
8. 现有集成:项目中已经有 `datai-salesforce-integration` 模块,其中包含 `PartnerV1Connection` 和 `IPartnerV1Connection`,新的 `datai-salesforce-partner` 模块与它们的关系是什么?
|
||
|
||
**用户回答**:
|
||
对,就实现源 org(Source Org)的,实现所有功能,全部功能,除了引用 `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-auth` 模块进行登录认证,其它不引用任何模块的代码
|
||
|
||
### 第二轮澄清
|
||
**AI 提问**:
|
||
1. 功能范围确认:根据 `partner-module.md`,Partner API 包含以下功能模块,您确认全部实现吗?(CRUD 操作、批量操作、查询功能、描述功能、认证和会话、高级功能)
|
||
2. 认证集成:您提到只引用 `datai-salesforce-auth` 模块进行登录认证,具体是指?
|
||
3. 独立模块设计:既然不引用其他模块,那么是否需要独立的 Controller 层?还是只提供 Service 层?是否需要数据库表?
|
||
4. 依赖包使用:`partner.jar` 包含了 Partner API 的核心类(Connector、PartnerConnection、SObject 等),我们需要直接使用这些类?还是对这些类进行封装?
|
||
5. 异常处理:是否需要自定义异常类?还是使用 `datai-salesforce-common` 模块中的现有异常?
|
||
6. 日志记录:是否需要记录 API 调用日志?还是依赖 `datai-salesforce-integration` 的日志功能?
|
||
7. 连接管理:是否需要连接池?还是每次调用都创建新连接?
|
||
8. 并发控制:是否需要限流?还是依赖 `datai-salesforce-integration` 的限流功能?
|
||
9. 缓存策略:是否需要缓存 Describe 结果?
|
||
|
||
**用户回答**:
|
||
1、Partner API 包含功能模块,确认全部实现
|
||
2、使用 datai-salesforce-auth 的 SessionManager 管理会话,然后获取Session ID和url
|
||
3、独立模块,完全独立模块,除了引用auth模块,其它都是独立的
|
||
4、partner.jar有的,直接就用现有的类
|
||
5、异常处理,datai-salesforce-common 模块中的现有异常可以用就用,没有的话就自定义
|
||
6、日志记录暂不考虑
|
||
7、连接、并发、缓存等性能相关不影响功能的暂不考虑
|
||
|
||
### 第三轮澄清
|
||
**AI 提问**:
|
||
提供 Controller 层,默认实现source org类型
|
||
|
||
**用户回答**:
|
||
提供 Controller 层,默认实现source org类型
|
||
|
||
### 第四轮澄清
|
||
**AI 提问**:
|
||
直接使用 partner.jar 中的现有类(Connector、PartnerConnection、SObject、QueryResult、SaveResult 等)如果确实有需求需要使用自定义类,则新增,不过新增前需要严格判断
|
||
|
||
**用户回答**:
|
||
直接使用 partner.jar 中的现有类(Connector、PartnerConnection、SObject、QueryResult、SaveResult 等)如果确实有需求需要使用自定义类,则新增,不过新增前需要严格判断
|
||
|
||
### 澄清总结
|
||
- **功能范围**:实现 Partner API 的所有功能模块(CRUD、批量操作、查询、描述、认证、高级功能)
|
||
- **业务流程**:用户调用 REST API → Service 层处理 → 使用 partner.jar 调用 Salesforce API → 返回结果
|
||
- **数据交互**:不涉及数据库表,直接调用 Salesforce API
|
||
- **性能要求**:暂不考虑连接池、并发控制、缓存等性能优化
|
||
- **安全要求**:集成 `datai-salesforce-auth` 模块的会话管理,使用 SessionManager 获取 Session ID 和 Server URL
|
||
- **兼容性要求**:支持 Salesforce Partner API v65.0,兼容 Java 22 和 Spring Boot
|
||
|
||
## 需求描述
|
||
在 `datai-salesforce-partner` 模块中实现 Salesforce Partner API 的完整功能,提供对 Salesforce 源 org(Source Org)的数据操作能力,包括 CRUD 操作、批量操作、查询功能、描述功能、认证和会话管理、高级功能等。
|
||
|
||
## 执行阶段
|
||
|
||
### 阶段 1:需求定义与入库
|
||
- 状态:已完成
|
||
- 生成文档:[需求文档](../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||
- 关键决策:
|
||
- 实现所有 Partner API 功能模块
|
||
- 使用 SessionManager 管理会话
|
||
- 提供 Service 层和 Controller 层
|
||
- 直接使用 partner.jar 中的现有类
|
||
- 优先使用 datai-salesforce-common 模块中的现有异常
|
||
- 暂不考虑性能优化(连接池、并发控制、缓存)
|
||
|
||
### 阶段 2:方案设计
|
||
- 状态:已完成
|
||
- 生成文档:[认证和会话管理-设计](../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||
- 关键设计决策:
|
||
- 工厂模式:使用 PartnerConnectionFactory 工厂类创建和管理 PartnerConnection 连接,继承 AbstractConnectionFactory 抽象类
|
||
- 连接缓存:利用 AbstractConnectionFactory 提供的连接缓存和自动 Session 有效性检查功能
|
||
- 会话管理:集成 SessionManager 获取会话信息,支持 Session 过期时自动重新登录
|
||
- RESTful API:提供 3 个 REST API 接口(获取会话信息、获取用户信息、修改密码)
|
||
- 异常处理:使用 datai-salesforce-common 模块的异常体系,统一处理各种异常情况
|
||
- 技术栈:Spring Boot 3.x、Spring Security 6.x、MyBatis Plus 3.x、Salesforce Partner API WSC 58.x
|
||
- 数据模型:不涉及数据库表,所有数据均来自 Salesforce API
|
||
- 性能优化:连接缓存、多线程安全、压缩传输
|
||
- 安全设计:HTTPS 加密传输、权限控制、防注入
|
||
|
||
### 阶段 2:方案设计
|
||
- 状态:进行中
|
||
- 生成文档:
|
||
- 认证和会话管理:[认证和会话管理-设计](../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||
- CRUD 操作:[CRUD操作-设计](../design/2026-01-30-002-CRUD操作-设计.md)
|
||
- 批量操作:[批量操作-设计](../design/2026-01-30-003-批量操作-设计.md)
|
||
- 关键设计决策:
|
||
- 认证和会话管理:
|
||
- 系统架构:采用工厂模式管理 PartnerConnection 连接,继承 AbstractConnectionFactory 抽象类
|
||
- 连接缓存:利用 AbstractConnectionFactory 提供的连接缓存和自动 Session 有效性检查功能
|
||
- 会话管理:集成 SessionManager 获取会话信息,支持 Session 过期时自动重新登录
|
||
- RESTful API:提供 3 个 REST API 接口(获取会话信息、获取用户信息、修改密码)
|
||
- 异常处理:使用 datai-salesforce-common 模块的异常体系,统一处理各种异常情况
|
||
- 性能优化:连接缓存、多线程安全、压缩传输
|
||
- 安全设计:HTTPS 加密传输、权限控制、防注入
|
||
- CRUD 操作:
|
||
- 系统架构:采用分层架构(Controller → Service → Factory → Connection → Salesforce API)
|
||
- 模块架构:创建 PartnerCrudController、IPartnerCrudService、PartnerCrudServiceImpl、DTO、VO、SObjectConverter
|
||
- 技术栈:Spring Boot 3.x、Spring Security 6.x、若依框架、Salesforce Partner API(partner.jar)
|
||
- 数据模型:不涉及数据库表,所有数据均来自 Salesforce API
|
||
- 接口设计:提供 6 个 REST API 接口(Create、Retrieve、Update、Delete、Upsert、Merge)
|
||
- 异常处理:使用 datai-salesforce-common 模块的异常体系,统一处理各种异常情况
|
||
- 性能优化:连接缓存、自动 Session 有效性检查、批量操作
|
||
- 安全设计:HTTPS 加密传输、权限控制、参数验证、防注入
|
||
- 批量操作:
|
||
- 系统架构:采用分层架构(Controller → Service → Factory → Connection → Salesforce API)
|
||
- 模块架构:创建 PartnerBatchController、IPartnerBatchService、PartnerBatchServiceImpl、DTO、VO
|
||
- 技术栈:Spring Boot 3.x、Spring Security 6.x、若依框架、Salesforce Partner API(partner.jar)
|
||
- 数据模型:不涉及数据库表,所有数据均来自 Salesforce API
|
||
- 接口设计:提供 4 个 REST API 接口(批量创建、批量更新、批量删除、批量 Upsert)
|
||
- 核心算法:自动分批处理算法、批量操作统计算法
|
||
- 集成方案:与 Salesforce API 集成、与 SessionManager 集成
|
||
- 异常处理:使用 datai-salesforce-common 模块的异常体系,统一处理各种异常情况
|
||
- 性能优化:连接缓存、自动分批处理、AllOrNoneHeader 使用、DisableFeedTrackingHeader 使用、批次间休眠
|
||
- 安全设计:HTTPS 加密传输、权限控制、参数验证、防注入
|
||
|
||
### 阶段 3:方案决策
|
||
- 状态:进行中
|
||
- 生成文档:
|
||
- 认证和会话管理:[认证和会话管理技术选型](../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||
- CRUD 操作:[CRUD操作技术选型](../decisions/2026-01-30-002-ADR-CRUD操作技术选型.md)
|
||
- 批量操作:[批量操作技术选型](../decisions/2026-01-30-003-ADR-批量操作技术选型.md)
|
||
- 关键决策:
|
||
- 认证和会话管理:
|
||
- 选择方案 1:使用 AbstractConnectionFactory + SessionManager
|
||
- 决策理由:复用现有基础设施、与 SessionManager 深度集成、开发效率高、维护成本低、线程安全、符合项目架构
|
||
- 放弃方案 2(自定义工厂模式)的理由:重复实现连接缓存和 Session 有效性检查、维护成本高、线程安全难以保证
|
||
- CRUD 操作:
|
||
- 选择方案 1:完整分层架构 + 批量操作支持
|
||
- 决策理由:符合若依框架规范、便于维护和扩展、支持批量操作、异常处理统一、参数验证完善、符合项目长期规划
|
||
- 放弃方案 2(简化架构)的理由:不符合若依框架规范、不支持批量操作、参数验证不完善
|
||
- 放弃方案 3(使用若依框架通用 CRUD)的理由:不符合 Salesforce API 的特殊性、难以满足定制化需求
|
||
- 批量操作:
|
||
- 选择方案 1:完整分层架构 + 自动分批处理 + 性能优化
|
||
- 决策理由:符合若依框架规范、支持大规模数据处理、支持部分失败情况、性能优化完善、异常处理统一、参数验证完善、符合项目长期规划、与已有 ADR 一致
|
||
- 放弃方案 2(简化架构 + 固定批量大小)的理由:不符合若依框架规范、不支持大规模数据处理、批量操作行为不够灵活、性能优化不足、参数验证不完善、扩展性受限
|
||
- 放弃方案 3(使用若依框架通用批量操作)的理由:不符合 Salesforce API 的特殊性、难以满足定制化需求、不支持自动分批处理、性能优化不足、异常处理不完善、参数验证不完善
|
||
|
||
### 阶段 4:数据库结构
|
||
- 状态:进行中
|
||
- 数据库变更:
|
||
- 认证和会话管理:不涉及
|
||
- 原因:设计文档明确说明"不涉及数据库表,所有数据均来自 Salesforce API",认证和会话管理功能直接通过 Salesforce Partner API 操作 Salesforce 数据,不需要在本地数据库中存储任何数据
|
||
- SQL 脚本:无
|
||
- CRUD 操作:不涉及
|
||
- 原因:设计文档明确说明"不涉及数据库表,所有数据均来自 Salesforce API",CRUD 操作功能直接通过 Salesforce Partner API 操作 Salesforce 数据,不需要在本地数据库中存储任何数据
|
||
- SQL 脚本:无
|
||
- 批量操作:不涉及
|
||
- 原因:设计文档明确说明"不涉及数据库表,所有数据均来自 Salesforce API",批量操作功能直接通过 Salesforce Partner API 操作 Salesforce 数据,不需要在本地数据库中存储任何数据
|
||
- SQL 脚本:无
|
||
|
||
### 阶段 5:提示词生成
|
||
- 状态:进行中
|
||
- 生成文档:
|
||
- 认证和会话管理:[认证和会话管理提示词](../prompts/2026-01-29-001-01-prompt-认证和会话管理.md)
|
||
- CRUD 操作:[CRUD操作提示词](../prompts/2026-01-30-002-prompt-CRUD操作.md)
|
||
- 批量操作:[批量操作提示词](../prompts/2026-01-30-003-prompt-批量操作.md)
|
||
- 提示词内容摘要:
|
||
- 认证和会话管理:
|
||
- 引用真源:需求文档、设计文档
|
||
- 需求描述:实现认证和会话管理功能,包括获取会话信息、获取用户信息、修改密码、工厂模式管理连接
|
||
- 设计方案:使用 PartnerConnectionFactory 工厂类、连接缓存、SessionManager 集成、RESTful API、异常处理
|
||
- 输出格式要求:必须包含 Factory、Service、Controller、DTO、VO 文件,必须包含单元测试
|
||
- 代码规范要求:类命名、方法命名、变量命名、注释规范、代码格式、导入规范
|
||
- 测试要求:单元测试覆盖率不低于 80%,包含正常场景和异常场景
|
||
- 注意事项:使用 partner.jar 现有类、继承 AbstractConnectionFactory、使用 SessionManager、使用异常类、权限控制、参数验证、Swagger 文档、日志记录、依赖注入、REST API 定义、Lombok 注解
|
||
- CRUD 操作:
|
||
- 引用真源:需求文档、设计文档
|
||
- 需求描述:实现 Salesforce Partner API 的 CRUD 操作功能,包括 Create、Retrieve、Update、Delete、Upsert、Merge 六个核心操作
|
||
- 设计方案:使用 PartnerConnectionFactory 获取连接、分层架构、RESTful API、批量操作支持、异常处理
|
||
- 输出格式要求:必须包含 Controller、Service、DTO、VO、工具类、单元测试
|
||
- 代码规范要求:类命名、方法命名、变量命名、注释规范、代码格式、导入规范
|
||
- 测试要求:单元测试覆盖率不低于 80%,包含正常场景、批量操作场景、异常场景
|
||
- 注意事项:使用 partner.jar 现有类、使用 PartnerConnectionFactory、使用异常类、权限控制、参数验证、Swagger 文档、日志记录、依赖注入、REST API 定义、Lombok 注解、SObject 转换、批量操作限制、字段清空、子对象关系
|
||
- 批量操作:
|
||
- 引用真源:需求文档、设计文档
|
||
- 需求描述:实现 Salesforce Partner API 的批量操作功能,包括批量创建、批量更新、批量删除、批量更新或插入四个核心操作
|
||
- 设计方案:使用 PartnerConnectionFactory 获取连接、分层架构、RESTful API、自动分批处理、AllOrNoneHeader 控制、性能优化、异常处理
|
||
- 输出格式要求:必须包含 Controller、Service、DTO、VO、工具类、单元测试
|
||
- 代码规范要求:类命名、方法命名、变量命名、注释规范、代码格式、导入规范
|
||
- 测试要求:单元测试覆盖率不低于 80%,包含正常场景、部分失败场景、全部失败场景、超过限制场景、自动分批处理场景、AllOrNoneHeader 控制场景、DisableFeedTrackingHeader 使用场景、批次间休眠场景
|
||
- 注意事项:使用 partner.jar 现有类、使用 PartnerConnectionFactory、使用异常类、权限控制、参数验证、Swagger 文档、日志记录、依赖注入、REST API 定义、Lombok 注解、SObject 转换、批量操作限制、自动分批处理、AllOrNoneHeader 控制、DisableFeedTrackingHeader 使用、批次间休眠、详细的成功/失败统计、友好的错误消息(中文)、详细的错误日志
|
||
|
||
### 阶段 6:代码生成
|
||
- 状态:进行中
|
||
- 代码生成器使用:
|
||
- 认证和会话管理:不涉及数据库表新增,未使用代码生成器
|
||
- CRUD 操作:不涉及数据库表新增,未使用代码生成器
|
||
- 批量操作:不涉及数据库表新增,未使用代码生成器
|
||
- 生成的代码文件:
|
||
- 认证和会话管理:
|
||
1. Factory:`PartnerConnectionFactory.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/factory/PartnerConnectionFactory.java`)
|
||
2. Service 接口:`IPartnerConnectionService.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerConnectionService.java`)
|
||
3. Service 实现:`PartnerConnectionServiceImpl.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerConnectionServiceImpl.java`)
|
||
4. Controller:`PartnerConnectionController.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerConnectionController.java`)
|
||
5. DTO:`ChangePasswordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/ChangePasswordDto.java`)
|
||
6. VO:`SessionInfoVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SessionInfoVo.java`)
|
||
7. VO:`UserInfoVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/UserInfoVo.java`)
|
||
8. 单元测试:`PartnerConnectionServiceImplTest.java`(路径:`datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerConnectionServiceImplTest.java`)
|
||
- CRUD 操作:
|
||
1. Controller:`PartnerCrudController.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerCrudController.java`)
|
||
2. Service 接口:`IPartnerCrudService.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerCrudService.java`)
|
||
3. Service 实现:`PartnerCrudServiceImpl.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerCrudServiceImpl.java`)
|
||
4. DTO:`CreateRecordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/CreateRecordDto.java`)
|
||
5. DTO:`UpdateRecordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/UpdateRecordDto.java`)
|
||
6. DTO:`DeleteRecordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/DeleteRecordDto.java`)
|
||
7. DTO:`UpsertRecordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/UpsertRecordDto.java`)
|
||
8. DTO:`MergeRecordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/MergeRecordDto.java`)
|
||
9. VO:`RecordResultVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/RecordResultVo.java`)
|
||
10. VO:`RetrieveResultVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/RetrieveResultVo.java`)
|
||
11. VO:`ErrorVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/ErrorVo.java`)
|
||
12. 工具类:`SObjectConverter.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/util/SObjectConverter.java`)
|
||
13. 单元测试:`PartnerCrudServiceImplTest.java`(路径:`datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerCrudServiceImplTest.java`)
|
||
- 批量操作:
|
||
1. Controller:`PartnerBatchController.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerBatchController.java`)
|
||
2. Service 接口:`IPartnerBatchService.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerBatchService.java`)
|
||
3. Service 实现:`PartnerBatchServiceImpl.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerBatchServiceImpl.java`)
|
||
4. DTO:`BatchCreateDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchCreateDto.java`)
|
||
5. DTO:`BatchUpdateDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchUpdateDto.java`)
|
||
6. DTO:`BatchDeleteDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchDeleteDto.java`)
|
||
7. DTO:`BatchUpsertDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchUpsertDto.java`)
|
||
8. VO:`BatchResultVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/BatchResultVo.java`)
|
||
9. VO:`BatchItemResultVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/BatchItemResultVo.java`)
|
||
10. 单元测试:`PartnerBatchServiceImplTest.java`(路径:`datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerBatchServiceImplTest.java`)
|
||
- 代码规范遵循:Spring Boot 3.x、Spring Security 6.x、若依框架规范
|
||
- 测试覆盖率:
|
||
- 认证和会话管理:单元测试覆盖率不低于 80%,包含正常场景和异常场景
|
||
- CRUD 操作:单元测试覆盖率不低于 80%,包含正常场景、批量操作场景、异常场景
|
||
- 批量操作:单元测试覆盖率不低于 80%,包含正常场景、部分失败场景、全部失败场景、超过限制场景、自动分批处理场景、AllOrNoneHeader 控制场景、DisableFeedTrackingHeader 使用场景、批次间休眠场景
|
||
|
||
### 阶段 5:提示词生成
|
||
- 状态:已完成
|
||
- 生成文档:[认证和会话管理提示词](../prompts/2026-01-29-001-01-prompt-认证和会话管理.md)
|
||
- 提示词内容摘要:
|
||
- 引用真源:需求文档、设计文档
|
||
- 需求描述:实现认证和会话管理功能,包括获取会话信息、获取用户信息、修改密码、工厂模式管理连接
|
||
- 设计方案:使用 PartnerConnectionFactory 工厂类、连接缓存、SessionManager 集成、RESTful API、异常处理
|
||
- 输出格式要求:必须包含 Factory、Service、Controller、DTO、VO 文件,必须包含单元测试
|
||
- 代码规范要求:类命名、方法命名、变量命名、注释规范、代码格式、导入规范
|
||
- 测试要求:单元测试覆盖率不低于 80%,包含正常场景和异常场景
|
||
- 注意事项:使用 partner.jar 现有类、继承 AbstractConnectionFactory、使用 SessionManager、使用异常类、权限控制、参数验证、Swagger 文档、日志记录、依赖注入、REST API 定义、Lombok 注解
|
||
|
||
### 阶段 6:代码生成
|
||
- 状态:已完成
|
||
- 代码生成器使用:不涉及数据库表新增,未使用代码生成器
|
||
- 生成的代码文件:
|
||
1. Factory:`PartnerConnectionFactory.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/factory/PartnerConnectionFactory.java`)
|
||
2. Service 接口:`IPartnerConnectionService.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerConnectionService.java`)
|
||
3. Service 实现:`PartnerConnectionServiceImpl.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerConnectionServiceImpl.java`)
|
||
4. Controller:`PartnerConnectionController.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerConnectionController.java`)
|
||
5. DTO:`ChangePasswordDto.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/ChangePasswordDto.java`)
|
||
6. VO:`SessionInfoVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SessionInfoVo.java`)
|
||
7. VO:`UserInfoVo.java`(路径:`datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/UserInfoVo.java`)
|
||
8. 单元测试:`PartnerConnectionServiceImplTest.java`(路径:`datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerConnectionServiceImplTest.java`)
|
||
- 代码规范遵循:Spring Boot 3.x、Spring Security 6.x、若依框架规范
|
||
- 测试覆盖率:单元测试覆盖率不低于 80%,包含正常场景和异常场景
|
||
|
||
### 阶段 7:会话记录
|
||
- 状态:已完成
|
||
- 生成文档:无
|
||
- 关键决策:完整记录了当前会话的所有信息,包括需求澄清、需求定义、方案设计、方案决策、数据库结构生成、提示词生成、代码生成等所有阶段
|
||
|
||
### 阶段 8:变更日志
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [认证和会话管理变更日志](../changelog/2026-01-30-001-changelog.md)
|
||
- [CRUD操作变更日志](../changelog/2026-01-30-002-changelog.md)
|
||
- [批量操作变更日志](../changelog/2026-01-30-003-changelog.md)
|
||
- 变更内容:
|
||
- 认证和会话管理:
|
||
- 新增功能:实现认证和会话管理功能,包括获取会话信息、获取用户信息、修改密码
|
||
- 新增代码文件:8 个文件(7 个 Java 文件 + 1 个测试文件)
|
||
- 新增接口:3 个 REST API 接口
|
||
- 影响范围:datai-salesforce-partner 模块
|
||
- CRUD 操作:
|
||
- 新增功能:实现 Salesforce Partner API 的 CRUD 操作功能,包括 Create、Retrieve、Update、Delete、Upsert、Merge 六个核心操作
|
||
- 新增代码文件:13 个文件(1 个 Controller + 2 个 Service + 5 个 DTO + 3 个 VO + 1 个工具类 + 1 个测试)
|
||
- 新增接口:6 个 REST API 接口
|
||
- 影响范围:datai-salesforce-partner 模块
|
||
- 批量操作:
|
||
- 新增功能:实现 Salesforce Partner API 的批量操作功能,包括批量创建、批量更新、批量删除、批量 Upsert 四个核心操作
|
||
- 新增代码文件:10 个文件(1 个 Controller + 2 个 Service + 4 个 DTO + 2 个 VO + 1 个测试)
|
||
- 新增接口:4 个 REST API 接口
|
||
- 影响范围:datai-salesforce-partner 模块
|
||
- 核心特性:支持最多 1000 条记录,自动分批处理(每批最多 200 条),支持部分失败情况,提供详细的成功/失败统计
|
||
|
||
### 阶段 9:复盘与接口
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- 认证和会话管理:
|
||
- [复盘文档](../retros/2026-01-30-001-retro.md) - 认证和会话管理功能开发复盘
|
||
- [API 文档](../api-docs/2026-01-30-001-api.md) - 认证和会话管理接口文档
|
||
- CRUD 操作:
|
||
- [复盘文档](../retros/2026-01-30-002-retro.md) - CRUD操作功能开发复盘
|
||
- [API 文档](../api-docs/2026-01-30-002-api.md) - CRUD操作接口文档
|
||
- 批量操作:
|
||
- [复盘文档](../retros/2026-01-30-003-retro.md) - 批量操作功能开发复盘
|
||
- [API 文档](../api-docs/2026-01-30-003-api.md) - 批量操作接口文档
|
||
- 复盘主要结论:
|
||
- 成功经验:SSOT 流程的严格执行、详细的提示词设计、完整的会话记录、有效的架构决策、代码生成的规范性、完善的异常处理
|
||
- 改进点:阶段间的过渡可以更流畅、代码生成前的验证可以更严格、API 文档的自动生成可以考虑、单元测试的覆盖率可以提高、代码注释可以更详细
|
||
- 问题分析:代码规范要求不够具体、会话记录的更新不及时、变更日志内容不够详细
|
||
- 行动计划:增加对下一阶段的目的和流程的解释、增加对设计文档和决策记录的再次验证、探索使用 Swagger 等工具自动生成 API 文档、增加更多的测试用例、增加更多的代码注释、在后续的提示词设计中增加更具体的若依框架规范要求、在每个阶段完成后立即更新会话记录、在变更日志中增加更多的细节
|
||
- 提取模式:3 条有效的 Prompt 技巧、3 个避免的坑
|
||
- 模板迭代:计划在下一个迭代中更新提示词模板,增加更具体的若依框架规范要求
|
||
|
||
### 阶段 2:方案设计(查询功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [查询功能设计文档](../design/2026-01-30-004-查询功能-设计.md) - 查询功能技术方案设计
|
||
- 关键设计决策:
|
||
- 采用分层架构:Controller → Service → PartnerConnectionFactory → Salesforce API
|
||
- 支持四种查询功能:Query、QueryAll、QueryMore、Search
|
||
- 集成 SoqlBuilder 构建类型安全的 SOQL 查询
|
||
- 使用 DTO/VO 模式进行数据封装
|
||
- 支持分页查询(QueryMore)
|
||
- 遵循 SOQL 语法限制(不支持 SELECT *、BETWEEN、JOIN、UNION 等)
|
||
- 固定使用 source org 类型
|
||
- 查询最多返回 50000 条记录
|
||
- OFFSET 上限为 2000,且必须与 LIMIT 一起使用
|
||
|
||
### 阶段 3:方案决策(查询功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [查询功能 ADR](../decisions/2026-01-30-004-ADR-查询功能技术选型.md) - 查询功能技术选型决策记录
|
||
- 关键决策:
|
||
- **决策 1**:使用 SoqlBuilder 构建 SOQL 查询
|
||
- 理由:类型安全、可读性高、与现有代码一致
|
||
- **决策 2**:完整转换查询结果(SObject → Map)
|
||
- 理由:解耦、灵活性高、与现有代码一致
|
||
- **决策 3**:使用 QueryMore 进行服务端分页
|
||
- 理由:性能优化、Salesforce 原生支持
|
||
- **决策 4**:递归处理嵌套对象
|
||
- 理由:支持关系查询、保持数据完整性
|
||
- 考虑的替代方案:
|
||
- 原生字符串拼接构建 SOQL
|
||
- 使用 DTO 映射替代 Map
|
||
- 使用 Jackson 序列化 SObject
|
||
|
||
### 阶段 4:数据库结构生成(查询功能)
|
||
- 状态:已跳过
|
||
- 分析结论:查询功能不涉及数据库变更
|
||
- 理由:
|
||
- 所有数据均来自 Salesforce API
|
||
- 无需创建数据库表
|
||
- 无需修改现有数据库结构
|
||
- 查询结果直接通过 API 返回给客户端
|
||
- 操作:直接进入阶段 5
|
||
|
||
### 阶段 5:提示词生成(查询功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [查询功能提示词](../prompts/2026-01-30-004-prompt-查询功能.md) - 查询功能执行提示词
|
||
- 提示词内容摘要:
|
||
- **引用真源**:需求文档、设计文档、决策记录
|
||
- **需求描述**:Query、QueryAll、QueryMore、Search 四个核心功能
|
||
- **设计方案**:分层架构、DTO/VO 模式、SoqlBuilder、SObject 转换
|
||
- **输出格式要求**:
|
||
- Controller:PartnerQueryController(4 个 RESTful API 接口)
|
||
- Service:IPartnerQueryService、PartnerQueryServiceImpl
|
||
- DTO:QueryDto、QueryAllDto、QueryMoreDto、SearchDto
|
||
- VO:QueryResultVo、SearchResultVo、SearchRecordVo
|
||
- 单元测试:PartnerQueryServiceImplTest
|
||
- **代码规范要求**:命名规范、注释规范、代码格式、异常处理、日志规范
|
||
- **测试要求**:覆盖率不低于 80%,包含多种测试场景
|
||
- **注意事项**:SOQL 语法限制、性能考虑、安全性、兼容性、文档要求
|
||
- **示例代码**:Query、QueryMore、Search 使用示例
|
||
|
||
### 阶段 6:代码生成(查询功能)
|
||
- 状态:已完成
|
||
- 生成代码文件:
|
||
- **DTO 类**(4 个):
|
||
- `QueryDto.java` - SOQL 查询请求 DTO
|
||
- `QueryAllDto.java` - QueryAll 请求 DTO
|
||
- `QueryMoreDto.java` - QueryMore 请求 DTO
|
||
- `SearchDto.java` - SOSL 搜索请求 DTO
|
||
- **VO 类**(3 个):
|
||
- `QueryResultVo.java` - 查询结果 VO
|
||
- `SearchResultVo.java` - 搜索结果 VO
|
||
- `SearchRecordVo.java` - 搜索记录 VO
|
||
- **Service 接口**:
|
||
- `IPartnerQueryService.java` - 查询服务接口
|
||
- **Service 实现类**:
|
||
- `PartnerQueryServiceImpl.java` - 查询服务实现
|
||
- **Controller 类**:
|
||
- `PartnerQueryController.java` - 查询控制器(4 个 RESTful API 接口)
|
||
- **单元测试**:
|
||
- `PartnerQueryServiceImplTest.java` - 查询服务单元测试(8 个测试用例)
|
||
- 代码生成器使用:未使用(不涉及数据库表)
|
||
- 关键实现:
|
||
- 使用 SoqlBuilder 构建类型安全的 SOQL 查询
|
||
- 使用 SObjectConverter 转换 SObject 到 Map
|
||
- 使用 QueryMore 进行服务端分页
|
||
- 递归处理嵌套对象(支持关系查询)
|
||
- 完整的异常处理和日志记录
|
||
- 固定使用 source org 类型
|
||
|
||
### 阶段 6:代码生成(描述功能)
|
||
- 状态:已完成
|
||
- 生成代码文件:
|
||
- **DTO 类**(4 个):
|
||
- `DescribeSObjectDto.java` - 描述单个对象请求 DTO
|
||
- `DescribeSObjectsDto.java` - 描述多个对象请求 DTO
|
||
- `DescribeLayoutDto.java` - 描述对象布局请求 DTO
|
||
- `DescribeQuickActionsDto.java` - 描述快速操作请求 DTO
|
||
- **VO 类**(5 个):
|
||
- `DescribeGlobalResultVo.java` - DescribeGlobal 结果 VO
|
||
- `DescribeSObjectResultVo.java` - DescribeSObject 结果 VO
|
||
- `DescribeLayoutResultVo.java` - DescribeLayout 结果 VO
|
||
- `DescribeTabResultVo.java` - DescribeTabs 结果 VO
|
||
- `DescribeQuickActionResultVo.java` - DescribeQuickActions 结果 VO
|
||
- **Service 接口**:
|
||
- `IPartnerDescribeService.java` - 描述服务接口
|
||
- **Service 实现类**:
|
||
- `PartnerDescribeServiceImpl.java` - 描述服务实现
|
||
- **Controller 类**:
|
||
- `PartnerDescribeController.java` - 描述控制器(6 个 RESTful API 接口)
|
||
- **工具类**:
|
||
- `DescribeResultConverter.java` - 描述结果转换工具类
|
||
- **单元测试**:
|
||
- `PartnerDescribeServiceImplTest.java` - 描述服务单元测试(18 个测试用例)
|
||
- 代码生成器使用:未使用(不涉及数据库表)
|
||
- 关键实现:
|
||
- 使用 DescribeResultConverter 将 Salesforce 描述结果转换为 Map<String, Object> 格式
|
||
- 支持字段信息处理(类型、长度、精度、必填性等)
|
||
- 支持 Picklist 字段处理(选项值、默认值、有效性规则)
|
||
- 支持关系字段处理(引用对象、关系名称、级联删除)
|
||
- 支持布局信息处理(字段布局、按钮布局、相关列表)
|
||
- 支持批量描述优化(DescribeSObjects 批量 API)
|
||
- 完整的异常处理和日志记录
|
||
- 固定使用 source org 类型
|
||
|
||
### 阶段 7:会话记录(描述功能)
|
||
- 状态:已完成
|
||
- 生成文档:无
|
||
- 关键决策:
|
||
- 完整记录了描述功能的执行过程
|
||
- 记录了所有生成的代码文件(15 个文件)
|
||
- 记录了关键实现特性(描述结果转换、字段信息处理、Picklist 字段处理、关系字段处理、布局信息处理、批量描述优化)
|
||
- 记录了代码规范遵循情况(Spring Boot 3.x、Spring Security 6.x、若依框架规范)
|
||
- 记录了单元测试覆盖率要求(不低于 80%)
|
||
|
||
### 阶段 8:变更记录与归档(描述功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [描述功能变更日志](../changelog/2026-02-02-005-changelog.md) - 描述功能变更日志
|
||
- 变更内容:
|
||
- **新增功能**:实现 Salesforce Partner API 的描述功能,包括 DescribeGlobal、DescribeSObject、DescribeSObjects、DescribeLayout、DescribeTabs、DescribeQuickActions 六个核心功能
|
||
- **新增代码文件**:15 个文件(4 个 DTO + 5 个 VO + 2 个 Service + 1 个 Controller + 1 个工具类 + 1 个单元测试 + 1 个变更日志)
|
||
- **新增接口**:6 个 REST API 接口
|
||
- **影响范围**:datai-salesforce-partner 模块
|
||
- **核心特性**:
|
||
- 支持获取 Salesforce 对象的元数据信息
|
||
- 支持字段信息处理(类型、长度、精度、必填性等)
|
||
- 支持 Picklist 字段处理(选项值、默认值、有效性规则)
|
||
- 支持关系字段处理(引用对象、关系名称、级联删除)
|
||
- 支持布局信息处理(字段布局、按钮布局、相关列表)
|
||
- 支持批量描述优化(DescribeSObjects 批量 API,最多 100 个对象)
|
||
- 关键决策:
|
||
- 创建了详细的变更日志,记录了所有变更内容
|
||
- 更新了根目录 CHANGELOG.md
|
||
- 更新了 docs/index.md,添加了变更日志链接
|
||
- 更新了会话记录,添加了阶段 8 信息
|
||
|
||
### 阶段 9:闭环复盘和接口文档(描述功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [描述功能复盘文档](../retros/2026-02-02-005-retro.md) - 描述功能开发复盘
|
||
- [描述功能 API 文档](../api-docs/2026-02-02-005-api.md) - 描述功能接口文档
|
||
- 复盘主要结论:
|
||
- **成功经验**:
|
||
- SSOT 流程的严格执行,确保了所有开发活动都有文档依据
|
||
- 详细的提示词设计,确保了生成的代码符合项目规范和需求
|
||
- 完整的会话记录,确保了会话的可追溯性和完整性
|
||
- 有效的架构决策,选择了最适合项目需求的方案
|
||
- 完善的异常处理,使用统一的异常处理机制
|
||
- **改进点**:
|
||
- 阶段间的过渡可以更流畅,增加对下一阶段的目的和流程的解释
|
||
- 代码生成前的验证可以更严格,增加对设计文档和决策记录的再次验证
|
||
- API 文档的自动生成可以考虑,探索使用 Swagger 等工具
|
||
- 单元测试的覆盖率可以提高,增加更多的边界条件测试
|
||
- 代码注释可以更详细,增加更多的详细注释
|
||
- **问题分析**:
|
||
- 描述结果转换的复杂性:采用递归算法处理嵌套对象
|
||
- 批量描述的限制处理:在代码中添加了参数验证和分批处理逻辑
|
||
- 字段类型的映射:创建了完整的字段类型映射表
|
||
- **行动计划**:
|
||
- 在阶段转换时,增加对下一阶段的目的和流程的解释
|
||
- 在生成代码前,增加对设计文档和决策记录的再次验证
|
||
- 探索使用 Swagger 等工具自动生成 API 文档
|
||
- 增加更多的边界条件测试和异常场景测试
|
||
- 在后续的代码生成中,增加更多的详细注释
|
||
- **提取模式**:
|
||
- 3 条有效的 Prompt 技巧:具体的输出格式要求、引用真源、详细的代码规范要求
|
||
- 3 个避免的坑:不要使用模糊的描述、不要忽略测试要求、不要违反项目规则
|
||
- **模板迭代**:计划在下一个迭代中更新提示词模板,增加更具体的若依框架规范要求
|
||
- API 文档主要内容:
|
||
- 6 个 REST API 接口的详细说明(DescribeGlobal、DescribeSObject、DescribeSObjects、DescribeLayout、DescribeTabs、DescribeQuickActions)
|
||
- 每个接口的请求方式、请求路径、请求参数、响应参数、成功示例、失败示例
|
||
- 错误码说明和处理建议
|
||
- 注意事项和限制说明
|
||
- 关键决策:
|
||
- 创建了详细的复盘文档,总结了成功经验、改进点、问题分析和行动计划
|
||
- 创建了详细的 API 文档,记录了所有接口的详细信息
|
||
- 更新了 docs/index.md,添加了复盘文档和 API 文档链接
|
||
- 更新了会话记录,添加了阶段 9 信息
|
||
|
||
### 阶段 10:代码提交
|
||
- 状态:未开始
|
||
|
||
### 阶段 5:提示词生成(高级功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [高级功能提示词](../prompts/2026-02-02-006-prompt-高级功能.md) - 高级功能代码生成提示词
|
||
- 提示词内容摘要:
|
||
- **引用真源**:需求文档、设计文档、决策记录
|
||
- **需求描述**:ConvertLead、EmptyRecycleBin、ProcessSubmitRequest、GetUserInfo、GetServerTimestamp 五个核心功能
|
||
- **设计方案**:直接使用 Salesforce Partner API,分层架构,DTO → Salesforce 对象 → VO 转换
|
||
- **输出格式要求**:
|
||
- 3 个 DTO 类(LeadConvertRequest、EmptyRecycleBinRequest、ProcessSubmitRequest)
|
||
- 5 个 VO 类(LeadConvertResultVo、EmptyRecycleBinResultVo、ProcessResultVo、UserInfoVo、ServerTimestampVo)
|
||
- 2 个 Service 类(PartnerAdvancedService 接口和 PartnerAdvancedServiceImpl 实现)
|
||
- 1 个 Controller 类(PartnerAdvancedController)
|
||
- 1 个单元测试类(PartnerAdvancedServiceImplTest)
|
||
- **代码规范要求**:类命名、方法命名、变量命名、注释规范、Lombok 使用
|
||
- **框架规范**:Spring Boot 规范、若依框架规范、Validation 规范
|
||
- **测试要求**:单元测试覆盖率不低于 80%,使用 JUnit 5 和 Mockito
|
||
- **实现细节**:ConvertLead、EmptyRecycleBin、ProcessSubmitRequest、GetServerTimestamp 的具体实现要求
|
||
- **复用策略**:GetUserInfo 复用认证模块的实现
|
||
- **注意事项**:固定使用 source org、异常处理、日志记录、时间戳格式、批量限制
|
||
- 更新记录:
|
||
- 创建了提示词文档
|
||
- 更新了 docs/index.md,添加了提示词链接
|
||
- 更新了需求文档,添加了提示词引用
|
||
- 更新了会话记录,添加了阶段 5(高级功能)信息
|
||
|
||
### 阶段 4:数据库结构生成(高级功能)
|
||
- 状态:已完成(不涉及数据库变更)
|
||
- 分析结论:
|
||
- **是否涉及数据库变更**:否
|
||
- **原因**:
|
||
1. 高级功能完全基于 Salesforce Partner API 实现
|
||
2. 所有数据操作都通过 API 调用完成,不需要本地数据库表
|
||
3. 数据模型只包含 DTO 和 VO 类,用于请求/响应参数传递
|
||
4. 没有需要持久化的业务数据
|
||
5. 用户信息获取复用认证模块的实现,无需新建表
|
||
- 数据模型说明:
|
||
- **DTO 类**:3 个(LeadConvertRequest、EmptyRecycleBinRequest、ProcessSubmitRequest)
|
||
- **VO 类**:5 个(LeadConvertResultVo、EmptyRecycleBinResultVo、ProcessResultVo、UserInfoVo、ServerTimestampVo)
|
||
- 所有 DTO/VO 类仅用于 API 请求/响应的数据传递,不涉及数据库持久化
|
||
- 跳过原因:
|
||
- 与查询功能、描述功能类似,高级功能完全依赖 Salesforce API
|
||
- 不需要创建本地数据库表
|
||
- 不需要生成 SQL 脚本
|
||
- 更新记录:
|
||
- 更新了会话记录,记录了阶段 4 的分析结论
|
||
- 确认不涉及数据库变更,直接进入阶段 5
|
||
|
||
### 阶段 6:代码生成(高级功能)
|
||
- 状态:已完成
|
||
- 代码生成器使用:未使用(不涉及数据库表)
|
||
- 生成的代码文件:
|
||
- **DTO 类**(3 个):
|
||
- `LeadConvertDto.java` - 线索转换请求 DTO
|
||
- `EmptyRecycleBinDto.java` - 清空回收站请求 DTO
|
||
- `ProcessSubmitDto.java` - 流程提交请求 DTO
|
||
- **VO 类**(4 个):
|
||
- `LeadConvertResultVo.java` - 线索转换结果 VO
|
||
- `EmptyRecycleBinResultVo.java` - 清空回收站结果 VO
|
||
- `ProcessResultVo.java` - 流程提交结果 VO
|
||
- `ServerTimestampVo.java` - 服务器时间戳结果 VO
|
||
- (UserInfoVo 复用认证模块的实现)
|
||
- **Service 接口**:
|
||
- `IPartnerAdvancedService.java` - 高级功能服务接口
|
||
- **Service 实现类**:
|
||
- `PartnerAdvancedServiceImpl.java` - 高级功能服务实现
|
||
- **Controller 类**:
|
||
- `PartnerAdvancedController.java` - 高级功能控制器(5 个 RESTful API 接口)
|
||
- **单元测试**:
|
||
- `PartnerAdvancedServiceImplTest.java` - 高级功能服务单元测试(12 个测试用例)
|
||
- 代码生成器使用:未使用(不涉及数据库表)
|
||
- 关键实现:
|
||
- 使用 LeadConvert 对象进行线索转换,支持可选参数(accountId、contactId、opportunityId、overwriteLeadSource、doNotCreateOpportunity、sendNotificationEmail)
|
||
- 使用 EmptyRecycleBinResult 处理清空回收站结果,支持批量操作(最多 200 个记录)
|
||
- 使用 ProcessSubmitRequest 进行流程提交,支持可选评论参数
|
||
- 使用 Calendar 获取服务器时间戳,转换为 ISO 8601 格式(yyyy-MM-dd'T'HH:mm:ss.SSS'Z')
|
||
- GetUserInfo 复用认证模块的 IPartnerConnectionService 实现
|
||
- 完整的异常处理和日志记录
|
||
- 固定使用 source org 类型
|
||
- 统一错误信息转换(Error → ErrorVo)
|
||
- 代码规范遵循:Spring Boot 3.x、Spring Security 6.x、若依框架规范
|
||
- 测试覆盖率:单元测试覆盖率不低于 80%,包含正常场景、异常场景、部分失败场景
|
||
|
||
### 阶段 7:会话记录(高级功能)
|
||
- 状态:已完成
|
||
- 生成文档:无
|
||
- 关键决策:
|
||
- 完整记录了高级功能的执行过程
|
||
- 记录了所有生成的代码文件(12 个文件:3 个 DTO + 4 个 VO + 2 个 Service + 1 个 Controller + 1 个单元测试 + 1 个复用的 UserInfoVo)
|
||
- 记录了关键实现特性(LeadConvert 转换、EmptyRecycleBin 批量处理、ProcessSubmitRequest 流程提交、Calendar 时间戳获取、GetUserInfo 复用)
|
||
- 记录了代码规范遵循情况(Spring Boot 3.x、Spring Security 6.x、若依框架规范)
|
||
- 记录了单元测试覆盖率要求(不低于 80%,12 个测试用例)
|
||
|
||
### 阶段 8:变更记录与归档(高级功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [高级功能变更日志](../changelog/2026-02-02-006-changelog.md) - 高级功能变更日志
|
||
- 变更内容:
|
||
- **新增功能**:实现 Salesforce Partner API 的高级功能,包括 ConvertLead、EmptyRecycleBin、ProcessSubmitRequest、GetUserInfo、GetServerTimestamp 五个核心功能
|
||
- **新增代码文件**:12 个文件(3 个 DTO + 4 个 VO + 2 个 Service + 1 个 Controller + 1 个单元测试 + 1 个复用 VO)
|
||
- **新增接口**:5 个 REST API 接口
|
||
- **新增权限**:5 个权限标识
|
||
- **影响范围**:datai-salesforce-partner 模块
|
||
- **核心特性**:
|
||
- 线索转换功能(支持可选参数)
|
||
- 清空回收站功能(支持批量操作,最多 200 个记录)
|
||
- 流程提交功能(支持可选评论)
|
||
- 获取用户信息功能(复用认证模块)
|
||
- 获取服务器时间戳功能(ISO 8601 格式)
|
||
- 关键决策:
|
||
- 创建了详细的变更日志,记录了所有变更内容
|
||
- 更新了根目录 CHANGELOG.md
|
||
- 更新了 docs/index.md,添加了变更日志链接并标注需求已完成
|
||
- 更新了需求文档,添加了变更日志引用
|
||
- 更新了会话记录,添加了阶段 8(高级功能)信息
|
||
|
||
### 阶段 9:闭环复盘和接口文档(高级功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [高级功能复盘文档](../retros/2026-02-02-006-retro.md) - 高级功能复盘文档
|
||
- [高级功能 API 文档](../api-docs/2026-02-02-006-api.md) - 高级功能 API 文档
|
||
- 复盘内容:
|
||
- **成功经验**:
|
||
- SSOT 流程的严格执行
|
||
- 功能复用策略的成功实施(GetUserInfo 复用认证模块)
|
||
- 详细的提示词设计
|
||
- 完整的异常处理机制
|
||
- 全面的单元测试覆盖
|
||
- **改进点**:
|
||
- 阶段间的过渡可以更流畅
|
||
- 代码生成前的验证可以更严格
|
||
- API 文档的自动生成可以考虑
|
||
- 单元测试的覆盖率可以提高
|
||
- 代码注释可以更详细
|
||
- **问题分析**:
|
||
- 线索转换可选参数的处理复杂性
|
||
- 清空回收站的部分失败处理
|
||
- 服务器时间戳的格式转换
|
||
- **行动计划**:制定了 8 条具体的行动计划,明确责任人和时间节点
|
||
- **提取模式**:
|
||
- 有效的 Prompt 技巧:明确的功能复用策略、详细的可选参数处理要求、批量操作的部分失败处理
|
||
- 避免的坑:不要忽略可选参数的验证、不要简化批量操作的结果处理、不要忽略时间格式转换
|
||
- **模板迭代**:计划在下一个迭代中更新提示词模板,增加可选参数处理、批量操作结果处理、时间格式转换、功能复用策略等内容
|
||
- API 文档内容:
|
||
- **接口列表**:5 个 REST API 接口的详细说明
|
||
- POST /partner/advanced/convert-lead - 转换线索
|
||
- POST /partner/advanced/empty-recycle-bin - 清空回收站
|
||
- POST /partner/advanced/process-submit-request - 流程提交
|
||
- GET /partner/advanced/user-info - 获取用户信息
|
||
- GET /partner/advanced/server-timestamp - 获取服务器时间戳
|
||
- **请求参数**:每个接口的请求参数详细说明(参数名、类型、是否必填、说明)
|
||
- **响应参数**:每个接口的响应参数详细说明(参数名、类型、说明)
|
||
- **示例**:每个接口的成功示例和失败示例
|
||
- **错误码**:10 个错误码的详细说明
|
||
- **注意事项**:5 个注意事项,包括线索转换、清空回收站、流程提交、获取用户信息、获取服务器时间戳的使用注意事项
|
||
- 关键决策:
|
||
- 创建了详细的复盘文档,总结了成功经验、改进点、问题分析和行动计划
|
||
- 提取了有效的 Prompt 技巧和避免的坑
|
||
- 制定了模板迭代计划
|
||
- 创建了详细的 API 文档,包含 5 个接口的详细说明
|
||
- 更新了 docs/index.md,添加了复盘文档和 API 文档链接
|
||
- 更新了需求文档,添加了复盘文档和 API 文档引用
|
||
- 更新了会话记录,添加了阶段 9(高级功能)信息
|
||
|
||
### 阶段 3:方案决策(高级功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [高级功能 ADR](../decisions/2026-02-02-006-ADR-高级功能技术选型.md) - 高级功能技术选型决策记录
|
||
- 关键决策:
|
||
- **技术选型**:选择直接使用 Salesforce Partner API(partner.jar)
|
||
- **选择理由**:
|
||
1. 官方支持,与 Salesforce API 完全兼容
|
||
2. 功能完整,原生支持所有高级功能
|
||
3. 与现有架构一致,保持代码风格统一
|
||
4. 开发效率高,减少开发工作量
|
||
5. 类型安全,减少运行时错误
|
||
- **放弃方案**:
|
||
- 放弃使用 REST API(开发工作量大,与现有架构不一致)
|
||
- 放弃使用自定义封装层(增加不必要的抽象层)
|
||
- **核心类使用**:
|
||
- `LeadConvert` / `LeadConvertResult` - 线索转换
|
||
- `EmptyRecycleBinResult` - 清空回收站
|
||
- `ProcessSubmitRequest` / `ProcessResult` - 流程提交
|
||
- `GetUserInfoResult` - 用户信息
|
||
- `Calendar` - 服务器时间戳
|
||
- **数据转换策略**:DTO → Salesforce 对象 → VO
|
||
- **异常处理策略**:统一异常映射,将 Salesforce 错误码转换为友好的中文错误消息
|
||
- **复用策略**:GetUserInfo 复用认证和会话管理子需求的实现
|
||
- 更新记录:
|
||
- 更新了 docs/index.md,添加了 ADR 链接
|
||
- 更新了设计文档,添加了决策记录引用
|
||
- 更新了会话记录,添加了阶段 3(高级功能)信息
|
||
|
||
### 阶段 2:方案设计(高级功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [高级功能设计文档](../design/2026-02-02-006-高级功能-设计.md) - 高级功能技术方案设计
|
||
- 关键设计决策:
|
||
- **架构设计**:采用分层架构(Controller → Service → Factory → Connection → Salesforce API)
|
||
- **技术方案**:使用 Salesforce Partner API(partner.jar)实现高级功能
|
||
- **DTO 设计**:3 个请求 DTO(LeadConvertRequest、EmptyRecycleBinRequest、ProcessSubmitRequest)
|
||
- **VO 设计**:5 个响应 VO(LeadConvertResultVo、EmptyRecycleBinResultVo、ProcessResultVo、UserInfoVo、ServerTimestampVo)
|
||
- **接口设计**:5 个 REST API 接口
|
||
- POST /api/partner/advanced/convert-lead - 转换线索
|
||
- POST /api/partner/advanced/empty-recycle-bin - 清空回收站
|
||
- POST /api/partner/advanced/process-submit-request - 处理提交请求
|
||
- GET /api/partner/advanced/user-info - 获取用户信息(复用认证模块)
|
||
- GET /api/partner/advanced/server-timestamp - 获取服务器时间戳
|
||
- **复用策略**:GetUserInfo 复用认证和会话管理子需求的实现
|
||
- **异常处理**:统一异常映射,将 Salesforce 错误码转换为友好的错误消息
|
||
- **性能优化**:连接复用、批量处理、参数验证
|
||
- **安全设计**:权限控制、数据验证、敏感操作确认、日志记录
|
||
- 更新记录:
|
||
- 更新了 docs/index.md,添加了设计文档链接
|
||
- 更新了需求文档,添加了设计文档引用
|
||
- 更新了会话记录,添加了阶段 2(高级功能)信息
|
||
|
||
## 对话记录
|
||
|
||
**用户**:严格遵守项目规则,现在我有个需求,想将 `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\reference-code\sforce\docs\partner-module.md` 中的功能结合当前模块的实际情况,在 `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-partner` 模块下进行实现,默认实现源org类型
|
||
|
||
**AI**:我理解您的需求。在创建需求文档前,我需要先澄清一些问题:
|
||
|
||
**第一轮澄清**:
|
||
1. 这个功能的核心目标是什么?
|
||
2. 这个功能涉及哪些业务场景?
|
||
3. 这个功能需要支持哪些用户角色?
|
||
4. 功能边界:根据 `partner-module.md` 文档,Partner API 包含大量功能(CRUD、批量操作、查询、描述、认证、高级功能等)。您希望实现所有功能?还是优先实现核心功能?哪些功能是必须实现的?
|
||
5. 使用场景:这个模块的主要使用场景是什么?
|
||
6. 用户角色:谁会使用这个模块?
|
||
7. 依赖包:我看到 `datai-salesforce-partner/src/main/resources/lib/partner.jar` 已经存在,这个是 Salesforce 官方的 Partner API 客户端吗?我们需要基于这个包进行封装吗?
|
||
8. 现有集成:项目中已经有 `datai-salesforce-integration` 模块,其中包含 `PartnerV1Connection` 和 `IPartnerV1Connection`,新的 `datai-salesforce-partner` 模块与它们的关系是什么?
|
||
|
||
**用户**:对,就实现源 org(Source Org)的,实现所有功能,全部功能,除了引用 `d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\datai-salesforce-auth` 模块进行登录认证,其它不引用任何模块的代码
|
||
|
||
**AI**:好的,感谢您的明确回答。让我继续澄清一些细节:
|
||
|
||
**第二轮澄清**:
|
||
1. 功能范围确认:根据 `partner-module.md`,Partner API 包含以下功能模块,您确认全部实现吗?
|
||
2. 认证集成:您提到只引用 `datai-salesforce-auth` 模块进行登录认证,具体是指?
|
||
3. 独立模块设计:既然不引用其他模块,那么是否需要独立的 Controller 层?还是只提供 Service 层?是否需要数据库表?
|
||
4. 依赖包使用:`partner.jar` 包含了 Partner API 的核心类(Connector、PartnerConnection、SObject 等),我们需要直接使用这些类?还是对这些类进行封装?
|
||
5. 异常处理:是否需要自定义异常类?还是使用 `datai-salesforce-common` 模块中的现有异常?
|
||
6. 日志记录:是否需要记录 API 调用日志?还是依赖 `datai-salesforce-integration` 的日志功能?
|
||
7. 连接管理:是否需要连接池?还是每次调用都创建新连接?
|
||
8. 并发控制:是否需要限流?还是依赖 `datai-salesforce-integration` 的限流功能?
|
||
9. 缓存策略:是否需要缓存 Describe 结果?
|
||
|
||
**用户**:
|
||
1、Partner API 包含功能模块,确认全部实现
|
||
2、使用 datai-salesforce-auth 的 SessionManager 管理会话,然后获取Session ID和url
|
||
3、独立模块,完全独立模块,除了引用auth模块,其它都是独立的
|
||
4、partner.jar有的,直接就用现有的类
|
||
5、异常处理,datai-salesforce-common 模块中的现有异常可以用就用,没有的话就自定义
|
||
6、日志记录暂不考虑
|
||
7、连接、并发、缓存等性能相关不影响功能的暂不考虑
|
||
|
||
**AI**:好的,感谢您的详细回答。让我总结一下需求:
|
||
|
||
**澄清总结**:
|
||
- **功能范围**:实现 Partner API 的所有功能模块(CRUD、批量操作、查询、描述、认证、高级功能)
|
||
- **认证集成**:使用 `datai-salesforce-auth` 的 `SessionManager` 管理会话,通过 SessionManager 获取 Session ID 和 Server URL
|
||
- **模块设计**:提供 Service 层和 Controller 层(REST API),默认实现 source org 类型(源 org),不需要数据库表
|
||
- **技术实现**:直接使用 `partner.jar` 中的现有类(Connector、PartnerConnection、SObject、QueryResult、SaveResult 等),不进行二次封装
|
||
- **异常处理**:优先使用 `datai-salesforce-common` 模块中的现有异常,没有的话就自定义
|
||
- **暂不考虑的功能**:日志记录、连接池、并发控制、缓存策略、限流
|
||
|
||
还有其他需要补充的吗?
|
||
|
||
**用户**:提供 Controller 层,默认实现source org类型
|
||
|
||
**AI**:好的,感谢您的补充。让我更新澄清总结:
|
||
|
||
**澄清总结(更新)**:
|
||
- **功能范围**:实现 Partner API 的所有功能模块(CRUD、批量操作、查询、描述、认证、高级功能)
|
||
- **认证集成**:使用 `datai-salesforce-auth` 的 `SessionManager` 管理会话,通过 SessionManager 获取 Session ID 和 Server URL
|
||
- **模块设计**:提供 Service 层和 Controller 层(REST API),默认实现 source org 类型(源 org),不需要数据库表
|
||
- **技术实现**:直接使用 `partner.jar` 中的现有类(Connector、PartnerConnection、SObject、QueryResult、SaveResult 等),不进行二次封装
|
||
- **异常处理**:优先使用 `datai-salesforce-common` 模块中的现有异常,没有的话就自定义
|
||
- **暂不考虑的功能**:日志记录、连接池、并发控制、缓存策略、限流
|
||
|
||
还有其他需要补充的吗?
|
||
|
||
**用户**:直接使用 partner.jar 中的现有类(Connector、PartnerConnection、SObject、QueryResult、SaveResult 等)如果确实有需求需要使用自定义类,则新增,不过新增前需要严格判断
|
||
|
||
**AI**:好的,感谢您的补充。让我更新澄清总结:
|
||
|
||
**澄清总结(最终版)**:
|
||
- **功能范围**:实现 Partner API 的所有功能模块(CRUD、批量操作、查询、描述、认证、高级功能)
|
||
- **认证集成**:使用 `datai-salesforce-auth` 的 `SessionManager` 管理会话,通过 SessionManager 获取 Session ID 和 Server URL
|
||
- **模块设计**:提供 Service 层和 Controller 层(REST API),默认实现 source org 类型(源 org),不需要数据库表
|
||
- **技术实现**:直接使用 `partner.jar` 中的现有类(Connector、PartnerConnection、SObject、QueryResult、SaveResult 等),如果确实有需求需要使用自定义类,则新增,但新增前需要严格判断,不进行不必要的二次封装
|
||
- **异常处理**:优先使用 `datai-salesforce-common` 模块中的现有异常,没有的话就自定义
|
||
- **暂不考虑的功能**:日志记录、连接池、并发控制、缓存策略、限流
|
||
|
||
还有其他需要补充的吗?如果没有,我就开始创建需求文档了。
|
||
|
||
**用户**:开始创建需求文档
|
||
|
||
**AI**:好的,我现在开始创建需求文档。
|
||
|
||
**用户**:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\requirements\sub\2026-01-28-001-01-认证和会话管理.md` 进入阶段二
|
||
|
||
**AI**:好的,我现在开始阶段二:方案设计。
|
||
|
||
**用户**:进入下一阶段(方案决策)
|
||
|
||
**AI**:好的,我现在开始阶段三:方案决策。
|
||
|
||
**用户**:进入下一阶段(数据库结构生成)
|
||
|
||
**AI**:好的,我现在开始阶段四:数据库结构生成。
|
||
|
||
**用户**:进入下一阶段(代码生成)
|
||
|
||
**AI**:好的,我现在开始阶段六:代码生成。
|
||
|
||
**用户**:进入下一阶段(会话记录)
|
||
|
||
**AI**:好的,我现在开始阶段七:会话记录。
|
||
|
||
**用户**:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\requirements\sub\2026-01-28-001-02-CRUD操作.md` 进入阶段二
|
||
|
||
**AI**:好的,我现在开始阶段二:方案设计。
|
||
|
||
**用户**:进入下一阶段(方案决策)
|
||
|
||
**AI**:好的,我现在开始阶段三:方案决策。
|
||
|
||
**用户**:进入下一阶段(数据库结构生成)
|
||
|
||
**AI**:好的,我现在开始阶段四:数据库结构生成。
|
||
|
||
**用户**:进入下一阶段(代码生成)
|
||
|
||
**AI**:好的,我现在开始阶段六:代码生成。
|
||
|
||
**用户**:进入下一阶段(会话记录)
|
||
|
||
**AI**:好的,我现在开始阶段七:会话记录。
|
||
|
||
**用户**:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\requirements\sub\2026-01-28-001-03-批量操作.md` 进入阶段二
|
||
|
||
**AI**:好的,我现在开始阶段二:方案设计。
|
||
|
||
**用户**:进入下一阶段(方案决策)
|
||
|
||
**AI**:好的,我现在开始阶段三:方案决策。
|
||
|
||
**用户**:进入下一阶段(数据库结构生成)
|
||
|
||
**AI**:好的,我现在开始阶段四:数据库结构生成。
|
||
|
||
**用户**:进入下一阶段(提示词生成)
|
||
|
||
**AI**:好的,我现在开始阶段五:提示词生成。
|
||
|
||
**用户**:进入下一阶段(代码生成)
|
||
|
||
**AI**:好的,我现在开始阶段六:代码生成。
|
||
|
||
**用户**:进入下一阶段(会话记录)
|
||
|
||
**AI**:好的,我现在开始阶段七:会话记录。
|
||
|
||
**用户**:`d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\requirements\sub\2026-01-28-001-04-查询功能.md` 进入阶段二
|
||
|
||
**AI**:好的,我现在开始阶段二:方案设计。
|
||
|
||
**用户**:进入下一阶段(方案决策)
|
||
|
||
**AI**:好的,我现在开始阶段三:方案决策。
|
||
|
||
**用户**:进入下一阶段(数据库结构生成)
|
||
|
||
**AI**:好的,我现在开始阶段四:数据库结构生成。
|
||
|
||
**用户**:进入下一阶段(提示词生成)
|
||
|
||
**AI**:好的,我现在开始阶段五:提示词生成。
|
||
|
||
**用户**:进入下一阶段(代码生成)
|
||
|
||
**AI**:好的,我现在开始阶段六:代码生成。
|
||
|
||
**用户**:进入下一阶段(会话记录)
|
||
|
||
**AI**:好的,我现在开始阶段七:会话记录。
|
||
|
||
## 生成的文档
|
||
- [需求文档](../requirements/2026-01-28-001-PartnerAPI源org实现.md)
|
||
- [子需求文档 - 认证和会话管理](../requirements/sub/2026-01-28-001-01-认证和会话管理.md)
|
||
- [子需求文档 - CRUD操作](../requirements/sub/2026-01-28-001-02-CRUD操作.md)
|
||
- [子需求文档 - 批量操作](../requirements/sub/2026-01-28-001-03-批量操作.md)
|
||
- [子需求文档 - 查询功能](../requirements/sub/2026-01-28-001-04-查询功能.md)
|
||
- [设计文档 - 认证和会话管理](../design/2026-01-29-001-01-认证和会话管理-设计.md)
|
||
- [设计文档 - CRUD操作](../design/2026-01-30-002-CRUD操作-设计.md)
|
||
- [设计文档 - 批量操作](../design/2026-01-30-003-批量操作-设计.md)
|
||
- [设计文档 - 查询功能](../design/2026-01-30-004-查询功能-设计.md)
|
||
- [决策记录 - 认证和会话管理技术选型](../decisions/2026-01-29-001-01-ADR-认证和会话管理技术选型.md)
|
||
- [决策记录 - CRUD操作技术选型](../decisions/2026-01-30-002-ADR-CRUD操作技术选型.md)
|
||
- [决策记录 - 批量操作技术选型](../decisions/2026-01-30-003-ADR-批量操作技术选型.md)
|
||
- [决策记录 - 查询功能技术选型](../decisions/2026-01-30-004-ADR-查询功能技术选型.md)
|
||
- [提示词 - 认证和会话管理](../prompts/2026-01-29-001-01-prompt-认证和会话管理.md)
|
||
- [提示词 - CRUD操作](../prompts/2026-01-30-002-prompt-CRUD操作.md)
|
||
- [提示词 - 批量操作](../prompts/2026-01-30-003-prompt-批量操作.md)
|
||
- [提示词 - 查询功能](../prompts/2026-01-30-004-prompt-查询功能.md)
|
||
- [变更日志 - 认证和会话管理](../changelog/2026-01-30-001-changelog.md)
|
||
- [变更日志 - CRUD操作](../changelog/2026-01-30-002-changelog.md)
|
||
- [变更日志 - 批量操作](../changelog/2026-01-30-003-changelog.md)
|
||
- [变更日志 - 查询功能](../changelog/2026-01-30-004-changelog.md)
|
||
- [复盘文档 - 认证和会话管理](../retros/2026-01-30-001-retro.md)
|
||
- [复盘文档 - CRUD操作](../retros/2026-01-30-002-retro.md)
|
||
- [复盘文档 - 批量操作](../retros/2026-01-30-003-retro.md)
|
||
- [复盘文档 - 查询功能](../retros/2026-01-30-004-retro.md)
|
||
- [API 文档 - 认证和会话管理](../api-docs/2026-01-30-001-api.md)
|
||
- [API 文档 - CRUD操作](../api-docs/2026-01-30-002-api.md)
|
||
- [API 文档 - 批量操作](../api-docs/2026-01-30-003-api.md)
|
||
- [API 文档 - 查询功能](../api-docs/2026-01-30-004-api.md)
|
||
|
||
## 生成的代码文件
|
||
|
||
### 认证和会话管理
|
||
- [PartnerConnectionFactory.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/factory/PartnerConnectionFactory.java)
|
||
- [IPartnerConnectionService.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerConnectionService.java)
|
||
- [PartnerConnectionServiceImpl.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerConnectionServiceImpl.java)
|
||
- [PartnerConnectionController.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerConnectionController.java)
|
||
- [ChangePasswordDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/ChangePasswordDto.java)
|
||
- [SessionInfoVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SessionInfoVo.java)
|
||
- [UserInfoVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/UserInfoVo.java)
|
||
- [PartnerConnectionServiceImplTest.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerConnectionServiceImplTest.java)
|
||
|
||
### 批量操作
|
||
- [PartnerBatchController.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerBatchController.java)
|
||
- [IPartnerBatchService.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerBatchService.java)
|
||
- [PartnerBatchServiceImpl.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerBatchServiceImpl.java)
|
||
- [BatchCreateDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchCreateDto.java)
|
||
- [BatchUpdateDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchUpdateDto.java)
|
||
- [BatchDeleteDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchDeleteDto.java)
|
||
- [BatchUpsertDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/BatchUpsertDto.java)
|
||
- [BatchResultVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/BatchResultVo.java)
|
||
- [BatchItemResultVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/BatchItemResultVo.java)
|
||
- [PartnerBatchServiceImplTest.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerBatchServiceImplTest.java)
|
||
|
||
### 查询功能
|
||
- [PartnerQueryController.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerQueryController.java)
|
||
- [IPartnerQueryService.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerQueryService.java)
|
||
- [PartnerQueryServiceImpl.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerQueryServiceImpl.java)
|
||
- [QueryDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/QueryDto.java)
|
||
- [QueryAllDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/QueryAllDto.java)
|
||
- [QueryMoreDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/QueryMoreDto.java)
|
||
- [SearchDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/SearchDto.java)
|
||
- [QueryResultVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/QueryResultVo.java)
|
||
- [SearchResultVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SearchResultVo.java)
|
||
- [SearchRecordVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/SearchRecordVo.java)
|
||
- [PartnerQueryServiceImplTest.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerQueryServiceImplTest.java)
|
||
|
||
### CRUD 操作
|
||
- [PartnerCrudController.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerCrudController.java)
|
||
- [IPartnerCrudService.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/IPartnerCrudService.java)
|
||
- [PartnerCrudServiceImpl.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerCrudServiceImpl.java)
|
||
- [CreateRecordDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/CreateRecordDto.java)
|
||
- [UpdateRecordDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/UpdateRecordDto.java)
|
||
- [DeleteRecordDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/DeleteRecordDto.java)
|
||
- [UpsertRecordDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/UpsertRecordDto.java)
|
||
- [MergeRecordDto.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/dto/MergeRecordDto.java)
|
||
- [RecordResultVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/RecordResultVo.java)
|
||
- [RetrieveResultVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/RetrieveResultVo.java)
|
||
- [ErrorVo.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/model/vo/ErrorVo.java)
|
||
- [SObjectConverter.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/main/java/com/datai/partner/util/SObjectConverter.java)
|
||
- [PartnerCrudServiceImplTest.java](file:///d:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerCrudServiceImplTest.java)
|
||
|
||
### 阶段 2:方案设计(描述功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [描述功能设计文档](../design/2026-02-02-005-描述功能-设计.md) - 描述功能技术方案设计
|
||
- 关键设计决策:
|
||
- 采用分层架构:Controller → Service → PartnerConnectionFactory → Salesforce API
|
||
- 支持六种描述功能:DescribeGlobal、DescribeSObject、DescribeSObjects、DescribeLayout、DescribeTabs、DescribeQuickActions
|
||
- 使用 Map<String, Object> 格式转换描述结果
|
||
- 使用 DTO/VO 模式进行数据封装
|
||
- 支持批量描述多个对象(DescribeSObjects)
|
||
- 固定使用 source org 类型
|
||
- 可选缓存策略:对象元数据缓存时间 1 小时
|
||
|
||
### 阶段 3:方案决策(描述功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [描述功能 ADR](../decisions/2026-02-02-005-ADR-描述功能技术选型.md) - 描述功能技术选型决策记录
|
||
- 关键决策:
|
||
- **决策 1**:使用 Map<String, Object> 格式转换描述结果
|
||
- 理由:解耦、灵活性高、与现有代码一致、可读性好
|
||
- **决策 2**:使用 describeSObjects(String[]) 批量描述多个对象
|
||
- 理由:性能优化、Salesforce 原生支持、减少 API 调用次数
|
||
- **决策 3**:使用可选的元数据缓存策略
|
||
- 理由:性能优化、响应速度提升、降低 Salesforce API 负载
|
||
- **决策 4**:完整转换字段定义信息
|
||
- 理由:支持前端动态表单生成、提供完整元数据信息
|
||
- 考虑的替代方案:
|
||
- 使用 DTO 映射替代 Map
|
||
- 使用 Jackson 序列化原始对象
|
||
- 使用 Redis 作为分布式缓存
|
||
|
||
### 阶段 4:数据库结构生成(描述功能)
|
||
- 状态:已跳过
|
||
- 分析结论:描述功能不涉及数据库变更
|
||
- 理由:
|
||
- 所有数据均来自 Salesforce API
|
||
- 无需创建数据库表
|
||
- 无需修改现有数据库结构
|
||
- 描述结果直接通过 API 返回给客户端
|
||
- 操作:直接进入阶段 5
|
||
|
||
### 阶段 5:提示词生成(描述功能)
|
||
- 状态:已完成
|
||
- 生成文档:
|
||
- [描述功能提示词](../prompts/2026-02-02-005-prompt-描述功能.md) - 描述功能执行提示词
|
||
- 提示词内容摘要:
|
||
- **引用真源**:需求文档、设计文档、决策记录
|
||
- **需求描述**:DescribeGlobal、DescribeSObject、DescribeSObjects、DescribeLayout、DescribeTabs、DescribeQuickActions 六个核心功能
|
||
- **设计方案**:分层架构、Map 格式转换、批量描述优化、字段信息处理
|
||
- **输出格式要求**:
|
||
- Controller:PartnerDescribeController(6 个 RESTful API 接口)
|
||
- Service:IPartnerDescribeService、PartnerDescribeServiceImpl
|
||
- DTO:DescribeSObjectDto、DescribeSObjectsDto、DescribeLayoutDto、DescribeQuickActionsDto
|
||
- VO:DescribeGlobalResultVo、DescribeSObjectResultVo、DescribeLayoutResultVo、DescribeTabResultVo、DescribeQuickActionResultVo
|
||
- 工具类:DescribeResultConverter
|
||
- 单元测试:PartnerDescribeServiceImplTest
|
||
- **代码规范要求**:命名规范、注释规范、代码格式、异常处理
|
||
- **测试要求**:覆盖率不低于 80%,包含正常场景和异常场景
|
||
- **注意事项**:描述结果转换、字段类型处理、批量描述、安全性、性能考虑
|
||
|
||
## 回退记录
|
||
无
|