199 lines
6.5 KiB
Markdown
199 lines
6.5 KiB
Markdown
---
|
||
name: REQ-007
|
||
description: 查询不同类型ORG登录历史及自动登录功能
|
||
---
|
||
|
||
# 需求: 查询不同类型ORG登录历史及自动登录功能
|
||
|
||
## 元数据 (Metadata)
|
||
|
||
- **需求编号**: REQ-007
|
||
- **需求标题**: 查询不同类型ORG登录历史及自动登录功能
|
||
- **需求类型**: 功能需求
|
||
- **优先级**: 高
|
||
- **状态**: 阶段1-需求定义与入库
|
||
- **创建日期**: 2026-01-16
|
||
- **最后更新**: 2026-01-18
|
||
- **创建人**: SSOT Architect
|
||
- **负责人**: 待分配
|
||
|
||
## 需求描述 (Description)
|
||
|
||
### 背景
|
||
当前系统支持通过 `DataISfLoginController` 进行 Salesforce 登录操作,包括源ORG和目标ORG的登录。系统已经实现了基本的登录、登出、获取当前登录信息和自动登录功能。但是,当前的 `getCurrentLoginInfo` 接口只能获取当前登录信息,无法查询历史登录记录。而 `autoLogin` 接口虽然支持自动登录,但只能使用最新的登录历史记录。
|
||
|
||
### 问题陈述
|
||
1. 无法查询特定类型ORG(如Source、Target、Sandbox、Production等)的成功登录历史记录
|
||
2. 无法基于指定的登录历史记录自动登录到对应的ORG环境
|
||
3. 开发人员和测试人员需要在多个环境间切换时,需要重复输入登录凭证,效率较低
|
||
|
||
### 目标
|
||
1. 提供查询不同类型ORG成功登录历史的接口
|
||
2. 提供根据指定登录历史记录自动登录到对应ORG的接口
|
||
3. 支持多种ORG类型(Source、Target、Sandbox、Production等)
|
||
4. 提高多环境管理和切换的效率
|
||
|
||
## 用户故事 (User Story)
|
||
|
||
作为一个系统管理员,
|
||
我想要查询不同类型ORG的成功登录历史,并基于历史记录自动登录到不同的ORG环境,
|
||
以便于快速切换和管理多个Salesforce环境。
|
||
|
||
## 验收标准 (Acceptance Criteria)
|
||
|
||
### 功能验收标准
|
||
- [ ] AC1: 提供按orgType查询成功登录历史的接口
|
||
- [ ] AC2: 支持查询多种ORG类型(Source、Target、Sandbox、Production等)
|
||
- [ ] AC3: 返回的登录历史包含完整的登录信息(用户名、登录类型、ORG类型、Session ID、登录时间等)
|
||
- [ ] AC4: 提供根据登录历史ID自动登录到对应ORG的接口
|
||
- [ ] AC5: 自动登录时使用历史记录中的登录凭证
|
||
- [ ] AC6: 自动登录成功后返回完整的登录结果信息
|
||
- [ ] AC7: 提供查询所有登录成功历史的接口,按username和instanceUrl分组,每组返回最新一条数据
|
||
|
||
### 非功能验收标准
|
||
- [ ] 性能要求: 查询登录历史响应时间 < 500ms
|
||
- [ ] 安全要求: 登录历史中的敏感信息(如密码)需要加密存储
|
||
- [ ] 可用性要求: 接口可用性 > 99.9%
|
||
- [ ] 日志要求: 记录所有登录历史查询和自动登录操作的日志
|
||
|
||
### 测试用例
|
||
| 用例编号 | 用例描述 | 预期结果 |
|
||
|----------|----------|----------|
|
||
| TC-001 | 查询Source类型的登录历史 | 返回所有Source类型的成功登录记录 |
|
||
| TC-002 | 查询Target类型的登录历史 | 返回所有Target类型的成功登录记录 |
|
||
| TC-003 | 查询Sandbox类型的登录历史 | 返回所有Sandbox类型的成功登录记录 |
|
||
| TC-004 | 查询不存在的ORG类型 | 返回空列表或提示无记录 |
|
||
| TC-005 | 根据历史ID自动登录到Source ORG | 使用历史记录中的凭证成功登录到Source ORG |
|
||
| TC-006 | 根据历史ID自动登录到Target ORG | 使用历史记录中的凭证成功登录到Target ORG |
|
||
| TC-007 | 根据不存在的历史ID自动登录 | 返回错误信息,提示历史记录不存在 |
|
||
| TC-008 | 查询登录历史时orgType为空 | 返回所有类型的登录历史记录 |
|
||
| TC-009 | 查询所有登录成功历史分组数据 | 返回按username和instanceUrl分组的最新登录记录 |
|
||
|
||
## 技术要求 (Technical Requirements)
|
||
|
||
### 技术栈
|
||
- [x] Java 17/21
|
||
- [x] Spring Boot 3.x
|
||
- [x] MyBatis Plus
|
||
- [x] Salesforce API
|
||
|
||
### 接口要求
|
||
- [x] REST API
|
||
- [ ] SOAP API
|
||
- [ ] GraphQL API
|
||
|
||
### 数据库要求
|
||
- [x] MySQL
|
||
- [ ] PostgreSQL
|
||
- [ ] Oracle
|
||
|
||
### 接口设计
|
||
|
||
#### 接口1: 查询不同类型ORG成功登录历史
|
||
|
||
**接口路径**: `GET /salesforce/login/history/success/{orgType}`
|
||
|
||
**请求参数**:
|
||
| 参数名 | 类型 | 必填 | 描述 | 示例 |
|
||
|--------|------|------|------|------|
|
||
| orgType | String | 是 | ORG类型(Source/Target/Sandbox/Production等) | Source |
|
||
|
||
**响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "查询成功",
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"username": "admin@example.com",
|
||
"loginType": "password",
|
||
"orgType": "Source",
|
||
"sessionId": "xxxxx",
|
||
"loginTime": "2026-01-16 10:00:00",
|
||
"userId": "005xxxxxxxxxxxx",
|
||
"organizationId": "00Dxxxxxxxxxxxx"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 接口2: 根据登录历史自动登录
|
||
|
||
**接口路径**: `POST /salesforce/login/autoLoginByHistory`
|
||
|
||
**请求参数**:
|
||
| 参数名 | 类型 | 必填 | 描述 | 示例 |
|
||
|--------|------|------|------|------|
|
||
| historyId | Long | 是 | 登录历史记录ID | 1 |
|
||
|
||
**响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "自动登录成功",
|
||
"data": {
|
||
"userId": "005xxxxxxxxxxxx",
|
||
"organizationId": "00Dxxxxxxxxxxxx",
|
||
"sessionId": "xxxxx",
|
||
"instanceUrl": "https://xxx.my.salesforce.com",
|
||
"orgType": "Source",
|
||
"loginType": "password"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 接口3: 查询所有登录成功历史分组数据
|
||
|
||
**接口路径**: `GET /auth/history/latest-success-grouped`
|
||
|
||
**功能描述**: 查询所有登录成功的历史记录,按username和instanceUrl分组,每组返回最新一条数据
|
||
|
||
**请求参数**: 无
|
||
|
||
**响应数据**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "查询成功",
|
||
"rows": [
|
||
{
|
||
"id": 1,
|
||
"username": "admin@example.com",
|
||
"loginType": "password",
|
||
"instanceUrl": "https://xxx.my.salesforce.com",
|
||
"orgType": "Source",
|
||
"sessionId": "xxxxx",
|
||
"loginTime": "2026-01-16 10:00:00",
|
||
"userId": "005xxxxxxxxxxxx",
|
||
"organizationId": "00Dxxxxxxxxxxxx"
|
||
}
|
||
],
|
||
"total": 1
|
||
}
|
||
```
|
||
|
||
## 依赖关系 (Dependencies)
|
||
|
||
### 前置需求
|
||
- [REQ-001](./REQ-001.md) - Salesforce数据及时同步至本地数据库
|
||
|
||
### 后续需求
|
||
- 无
|
||
|
||
### 外部依赖
|
||
- [Salesforce API] - Salesforce登录API
|
||
|
||
## 相关文档 (Related Documents)
|
||
|
||
- [设计文档](../design/0001-salesforce-cdc-realtime-sync.md)
|
||
- [ADR 文档](../decisions/adr/0001-salesforce-cdc-sync.md)
|
||
- [提示词文档](../prompts/0000-template.md)
|
||
- [DataISfLoginController](../api-docs/auth/DataISfLoginController/) - Salesforce登录控制器接口文档
|
||
|
||
## 变更历史 (Change History)
|
||
|
||
| 日期 | 版本 | 变更内容 | 变更人 |
|
||
|------|------|----------|--------|
|
||
| 2026-01-16 | 1.0.0 | 初始版本 | SSOT Architect |
|