# 会话记录 ## 元数据 - 需求编号: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 格式 - 支持字段信息处理(类型、长度、精度、必填性等) - 支持 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 格式转换描述结果 - 使用 DTO/VO 模式进行数据封装 - 支持批量描述多个对象(DescribeSObjects) - 固定使用 source org 类型 - 可选缓存策略:对象元数据缓存时间 1 小时 ### 阶段 3:方案决策(描述功能) - 状态:已完成 - 生成文档: - [描述功能 ADR](../decisions/2026-02-02-005-ADR-描述功能技术选型.md) - 描述功能技术选型决策记录 - 关键决策: - **决策 1**:使用 Map 格式转换描述结果 - 理由:解耦、灵活性高、与现有代码一致、可读性好 - **决策 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%,包含正常场景和异常场景 - **注意事项**:描述结果转换、字段类型处理、批量描述、安全性、性能考虑 ## 回退记录 无