Initial_commit_SecMPS_v2

This commit is contained in:
2026-05-15 23:22:48 +08:00
commit 23ea4fe05f
13830 changed files with 298675 additions and 0 deletions

View File

@@ -0,0 +1,183 @@
# 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