Files
SecMPS/doc/整合方案/Vol.Pro_统一设备管理_区域树与地图绑定方案_v1.0.md
2026-05-15 23:22:48 +08:00

184 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Vol.Pro 统一设备管理:区域树 + 设备层级 + 地图绑定方案
> **版本**: v1.0
> **日期**: 2026-05-15
> **状态**: 待确认
> **前置方案**: Vol.Pro_MC4.0_整合方案_v1.0、Vol.Pro_Owl_ZLMediaKit_整合方案_v1.0、IntegrationGateway 方案 A
---
## 一、需求定义
### 1.1 管理端呈现目标
在 web.vite 实现统一设备管理界面,形态为左侧区域树 + 右侧设备列表的左右分栏布局。
```
┌──────────────────┬───────────────────────────────────────┐
│ 左侧:区域树 │ 右侧:设备列表(选中区域下的设备) │
│ │ │
│ 📁 厂区 │ ┌ 东北角高位摄像机 █在线 操作↓ ┐ │
│ 📁 新库区 │ ├ 人员计数摄像机 █在线 操作↓ ┤ │
│ 📁 31号库房 ← 选中 ├ 动环采集器 █在线 [展开▸] ┤ │
│ │ │ ├ 温湿度探头 26.5℃ █在线 ┤ │
│ │ │ ├ 空调控制器 制冷 █在线 ┤ │
│ │ │ ├ 除湿机 关闭 █在线 ┤ │
│ │ │ └ 紧急报警按钮 正常 █在线 ┤ │
│ │ └ 电表监测 235V █在线 ┤ │
└──────────────────┴───────────────────────────────────────┘
```
### 1.2 核心需求
1. **多级区域树**:利用现有 `warehouse_regions` 表(已有 `Id/RegionName/ParentId`
2. **设备绑定区域**:每个设备通过 `RegionId` 归属到叶子区域
3. **设备父子层级**:采集网关作为父设备,探头/控制器作为子设备展开
4. **地图模型绑定**:每个设备 `MapModelId` 字段供 warehouse 三维地图标记
5. **不同设备不同操作**:视频设备显示播放/云台按钮IoT 设备显示实时值/控制
---
## 二、数据模型设计
### 2.1 区域表 `warehouse_regions`(现有,不变)
| 字段 | 类型 | 说明 |
|------|------|------|
| Id | int (PK) | 区域ID |
| RegionName | nvarchar(255) | 区域名称 |
| ParentId | int? | 父级区域ID自引用树 |
### 2.2 统一设备主表 `Base_Device`(修订后新增字段)
| 字段 | 类型 | 说明 |
|------|------|------|
| AdapterCode | nvarchar(50) | 来源适配器owl/mc4/hikvision_access |
| SourceId | nvarchar(100) | 源系统设备ID |
| IsParent | bit | 是否父设备0=叶子, 1=可展开(采集器/NVR |
| ParentDeviceId | uniqueidentifier? | 父设备ID自引用 |
| **RegionId** | int? | 所属叶子区域IDFK→warehouse_regions.Id |
| **MapModelId** | nvarchar(100) | 三维地图模型ID |
| MapModelScale | float | 模型缩放比例 |
| MapModelRotation | nvarchar(100) | 旋转角度JSON |
| ExtraData | nvarchar(max) | 源系统原始数据JSON |
| LocalOverrides | nvarchar(max) | 本地覆盖字段JSON |
| SyncVersion | bigint | 乐观锁版本号 |
| LastSyncTime | datetime | 上次同步时间 |
### 2.3 层级关系示例
```
warehouse_regions:
Id=1, RegionName="厂区", ParentId=null
Id=2, RegionName="新库区", ParentId=1
Id=3, RegionName="31号库房", ParentId=2
Base_Device:
DeviceId=A, RegionId=3, IsParent=0 → 东北角高位摄像机
DeviceId=B, RegionId=3, IsParent=0 → 人员计数摄像机
DeviceId=C, RegionId=3, IsParent=1 → 动环采集器(父设备)
DeviceId=D, RegionId=3, ParentDeviceId=C → 温湿度探头
DeviceId=E, RegionId=3, ParentDeviceId=C → 空调控制器
DeviceId=F, RegionId=3, ParentDeviceId=C → 除湿机
```
---
## 三、MC4.0 同步到区域树
MC4.0 对象树中 `type=1`(区域节点)→ 与 `warehouse_regions` 名称匹配后自动绑区。`type=2`(设备节点)→ 写入 `Base_Device``RegionId` 设为所属叶子区域。
**关键决策**Vol.Pro 区域不由 MC4.0 全量控制。管理员可手动创建区域同步不覆盖。Owl 设备无区域概念,同步后 `RegionId=NULL`,由管理员手动分配。
---
## 四、前端实现方案
### 4.1 文件结构
```
web.vite/src/views/warehouse/
└── DeviceManager/ ★ 新建目录
├── index.vue # 主页面(左树右表)
├── components/
│ ├── RegionTree.vue # el-tree 区域树
│ ├── DeviceTable.vue # el-table 可展开设备列表
│ ├── DeviceEditDialog.vue # 编辑弹出框
│ ├── MapBindingPanel.vue # 地图模型绑定面板
│ ├── VideoDeviceActions.vue
│ ├── IoTDeviceActions.vue
│ └── DeviceSyncToolbar.vue
└── api/deviceManager.js
web.vite/src/router/index.js # 新增 /device-manager 路由
```
### 4.2 关键组件逻辑
**RegionTree.vue** — el-tree 加载 `/api/DeviceManager/GetRegionTree`,每个节点显示设备数量徽标。
**DeviceTable.vue** — el-table 使用 `tree-props="{ children: 'subDevices', hasChildren: 'IsParent' }"` 实现可展开行。操作列按 `DeviceCategory` 分发不同按钮组件。
**MapBindingPanel.vue** — 编辑弹出框的一个 Tab含 MapModelId 下拉选择、缩放/旋转输入、经纬度输入。
### 4.3 与生成页面关系
`Base_Device` 的标准 CRUD 生成页面保留作为兜底(数据批量维护)。在其 extension 中加跳转按钮:
```jsx
// extension/warehouse/Base_Device/Base_Device.jsx
onInit() {
this.buttons.unshift({
name: '设备管理',
icon: 'el-icon-s-grid',
type: 'primary',
onClick: () => this.$router.push('/device-manager')
});
}
```
---
## 五、后端 API
| 接口 | 说明 |
|------|------|
| GET `/api/DeviceManager/GetRegionTree` | 区域树(含设备数量) |
| GET `/api/DeviceManager/GetDevicesByRegion?regionId=3` | 区域下设备列表(含子设备) |
| PUT `/api/DeviceManager/{deviceId}` | 更新设备(含地图绑定字段) |
Controller 写在 `Controllers/Warehouse/Partial/DeviceManagerController.cs`(扩展目录,不被代码生成器覆盖)。
---
## 六、操作按钮矩阵
| DeviceCategory | 操作按钮 |
|---------------|----------|
| 1-视频监控 | 实时预览、云台控制、查看回放、获取快照、同步通道 |
| 2-IoT采集 | 查看实时数据、设备控制、刷新点位、查看告警 |
| 3-门禁 | 远程开门、查看记录、查看告警 |
| 4-道闸 | 抬杆、落杆、查看记录 |
| 5-报警 | 查看告警、布防/撤防 |
父设备IsParent=1额外显示展开/收起子设备。
---
## 七、实施变更汇总
| 层级 | 变更项 | 复杂度 |
|------|--------|--------|
| 数据库 | Base_Device 新增8个字段 | 中 |
| 后端 | DeviceManagerController 新建 | 中 |
| 后端 | SyncEngine 区域匹配逻辑 | 高 |
| 前端 | 6个新Vue组件 + 路由 | 高 |
| Gateway | Mc4Adapter 对象树区域提取 | 中 |
**预计工期**5-7 个工作日前后端各2-3天联调1天
---
> **文档结束**
> **关联**: Vol.Pro_MC4.0_整合方案_v1.0、Vol.Pro_Owl_ZLMediaKit_整合方案_v1.0、Vol.Pro_整合项目_实施方案_v1.0