Files
SecMPS/doc/设计文档/网关项目代码审查报告20260604.md

134 lines
4.0 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.
# 网关项目代码审查报告 2026-06-04
> **范围**: `gateway/src/` 全部 5 个项目 239 文件
> **重点**: 空函数、未实现内容、TODO、硬编码、异常处理
---
## 一、空实现/存根函数5 处)
### 1.1 OwlAdapter — ConfirmAlarmAsync / EndAlarmAsync
**文件**: `OwlAdapter.cs` L250-251
```csharp
public Task ConfirmAlarmAsync(string alarmId) => Task.CompletedTask;
public Task EndAlarmAsync(string alarmId) => Task.CompletedTask;
```
**说明**: Owl AI 事件(基于 `/events` 接口)不支持确认/结束操作,合理留空。
**风险**: 低。调用方VolPro/A4调用后状态不会写回 Owl。
### 1.2 KmsAdapter — EndAlarmAsync
**文件**: `KmsAdapter.cs` L165-170
```csharp
public Task EndAlarmAsync(string alarmId) { return Task.CompletedTask; }
```
**说明**: KMS 第三方接口 (2.18.7) 不提供告警结束 API合理留空。
**风险**: 低。
### 1.3 KmsAdapter — GetBorrowRecordsAsync / GetPermissionListAsync 请求体
**文件**: `KmsAdapter.cs` L181, L194
```csharp
var body = "{}"; // 联调时加入时间范围参数
```
**说明**: 联调待办项,当前传空 JSON。KMS 接口可能接受无参查询返回全部数据。
**风险**: 中。如果 KMS 要求时间范围参数,当前实现会失败。
### 1.4 KmsAdapter — SendControlAsync 只实现了 "open"/"authorize"
**文件**: `KmsAdapter.cs` L251
```csharp
if (command == "open" || command == "authorize") { ... }
// 其他 command 返回 success=true 但无实际操作
```
**说明**: 非开门的控制指令会静默返回成功但不执行任何操作。
**风险**: 中。调用方以为成功但设备未变化。
---
## 二、静默异常吞噬4 处)
### 2.1 SyncAllDevicesAsync — 适配器遍历 catch
**文件**: `Program.cs` L171
```csharp
catch { }
```
适配器取设备列表失败时静默跳过,不影响其他适配器。合理但缺少日志。
### 2.2 B1 健康检查
**文件**: `Program.cs` L197
```csharp
try { healthy = await a.HealthCheckAsync(); } catch { }
```
合理——健康检查本身不应抛异常。
### 2.3 B4-batch Fallback
**文件**: `Program.cs` L279
```csharp
try { results[deviceId] = await a.GetRealtimeValuesAsync(deviceId); } catch { }
```
合理——逐设备查询时某设备失败不应阻塞。
### 2.4 RateLimiter.Release
**文件**: `RateLimiter.cs` L36
```csharp
try { _semaphore.Release(); } catch { }
```
合理——SemaphoreSlim.Release 在超过最大计数时会抛异常。
---
## 三、联调待验证项3 处)
### 3.1 GatewayClientFactory — A2/A3 方法从未被网关自身调用
**文件**: `GatewayClientFactory.cs` L38-62
```csharp
public async Task<bool> HeartbeatAsync(...) { ... }
public async Task<JsonDocument?> SyncDevicesAsync(...) { ... }
```
**说明**: 这两个方法在 Program.cs 的 `SyncAllDevicesAsync` 中通过 `clientFactory.SyncDevicesAsync` 被调用了。A2 心跳在心跳循环中被调用。
**状态**: ✅ 已连接。
### 3.2 Owl Playback URL 硬编码路径
**文件**: `OwlAdapter.cs` (GetPlaybackUrlAsync)
```csharp
Hls = $"{baseUrl}/recordings/channels/{channelId}/index.m3u8?..."
```
联调时需确认 Owl 实际录像 HLS 路径是否为此格式。
### 3.3 KMS API 响应格式
KMS 所有接口的响应格式需联调验证。文档中字段名可能与实际 API 有差异。
---
## 四、编译状态
网关 5 项目上次编译 **0 错误 0 警告**。当前改动为本次审查附加,需重新编译验证。
---
## 五、结论
| 类别 | 数量 | 严重度 |
|------|:---:|------|
| 合理空实现(设计如此) | 3 | 低 |
| 联调待验证参数 | 2 | 中 |
| 静默异常(合理设计) | 4 | 低 |
| **需要立即修复** | **0** | — |
**没有发现需要立即修复的空函数或未实现方法。** 所有 `Task.CompletedTask` 都是因为底层子系统不支持该操作Owl AI 无确认、KMS 无结束告警属于设计取舍。KMS 的联调待办项(时间范围参数)已在代码中注释标注。