datai/docs/decisions/2026-01-21-003-01-ADR-salesforce-multi-system-config.md

178 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADR-003-01: Salesforce 多系统配置架构决策
## 元数据
- ADR 编号ADR-003-01
- 需求编号2026-01-21-003-01
- 创建时间2026-01-21
- 创建人SSOT 架构师
- 状态:已采纳
- 优先级:高
## 上下文
需要实现 Salesforce 多系统配置功能,支持配置多个不同类型的 Salesforce 系统,支持用户自定义系统类型,支持区分源 org 和目标 org支持同一系统既是源 org 又是目标 org支持配置系统名称、自定义类型、登录方式等支持启用/停用系统,系统配置变更无需审批流程,系统配置无权限限制,密码、安全令牌等敏感信息使用 EncryptUtils 加密存储。
## 决策
采用以下架构决策实现 Salesforce 多系统配置功能:
### 决策 1数据库表设计
**决策内容**:创建 `datai_sf_system_config` 表存储 Salesforce 系统配置信息
**理由**
1. 集中存储所有 Salesforce 系统配置,便于统一管理
2. 支持多系统配置,满足业务需求
3. 使用独立的表存储,避免与其他业务表耦合
**影响**
- 需要创建新的数据库表
- 需要创建对应的 Mapper 和 XML 文件
- 需要创建对应的实体类、DTO、VO
### 决策 2敏感信息加密策略
**决策内容**:使用 `EncryptUtils` 对密码、安全令牌、OAuth 客户端密钥等敏感信息进行加密存储
**理由**
1. 保护用户敏感信息,提高系统安全性
2. 符合项目现有的加密规范
3. `EncryptUtils` 已经在项目中广泛使用,成熟可靠
**影响**
- 需要在 Service 层实现加密/解密逻辑
- 需要在读取配置时自动解密
- 需要在保存配置时自动加密
### 决策 3系统类型自定义策略
**决策内容**系统类型system_type使用自由文本字段不限制为固定值
**理由**
1. 支持用户自定义系统类型,提高灵活性
2. 不限制用户的使用场景
3. 满足"用户自定义系统类型"的业务需求
**影响**
- 系统类型字段使用 VARCHAR 类型
- 不需要创建枚举或字典表
- 前端需要提供自由输入框
### 决策 4源目标区分策略
**决策内容**:使用 `org_type` 字段CHAR 类型)区分源 org 和目标 org支持同一系统既是源 org 又是目标 org
**理由**
1. 使用单个字段存储,简化数据模型
2. 支持 S源 org、T目标 org两种值
3. 支持同一系统既是源 org 又是目标 org通过业务逻辑实现
**影响**
- 需要在业务逻辑中处理 org_type 字段
- 需要提供源 org / 目标 org 的筛选查询
### 决策 5系统配置管理策略
**决策内容**:系统配置变更无需审批流程,系统配置无权限限制
**理由**
1. 提高配置管理的灵活性
2. 简化配置流程,提高用户体验
3. 满足"系统配置变更无需审批流程,系统配置无权限限制"的业务需求
**影响**
- 不需要实现审批流程
- 不需要实现权限控制
- 需要在 Controller 层直接调用 Service 层
### 决策 6索引设计策略
**决策内容**:为关键字段创建索引,提高查询性能
**理由**
1. 提高查询性能,满足性能需求(系统列表查询响应时间 < 1
2. 支持分页查询避免全表扫描
3. 支持按条件筛选查询
**影响**
- 需要创建主键索引
- 需要创建唯一索引system_name
- 需要创建普通索引system_typeorg_typelogin_typestatus
### 决策 7接口设计策略
**决策内容**提供 RESTful API 接口支持 CRUD 操作和特殊查询
**理由**
1. 遵循 RESTful 设计规范
2. 提供统一的接口风格
3. 便于前端调用和集成
**影响**
- 需要创建 Controller 层接口
- 需要创建 Service 层接口和实现
- 需要创建 Mapper 层接口和实现
### 决策 8分层架构策略
**决策内容**采用 Controller-Service-Mapper 三层架构
**理由**
1. 遵循项目现有的分层架构规范
2. 实现业务逻辑与数据访问的分离
3. 提高代码的可维护性和可测试性
**影响**
- 需要创建 Controller
- 需要创建 Service 层接口和实现
- 需要创建 Mapper 层接口和 XML 文件
## 后果
### 正面影响
1. **灵活性**支持用户自定义系统类型不限制使用场景
2. **安全性**敏感信息加密存储保护用户数据
3. **性能**合理的索引设计提高查询性能
4. **可维护性**清晰的分层架构便于维护和扩展
5. **易用性**无审批流程和权限限制简化配置管理
### 负面影响
1. **开发成本**需要创建多个层次的代码开发成本较高
2. **测试成本**需要编写单元测试和集成测试测试成本较高
3. **维护成本**需要维护多个层次的代码维护成本较高
## 替代方案
### 替代方案 1使用枚举限制系统类型
**描述**使用枚举限制系统类型为固定值productionsandboxdeveloper
**拒绝理由**
1. 不满足"用户自定义系统类型"的业务需求
2. 限制用户的使用场景
3. 灵活性不足
### 替代方案 2使用两个表分别存储源 org 和目标 org
**描述**使用 `datai_sf_source_org_config` `datai_sf_target_org_config` 两个表分别存储源 org 和目标 org
**拒绝理由**
1. 数据模型复杂增加维护成本
2. 不支持同一系统既是源 org 又是目标 org
3. 查询逻辑复杂
### 替代方案 3实现审批流程和权限控制
**描述**实现审批流程和权限控制限制系统配置的变更
**拒绝理由**
1. 不满足"系统配置变更无需审批流程系统配置无权限限制"的业务需求
2. 增加系统复杂度
3. 降低用户体验
## 相关决策
-
## 相关需求
- 2026-01-21-003-01Salesforce 多系统配置
## 相关设计
- 2026-01-21-003-01-salesforce-multi-system-config-designSalesforce 多系统配置设计
## 实施计划
1. 创建数据库表 `datai_sf_system_config`
2. 创建实体类 `DataiSfSystemConfig`
3. 创建 DTO VO
4. 创建 Mapper 接口和 XML 文件
5. 创建 Service 接口和实现
6. 创建 Controller 接口
7. 编写单元测试
8. 编写集成测试
9. 进行代码审查
10. 部署到测试环境