datai/datai-scenes/datai-scene-salesforce/docs/changelog/2026-02-02-002-01-changelog.md

11 KiB
Raw Permalink Blame History

变更日志 - Apex 连接管理

元数据

  • 需求编号002-01
  • 需求名称Apex 连接管理
  • 创建时间2026-02-02
  • 创建人AI Assistant
  • 版本号v1.0.0

变更概述

实现 Salesforce Apex API 连接管理功能,包括连接工厂、会话头管理、调用选项配置、调试头部配置、字段截断头配置、包版本头配置和连接缓存管理等功能。

变更内容

新增功能

1. 连接工厂功能

  • 创建 ApexConnectionFactory 连接工厂类
  • 继承 AbstractConnectionFactory复用缓存机制
  • 实现 createConnection() 方法,从 SessionManager 获取会话信息并创建连接
  • 实现 getConnectionType() 方法,返回 "apex"
  • 实现 isConnectionValid() 方法,验证连接有效性
  • 使用 Salesforce API 65.0 版本
  • 连接超时 60 秒,读取超时 60 秒
  • 支持连接压缩

2. 连接管理服务

  • 实现 IApexConnectionService 服务接口,定义 7 个核心方法
  • 实现 ApexConnectionServiceImpl 服务实现类
  • 固定使用 source org 类型
  • 集成 SessionManager 获取会话信息
  • 完整的异常处理和日志记录
  • 参数校验和验证

3. 7 个核心服务方法

  • getConnection() - 获取 SoapConnection 连接信息
  • setSessionHeader() - 设置 SessionHeader
  • setCallOptions() - 设置 CallOptions 头部
  • setDebuggingHeader() - 设置 DebuggingHeader 用于调试
  • setFieldTruncationHeader() - 设置 AllowFieldTruncationHeader
  • setPackageVersionHeader() - 设置 PackageVersionHeader
  • clearConnection() - 清除连接缓存

4. 7 个 REST API 接口

  • GET /api/apex/connection - 获取连接
  • POST /api/apex/connection/session-header - 设置会话头
  • POST /api/apex/connection/call-options - 设置调用选项
  • POST /api/apex/connection/debugging-header - 设置调试头部
  • POST /api/apex/connection/field-truncation-header - 设置字段截断头
  • POST /api/apex/connection/package-version-header - 设置包版本头
  • DELETE /api/apex/connection/cache - 清除连接缓存

5. 数据传输对象DTO

  • SetSessionHeaderDto - 设置会话头请求参数sessionId
  • SetCallOptionsDto - 设置调用选项请求参数client
  • SetDebuggingHeaderDto - 设置调试头部请求参数logCategories、logType
  • SetFieldTruncationHeaderDto - 设置字段截断头请求参数allowFieldTruncation
  • SetPackageVersionHeaderDto - 设置包版本头请求参数packageVersions

6. 视图对象VO

  • ConnectionInfoVo - 连接信息响应sessionId、serverUrl、success、errorMessage

新增代码文件

Factory 层

  1. datai-salesforce-apex/src/main/java/com/datai/apex/factory/ApexConnectionFactory.java
    • 连接工厂,继承 AbstractConnectionFactory
    • 实现连接创建、验证和类型识别
    • 集成 SessionManager 获取会话信息

Service 层

  1. datai-salesforce-apex/src/main/java/com/datai/apex/service/IApexConnectionService.java

    • 服务接口,定义 7 个核心方法
    • 使用 @Service 注解标记
  2. datai-salesforce-apex/src/main/java/com/datai/apex/service/impl/ApexConnectionServiceImpl.java

    • 服务实现,实现所有服务方法
    • 固定使用 source org 类型
    • 完整的异常处理和日志记录

Controller 层

  1. datai-salesforce-apex/src/main/java/com/datai/apex/controller/ApexConnectionController.java
    • REST API 控制器,提供 7 个接口
    • 使用 @RestController、@RequestMapping、@Tag 注解
    • 使用 @Operation 注解定义接口文档
    • 使用 @PreAuthorize 注解进行权限控制
    • 使用 @Valid 注解进行参数校验
    • 统一的异常处理和 AjaxResult 响应

DTO 层

  1. datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/SetSessionHeaderDto.java

    • 设置会话头请求参数
    • 字段sessionId必填
  2. datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/SetCallOptionsDto.java

    • 设置调用选项请求参数
    • 字段client可选
  3. datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/SetDebuggingHeaderDto.java

    • 设置调试头部请求参数
    • 字段logCategories可选、logType可选
    • 内部类LogInfoDto - 日志信息
  4. datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/SetFieldTruncationHeaderDto.java

    • 设置字段截断头请求参数
    • 字段allowFieldTruncation可选
  5. datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/SetPackageVersionHeaderDto.java

    • 设置包版本头请求参数
    • 字段packageVersions可选
    • 内部类PackageVersionDto - 包版本信息

VO 层

  1. datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/ConnectionInfoVo.java
    • 连接信息响应
    • 字段sessionId、serverUrl、success、errorMessage
    • 使用 @Builder 注解支持构建器模式

新增文档

设计文档

  1. 设计文档docs/design/2026-02-02-002-01-连接管理-设计.md
    • 元数据
    • 设计概述
    • 架构设计(系统架构、模块架构、数据流设计)
    • 技术方案(技术选型、核心算法、集成方案)
    • 数据模型DTO、VO 设计)
    • 接口设计RESTful API、权限设计、接口文档
    • 实现要点(关键实现逻辑、异常处理、性能优化、安全设计)

决策记录

  1. 决策记录docs/decisions/2026-02-02-002-01-ADR-Apex连接管理技术选型.md
    • 状态:已接受
    • 分析了 4 种技术方案
    • 详细记录了决策理由和后果

提示词文档

  1. 提示词文档docs/prompts/2026-02-02-002-01-prompt-Apex连接管理.md
    • 引用真源(需求文档、设计文档、决策记录)
    • 详细的需求描述
    • 完整的设计方案
    • 明确的输出格式要求
    • 严格的代码规范要求
    • 完整的测试要求
    • 实现要点和代码示例

会话记录

  1. 会话记录docs/sessions/2026-02-02-002-01-session.md
    • 完整的会话元数据
    • 详细的需求描述
    • 所有执行阶段的状态和关键决策
    • 完整的对话记录
    • 所有生成的文档和代码文件列表
    • 关键决策和理由
    • 更新的索引文件清单

影响范围

模块级别

  • 新增模块datai-salesforce-apex - Apex API 连接管理模块
  • 依赖模块
    • datai-salesforce-common - 使用现有的异常类和工具类
    • datai-salesforce-integration - 使用 SessionManager 进行会话管理

文件级别

  • 新增文件10 个 Java 文件
  • 新增文档4 个 Markdown 文件

功能级别

  • 新增功能Salesforce Apex API 连接管理
  • 新增接口7 个 REST API 接口

相关文档

需求文档

设计文档

决策记录

提示词文档

会话记录

技术选型

核心技术

  • 连接工厂模式AbstractConnectionFactory + SessionManager
  • API 版本Salesforce API 65.0
  • 缓存策略ConcurrentHashMap + ReentrantLock
  • 异常处理:使用 datai-salesforce-common 模块的现有异常类

框架和工具

  • Spring Boot:应用框架
  • Spring Security:权限控制
  • SwaggerAPI 文档生成
  • Lombok:代码简化
  • SLF4J + Logback:日志记录

关键决策

阶段 2方案设计

  1. 连接工厂模式:继承 AbstractConnectionFactory复用缓存机制
  2. 固定使用 source org:所有方法固定使用 source org 类型
  3. API 版本:使用 Salesforce API 65.0 版本
  4. 异常处理:使用 datai-salesforce-common 模块的现有异常类
  5. 缓存策略:使用 AbstractConnectionFactory 提供的 ConcurrentHashMap + ReentrantLock

阶段 3方案决策ADR

  1. 技术选型:选择 AbstractConnectionFactory + SessionManager 方案
  2. 理由
    • 复用现有基础设施,开发效率高
    • 与项目架构保持一致
    • 线程安全,性能优秀
    • 维护成本低
  3. 放弃方案
    • 自定义工厂模式:开发成本高,与现有架构不一致
    • 每次调用创建新连接:性能差,不符合最佳实践
    • Spring Connection PoolSoapConnection 不完全适用,开发成本高

阶段 4数据库结构生成

  1. 决策:跳过此阶段
  2. 理由
    • 本需求不涉及数据库变更
    • 会话信息通过 SessionManager 管理,存储在现有表中
    • 连接信息通过内存缓存管理,不需要持久化

阶段 5提示词生成

  1. 提示词结构:引用真源、需求描述、设计方案、输出格式、代码规范、测试要求
  2. 输出格式:明确列出需要生成的文件和接口
  3. 代码规范:命名规范、注释规范、日志规范、异常处理
  4. 测试要求:覆盖率不低于 80%,包含正常和异常场景

阶段 6执行代码生成

  1. 代码生成策略:不涉及数据库表新增,直接按照提示词生成所有代码
  2. 代码特点
    • 符合 Spring Boot 最佳实践
    • 符合若依框架规范
    • 使用 Lombok 简化代码
    • 使用 Swagger 注解生成 API 文档
    • 使用 Spring Security 进行权限控制
    • 完整的异常处理和日志记录

性能优化

连接缓存

  • 使用 AbstractConnectionFactory 提供的缓存机制
  • 使用 ConcurrentHashMap 保证线程安全
  • 使用 ReentrantLock 保证连接创建的原子性
  • 连接验证机制,确保缓存连接的有效性

连接复用

  • 同一 org 类型的连接复用,减少连接创建开销
  • 连接超时配置60 秒),避免长时间占用资源

安全设计

权限控制

  • 使用 Spring Security 进行权限控制
  • 使用 @PreAuthorize 注解进行方法级权限控制
  • 权限标识apex:connection:get、apex:connection:session-header、apex:connection:call-options 等

参数校验

  • 使用 @Valid 注解进行参数校验
  • 使用 @NotNull、@NotBlank 等注解进行字段级校验

异常处理

  • 完整的异常处理机制
  • 使用统一的异常类SalesforceAuthException、SalesforceOperationException
  • 详细的错误日志记录

测试要求

单元测试

  • 覆盖率不低于 80%
  • 包含正常场景和异常场景
  • 使用 JUnit 5 + Mockito

集成测试

  • 测试与 SessionManager 的集成
  • 测试与 Salesforce API 的集成
  • 测试 REST API 接口

已知问题

后续计划

  1. 编写单元测试和集成测试
  2. 编写 API 文档
  3. 进行性能测试和优化
  4. 进行安全测试和加固