ソースを参照

feat: add comprehensive camera control documentation

- Introduced a new markdown file detailing the camera control API, including endpoints for listing cameras, switching channels, and managing PTZ controls.
- Documented request and response parameters for each API endpoint, along with example payloads and error codes.
- Enhanced clarity on camera management functionalities, including adding, updating, and deleting cameras, as well as machine management.
yb 3 週間 前
コミット
2e4c54a1c3
1 ファイル変更1573 行追加0 行削除
  1. 1573 0
      docs/export-1767780590760.md

+ 1573 - 0
docs/export-1767780590760.md

@@ -0,0 +1,1573 @@
+# 文档
+
+## 摄像头控制 Controller
+
+MVP API 接口:
+- GET  /camera/list          获取摄像头列表
+- GET  /camera/{id}          获取摄像头信息
+- POST /camera/switch        切换摄像头通道
+- GET  /camera/current       获取当前通道
+
+后台 PTZ 接口(可选):
+- POST /camera/{id}/ptz/start   开始PTZ控制
+- POST /camera/{id}/ptz/stop    停止PTZ控制
+
+
+### 获取摄像头列表
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/camera/list
+
+
+描述:获取摄像头列表
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| machineId | string | 否 | - | 机器ID(可选) | machine_001 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | array | 否 |  | 响应数据 (ActualType: List) |  |
+|   └ cameraId | String | 否 | - | 摄像头ID | cam_001 |
+|   └ name | String | 否 | - | 摄像头名称 | 主摄像头 |
+|   └ machineId | String | 否 | - | 所属机器ID | machine_001 |
+|   └ status | String | 否 | - | 摄像头状态: ONLINE, OFFLINE | ONLINE |
+|   └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled |
+|   └ ptzSupported | Boolean | 否 | - | 是否支持PTZ | true |
+|   └ channels | List<ChannelDTO> | 否 |  | 通道列表 (ActualType: ChannelDTO) |  |
+|     └ channelId | String | 否 | - | 通道ID | ch_001 |
+|     └ name | String | 否 | - | 通道名称 | 主通道 |
+|     └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|     └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|     └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE |
+|     └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": [
+        {
+            "cameraId": "cam_001",
+            "name": "主摄像头",
+            "machineId": "machine_001",
+            "status": "ONLINE",
+            "capability": "ptz_enabled",
+            "ptzSupported": true,
+            "channels": [
+                {
+                    "channelId": "ch_001",
+                    "name": "主通道",
+                    "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+                    "defaultView": true,
+                    "status": "ONLINE",
+                    "cameraId": "cam_001"
+                }
+            ]
+        }
+    ],
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 获取摄像头信息
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/camera/{cameraId}
+
+
+描述:获取摄像头信息
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### Path参数
+
+| 名称 | 必填 | 描述 | 示例值 |
+| --- | --- | --- | --- |
+| cameraId | 是 | 摄像头ID | camera_001 |
+
+#### 请求参数
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: CameraDTO) |  |
+|   └ cameraId | String | 否 | - | 摄像头ID | cam_001 |
+|   └ name | String | 否 | - | 摄像头名称 | 主摄像头 |
+|   └ machineId | String | 否 | - | 所属机器ID | machine_001 |
+|   └ status | String | 否 | - | 摄像头状态: ONLINE, OFFLINE | ONLINE |
+|   └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled |
+|   └ ptzSupported | Boolean | 否 | - | 是否支持PTZ | true |
+|   └ channels | List<ChannelDTO> | 否 |  | 通道列表 (ActualType: ChannelDTO) |  |
+|     └ channelId | String | 否 | - | 通道ID | ch_001 |
+|     └ name | String | 否 | - | 通道名称 | 主通道 |
+|     └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|     └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|     └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE |
+|     └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "cameraId": "cam_001",
+        "name": "主摄像头",
+        "machineId": "machine_001",
+        "status": "ONLINE",
+        "capability": "ptz_enabled",
+        "ptzSupported": true,
+        "channels": [
+            {
+                "channelId": "ch_001",
+                "name": "主通道",
+                "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+                "defaultView": true,
+                "status": "ONLINE",
+                "cameraId": "cam_001"
+            }
+        ]
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 切换摄像头通道(MVP核心)
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/camera/switch
+
+
+描述:切换摄像头通道(MVP核心)
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| machineId | String | 是 | - | 机器ID | machine_001 |
+| channelId | String | 是 | - | 目标通道ID | ch_001 |
+
+#### 请求示例
+
+```
+{
+    "machineId": "machine_001",
+    "channelId": "ch_001"
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: ChannelDTO) |  |
+|   └ channelId | String | 否 | - | 通道ID | ch_001 |
+|   └ name | String | 否 | - | 通道名称 | 主通道 |
+|   └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|   └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|   └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE |
+|   └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "channelId": "ch_001",
+        "name": "主通道",
+        "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+        "defaultView": true,
+        "status": "ONLINE",
+        "cameraId": "cam_001"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 获取当前活动通道
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/camera/current
+
+
+描述:获取当前活动通道
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| machineId | string | 是 | - | 机器ID | machine_001 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: ChannelDTO) |  |
+|   └ channelId | String | 否 | - | 通道ID | ch_001 |
+|   └ name | String | 否 | - | 通道名称 | 主通道 |
+|   └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|   └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|   └ status | String | 否 | - | 通道状态: ONLINE, OFFLINE | ONLINE |
+|   └ cameraId | String | 否 | - | 所属摄像头ID | cam_001 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "channelId": "ch_001",
+        "name": "主通道",
+        "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+        "defaultView": true,
+        "status": "ONLINE",
+        "cameraId": "cam_001"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 开始PTZ控制(后台专用)
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/start
+
+
+描述:开始PTZ控制(后台专用)
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### Path参数
+
+| 名称 | 必填 | 描述 | 示例值 |
+| --- | --- | --- | --- |
+| cameraId | 是 | 摄像头ID | camera_001 |
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| action | string | 是 | - | PTZ动作 | up |
+| speed | int32 | 是 | - | 速度(1-100) | 50 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 | - | 响应数据 (ActualType: Void) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {},
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 停止PTZ控制(后台专用)
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/camera/{cameraId}/ptz/stop
+
+
+描述:停止PTZ控制(后台专用)
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### Path参数
+
+| 名称 | 必填 | 描述 | 示例值 |
+| --- | --- | --- | --- |
+| cameraId | 是 | 摄像头ID | camera_001 |
+
+#### 请求参数
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 | - | 响应数据 (ActualType: Void) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {},
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+## 摄像头管理
+
+
+### 获取摄像头列表
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/list
+
+
+描述:获取摄像头列表
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| machineId | string | 否 | - | 机器ID(可选),不传则返回全部 | machine_001 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | array | 否 |  | 响应数据 (ActualType: List) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ cameraId | String | 否 | - | 摄像头ID | cam_001 |
+|   └ name | String | 否 | - | 名称 | 主摄像头 |
+|   └ ip | String | 否 | - | IP地址 | 192.168.1.100 |
+|   └ port | Integer | 否 | - | 端口 | 80 |
+|   └ username | String | 否 | - | 用户名 | admin |
+|   └ brand | String | 否 | - | 品牌 | hikvision |
+|   └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
+|   └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ machineId | String | 否 | - | 所属机器ID | machine_001 |
+|   └ machineName | String | 否 | - | 所属机器名称 | 1号机 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ channels | List<ChannelInfoDTO> | 否 |  | 通道列表 (ActualType: ChannelInfoDTO) |  |
+|     └ id | Long | 否 | - | 主键ID | 1 |
+|     └ channelId | String | 否 | - | 通道ID | ch_001 |
+|     └ name | String | 否 | - | 通道名称 | 主通道 |
+|     └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|     └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|     └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": [
+        {
+            "id": 1,
+            "cameraId": "cam_001",
+            "name": "主摄像头",
+            "ip": "192.168.1.100",
+            "port": 80,
+            "username": "admin",
+            "brand": "hikvision",
+            "capability": "ptz_enabled",
+            "status": "ONLINE",
+            "machineId": "machine_001",
+            "machineName": "1号机",
+            "enabled": true,
+            "channels": [
+                {
+                    "id": 1,
+                    "channelId": "ch_001",
+                    "name": "主通道",
+                    "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+                    "defaultView": true,
+                    "status": "ONLINE"
+                }
+            ],
+            "createdAt": "2026-01-07T10:00:00",
+            "updatedAt": "2026-01-07T10:00:00"
+        }
+    ],
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 获取摄像头详情
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/detail
+
+
+描述:获取摄像头详情
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | int64 | 是 | - | 摄像头主键ID | 1 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: CameraInfoDTO) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ cameraId | String | 否 | - | 摄像头ID | cam_001 |
+|   └ name | String | 否 | - | 名称 | 主摄像头 |
+|   └ ip | String | 否 | - | IP地址 | 192.168.1.100 |
+|   └ port | Integer | 否 | - | 端口 | 80 |
+|   └ username | String | 否 | - | 用户名 | admin |
+|   └ brand | String | 否 | - | 品牌 | hikvision |
+|   └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
+|   └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ machineId | String | 否 | - | 所属机器ID | machine_001 |
+|   └ machineName | String | 否 | - | 所属机器名称 | 1号机 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ channels | List<ChannelInfoDTO> | 否 |  | 通道列表 (ActualType: ChannelInfoDTO) |  |
+|     └ id | Long | 否 | - | 主键ID | 1 |
+|     └ channelId | String | 否 | - | 通道ID | ch_001 |
+|     └ name | String | 否 | - | 通道名称 | 主通道 |
+|     └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|     └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|     └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "cameraId": "cam_001",
+        "name": "主摄像头",
+        "ip": "192.168.1.100",
+        "port": 80,
+        "username": "admin",
+        "brand": "hikvision",
+        "capability": "ptz_enabled",
+        "status": "ONLINE",
+        "machineId": "machine_001",
+        "machineName": "1号机",
+        "enabled": true,
+        "channels": [
+            {
+                "id": 1,
+                "channelId": "ch_001",
+                "name": "主通道",
+                "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+                "defaultView": true,
+                "status": "ONLINE"
+            }
+        ],
+        "createdAt": "2026-01-07T10:00:00",
+        "updatedAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 添加摄像头
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/add
+
+
+描述:添加摄像头
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| cameraId | String | 是 | 50 | 摄像头ID(唯一标识)<br>Validate[max: 50; ] | cam_001 |
+| name | String | 是 | 100 | 名称<br>Validate[max: 100; ] | 主摄像头 |
+| ip | String | 是 | - | IP地址<br>Validate[regexp: ^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$; ] | 192.168.1.100 |
+| port | Integer | 否 | - | 端口 | 80 |
+| username | String | 否 | 50 | 用户名<br>Validate[max: 50; ] | admin |
+| password | String | 否 | 100 | 密码<br>Validate[max: 100; ] | password123 |
+| brand | String | 否 | 30 | 品牌<br>Validate[max: 30; ] | hikvision |
+| capability | String | 否 | - | 能力: switch_only, ptz_enabled<br>Validate[regexp: ^(switch_only|ptz_enabled)$; ] | ptz_enabled |
+| machineId | String | 否 | - | 所属机器ID | machine_001 |
+| channels | List<CameraAddRequest$ChannelAddRequest> | 否 |  | 通道列表 (ActualType: ChannelAddRequest) |  |
+|   └ channelId | String | 是 | - | 通道ID | ch_001 |
+|   └ name | String | 是 | - | 通道名称 | 主通道 |
+|   └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|   └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+
+#### 请求示例
+
+```
+{
+    "cameraId": "cam_001",
+    "name": "主摄像头",
+    "ip": "192.168.1.100",
+    "port": 80,
+    "username": "admin",
+    "password": "password123",
+    "brand": "hikvision",
+    "capability": "ptz_enabled",
+    "machineId": "machine_001",
+    "channels": [
+        {
+            "channelId": "ch_001",
+            "name": "主通道",
+            "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+            "defaultView": true
+        }
+    ]
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: CameraInfoDTO) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ cameraId | String | 否 | - | 摄像头ID | cam_001 |
+|   └ name | String | 否 | - | 名称 | 主摄像头 |
+|   └ ip | String | 否 | - | IP地址 | 192.168.1.100 |
+|   └ port | Integer | 否 | - | 端口 | 80 |
+|   └ username | String | 否 | - | 用户名 | admin |
+|   └ brand | String | 否 | - | 品牌 | hikvision |
+|   └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
+|   └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ machineId | String | 否 | - | 所属机器ID | machine_001 |
+|   └ machineName | String | 否 | - | 所属机器名称 | 1号机 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ channels | List<ChannelInfoDTO> | 否 |  | 通道列表 (ActualType: ChannelInfoDTO) |  |
+|     └ id | Long | 否 | - | 主键ID | 1 |
+|     └ channelId | String | 否 | - | 通道ID | ch_001 |
+|     └ name | String | 否 | - | 通道名称 | 主通道 |
+|     └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|     └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|     └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "cameraId": "cam_001",
+        "name": "主摄像头",
+        "ip": "192.168.1.100",
+        "port": 80,
+        "username": "admin",
+        "brand": "hikvision",
+        "capability": "ptz_enabled",
+        "status": "ONLINE",
+        "machineId": "machine_001",
+        "machineName": "1号机",
+        "enabled": true,
+        "channels": [
+            {
+                "id": 1,
+                "channelId": "ch_001",
+                "name": "主通道",
+                "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+                "defaultView": true,
+                "status": "ONLINE"
+            }
+        ],
+        "createdAt": "2026-01-07T10:00:00",
+        "updatedAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 更新摄像头
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/update
+
+
+描述:更新摄像头
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | Long | 否 | - | 摄像头数据库ID | 1 |
+| name | String | 否 | - | 名称 | 主摄像头 |
+| ip | String | 否 | - | IP地址 | 192.168.1.100 |
+| port | Integer | 否 | - | 端口 | 80 |
+| username | String | 否 | - | 用户名 | admin |
+| password | String | 否 | - | 密码(不传或为空则不修改) | password123 |
+| brand | String | 否 | - | 品牌 | hikvision |
+| capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
+| machineId | String | 否 | - | 所属机器ID | machine_001 |
+| enabled | Boolean | 否 | - | 启用状态 | true |
+| channels | List<CameraUpdateRequest$ChannelUpdateRequest> | 否 |  | 通道列表 (ActualType: ChannelUpdateRequest) |  |
+|   └ id | Long | 否 | - | 通道数据库ID | 1 |
+|   └ channelId | String | 否 | - | 通道ID | ch_001 |
+|   └ name | String | 否 | - | 通道名称 | 主通道 |
+|   └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|   └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+
+#### 请求示例
+
+```
+{
+    "id": 1,
+    "name": "主摄像头",
+    "ip": "192.168.1.100",
+    "port": 80,
+    "username": "admin",
+    "password": "password123",
+    "brand": "hikvision",
+    "capability": "ptz_enabled",
+    "machineId": "machine_001",
+    "enabled": true,
+    "channels": [
+        {
+            "id": 1,
+            "channelId": "ch_001",
+            "name": "主通道",
+            "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+            "defaultView": true
+        }
+    ]
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: CameraInfoDTO) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ cameraId | String | 否 | - | 摄像头ID | cam_001 |
+|   └ name | String | 否 | - | 名称 | 主摄像头 |
+|   └ ip | String | 否 | - | IP地址 | 192.168.1.100 |
+|   └ port | Integer | 否 | - | 端口 | 80 |
+|   └ username | String | 否 | - | 用户名 | admin |
+|   └ brand | String | 否 | - | 品牌 | hikvision |
+|   └ capability | String | 否 | - | 能力: switch_only, ptz_enabled | ptz_enabled |
+|   └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ machineId | String | 否 | - | 所属机器ID | machine_001 |
+|   └ machineName | String | 否 | - | 所属机器名称 | 1号机 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ channels | List<ChannelInfoDTO> | 否 |  | 通道列表 (ActualType: ChannelInfoDTO) |  |
+|     └ id | Long | 否 | - | 主键ID | 1 |
+|     └ channelId | String | 否 | - | 通道ID | ch_001 |
+|     └ name | String | 否 | - | 通道名称 | 主通道 |
+|     └ rtspUrl | String | 否 | - | RTSP地址 | rtsp://192.168.1.100:554/stream1 |
+|     └ defaultView | Boolean | 否 | - | 是否默认视角 | true |
+|     └ status | String | 否 | - | 状态: ONLINE, OFFLINE | ONLINE |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "cameraId": "cam_001",
+        "name": "主摄像头",
+        "ip": "192.168.1.100",
+        "port": 80,
+        "username": "admin",
+        "brand": "hikvision",
+        "capability": "ptz_enabled",
+        "status": "ONLINE",
+        "machineId": "machine_001",
+        "machineName": "1号机",
+        "enabled": true,
+        "channels": [
+            {
+                "id": 1,
+                "channelId": "ch_001",
+                "name": "主通道",
+                "rtspUrl": "rtsp://192.168.1.100:554/stream1",
+                "defaultView": true,
+                "status": "ONLINE"
+            }
+        ],
+        "createdAt": "2026-01-07T10:00:00",
+        "updatedAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 删除摄像头
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/delete
+
+
+描述:删除摄像头
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | int64 | 是 | - | 摄像头主键ID | 1 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 | - | 响应数据 (ActualType: Void) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {},
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 检测摄像头连通性
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/check
+
+
+描述:检测摄像头连通性
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | int64 | 是 | - | 摄像头主键ID | 1 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | boolean | 否 | - | 响应数据 (ActualType: Boolean) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": false,
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+## 机器管理
+
+
+### 获取机器列表
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/admin/machines/list
+
+
+描述:获取机器列表
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | array | 否 |  | 响应数据 (ActualType: List) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ machineId | String | 否 | - | 机器ID | machine_001 |
+|   └ name | String | 否 | - | 名称 | 1号机 |
+|   └ location | String | 否 | - | 位置 | A区1楼 |
+|   └ description | String | 否 | - | 描述 | 主力机器 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": [
+        {
+            "id": 1,
+            "machineId": "machine_001",
+            "name": "1号机",
+            "location": "A区1楼",
+            "description": "主力机器",
+            "enabled": true,
+            "cameraCount": 3,
+            "createdAt": "2026-01-07T10:00:00",
+            "updatedAt": "2026-01-07T10:00:00"
+        }
+    ],
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 获取机器详情
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/admin/machines/detail
+
+
+描述:获取机器详情
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | int64 | 是 | - | 机器主键ID | 1 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: MachineDTO) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ machineId | String | 否 | - | 机器ID | machine_001 |
+|   └ name | String | 否 | - | 名称 | 1号机 |
+|   └ location | String | 否 | - | 位置 | A区1楼 |
+|   └ description | String | 否 | - | 描述 | 主力机器 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "machineId": "machine_001",
+        "name": "1号机",
+        "location": "A区1楼",
+        "description": "主力机器",
+        "enabled": true,
+        "cameraCount": 3,
+        "createdAt": "2026-01-07T10:00:00",
+        "updatedAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 添加机器
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/add
+
+
+描述:添加机器
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| machineId | String | 是 | 50 | 机器ID(唯一标识)<br>Validate[max: 50; ] | machine_001 |
+| name | String | 是 | 100 | 名称<br>Validate[max: 100; ] | 1号机 |
+| location | String | 否 | 200 | 位置<br>Validate[max: 200; ] | A区1楼 |
+| description | String | 否 | 500 | 描述<br>Validate[max: 500; ] | 主力机器 |
+
+#### 请求示例
+
+```
+{
+    "machineId": "machine_001",
+    "name": "1号机",
+    "location": "A区1楼",
+    "description": "主力机器"
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: MachineDTO) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ machineId | String | 否 | - | 机器ID | machine_001 |
+|   └ name | String | 否 | - | 名称 | 1号机 |
+|   └ location | String | 否 | - | 位置 | A区1楼 |
+|   └ description | String | 否 | - | 描述 | 主力机器 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "machineId": "machine_001",
+        "name": "1号机",
+        "location": "A区1楼",
+        "description": "主力机器",
+        "enabled": true,
+        "cameraCount": 3,
+        "createdAt": "2026-01-07T10:00:00",
+        "updatedAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 更新机器
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/update
+
+
+描述:更新机器
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | Long | 否 | - | 机器数据库ID | 1 |
+| name | String | 否 | - | 名称 | 1号机 |
+| location | String | 否 | - | 位置 | A区1楼 |
+| description | String | 否 | - | 描述 | 主力机器 |
+| enabled | Boolean | 否 | - | 启用状态 | true |
+
+#### 请求示例
+
+```
+{
+    "id": 1,
+    "name": "1号机",
+    "location": "A区1楼",
+    "description": "主力机器",
+    "enabled": true
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: MachineDTO) |  |
+|   └ id | Long | 否 | - | 主键ID | 1 |
+|   └ machineId | String | 否 | - | 机器ID | machine_001 |
+|   └ name | String | 否 | - | 名称 | 1号机 |
+|   └ location | String | 否 | - | 位置 | A区1楼 |
+|   └ description | String | 否 | - | 描述 | 主力机器 |
+|   └ enabled | Boolean | 否 | - | 是否启用 | true |
+|   └ cameraCount | Integer | 否 | - | 摄像头数量 | 3 |
+|   └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2026-01-07T10:00:00 |
+|   └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "machineId": "machine_001",
+        "name": "1号机",
+        "location": "A区1楼",
+        "description": "主力机器",
+        "enabled": true,
+        "cameraCount": 3,
+        "createdAt": "2026-01-07T10:00:00",
+        "updatedAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 删除机器
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/delete
+
+
+描述:删除机器
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+##### Query Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| id | int64 | 是 | - | 机器主键ID | 1 |
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 | - | 响应数据 (ActualType: Void) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {},
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+## 管理员认证
+
+
+### 登录
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/auth/login
+
+
+描述:登录
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| username | String | 是 | 50 | 用户名<br>Validate[max: 50; ] | admin |
+| password | String | 是 | 100 | 密码<br>Validate[max: 100; ] | 123456 |
+
+#### 请求示例
+
+```
+{
+    "username": "admin",
+    "password": "123456"
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: LoginResponse) |  |
+|   └ token | String | 否 | - | JWT Token | eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiJ9.xxx |
+|   └ tokenType | String | 否 | - | Token 类型 | Bearer |
+|   └ expiresIn | Long | 否 | - | 过期时间(秒) | 86400 |
+|   └ admin | AdminInfoDTO | 否 |  | 用户信息 |  |
+|     └ id | Long | 否 | - | 用户ID | 1 |
+|     └ username | String | 否 | - | 用户名 | admin |
+|     └ nickname | String | 否 | - | 昵称 | 管理员 |
+|     └ role | String | 否 | - | 角色 | ADMIN |
+|     └ lastLoginAt | LocalDateTime | 否 | - | 最后登录时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiJ9.xxx",
+        "tokenType": "Bearer",
+        "expiresIn": 86400,
+        "admin": {
+            "id": 1,
+            "username": "admin",
+            "nickname": "管理员",
+            "role": "ADMIN",
+            "lastLoginAt": "2026-01-07T10:00:00"
+        }
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 登出
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/auth/logout
+
+
+描述:登出
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 | - | 响应数据 (ActualType: Void) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {},
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 获取当前用户信息
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/admin/auth/info
+
+
+描述:获取当前用户信息
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: AdminInfoDTO) |  |
+|   └ id | Long | 否 | - | 用户ID | 1 |
+|   └ username | String | 否 | - | 用户名 | admin |
+|   └ nickname | String | 否 | - | 昵称 | 管理员 |
+|   └ role | String | 否 | - | 角色 | ADMIN |
+|   └ lastLoginAt | LocalDateTime | 否 | - | 最后登录时间 | 2026-01-07T10:00:00 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "id": 1,
+        "username": "admin",
+        "nickname": "管理员",
+        "role": "ADMIN",
+        "lastLoginAt": "2026-01-07T10:00:00"
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+
+### 修改密码
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `POST` http://localhost:10050/api/admin/auth/password
+
+
+描述:修改密码
+
+ContentType:`application/json`
+
+#### 请求参数
+
+##### Body Parameter
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| oldPassword | String | 是 | - | 旧密码 | oldpassword |
+| newPassword | String | 是 | 100 | 新密码(6-100字符)<br>Validate[max: 100; ] | newpassword |
+
+#### 请求示例
+
+```
+{
+    "oldPassword": "oldpassword",
+    "newPassword": "newpassword"
+}
+```
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 | - | 响应数据 (ActualType: Void) |  |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {},
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无
+## 统计
+
+
+### 获取仪表盘统计数据
+
+维护人:TG Live
+
+#### URL
+
+- 本地开发环境: `GET` http://localhost:10050/api/admin/stats/dashboard
+
+
+描述:获取仪表盘统计数据
+
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
+
+#### 请求参数
+
+#### 响应参数
+
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
+| --- | --- | --- | --- | --- | --- |
+| code | Integer | 否 | - | 响应码 | 200 |
+| message | String | 否 | - | 响应消息 | 操作成功 |
+| data | object | 否 |  | 响应数据 (ActualType: DashboardStatsDTO) |  |
+|   └ machineTotal | Long | 否 | - | 机器总数 | 10 |
+|   └ machineEnabled | Long | 否 | - | 启用的机器数 | 8 |
+|   └ cameraTotal | Long | 否 | - | 摄像头总数 | 20 |
+|   └ cameraOnline | Long | 否 | - | 在线摄像头数 | 15 |
+|   └ cameraOffline | Long | 否 | - | 离线摄像头数 | 5 |
+|   └ channelTotal | Long | 否 | - | 通道总数 | 40 |
+| timestamp | Long | 否 | - | 时间戳 | 1703145600000 |
+| traceId | String | 否 | - | 请求追踪ID | trace-123456 |
+
+#### 响应示例
+
+```
+{
+    "code": 200,
+    "message": "操作成功",
+    "data": {
+        "machineTotal": 10,
+        "machineEnabled": 8,
+        "cameraTotal": 20,
+        "cameraOnline": 15,
+        "cameraOffline": 5,
+        "channelTotal": 40
+    },
+    "timestamp": 1703145600000,
+    "traceId": "trace-123456"
+}
+```
+
+#### 错误码
+
+无