# 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. 系统不存在时返回错误信息 - **优先级**:高 - **依赖关系**:依赖查询所有系统登录状态功能 #### 功能 4:Session 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_session(Salesforce 登录会话表) ``` 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) - 实例 URL(Instance URL) ├─ org_type (VARCHAR) - ORG 类型(S=源 org T=目标 org ST=源和目标 org) ├─ create_by (VARCHAR) - 创建者 ├─ create_time (DATETIME) - 创建时间 ├─ update_by (VARCHAR) - 更新者 └─ update_time (DATETIME) - 更新时间 ``` #### Redis 缓存结构(复用缓存优化需求的缓存结构) ``` 缓存键: - 源 org:CURRENT_SOURCE_ORG_RESULT - 目标 org:CURRENT_TARGET_ORG_RESULT 说明: - 缓存键通过 orgType(source/target)动态获取 - 源 org 和目标 org 使用不同的缓存键 - 支持同时管理源 org 和目标 org 的会话 缓存值(SalesforceLoginResult 对象,JSON 序列化): { "success": true/false, "errorCode": "错误代码", "errorMessage": "错误信息", "sessionId": "Session ID", "refreshToken": "刷新令牌(仅 OAuth 流程中存在)", "tokenType": "Bearer", "expiresIn": "过期时间(秒)", "loginTimestamp": "登录时间戳", "expirationTimestamp": "过期时间戳(登录时间 + 过期时长)", "instanceUrl": "实例 URL(Instance 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 万+ 缓存键 - **缓存过期策略**:TTL(Time 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} - 请求参数:orgType(S/T/ST) - 响应:会话信息 ## 依赖关系 - 依赖 `2026-01-21-003-04`:缓存优化 - 依赖 `2026-01-21-003-05`:会话管理 - 依赖 `datai-cache-redis` 模块 ## 后续需求 - 2026-01-21-003-07:错误码映射