551 lines
14 KiB
Markdown
551 lines
14 KiB
Markdown
# IntegrationGateway B 组接口文档
|
||
|
||
> **版本**: 1.0
|
||
> **日期**: 2026-06-04
|
||
> **基址**: `http://{host}:{port}`(默认 `http://localhost:5100`)
|
||
> **内容类型**: `application/json`(除标注外)
|
||
> **认证**: 可选 `X-Gateway-Key` 请求头(与 Gateway 段配置一致时生效)
|
||
> **通用错误码**: 见 §5
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [健康检查](#1-健康检查) — B1
|
||
2. [设备管理](#2-设备管理) — B2, B3, B3-sync
|
||
3. [视频与流媒体](#3-视频与流媒体) — B6a, B6b, 截图, B7
|
||
4. [IoT 实时数据](#4-iot-实时数据) — B4, B4-batch, B5
|
||
5. [告警管理](#5-告警管理) — B8, B9-confirm, B9-end
|
||
6. [录像查询](#6-录像查询)
|
||
7. [设备控制 (通用)](#7-设备控制-通用) — B10
|
||
8. [业务记录查询](#8-业务记录查询) — B11
|
||
9. [数据同步](#9-数据同步) — B12, B13
|
||
10. [错误代码](#10-错误代码)
|
||
|
||
---
|
||
|
||
## 1. 健康检查
|
||
|
||
### B1: 查询所有适配器健康状态
|
||
|
||
```
|
||
GET /api/gateway/health
|
||
```
|
||
|
||
**请求参数**: 无
|
||
|
||
**返回参数**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `[].adapterCode` | string | 适配器编码,如 `Owl:main`、`MC4:31ku`、`KMS:main` |
|
||
| `[].displayName` | string | 人类可读的适配器名称 |
|
||
| `[].healthy` | bool | `true` = 适配器在线,`false` = 离线或不可达 |
|
||
| `[].capabilities` | object | 适配器能力声明 |
|
||
|
||
**capabilities 字段**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `hasFlatDevices` | bool | 是否支持扁平设备列表 |
|
||
| `hasOwnDeviceTree` | bool | 是否支持层级对象树 |
|
||
| `hasStreams` | bool | 是否支持视频取流 |
|
||
| `hasPoints` | bool | 是否支持 IoT 实时点位 |
|
||
| `hasAlarms` | bool | 是否支持告警查询 |
|
||
| `hasRecordings` | bool | 是否支持录像查询 |
|
||
|
||
**返回示例**:
|
||
```json
|
||
[
|
||
{
|
||
"adapterCode": "Owl:main",
|
||
"displayName": "Owl (Owl:main)",
|
||
"healthy": true,
|
||
"capabilities": { "hasFlatDevices": true, "hasStreams": true, "hasAlarms": true, "hasRecordings": true }
|
||
}
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 设备管理
|
||
|
||
### B2: 分页获取扁平设备列表
|
||
|
||
```
|
||
GET /api/gateway/devices?adapter={adapterCode}&page={page}&size={size}&keyword={keyword}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
||
|------|------|:--:|------|------|
|
||
| `adapter` | string | ✅ | — | 适配器编码,如 `Owl:main` |
|
||
| `page` | int | ❌ | 1 | 页码(从 1 开始) |
|
||
| `size` | int | ❌ | 20 | 每页条数 |
|
||
| `keyword` | string | ❌ | null | 设备名称模糊搜索 |
|
||
|
||
**返回参数**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `items` | array | 设备列表 |
|
||
| `total` | int | 总设备数 |
|
||
|
||
**items[].StandardDevice**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `sourceId` | string | 子系统设备原始 ID |
|
||
| `name` | string | 设备名称 |
|
||
| `category` | string | 设备种类(如 `硬盘录像机`、`摄像头`、`智能钥匙柜`、`钥匙位`) |
|
||
| `group` | string | 设备分组(`视频设备`/`IoT设备`/`门禁设备`) |
|
||
| `isParent` | bool | 是否父设备(含下级子设备) |
|
||
| `parentSourceId` | string? | 上级设备 SourceId |
|
||
| `isOnline` | bool | 是否在线 |
|
||
| `ipAddress` | string? | IP 地址 |
|
||
| `port` | int? | 端口号 |
|
||
| `extra` | object? | 子系统特有扩展属性 |
|
||
|
||
**返回示例**:
|
||
```json
|
||
{
|
||
"items": [
|
||
{ "sourceId": "locker_25", "name": "10位智能公共钥匙柜", "category": "智能钥匙柜", "group": "门禁设备", "isParent": true, "isOnline": true },
|
||
{ "sourceId": "lockhole_25_1", "name": "仓库大门钥匙", "category": "钥匙位", "group": "门禁设备", "isParent": false, "isOnline": true, "parentSourceId": "locker_25" }
|
||
],
|
||
"total": 11
|
||
}
|
||
```
|
||
|
||
### B3: 获取层级对象树
|
||
|
||
```
|
||
GET /api/gateway/tree?adapter={adapterCode}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码,如 `MC4:31ku` |
|
||
|
||
**返回参数**: `DeviceTreeNode[]`
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `sourceId` | string | 节点 ID |
|
||
| `name` | string | 节点名称 |
|
||
| `tag` | string | 节点标签(如 `区域`/`设备组`/`IoT设备`) |
|
||
| `type` | int | 节点类型:1=父节点, 0=叶子节点 |
|
||
| `children` | array | 子节点列表(递归) |
|
||
| `option` | object? | 扩展配置 |
|
||
|
||
### B3-sync: 手动触发设备同步
|
||
|
||
```
|
||
POST /api/gateway/devices/sync?adapter={adapterCode}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
|
||
**返回参数**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `deviceCount` | int | 同步设备数(扁平设备) |
|
||
| `nodeCount` | int | 同步节点数(对象树) |
|
||
| `message` | string | 同步结果描述 |
|
||
|
||
---
|
||
|
||
## 3. 视频与流媒体
|
||
|
||
### B6a: 获取实时流地址
|
||
|
||
```
|
||
GET /api/gateway/streams/{adapter}/{deviceId}/live
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码,如 `Owl:main` |
|
||
| `deviceId` | string | ✅ | 通道 SourceId |
|
||
|
||
**返回参数 (StreamUrls)**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `wsFlv` | string? | WebSocket-FLV 地址(推荐,低延迟) |
|
||
| `httpFlv` | string? | HTTP-FLV 地址 |
|
||
| `hls` | string? | HLS (m3u8) 地址 |
|
||
| `webrtc` | string? | WebRTC 地址 |
|
||
| `rtmp` | string? | RTMP 地址 |
|
||
|
||
### B6b: 获取录像回放地址
|
||
|
||
```
|
||
GET /api/gateway/streams/{adapter}/{deviceId}/playback?start={start}&end={end}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
| `deviceId` | string | ✅ | 通道 SourceId |
|
||
| `start` | DateTime | ✅ | 回放起始时间 (ISO 8601) |
|
||
| `end` | DateTime | ✅ | 回放结束时间 (ISO 8601) |
|
||
|
||
**返回**: 同 `StreamUrls`
|
||
|
||
### 截图: 获取通道实时截图
|
||
|
||
```
|
||
POST /api/gateway/streams/{adapter}/{deviceId}/snapshot
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
| `deviceId` | string | ✅ | 通道 SourceId |
|
||
|
||
**返回**: JPEG 图片 Base64 或 URL
|
||
|
||
### B7: 云台控制
|
||
|
||
```
|
||
POST /api/gateway/streams/{adapter}/{deviceId}/ptz
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
| `deviceId` | string | ✅ | 通道 SourceId |
|
||
|
||
**请求体 (PtzRequest)**:
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `direction` | string | ❌ | 方向:`up`/`down`/`left`/`right`/`zoom_in`/`zoom_out` |
|
||
| `action` | string | ✅ | 动作:`continuous`(持续)/`stop`(停止)/`preset`/`patrol` |
|
||
| `speed` | float | ❌ | 速度 (0.1~1.0),默认 0.5 |
|
||
|
||
---
|
||
|
||
## 4. IoT 实时数据
|
||
|
||
### B4: 获取设备实时点位值
|
||
|
||
```
|
||
GET /api/gateway/realtime/{adapter}/{deviceId}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码,如 `MC4:31ku` |
|
||
| `deviceId` | string | ✅ | 设备 SourceId |
|
||
|
||
**返回参数**: `PointValue[]`
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `pointIndex` | int | 点位索引 |
|
||
| `pointName` | string | 点位名称 |
|
||
| `value` | decimal | 当前值 |
|
||
| `unit` | string? | 单位(如 `℃`、`%`) |
|
||
| `updateTime` | DateTime | 更新时间 |
|
||
| `interval` | int | 采集间隔(秒) |
|
||
|
||
### B4-batch: 批量获取实时点位值
|
||
|
||
```
|
||
POST /api/gateway/realtime/{adapter}/batch
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
|
||
**请求体 (BatchRealtimeRequest)**:
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `deviceIds` | string[] | ✅ | 设备 SourceId 列表 |
|
||
|
||
**返回**: `Dictionary<string, PointValue[]>` — 以 deviceId 为键的实时值字典
|
||
|
||
### B5: 设备反向控制
|
||
|
||
```
|
||
POST /api/gateway/realtime/{adapter}/control
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
|
||
**请求体 (ControlRequest)**:
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `deviceId` | string | ✅ | 设备 SourceId |
|
||
| `pointIndex` | int | ✅ | 目标点位索引 |
|
||
| `value` | double | ✅ | 目标值(如开关 0/1,温度设定值等) |
|
||
|
||
---
|
||
|
||
## 5. 告警管理
|
||
|
||
### B8: 分页查询告警列表
|
||
|
||
```
|
||
GET /api/gateway/alarms/{adapter}?page={page}&size={size}&from={from}&to={to}&level={level}&state={state}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
||
|------|------|:--:|------|------|
|
||
| `adapter` | string | ✅ | — | 适配器编码 |
|
||
| `page` | int | ❌ | 1 | 页码 |
|
||
| `size` | int | ❌ | 20 | 每页条数 |
|
||
| `from` | DateTime | ❌ | MinValue | 告警起始时间 |
|
||
| `to` | DateTime | ❌ | MinValue | 告警结束时间 |
|
||
| `level` | string | ❌ | null | 告警等级过滤 |
|
||
| `state` | string | ❌ | null | 告警状态过滤:`未确认`/`已确认`/`已结束` |
|
||
|
||
**返回参数**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `items` | array | 告警列表 |
|
||
| `total` | int | 总告警数 |
|
||
|
||
**items[].StandardAlarm**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `alarmId` | string | 告警 ID |
|
||
| `adapterCode` | string | 适配器编码 |
|
||
| `deviceId` | string? | 关联设备 ID |
|
||
| `level` | string | 告警等级:`提示`/`普通`/`重要`/`紧急` |
|
||
| `title` | string | 告警标题 |
|
||
| `content` | string? | 告警详细内容 |
|
||
| `occurTime` | DateTime | 发生时间 |
|
||
| `status` | string | 状态:`未确认`/`已确认`/`已结束` |
|
||
| `actualValue` | string? | 实际值(超标告警) |
|
||
| `thresholdValue` | string? | 阈值(超标告警) |
|
||
|
||
### B9-confirm: 确认告警
|
||
|
||
```
|
||
POST /api/gateway/alarms/{adapter}/{alarmId}/confirm
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
| `alarmId` | string | ✅ | 告警 ID(子系统告警源 ID) |
|
||
|
||
### B9-end: 结束告警
|
||
|
||
```
|
||
POST /api/gateway/alarms/{adapter}/{alarmId}/end
|
||
```
|
||
|
||
**请求参数**: 同 B9-confirm
|
||
|
||
---
|
||
|
||
## 6. 录像查询
|
||
|
||
```
|
||
GET /api/gateway/recordings/{adapter}/{deviceId}?start={start}&end={end}&page={page}&size={size}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
| `deviceId` | string | ✅ | 通道 SourceId |
|
||
| `start` | DateTime | ✅ | 录像起始时间 |
|
||
| `end` | DateTime | ✅ | 录像结束时间 |
|
||
| `page` | int | ❌ | 页码,默认 1 |
|
||
| `size` | int | ❌ | 每页条数,默认 20 |
|
||
|
||
**返回**: 录像文件列表(含文件名、起止时间、时长、大小)
|
||
|
||
---
|
||
|
||
## 7. 设备控制 (通用)
|
||
|
||
### B10: 下发控制指令
|
||
|
||
```
|
||
POST /api/gateway/control/{adapter}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码,如 `KMS:main` |
|
||
|
||
**请求体 (GatewayControlRequest)**:
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `deviceId` | string | ✅ | 设备 SourceId |
|
||
| `command` | string | ✅ | 指令名:`open`(开门)/`close`(关门)/`authorize`(授权) |
|
||
| `parameters` | object | ❌ | 指令参数,如 `{"staffIds": [1,2], "lockholeSort": 3}` |
|
||
|
||
**返回 (ControlResult)**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `success` | bool | 操作是否成功 |
|
||
| `message` | string? | 失败时的错误信息 |
|
||
|
||
---
|
||
|
||
## 8. 业务记录查询
|
||
|
||
### B11: 查询子系统业务记录
|
||
|
||
```
|
||
GET /api/gateway/logs/{adapter}?logType={logType}&from={from}&to={to}&page={page}&size={size}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
| `logType` | string | ✅ | 记录类型:`borrow`(借还)/`handover`(交接)/`permission`(授权) |
|
||
| `from` | DateTime | ❌ | 起始时间 |
|
||
| `to` | DateTime | ❌ | 结束时间 |
|
||
| `page` | int | ❌ | 页码,默认 1 |
|
||
| `size` | int | ❌ | 每页条数,默认 20 |
|
||
|
||
**返回参数**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `items` | array | 业务记录列表 |
|
||
| `total` | int | 总记录数 |
|
||
|
||
**items[].BusinessLogEntry**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `logId` | string | 记录唯一 ID |
|
||
| `logType` | string | 记录类型 |
|
||
| `deviceSourceId` | string? | 关联设备 SourceId |
|
||
| `staffName` | string? | 关联员工姓名 |
|
||
| `description` | string? | 记录描述 |
|
||
| `createdAt` | DateTime? | 记录时间 |
|
||
| `extra` | object? | 扩展属性 |
|
||
|
||
---
|
||
|
||
## 9. 数据同步
|
||
|
||
### B12: 向子系统写入数据
|
||
|
||
```
|
||
POST /api/gateway/sync/{adapter}
|
||
```
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `adapter` | string | ✅ | 适配器编码 |
|
||
|
||
**请求体 (SyncRequest)**:
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `dataType` | string | ✅ | 数据类型,当前支持 `staff`(员工) |
|
||
| `items` | object[] | ✅ | 待同步数据列表 |
|
||
|
||
**返回 (SyncResult)**:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `successCount` | int | 成功数量 |
|
||
| `failCount` | int | 失败数量 |
|
||
| `message` | string? | 错误信息 |
|
||
|
||
### B13: 从子系统删除数据
|
||
|
||
```
|
||
DELETE /api/gateway/sync/{adapter}
|
||
```
|
||
|
||
**请求参数**: 同 B12
|
||
|
||
**请求体 (SyncDeleteRequest)**:
|
||
|
||
| 字段 | 类型 | 必填 | 说明 |
|
||
|------|------|:--:|------|
|
||
| `dataType` | string | ✅ | 数据类型,当前支持 `staff` |
|
||
| `ids` | string[] | ✅ | 待删除 ID 列表 |
|
||
|
||
**返回**: 同 `SyncResult`
|
||
|
||
---
|
||
|
||
## 10. 错误代码
|
||
|
||
### 通用 HTTP 状态码
|
||
|
||
| 状态码 | 含义 | 触发条件 |
|
||
|:---:|------|------|
|
||
| 200 | OK | 请求成功 |
|
||
| 400 | Bad Request | 请求参数格式错误 |
|
||
| 401 | Unauthorized | `X-Gateway-Key` 缺失或不匹配 |
|
||
| 404 | Not Found | 适配器不存在或不支持该能力 |
|
||
| 500 | Internal Server Error | 适配器内部异常 |
|
||
| 502 | Bad Gateway | 子系统返回错误或不可达 |
|
||
|
||
### 业务错误码
|
||
|
||
所有非 200 响应包含 JSON body:
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `error` | string | 错误码 |
|
||
| `message` | string? | 人类可读的错误详情 |
|
||
|
||
| error 值 | HTTP | 说明 |
|
||
|------|:---:|------|
|
||
| `ADAPTER_NOT_FOUND` | 404 | 指定适配器编码不存在 |
|
||
| `CAPABILITY_NOT_SUPPORTED` | 404 | 适配器不支持该接口能力 |
|
||
| — (control 接口) | 502 | `ControlResult.Success=false` 时返回 `ControlResult.Message` |
|
||
|
||
---
|
||
|
||
> **接口总数**: 19 个 REST 端点
|
||
> **适配器**: Owl / MC4 / KMS(通过 `adapter` 参数路由)
|