datai/datai-scenes/datai-scene-salesforce/docs/prompts/2026-02-02-006-prompt-高级功能.md

12 KiB
Raw Permalink Blame History

提示词:高级功能

引用真源

需求描述

根据需求文档,实现 Salesforce Partner API 的高级功能,包括:

  1. ConvertLead转换线索

    • 将线索转换为账户、联系人和商机
    • 支持指定转换后的账户、联系人或商机 ID
    • 支持覆盖线索来源、不创建商机、发送通知邮件等选项
  2. EmptyRecycleBin清空回收站

    • 永久删除回收站中的记录
    • 支持批量删除(最多 200 个记录)
    • 返回每个记录的删除结果
  3. ProcessSubmitRequest处理提交请求

    • 提交流程请求,触发审批流程
    • 支持添加评论
    • 返回流程实例 ID
  4. GetUserInfo获取用户信息

    • 获取当前用户的详细信息
    • 复用认证和会话管理子需求的实现
  5. GetServerTimestamp获取服务器时间戳

    • 获取 Salesforce 服务器的当前时间
    • 返回 ISO 8601 格式的时间戳和时区信息

设计方案

根据设计文档,采用以下技术方案:

  1. 技术选型:直接使用 Salesforce Partner APIpartner.jar
  2. 架构模式分层架构Controller → Service → Factory → Connection → Salesforce API
  3. 连接管理:通过 PartnerConnectionFactory 获取 PartnerConnection 实例
  4. 数据转换DTO → Salesforce 对象 → VO
  5. 异常处理:统一异常映射,将 Salesforce 错误码转换为友好的中文错误消息
  6. 复用策略GetUserInfo 复用认证和会话管理子需求的实现

核心类使用

功能 Salesforce 类 说明
ConvertLead LeadConvert / LeadConvertResult 线索转换参数和结果
EmptyRecycleBin EmptyRecycleBinResult 清空回收站结果
ProcessSubmitRequest ProcessSubmitRequest / ProcessResult 流程提交请求和结果
GetUserInfo GetUserInfoResult 用户信息结果
GetServerTimestamp Calendar 服务器时间戳

异常映射

Salesforce 错误码 异常类型 错误消息
CANNOT_UPDATE_CONVERTED_LEAD SalesforceOperationException 无法更新已转换的线索
INVALID_LEAD_ID SalesforceOperationException 无效的线索 ID
INVALID_ACCOUNT_ID SalesforceOperationException 无效的账户 ID
INVALID_CONTACT_ID SalesforceOperationException 无效的联系人 ID
INVALID_OPPORTUNITY_ID SalesforceOperationException 无效的商机 ID
INVALID_CONVERTED_STATUS SalesforceOperationException 无效的转换状态
INVALID_ID SalesforceOperationException 无效的记录 ID
ENTITY_IS_DELETED SalesforceOperationException 记录已删除
ENTITY_IS_NOT_IN_RECYCLE_BIN SalesforceOperationException 记录不在回收站中
INVALID_OPERATION SalesforceOperationException 无效操作
INSUFFICIENT_ACCESS SalesforceOperationException 权限不足
OPERATION_FAILED SalesforceOperationException 操作失败
PROCESS_SUBMISSION_FAILED SalesforceOperationException 流程提交失败
INVALID_OBJECT_ID SalesforceOperationException 无效的对象 ID

输出格式要求

必须包含以下文件

DTO 类3 个)

  1. LeadConvertRequest.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/dto/LeadConvertRequest.java
    • 字段leadId, convertedStatus, accountId, contactId, opportunityId, overwriteLeadSource, doNotCreateOpportunity, sendNotificationEmail
  2. EmptyRecycleBinRequest.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/dto/EmptyRecycleBinRequest.java
    • 字段idsList
  3. ProcessSubmitRequest.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/dto/ProcessSubmitRequest.java
    • 字段objectId, comments

VO 类5 个)

  1. LeadConvertResultVo.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/vo/LeadConvertResultVo.java
    • 字段accountId, contactId, opportunityId, leadId, success, errors
  2. EmptyRecycleBinResultVo.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/vo/EmptyRecycleBinResultVo.java
    • 字段resultsList, success, errors
  3. ProcessResultVo.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/vo/ProcessResultVo.java
    • 字段processInstanceId, success, errors
  4. UserInfoVo.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/vo/UserInfoVo.java
    • 字段userId, userName, userFullName, userEmail, organizationId, organizationName, userLanguage, userTimeZone, currencySymbol
  5. ServerTimestampVo.java

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/vo/ServerTimestampVo.java
    • 字段timestamp, timeZone, success, errors

Service 层2 个)

  1. PartnerAdvancedService.java(接口)

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/service/PartnerAdvancedService.java
    • 方法:
      • LeadConvertResultVo convertLead(LeadConvertRequest request)
      • EmptyRecycleBinResultVo emptyRecycleBin(EmptyRecycleBinRequest request)
      • ProcessResultVo processSubmitRequest(ProcessSubmitRequest request)
      • ServerTimestampVo getServerTimestamp()
  2. PartnerAdvancedServiceImpl.java(实现)

    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/service/impl/PartnerAdvancedServiceImpl.java
    • 注入:PartnerConnectionFactory
    • 实现所有 Service 接口方法

Controller 层1 个)

  1. PartnerAdvancedController.java
    • 路径:datai-salesforce-partner/src/main/java/com/datai/partner/controller/PartnerAdvancedController.java
    • 注入:PartnerAdvancedService, PartnerConnectionService(用于 GetUserInfo 复用)
    • 接口:
      • 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 - 获取服务器时间戳

单元测试1 个)

  1. PartnerAdvancedServiceImplTest.java
    • 路径:datai-salesforce-partner/src/test/java/com/datai/partner/service/impl/PartnerAdvancedServiceImplTest.java
    • 测试方法:
      • testConvertLeadSuccess() - 测试线索转换成功
      • testConvertLeadWithAllOptions() - 测试线索转换带所有选项
      • testEmptyRecycleBinSuccess() - 测试清空回收站成功
      • testEmptyRecycleBinPartialFailure() - 测试清空回收站部分失败
      • testProcessSubmitRequestSuccess() - 测试流程提交成功
      • testGetServerTimestampSuccess() - 测试获取服务器时间戳成功
      • testConvertLeadConnectionException() - 测试连接异常
      • testConvertLeadApiFault() - 测试 API 异常

代码规范要求

  1. 类命名:首字母大写,驼峰命名,如 PartnerAdvancedController
  2. 方法命名:首字母小写,驼峰命名,如 convertLead
  3. 变量命名:首字母小写,驼峰命名,如 leadId
  4. 注释规范
    • 类注释:使用 /** */,包含类功能描述、作者、创建时间
    • 方法注释:使用 /** */,包含方法功能、参数、返回值、异常描述
    • 字段注释:使用 /** */,包含字段功能描述
  5. 代码格式:使用 4 个空格缩进,行宽不超过 120 字符
  6. 导入规范:使用具体导入,避免通配符导入
  7. Lombok 使用:使用 @Data@Slf4j 等注解简化代码

框架规范

  1. Spring Boot 规范

    • 使用 @RestController 定义 REST API
    • 使用 @RequestMapping 定义请求路径
    • 使用 @Autowired 进行依赖注入
    • 使用 @PreAuthorize("@ss.hasLogin()") 进行权限控制
  2. 若依框架规范

    • 使用 AjaxResult 统一返回格式
    • 使用 @Log 注解记录操作日志(可选)
    • 使用 SecurityUtils 获取当前用户信息(可选)
  3. Validation 规范

    • 使用 @NotBlank@NotEmpty@Size 等注解进行参数验证
    • 在 Controller 层使用 @Validated@Valid 触发验证

测试要求

  1. 单元测试覆盖率:不低于 80%
  2. 测试用例场景
    • 正常场景:所有功能的成功调用
    • 异常场景连接异常、API 异常、参数验证失败
    • 边界场景:空列表、最大数量限制
  3. 测试框架JUnit 5 和 Mockito
  4. 测试用例命名规范test+方法名+场景,如 testConvertLeadSuccess
  5. Mock 对象
    • Mock PartnerConnectionFactory 返回 Mock PartnerConnection
    • Mock PartnerConnection 返回各种结果
    • 模拟 ConnectionExceptionApiFault 异常

实现细节要求

ConvertLead 实现要求

  1. 通过 partnerConnectionFactory.getConnection("source") 获取连接
  2. 创建 LeadConvert 对象,设置所有参数
  3. 调用 connection.convertLead(LeadConvert[]) 方法
  4. LeadConvertResult 转换为 LeadConvertResultVo
  5. 处理异常,转换为自定义异常

EmptyRecycleBin 实现要求

  1. 验证 ids 数量不超过 200
  2. 通过 partnerConnectionFactory.getConnection("source") 获取连接
  3. 调用 connection.emptyRecycleBin(String[]) 方法
  4. EmptyRecycleBinResult[] 转换为 EmptyRecycleBinResultVo
  5. 计算整体成功状态
  6. 处理异常,转换为自定义异常

ProcessSubmitRequest 实现要求

  1. 通过 partnerConnectionFactory.getConnection("source") 获取连接
  2. 创建 ProcessSubmitRequest 对象,设置参数
  3. 调用 connection.processSubmitRequest(ProcessSubmitRequest[]) 方法
  4. ProcessResult 转换为 ProcessResultVo
  5. 处理异常,转换为自定义异常

GetServerTimestamp 实现要求

  1. 通过 partnerConnectionFactory.getConnection("source") 获取连接
  2. 调用 connection.getServerTimestamp() 方法
  3. Calendar 转换为 ISO 8601 格式字符串
  4. 提取时区信息
  5. 处理异常,转换为自定义异常

GetUserInfo 复用要求

  1. 在 Controller 中注入 PartnerConnectionService
  2. 调用 partnerConnectionService.getUserInfo() 方法
  3. 复用已有的实现,避免重复代码

注意事项

  1. 固定使用 source org:所有方法都使用 getConnection("source")
  2. 异常处理:必须捕获 ConnectionExceptionApiFault,转换为自定义异常
  3. 日志记录:使用 @Slf4j 记录关键操作和异常
  4. 空值处理:处理 Salesforce API 返回的空值情况
  5. 时间戳格式:使用 ISO 8601 格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
  6. 复用策略GetUserInfo 必须复用认证模块的实现
  7. 批量限制EmptyRecycleBin 最多支持 200 个记录
  8. 权限控制:所有接口使用 @PreAuthorize("@ss.hasLogin()")

依赖项

  • datai-salesforce-auth 模块的 PartnerConnectionFactory
  • datai-salesforce-auth 模块的 PartnerConnectionService(用于 GetUserInfo 复用)
  • datai-salesforce-common 模块的异常类(SalesforceAuthExceptionSalesforceOperationException
  • partner.jar 中的相关类(PartnerConnectionLeadConvertLeadConvertResultEmptyRecycleBinResultProcessSubmitRequestProcessResultGetUserInfoResult
  • Spring Boot 相关依赖(spring-boot-starter-webspring-boot-starter-validation
  • Lombok
  • JUnit 5 和 Mockito测试