datai/docs/requirements/2026-01-21-003-05-salesforce-session-management.md

329 lines
12 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.

# Salesforce 会话管理需求
## 元数据
- 需求编号2026-01-21-003-05
- 父需求编号2026-01-21-003
- 创建时间2026-01-21
- 创建人SSOT 架构师
- 状态:待开始
- 优先级:高
## 需求概述
支持会话管理,会话失效时自动重新登录。获取当前 Salesforce 会话信息(按 org 类型),会话失效时自动重新登录,获取当前 Session ID获取当前 Instance URL判断会话是否有效。支持按 org 类型source/target管理会话支持自动登录基于历史登录记录
## 目标
1. **会话管理**:支持会话管理,会话失效时自动重新登录
2. **会话信息获取**:获取当前 Salesforce 会话信息(按 org 类型)
3. **会话失效处理**:会话失效时自动重新登录
4. **Session ID 获取**:获取当前 Session ID
5. **Instance URL 获取**:获取当前 Instance URL
6. **会话有效性判断**:判断会话是否有效
7. **按 org 类型管理**:支持按 org 类型source/target管理会话
8. **自动登录**:支持自动登录(基于历史登录记录)
## 业务上下文
### 当前问题
- 缺乏会话管理功能
- 缺乏会话失效时自动重新登录机制
### 业务场景
```
Salesforce 会话管理
├─ 获取当前 Salesforce 会话信息
├─ 会话失效时自动重新登录
├─ 获取当前 Session ID
├─ 获取当前 Instance URL
└─ 判断会话是否有效
```
### 应用场景
1. **会话管理**:自动管理会话,会话失效时自动重新登录,提升用户体验
2. **自动登录**:基于历史登录记录进行自动登录
## 功能需求
### 核心功能
#### 功能 1获取会话信息
- **描述**:获取当前 Salesforce 会话信息(按 org 类型)
- **验收标准**
1. 支持获取当前 Salesforce 会话信息
2. 支持按 org 类型source/target获取会话信息
3. 支持获取当前 Session ID
4. 支持获取当前 Instance URL
5. 支持获取用户信息
6. 支持获取组织信息
7. 支持获取令牌过期时间
- **优先级**:高
- **依赖关系**依赖缓存优化功能2026-01-21-003-04
#### 功能 2会话有效性判断
- **描述**:判断会话是否有效
- **验收标准**
1. 判断会话信息是否为 null
2. 判断登录状态是否为成功
3. 判断 Session ID 是否为空
4. 判断 Session 是否过期
5. 返回会话有效性状态(有效/无效)
- **优先级**:高
- **依赖关系**:依赖获取会话信息功能
#### 功能 3会话失效处理
- **描述**:会话失效时自动重新登录
- **验收标准**
1. 会话失效时自动重新登录
2. 基于历史登录记录进行自动登录
3. 自动登录失败时返回错误信息
4. 自动登录成功后更新缓存
5. 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
- **优先级**:高
- **依赖关系**依赖会话有效性判断功能、登录历史功能2026-01-21-003-03
#### 功能 4按 org 类型管理会话
- **描述**:支持按 org 类型source/target管理会话
- **验收标准**
1. 支持按 org 类型source管理会话
2. 支持按 org 类型target管理会话
3. 支持同时管理源 org 和目标 org 的会话
4. 支持查询指定 org 类型的会话信息
- **优先级**:高
- **依赖关系**:依赖获取会话信息功能
#### 功能 5自动登录
- **描述**:支持自动登录(基于历史登录记录)
- **验收标准**
1. 基于历史登录记录进行自动登录
2. 选择最近一次成功的登录记录
3. 验证历史登录信息的有效性
4. 使用历史登录信息进行登录
5. 自动登录成功后更新缓存
6. 自动登录失败时返回错误信息
7. 自动登录失败时抛出异常
8. 记录自动登录的日志
- **优先级**:高
- **依赖关系**依赖会话失效处理功能、登录历史功能2026-01-21-003-03
#### 功能 6会话信息管理
- **描述**:支持会话信息的增删改查
- **验收标准**
1. 支持查询会话信息列表
2. 支持查询会话信息详情
3. 支持新增会话信息
4. 支持修改会话信息
5. 支持删除会话信息
6. 支持批量删除会话信息
7. 支持根据 Session ID 查询会话信息
8. 支持查询最近一条活跃的会话信息
9. 支持根据 ORG 类型查询最近一条活跃的会话信息
10. 支持导出会话信息列表为 Excel 文件
- **优先级**:高
- **依赖关系**:依赖获取会话信息功能
## 非功能需求
### 性能需求
- **会话查询时间**:会话查询响应时间 < 10ms
- **会话校验时间**会话有效性校验时间 < 5ms
- **并发用户数**支持 100+ 并发用户
### 安全需求
- **会话安全**会话信息使用加密存储
- **会话过期**会话过期后自动失效
### 可用性需求
- **系统可用性**99.9%
- **容错机制**会话失效时自动重新登录
### 可维护性需求
- **代码可读性**代码符合项目编码规范注释完整
- **测试覆盖率**单元测试覆盖率 80%
## 数据需求
### 数据模型
#### datai_sf_login_sessionSalesforce 登录会话表)
```
datai_sf_login_session (Salesforce 登录会话表)
├─ id (BIGINT) - 主键ID
├─ username (VARCHAR) - 用户名
├─ login_type (VARCHAR) - 登录类型oauth2/session_id/cli/legacy_credential
├─ status (VARCHAR) - 会话状态active/inactive
├─ login_time (DATETIME) - 登录时间
├─ expire_time (DATETIME) - 过期时间
├─ last_activity_time (DATETIME) - 最后活动时间
├─ login_ip (VARCHAR) - 登录 IP
├─ device_info (VARCHAR) - 设备信息
├─ browser_info (VARCHAR) - 浏览器信息
├─ session_id (VARCHAR) - 会话 ID
├─ dept_id (BIGINT) - 部门 ID
├─ sf_user_id (VARCHAR) - Salesforce 用户 ID
├─ sf_organization_id (VARCHAR) - Salesforce 组织 ID
├─ instance_url (VARCHAR) - 实例 URLInstance URL
├─ org_type (VARCHAR) - ORG 类型S=源 org T=目标 org ST=源和目标 org
├─ create_by (VARCHAR) - 创建者
├─ create_time (DATETIME) - 创建时间
├─ update_by (VARCHAR) - 更新者
└─ update_time (DATETIME) - 更新时间
```
#### Redis 缓存结构(复用缓存优化需求的缓存结构)
```
缓存键:
- 源 orgCURRENT_SOURCE_ORG_RESULT
- 目标 orgCURRENT_TARGET_ORG_RESULT
说明:
- 缓存键通过 orgTypesource/target动态获取
- 源 org 和目标 org 使用不同的缓存键
- 支持同时管理源 org 和目标 org 的会话
缓存值SalesforceLoginResult 对象JSON 序列化):
{
"success": true/false,
"errorCode": "错误代码",
"errorMessage": "错误信息",
"sessionId": "Session ID",
"refreshToken": "刷新令牌(仅 OAuth 流程中存在)",
"tokenType": "Bearer",
"expiresIn": "过期时间(秒)",
"loginTimestamp": "登录时间戳",
"expirationTimestamp": "过期时间戳(登录时间 + 过期时长)",
"instanceUrl": "实例 URLInstance URL",
"metadataServerUrl": "元数据服务器 URL",
"sandbox": true/false,
"passwordExpired": true/false,
"userId": "用户 ID由 Salesforce 登录后返回)",
"organizationId": "组织 ID由 Salesforce 登录后返回)",
"orgType": "组织类型source/target",
"userFullName": "用户全名",
"userEmail": "用户邮箱",
"organizationName": "组织名称(由 Salesforce 登录后返回)",
"language": "语言",
"timeZone": "时区"
}
缓存过期时间2 小时7200 秒)
```
### 数据存储需求
- **缓存类型**Redis
- **存储容量**支持 1000 + 缓存键
- **缓存过期策略**TTLTime To Live自动过期
### 数据流转需求
```
会话管理
└─ 获取当前 Salesforce 会话信息(按 org 类型)
└─ 判断会话是否有效
└─ 会话失效时自动重新登录
└─ 基于历史登录记录进行自动登录
└─ 获取当前 Session ID
└─ 获取当前 Instance URL
└─ 记录会话状态日志(会话为 null、登录状态为失败、Session 已过期)
会话信息管理
└─ 查询会话信息列表
└─ 查询会话信息详情
└─ 新增会话信息
└─ 修改会话信息
└─ 删除会话信息
└─ 批量删除会话信息
└─ 根据 Session ID 查询会话信息
└─ 查询最近一条活跃的会话信息
└─ 根据 ORG 类型查询最近一条活跃的会话信息
└─ 导出会话信息列表为 Excel 文件
```
## 业务规则
1. **会话管理**支持会话管理会话失效时自动重新登录
2. **会话有效性判断**判断会话是否有效会话信息不为 null登录状态为成功Session ID 不为空Session 未过期
3. **会话失效处理**会话失效时自动重新登录
4. **按 org 类型管理**支持按 org 类型source/target管理会话
5. **自动登录**支持自动登录基于历史登录记录
6. **会话状态日志**记录会话状态日志会话为 null登录状态为失败Session 已过期
7. **自动登录失败处理**自动登录失败时返回错误信息并抛出异常
8. **会话信息管理**支持会话信息的增删改查
9. **会话状态管理**支持会话状态active/inactive和最后活动时间管理
## 接口需求
### 会话管理接口
1. **获取会话信息**
- 接口路径GET /api/salesforce/session/info
- 请求参数orgType必填source/target
- 响应会话信息SalesforceLoginResult
2. **获取当前 Session ID**
- 接口路径GET /api/salesforce/session/session-id
- 请求参数orgType必填source/target
- 响应Session ID
3. **获取当前 Instance URL**
- 接口路径GET /api/salesforce/session/instance-url
- 请求参数orgType必填source/target
- 响应Instance URL
4. **判断会话是否有效**
- 接口路径GET /api/salesforce/session/valid
- 请求参数orgType必填source/target
- 响应会话有效性状态true/false
5. **自动登录**
- 接口路径POST /api/salesforce/session/auto-login
- 请求参数orgType必填source/target
- 响应登录结果SalesforceLoginResult
6. **查询会话信息列表**
- 接口路径GET /api/salesforce/session/list
- 请求参数分页参数筛选参数
- 响应会话信息列表
7. **导出会话信息列表**
- 接口路径POST /api/salesforce/session/export
- 请求参数筛选参数
- 响应Excel 文件
8. **查询会话信息详情**
- 接口路径GET /api/salesforce/session/{id}
- 响应会话信息详情
9. **新增会话信息**
- 接口路径POST /api/salesforce/session
- 请求参数会话信息
- 响应成功/失败
10. **修改会话信息**
- 接口路径PUT /api/salesforce/session
- 请求参数会话信息
- 响应成功/失败
11. **删除会话信息**
- 接口路径DELETE /api/salesforce/session/{ids}
- 请求参数会话 ID 数组
- 响应成功/失败
12. **根据 Session ID 查询会话信息**
- 接口路径GET /api/salesforce/session/by-session-id/{sessionId}
- 响应会话信息
13. **查询最近一条活跃的会话信息**
- 接口路径GET /api/salesforce/session/latest-active
- 响应会话信息
14. **根据 ORG 类型查询最近一条活跃的会话信息**
- 接口路径GET /api/salesforce/session/latest-active/{orgType}
- 请求参数orgTypeS/T/ST
- 响应会话信息
## 依赖关系
- 依赖 `2026-01-21-003-03`登录历史
- 依赖 `2026-01-21-003-04`缓存优化
- 依赖 `datai-cache-redis` 模块
- 依赖 `datai-salesforce-common` 模块的 Salesforce API 封装
## 后续需求
- 2026-01-21-003-06登录状态查询
- 2026-01-21-003-07错误码映射