T完成: TaskController创建+3个IJob构造函数改造(IServiceProvider注入)+RuleEngineJob标记迁移
This commit is contained in:
133
doc/设计文档/网关项目代码审查报告20260604.md
Normal file
133
doc/设计文档/网关项目代码审查报告20260604.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# 网关项目代码审查报告 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 的联调待办项(时间范围参数)已在代码中注释标注。
|
||||
Reference in New Issue
Block a user