T完成: TaskController创建+3个IJob构造函数改造(IServiceProvider注入)+RuleEngineJob标记迁移

This commit is contained in:
2026-06-04 00:43:48 +08:00
parent bb56c229f8
commit 79b8400e6d
9 changed files with 1415 additions and 1067 deletions

View 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 的联调待办项(时间范围参数)已在代码中注释标注。