159 lines
4.9 KiB
Markdown
159 lines
4.9 KiB
Markdown
|
|
# SCADA 用户同步接口文档
|
|||
|
|
|
|||
|
|
## 1. 目标与适用场景
|
|||
|
|
|
|||
|
|
本文档用于规范 SCADA 系统对 JeecgBoot 用户数据的读取方式,支持以下场景:
|
|||
|
|
|
|||
|
|
- SCADA 首次全量拉取用户并缓存到本地。
|
|||
|
|
- SCADA 按更新时间进行增量同步(断网续传)。
|
|||
|
|
- SCADA 按条件(用户名、工号、手机号)查询特定用户。
|
|||
|
|
- 在需要时拉取用户的组织与租户详细信息。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 接口信息
|
|||
|
|
|
|||
|
|
- **接口名称**:SCADA-免登录查询用户信息
|
|||
|
|
- **请求方法**:`GET`
|
|||
|
|
- **接口路径**:`/jeecg-boot/sys/user/scada/queryUser`
|
|||
|
|
- **认证要求**:免登录(已加入后端白名单)
|
|||
|
|
- **文档状态**:已在 Knife4j 中取消 `X-Access-Token` 必填限制
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 请求参数
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| `username` | string | 否 | - | 用户名,精确匹配 |
|
|||
|
|
| `workNo` | string | 否 | - | 工号,精确匹配 |
|
|||
|
|
| `phone` | string | 否 | - | 手机号,精确匹配 |
|
|||
|
|
| `updatedAfter` | string | 否 | - | 增量同步时间游标,仅返回更新时间或创建时间大于等于该值的数据。支持格式:`yyyy-MM-dd HH:mm:ss`、`yyyy-MM-dd'T'HH:mm:ss` |
|
|||
|
|
| `pageNo` | int | 否 | `1` | 页码,从 1 开始 |
|
|||
|
|
| `pageSize` | int | 否 | `200` | 每页条数,最大 `1000` |
|
|||
|
|
| `includeDetail` | boolean | 否 | `false` | 是否返回部门/公司/租户详细信息;`true` 会增加查询耗时 |
|
|||
|
|
|
|||
|
|
> 说明:`username/workNo/phone` 三者都可为空;都为空时按分页返回“全部有效用户”。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 返回结构
|
|||
|
|
|
|||
|
|
顶层响应遵循 JeecgBoot 标准格式:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"message": "",
|
|||
|
|
"code": 200,
|
|||
|
|
"result": [
|
|||
|
|
{
|
|||
|
|
"id": "用户ID",
|
|||
|
|
"username": "登录账号",
|
|||
|
|
"realname": "真实姓名",
|
|||
|
|
"password": "加密密码串",
|
|||
|
|
"salt": "密码盐值",
|
|||
|
|
"workNo": "工号",
|
|||
|
|
"phone": "手机号",
|
|||
|
|
"email": "邮箱",
|
|||
|
|
"orgCode": "当前组织编码",
|
|||
|
|
"post": "岗位ID/信息",
|
|||
|
|
"status": 1,
|
|||
|
|
"createTime": "创建时间",
|
|||
|
|
"updateTime": "更新时间",
|
|||
|
|
"lastPwdUpdateTime": "最后修改密码时间",
|
|||
|
|
"departIds": "负责部门IDs",
|
|||
|
|
"departmentList": [],
|
|||
|
|
"companyList": [],
|
|||
|
|
"loginTenantId": 1002,
|
|||
|
|
"tenantList": []
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.1 字段说明(核心)
|
|||
|
|
|
|||
|
|
- `updateTime`:**增量同步主游标字段**,建议 SCADA 以此推进同步位点。
|
|||
|
|
- `createTime`:用于补偿“新增但未更新”的数据。
|
|||
|
|
- `departmentList`:仅在 `includeDetail=true` 时有值(否则为空数组)。
|
|||
|
|
- `companyList`:仅在 `includeDetail=true` 时有值(否则为空数组)。
|
|||
|
|
- `tenantList`:仅在 `includeDetail=true` 时有值(否则为空数组)。
|
|||
|
|
- `password`/`salt`:均为后端存储态字段(非明文);如无强依赖,建议 SCADA 侧不落库或脱敏保存。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 查询与同步规则
|
|||
|
|
|
|||
|
|
后端固定只返回“有效用户”:
|
|||
|
|
|
|||
|
|
- `delFlag = 0`
|
|||
|
|
- `status = 1`
|
|||
|
|
|
|||
|
|
当传入 `updatedAfter` 时,后端过滤条件为:
|
|||
|
|
|
|||
|
|
- `updateTime >= updatedAfter` **或**
|
|||
|
|
- `createTime >= updatedAfter`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 推荐调用策略(给 SCADA)
|
|||
|
|
|
|||
|
|
### 6.1 首次全量同步
|
|||
|
|
|
|||
|
|
1. `pageNo=1`,`pageSize=500`,`includeDetail=false`。
|
|||
|
|
2. 按页拉取至空页(或小于 `pageSize`)。
|
|||
|
|
3. 本地记录本次最大 `updateTime` 作为 `syncCursor`。
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
|
|||
|
|
```http
|
|||
|
|
GET /jeecg-boot/sys/user/scada/queryUser?pageNo=1&pageSize=500&includeDetail=false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 增量同步(断网续传)
|
|||
|
|
|
|||
|
|
1. 使用本地 `syncCursor` 作为 `updatedAfter`。
|
|||
|
|
2. 分页拉取,直到无新增数据。
|
|||
|
|
3. 每处理完一页更新本地游标(建议按返回中最大 `updateTime`)。
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
|
|||
|
|
```http
|
|||
|
|
GET /jeecg-boot/sys/user/scada/queryUser?updatedAfter=2026-04-27 10:00:00&pageNo=1&pageSize=500&includeDetail=false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.3 明细补拉策略
|
|||
|
|
|
|||
|
|
若 SCADA 需要组织和租户完整信息,仅对“已识别变更的用户”按条件补拉,并使用:
|
|||
|
|
|
|||
|
|
- `includeDetail=true`
|
|||
|
|
- 同时带 `username/workNo/phone` 之一,缩小范围
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 性能说明
|
|||
|
|
|
|||
|
|
- 默认 `includeDetail=false`,可避免部门与租户明细查询带来的额外耗时。
|
|||
|
|
- 单次 `pageSize` 上限 `1000`,防止单请求过大。
|
|||
|
|
- 如业务需要更高吞吐,建议后续将部门/租户查询改为批量聚合查询,避免 N+1 查询。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 安全建议
|
|||
|
|
|
|||
|
|
当前接口为免登录接口,建议尽快补充至少一种安全手段:
|
|||
|
|
|
|||
|
|
- IP 白名单(仅允许 SCADA 网段访问)
|
|||
|
|
- 网关层签名校验(`appKey + timestamp + sign`)
|
|||
|
|
- HTTPS 强制 + 调用方证书
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 当前实现位置
|
|||
|
|
|
|||
|
|
- 控制器:`jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java`
|
|||
|
|
- 文档与安全配置:`jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/Swagger3Config.java`
|
|||
|
|
- 免登录白名单:`jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-*.yml`
|
|||
|
|
|