|
|
@@ -16,6 +16,8 @@
|
|
|
| 1 | 查询用户背部产品穴位坐标列表 | `GET` | `/api/user/acupoint/{profileId}/product-back-coordinates` | 查询指定子用户身体部位为背部且产品穴位为是的穴位坐标 |
|
|
|
| 2 | 查询当前账号下的设备列表 | `GET` | `/api/app/device/list` | 通过 Token 获取当前 APP 账号可使用的设备列表 |
|
|
|
| 3 | 用户手动输入设备编号绑定设备 | `POST` | `/api/app/user/device/bind-by-code` | APP 端按设备编号绑定到当前 Token 账号下,编号不存在返回错误提示 |
|
|
|
+| 4 | 查询设备详情 | `GET` | `/api/device/{id}` | 后台管理系统查询指定设备的详细信息 |
|
|
|
+| 5 | APP 端查询设备详情 | `GET` | `/api/app/device/{id}` | APP 端查询当前账号可访问的设备详情(仅限已绑定的家庭/公共设备) |
|
|
|
|
|
|
## 3. 接口详情
|
|
|
|
|
|
@@ -320,4 +322,210 @@ curl -X POST "http://localhost:18888/api/app/user/device/bind-by-code" \
|
|
|
- 成功响应中的 `userId` 为后端自动关联的用户档案 ID,对应 `user_profile.id`。
|
|
|
- 后端会用 `deviceCode` 查询设备主表,存在时自动写入 `deviceName`、`deviceModel`。
|
|
|
- 绑定成功后,绑定记录默认 `status=1`、`isPrimary=0`。
|
|
|
-- APP 可根据失败响应中的 `message` 直接弹窗,例如设备编号不存在时提示“设备不存在”。
|
|
|
+- APP 可根据失败响应中的 `message` 直接弹窗,例如设备编号不存在时提示"设备不存在"。
|
|
|
+
|
|
|
+### 3.4 查询设备详情
|
|
|
+
|
|
|
+#### 3.4.1 接口用途
|
|
|
+
|
|
|
+用于后台管理系统查询指定设备的详细信息,包括设备基本信息、在线状态、关联用户等。
|
|
|
+
|
|
|
+#### 3.4.2 请求信息
|
|
|
+
|
|
|
+- 请求方式:`GET`
|
|
|
+- URI:`/device/{id}`
|
|
|
+- 完整示例:`http://localhost:18888/device/1001`
|
|
|
+
|
|
|
+#### 3.4.3 请求参数
|
|
|
+
|
|
|
+| 参数名 | 类型 | 是否必填 | 说明 | 示例 |
|
|
|
+| --- | --- | --- | --- | --- |
|
|
|
+| `id` | `number` | 是 | 设备 ID,对应 `device.id`,通过路径参数传递 | `1001` |
|
|
|
+
|
|
|
+#### 3.4.4 调用示例
|
|
|
+
|
|
|
+```http
|
|
|
+GET /device/1001 HTTP/1.1
|
|
|
+Host: localhost:18888
|
|
|
+Authorization: Bearer <token>
|
|
|
+```
|
|
|
+
|
|
|
+```bash
|
|
|
+curl -X GET "http://localhost:18888/device/1001" \
|
|
|
+ -H "Authorization: Bearer <token>"
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.4.5 返回示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 200,
|
|
|
+ "message": "操作成功",
|
|
|
+ "data": {
|
|
|
+ "id": 1001,
|
|
|
+ "deviceCode": "AJY-0001",
|
|
|
+ "deviceName": "艾灸椅一号",
|
|
|
+ "deviceModel": "AJY-2026",
|
|
|
+ "deviceType": 1,
|
|
|
+ "serialNo": "SN202606020001",
|
|
|
+ "firmwareVersion": "1.0.0",
|
|
|
+ "onlineStatus": 0,
|
|
|
+ "lastOnlineTime": "2026-06-02 10:30:00",
|
|
|
+ "provinceCode": "440000",
|
|
|
+ "cityCode": "440300",
|
|
|
+ "districtCode": "440305",
|
|
|
+ "address": "广东省深圳市南山区",
|
|
|
+ "remark": "测试设备",
|
|
|
+ "deleted": 0,
|
|
|
+ "createTime": "2026-06-01 09:00:00",
|
|
|
+ "updateTime": "2026-06-02 10:30:00",
|
|
|
+ "boundUserCount": 3,
|
|
|
+ "boundUserNames": "张三、李四、王五"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.4.6 字段说明
|
|
|
+
|
|
|
+| 字段名 | 类型 | 说明 |
|
|
|
+| --- | --- | --- |
|
|
|
+| `id` | `number` | 设备 ID,对应 `device.id` |
|
|
|
+| `deviceCode` | `string` | 设备编号(唯一) |
|
|
|
+| `deviceName` | `string` | 设备名称 |
|
|
|
+| `deviceModel` | `string` | 设备型号:`AJY-2026` / `AJY-2025` |
|
|
|
+| `deviceType` | `number` | 设备类型:`1=家庭设备`,`2=公共设备` |
|
|
|
+| `serialNo` | `string` | 设备序列号(唯一) |
|
|
|
+| `firmwareVersion` | `string` | 固件版本 |
|
|
|
+| `onlineStatus` | `number` | 在线状态:`1=在线`,`0=离线` |
|
|
|
+| `lastOnlineTime` | `string` | 最后在线时间 |
|
|
|
+| `provinceCode` | `string` | 省级行政区划编码(GB/T 2260) |
|
|
|
+| `cityCode` | `string` | 市级行政区划编码 |
|
|
|
+| `districtCode` | `string` | 区/县级行政区划编码 |
|
|
|
+| `address` | `string` | 详细地址 |
|
|
|
+| `remark` | `string` | 备注 |
|
|
|
+| `deleted` | `number` | 逻辑删除:`0=未删除`,`1=已删除` |
|
|
|
+| `createTime` | `string` | 创建时间 |
|
|
|
+| `updateTime` | `string` | 更新时间 |
|
|
|
+| `boundUserCount` | `number` | 关联用户/成员数量(非数据库字段,联表聚合) |
|
|
|
+| `boundUserNames` | `string` | 关联用户/成员姓名列表(联表聚合,顿号分隔) |
|
|
|
+
|
|
|
+#### 3.4.7 备注
|
|
|
+
|
|
|
+- 本接口为后台管理系统专用,需要管理员 Token。
|
|
|
+- `boundUserCount`、`boundUserNames` 为联表聚合查询结果,非数据库原生字段。
|
|
|
+- 公共设备返回所有已绑定的用户列表;家庭设备返回该家庭群组的所有成员。
|
|
|
+
|
|
|
+### 3.5 APP 端查询设备详情
|
|
|
+
|
|
|
+#### 3.5.1 接口用途
|
|
|
+
|
|
|
+用于 APP 端查询当前登录账号可访问的设备详情。
|
|
|
+
|
|
|
+后端会根据 Token 中的 APP 账号 ID 校验访问权限:
|
|
|
+- 家庭设备(`deviceType=1`):校验当前 APP 账号是否在该设备的家庭群组内(`device_group_member`)
|
|
|
+- 公共设备(`deviceType=2`):校验当前 APP 账号下的用户档案是否已绑定该设备(`user_device`)
|
|
|
+- 越权或设备不存在时返回 `403` 或 `1300` 错误
|
|
|
+
|
|
|
+#### 3.5.2 请求信息
|
|
|
+
|
|
|
+- 请求方式:`GET`
|
|
|
+- URI:`/api/app/device/{id}`
|
|
|
+- 完整示例:`http://localhost:18888/api/app/device/1001`
|
|
|
+
|
|
|
+#### 3.5.3 请求参数
|
|
|
+
|
|
|
+| 参数名 | 类型 | 是否必填 | 说明 | 示例 |
|
|
|
+| --- | --- | --- | --- | --- |
|
|
|
+| `id` | `number` | 是 | 设备 ID,对应 `device.id`,通过路径参数传递 | `1001` |
|
|
|
+
|
|
|
+#### 3.5.4 调用示例
|
|
|
+
|
|
|
+```http
|
|
|
+GET /api/app/device/1001 HTTP/1.1
|
|
|
+Host: localhost:18888
|
|
|
+Authorization: Bearer <token>
|
|
|
+```
|
|
|
+
|
|
|
+```bash
|
|
|
+curl -X GET "http://localhost:18888/api/app/device/1001" \
|
|
|
+ -H "Authorization: Bearer <token>"
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.5.5 返回示例
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 200,
|
|
|
+ "message": "操作成功",
|
|
|
+ "data": {
|
|
|
+ "id": 1001,
|
|
|
+ "deviceCode": "AJY-0001",
|
|
|
+ "deviceName": "艾灸椅一号",
|
|
|
+ "deviceModel": "AJY-2026",
|
|
|
+ "deviceType": 1,
|
|
|
+ "serialNo": "SN202606020001",
|
|
|
+ "firmwareVersion": "1.0.0",
|
|
|
+ "onlineStatus": 0,
|
|
|
+ "lastOnlineTime": "2026-06-02 10:30:00",
|
|
|
+ "provinceCode": "440000",
|
|
|
+ "cityCode": "440300",
|
|
|
+ "districtCode": "440305",
|
|
|
+ "address": "广东省深圳市南山区",
|
|
|
+ "remark": "测试设备",
|
|
|
+ "deleted": 0,
|
|
|
+ "createTime": "2026-06-01 09:00:00",
|
|
|
+ "updateTime": "2026-06-02 10:30:00"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.5.6 字段说明
|
|
|
+
|
|
|
+| 字段名 | 类型 | 说明 |
|
|
|
+| --- | --- | --- |
|
|
|
+| `id` | `number` | 设备 ID,对应 `device.id` |
|
|
|
+| `deviceCode` | `string` | 设备编号 |
|
|
|
+| `deviceName` | `string` | 设备名称 |
|
|
|
+| `deviceModel` | `string` | 设备型号 |
|
|
|
+| `deviceType` | `number` | 设备类型:`1=家庭设备`,`2=公共设备` |
|
|
|
+| `serialNo` | `string` | 设备序列号 |
|
|
|
+| `firmwareVersion` | `string` | 固件版本 |
|
|
|
+| `onlineStatus` | `number` | 在线状态:`1=在线`,`0=离线` |
|
|
|
+| `lastOnlineTime` | `string` | 最后在线时间 |
|
|
|
+| `provinceCode` | `string` | 省级行政区划编码(GB/T 2260) |
|
|
|
+| `cityCode` | `string` | 市级行政区划编码 |
|
|
|
+| `districtCode` | `string` | 区/县级行政区划编码 |
|
|
|
+| `address` | `string` | 详细地址 |
|
|
|
+| `remark` | `string` | 备注 |
|
|
|
+| `deleted` | `number` | 逻辑删除:`0=未删除`,`1=已删除` |
|
|
|
+| `createTime` | `string` | 创建时间 |
|
|
|
+| `updateTime` | `string` | 更新时间 |
|
|
|
+
|
|
|
+#### 3.5.7 失败返回示例
|
|
|
+
|
|
|
+设备不存在:
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 1300,
|
|
|
+ "message": "设备不存在",
|
|
|
+ "data": null
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+当前账号无权限访问该设备:
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 403,
|
|
|
+ "message": "无权访问该设备",
|
|
|
+ "data": null
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.5.8 备注
|
|
|
+
|
|
|
+- 本接口需要 APP 登录后的 Token,不接受后台管理员 Token。
|
|
|
+- 越权校验在 Service 层完成,家庭设备校验 `device_group_member.app_user_id`,公共设备校验 `user_device.user_id` 是否归属当前 APP 账号下的用户档案。
|
|
|
+- 后端不会返回 `boundUserCount`、`boundUserNames`、`userIds` 等聚合字段,避免暴露其他用户信息。
|
|
|
+- 路径参数 `id` 为 `device.id`(主键),不是设备编号 `deviceCode`,APP 调用时需先通过列表接口获取设备主键。
|