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,290 @@
# SecMPS 整合项目实施手册
> **版本**: v2.0
> **日期**: 2026-05-15
> **基于**: SecMPS_最终整合方案_v2.0.md
> **工期**: 18-20 个工作日
---
## 前置检查清单Day 0
| # | 检查项 | 验证方式 | 阻塞阶段 |
|---|--------|----------|----------|
| 1 | Owl+ZLM 部署运行 | 浏览器访问 Owl 管理端,确认可登录 | Phase 1 |
| 2 | 至少1台 GB28181 设备注册到 Owl | Owl 管理端 `/devices` 有数据 | Phase 1 |
| 3 | MC4.0 网关可访问 | `curl http://mc4_ip:3000/api/central/auth/conf/get` | Phase 2 |
| 4 | MC4.0 有设备接入 | 调对象树接口有 type=2 节点 | Phase 2 |
| 5 | Vol.Pro 代码生成器可用 | 新建测试表→运行生成器→确认生成 | Phase 0 |
| 6 | MySQL 有建表权限 | 直接执行 CREATE TABLE | Phase 0 |
| 7 | Node.js >= 20.19 | `node -v` | Phase 3 |
---
## Phase 0基础设施搭建Day 1-2
### Day 1 — Gateway 骨架 + 数据库
**任务 1.1 — 创建 Gateway 解决方案**
```
dotnet new sln -n IntegrationGateway
dotnet new webapi -n IntegrationGateway.Host -f net8.0
dotnet new classlib -n IntegrationGateway.Core -f net8.0
```
**验证**: `dotnet build` 成功。
**任务 1.2 — Core 层接口**
创建 `Abstractions/`7个接口文件`Models/`8个模型文件`Infrastructure/`AdapterRegistry/TokenManager/RateLimiter
**验证**: `dotnet build` 成功。编写单元测试:注册 mock 适配器,验证 Get() 返回非 null。
**任务 1.3 — Host 层 Controller**
创建 HealthController (`GET /api/gateway/health`)、DevicesController、PointsController、StreamsController、AlarmsController、SyncController。
**验证**: 启动 Host`GET /api/gateway/health` 返回 200。
**任务 1.4 — 数据库建表8张**
按顺序执行 DDLBase_Device → Device_Video_Ext → Video_Channel → Video_Record → Device_IoT_Ext → IoT_DevicePoint → IoT_DeviceData → IoT_Alarm。
**验证**:
```
SELECT COUNT(*) FROM Base_Device; → 0
SHOW INDEX FROM Base_Device WHERE Key_name LIKE '%Adapter%'; → 唯一索引存在
```
**任务 1.5 — 运行代码生成器**
对8张表运行 Vol.Pro 代码生成器。
**验证**: 管理端可看到8个新菜单分别能正常 CRUD。
### Day 2 — Vol.Pro 侧 GatewayClient
**任务 2.1 — GatewayClient.cs**
实现 `IGatewayClient : IDependency`,封装对 Gateway 的 HTTP 调用。`appsettings.json` 添加 `"Gateway": {"BaseUrl": "http://localhost:5100"}`
**验证**: 注入 IGatewayClient调用 HealthCheckAsync() 返回 true。
**任务 2.2 — DeviceManagerController.cs**
创建 `Controllers/Warehouse/Partial/DeviceManagerController.cs`
- `GET GetRegionTree` — 区域树+设备数量
- `GET GetDevicesByRegion?regionId=` — 设备列表含子设备
- `PUT {deviceId}` — 更新设备含地图绑定
**验证**: Postman 调 `GET /api/DeviceManager/GetRegionTree` 返回 JSON。
**任务 2.3 — SyncDevicesJobQuartz**
```csharp
public class SyncDevicesJob : IJob {
public async Task Execute(IJobExecutionContext ctx) {
var gw = ctx.GetService<IGatewayClient>();
var r = await gw.SyncDevicesAsync("mc4");
}
}
```
**验证**: Quartz 管理面板看到已注册 Job。
---
## Phase 1Owl 适配器 + 视频设备页Day 3-6
### Day 3 — OwlAdapter
**任务 3.1**: 创建 `IntegrationGateway.Adapters.Owl` 项目。
**任务 3.2**: 实现 OwlAdapter`IHasFlatDevices + IHasStreams + IAcceptsMetadataPush`)。
**验证Postman 调 Gateway**:
```
GET /api/gateway/health → {"owl": true}
GET /api/gateway/devices?adapter=owl&page=1 → 返回 Owl 设备列表
GET /api/gateway/streams/owl/{channelId}/live → 返回 WS-FLV 地址
```
**任务 3.3**: 端到端同步。调 `GET /api/gateway/devices/sync?adapter=owl`,查库 `SELECT * FROM Base_Device WHERE AdapterCode='owl'`,确认设备入库。
### Day 4 — 管理端设备页面框架
**任务 4.1**: 创建 `web.vite/src/views/warehouse/DeviceManager/` 目录。
**任务 4.2**: `index.vue` — 左右分栏布局(`el-container``el-aside` 280px + `el-main`)。
**任务 4.3**: `RegionTree.vue` — 调 `GetRegionTree`,渲染 `el-tree`,点击 emit `select(regionId)`
**任务 4.4**: `DeviceTable.vue` — 调 `GetDevicesByRegion``el-table``tree-props` 展开子设备。
**验证**: 浏览器访问 `/device-manager`,左侧区域树+右侧设备表可用。
### Day 5 — 视频操作按钮 + 播放器
**任务 5.1**: `VideoDeviceActions.vue` — 实时预览/云台控制/查看回放 按钮。
**任务 5.2**: 安装 Jessibuca创建 `DeviceLivePreview.vue` 弹窗+播放器。
**验证**: 点视频设备的「实时预览」→ 弹窗播放画面。
**任务 5.3**: 云台控制面板 — 方向键+停止,调 Gateway PTZ 接口。
**验证**: 点方向键 → 摄像机转动。
### Day 6 — 视频联调 + 边界测试
| 测试 | 预期 |
|------|------|
| 设备同步 | 表格数据刷新,不重复 |
| 实时预览 | Jessibuca 播放正常 |
| 云台控制 | 摄像机转动 |
| 多路播放(4路) | 不卡顿 |
| 离线设备 | 状态显示「离线」 |
| 框架隔离 | 重跑生成器DeviceManager/ 文件未丢失 |
---
## Phase 2MC4.0 适配器 + IoT 管理Day 7-11
### Day 7 — Mc4Adapter
创建 `IntegrationGateway.Adapters.MC4`,实现 `IHasOwnDeviceTree + IHasPoints + IHasAlarms`
**验证Postman 调 Gateway**:
```
GET /api/gateway/health → {"mc4": true}
GET /api/gateway/devices/sync?adapter=mc4 → 同步报告
GET /api/gateway/realtime/mc4/{deviceId} → 点位值数组
POST /api/gateway/realtime/mc4/control {id,index,value} → 200
GET /api/gateway/alarms/mc4?from=...&to=... → 告警列表
POST /api/gateway/alarms/mc4/{id}/confirm → 确认成功
```
### Day 8 — 区域自动匹配 + 全量同步
实现 SyncEngine.ProcessTreeNodetype=1 节点 → MatchOrCreateRegiontype=2 节点 → UpsertDevice。
**验证**: 同步后 `warehouse_regions` 有 MC4.0 区域,`Base_Device.RegionId` 正确。
### Day 9 — IoT 操作按钮 + 实时数据
**任务 9.1**: `IoTDeviceActions.vue` — 实时数据/设备控制/告警记录 按钮。
**任务 9.2**: 实时数据弹窗 — 点位名称/当前值/单位/更新时间/控制控件。
**任务 9.3**: 设备控制 — 开关 `el-switch`,模拟量 `el-input-number`
**验证**: 拖动滑块 → 设备实际值改变。
### Day 10 — 告警管理 + 地图绑定
**任务 10.1**: 编辑弹窗增加「告警记录」tab。
**任务 10.2**: `MapBindingPanel.vue` — MapModelId 选择、缩放/旋转、经纬度。
**验证**: 编辑设备 → 地图绑定 → 保存 → 值持久化。
### Day 11 — SignalR Hub + Quartz 轮询
**任务 11.1**: `IoTDataHub.cs` — SubscribeDevice/SubscribeAlarms。
**任务 11.2**: `RealtimePollJob.cs` (5s) + `AlarmPollJob.cs` (10s)。
**验证**: warehouse 端 SignalR 连接收到实时数据和告警推送。
---
## Phase 3warehouse 端 + 全链路联调Day 12-17
### Day 12-13 — 视频播放器集成
- Live.vue: 假数据→真实 API + Jessibuca
- History.vue: 对接回放 APIHLS 播放
- VideoWall.vue: 9 路 WS-FLV
**验证**: Live/History/VideoWall 全功能可用。
### Day 14-15 — IoT 面板
- 实时数据看板SignalR 订阅每5秒更新
- 控制面板:开关/滑块,调控制 API
- 告警面板:实时弹窗+声音
**验证**: warehouse IoT 功能可用。
### Day 16-17 — 全链路联调
| 链路 | 预期 |
|------|------|
| 设备同步→入库 | Base_Device 有数据 |
| 区域树→el-tree | 层级正确 |
| 实时预览→播放 | 画面正常 |
| 云台→摄像机转动 | 方向正确 |
| 实时数据→面板 | 值更新 |
| 设备控制→设备响应 | 值改变 |
| 告警触发→弹窗 | <15秒 |
| 告警确认→MC4.0 | 状态变更 |
**性能指标**: 9路视频墙≥15fps100设备轮询<3s500设备同步<30s。
---
## Phase 4验证 + 缓冲Day 18-20
### Day 18 — 代码隔离验证
1. 重跑代码生成器(对 Base_Device
2. 检查 Partial/、extension/、DeviceManager/ 目录文件未覆盖
3. 检查生成文件已更新(新字段在编辑表单中出现)
### Day 19 — 异常场景
| 场景 | 预期 |
|------|------|
| Owl 宕机 | 不影响 MC4.0 同步 |
| MC4.0 宕机 | 页面不崩溃 |
| Gateway 宕机 | 前端错误提示 |
| Token 过期 | 自动刷新 |
| 并发同步 | 互不干扰 |
### Day 20 — 文档收尾
- [ ] API 文档Swagger
- [ ] 部署手册更新
- [ ] 组件使用说明
- [ ] 已知问题修复
---
## 附录:每日检查清单
```
□ 所有新增 C# 服务实现 IDependency
□ Controller 写在 Partial/ 目录
□ 前端扩展在 extension/ 目录
□ 未修改自动生成文件
□ MC4.0 调用经 RateLimiter
□ Owl Token 使用 TokenManager 缓存
□ 实时数据未写入 IoT_DeviceData
□ dotnet build 零错误
```
## 附录:端口分配
| 服务 | 端口 |
|------|------|
| IntegrationGateway | 5100 |
| VolPro.WebApi | 9100 |
| web.vite | 9000 |
| warehouse | 9200 |
| Owl | 80 |
| MC4.0 | 3000 |
---
> **文档结束**