datai/docs/requirements/2026-01-21-003-06-salesforce-login-status-query.md

300 lines
11 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-06
- 父需求编号2026-01-21-003
- 创建时间2026-01-21
- 创建人SSOT 架构师
- 状态:待开始
- 优先级:高
## 需求概述
提供登录状态查询接口,用户可以查看当前所有系统的登录状态。提供查询接口返回当前所有系统的登录状态,显示每个系统的登录状态(已登录/未登录/已过期),显示每个系统的 Session ID脱敏处理显示每个系统的过期时间支持按 org 类型筛选查询结果,支持按系统 ID 查询特定系统的登录状态。
## 目标
1. **登录状态查询**:提供登录状态查询接口,用户可以查看当前所有系统的登录状态
2. **系统登录状态**:显示每个系统的登录状态(已登录/未登录/已过期)
3. **Session ID 显示**:显示每个系统的 Session ID脱敏处理
4. **过期时间显示**:显示每个系统的过期时间
5. **按 org 类型筛选**:支持按 org 类型筛选查询结果
6. **按系统 ID 查询**:支持按系统 ID 查询特定系统的登录状态
## 业务上下文
### 当前问题
- 缺乏登录状态查询功能
- 用户无法查看当前所有系统的登录状态
### 业务场景
```
Salesforce 登录状态查询
├─ 提供查询接口返回当前所有系统的登录状态
├─ 显示每个系统的登录状态(已登录/未登录/已过期)
├─ 显示每个系统的 Session ID脱敏处理
├─ 显示每个系统的过期时间
├─ 支持按 org 类型筛选查询结果
└─ 支持按系统 ID 查询特定系统的登录状态
```
### 应用场景
1. **登录状态监控**:用户可以查看当前所有系统的登录状态
2. **Session 管理**:用户可以查看和管理 Session ID
## 功能需求
### 核心功能
#### 功能 1查询所有系统登录状态
- **描述**:提供查询接口返回当前所有系统的登录状态
- **验收标准**
1. 提供查询接口返回当前所有系统的登录状态
2. 显示每个系统的系统 ID
3. 显示每个系统的系统名称
4. 显示每个系统的系统类型
5. 显示每个系统的 org 类型
6. 显示每个系统的登录状态(已登录/未登录/已过期)
7. 显示每个系统的 Session ID脱敏处理
8. 显示每个系统的过期时间
9. 显示每个系统的用户信息
10. 显示每个系统的组织信息
- **优先级**:高
- **依赖关系**依赖缓存优化功能2026-01-21-003-04、会话管理功能2026-01-21-003-05
#### 功能 2按 org 类型筛选查询
- **描述**:支持按 org 类型筛选查询结果
- **验收标准**
1. 支持按 org 类型source筛选查询结果
2. 支持按 org 类型target筛选查询结果
3. 支持查询所有 org 类型的系统
4. 支持同时查询源 org 和目标 org 的系统
- **优先级**:高
- **依赖关系**:依赖查询所有系统登录状态功能
#### 功能 3按系统 ID 查询
- **描述**:支持按系统 ID 查询特定系统的登录状态
- **验收标准**
1. 支持按系统 ID 查询特定系统的登录状态
2. 返回指定系统的详细登录状态
3. 系统不存在时返回错误信息
- **优先级**:高
- **依赖关系**:依赖查询所有系统登录状态功能
#### 功能 4Session ID 脱敏处理
- **描述**:显示每个系统的 Session ID脱敏处理
- **验收标准**
1. Session ID 进行脱敏处理
2. 只显示 Session ID 的前 4 位和后 4 位
3. 中间部分用 **** 代替
4. 格式:`{前4位}****{后4位}`
- **优先级**:高
- **依赖关系**:依赖查询所有系统登录状态功能
#### 功能 5会话信息管理
- **描述**:支持会话信息的增删改查
- **验收标准**
1. 支持查询会话信息列表
2. 支持查询会话信息详情
3. 支持新增会话信息
4. 支持修改会话信息
5. 支持删除会话信息
6. 支持批量删除会话信息
7. 支持根据 Session ID 查询会话信息
8. 支持查询最近一条活跃的会话信息
9. 支持根据 ORG 类型查询最近一条活跃的会话信息
10. 支持导出会话信息列表为 Excel 文件
- **优先级**:高
- **依赖关系**:依赖查询所有系统登录状态功能
## 非功能需求
### 性能需求
- **查询时间**:登录状态查询响应时间 < 1
- **并发用户数**支持 100+ 并发用户
### 安全需求
- **数据安全**Session ID 进行脱敏处理
- **访问控制**只有授权用户才能查询登录状态
### 可用性需求
- **系统可用性**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自动过期
### 数据流转需求
```
登录状态查询
└─ 从 Redis 读取所有系统的登录状态
└─ 判断每个系统的登录状态(已登录/未登录/已过期)
└─ 对 Session ID 进行脱敏处理
└─ 返回登录状态信息
会话信息管理
└─ 查询会话信息列表
└─ 查询会话信息详情
└─ 新增会话信息
└─ 修改会话信息
└─ 删除会话信息
└─ 批量删除会话信息
└─ 根据 Session ID 查询会话信息
└─ 查询最近一条活跃的会话信息
└─ 根据 ORG 类型查询最近一条活跃的会话信息
└─ 导出会话信息列表为 Excel 文件
```
## 业务规则
1. **登录状态判断**根据缓存信息判断登录状态已登录/未登录/已过期
2. **Session ID 脱敏**Session ID 必须进行脱敏处理只显示前 4 位和后 4
3. **按 org 类型筛选**支持按 org 类型source/target筛选查询结果
4. **按系统 ID 查询**支持按系统 ID 查询特定系统的登录状态
5. **会话信息管理**支持会话信息的增删改查
6. **会话状态管理**支持会话状态active/inactive和最后活动时间管理
## 接口需求
### 登录状态查询接口
1. **查询所有系统登录状态**
- 接口路径GET /api/salesforce/login/status/list
- 请求参数从缓存中读取所有 org 类型的登录状态
- 响应所有系统的登录状态列表 org 和目标 org
2. **查询特定 org 类型登录状态**
- 接口路径GET /api/salesforce/login/status/{orgType}
- 请求参数orgType必填source/target
- 响应指定 org 类型的登录状态
3. **查询源 org 登录状态**
- 接口路径GET /api/salesforce/login/status/source
- 请求参数
- 响应 org 的登录状态
4. **查询目标 org 登录状态**
- 接口路径GET /api/salesforce/login/status/target
- 请求参数
- 响应目标 org 的登录状态
### 会话信息管理接口
5. **查询会话信息列表**
- 接口路径GET /auth/session/list
- 请求参数分页参数筛选参数
- 响应会话信息列表
6. **导出会话信息列表**
- 接口路径POST /auth/session/export
- 请求参数筛选参数
- 响应Excel 文件
7. **查询会话信息详情**
- 接口路径GET /auth/session/{id}
- 响应会话信息详情
8. **新增会话信息**
- 接口路径POST /auth/session
- 请求参数会话信息
- 响应成功/失败
9. **修改会话信息**
- 接口路径PUT /auth/session
- 请求参数会话信息
- 响应成功/失败
10. **删除会话信息**
- 接口路径DELETE /auth/session/{ids}
- 请求参数会话 ID 数组
- 响应成功/失败
11. **根据 Session ID 查询会话信息**
- 接口路径GET /auth/session/by-session-id/{sessionId}
- 响应会话信息
12. **查询最近一条活跃的会话信息**
- 接口路径GET /auth/session/latest-active
- 响应会话信息
13. **根据 ORG 类型查询最近一条活跃的会话信息**
- 接口路径GET /auth/session/latest-active/{orgType}
- 请求参数orgTypeS/T/ST
- 响应会话信息
## 依赖关系
- 依赖 `2026-01-21-003-04`缓存优化
- 依赖 `2026-01-21-003-05`会话管理
- 依赖 `datai-cache-redis` 模块
## 后续需求
- 2026-01-21-003-07错误码映射