diff --git a/app/Http/Controllers/Api/CameraMonitoringController.php b/app/Http/Controllers/Api/CameraMonitoringController.php index d3233ea..adb31b0 100644 --- a/app/Http/Controllers/Api/CameraMonitoringController.php +++ b/app/Http/Controllers/Api/CameraMonitoringController.php @@ -75,12 +75,21 @@ class CameraMonitoringController extends Controller $health->fill([ 'status' => $r['healthStatus'] ?? ($r['pushStatus'] ?? ($r['sdkStatus'] ?? 'UNKNOWN')), 'sdk_status' => $r['sdkStatus'] ?? null, + 'tcp_reachable' => array_key_exists('tcpReachable', $r) ? $r['tcpReachable'] : null, 'last_pdc_at' => $r['lastPdcAt'] ?? null, 'pdc_count' => $r['pdcCount'] ?? 0, 'push_age_seconds' => ($r['pushAgeSeconds'] ?? -1) >= 0 ? $r['pushAgeSeconds'] : null, 'last_tcp_error' => $r['networkReason'] ?? null, + 'reconnect_attempts' => $r['autoReconnectFailures'] ?? 0, 'observed_at' => now(), ])->save(); + // 设备已重新登录在线时,页面刷新也应同步关闭同场馆的遗留告警。 + if (($r['sdkStatus'] ?? null) === 'ONLINE' && $camera->venue_id) { + CameraAlert::query() + ->where('venue_id', $camera->venue_id) + ->whereIn('status', ['OPEN', 'ACKNOWLEDGED']) + ->update(['status' => 'RESOLVED', 'recovered_at' => now()]); + } $health->setAttribute('last_pdc_at_source', $r['lastPdcAt'] ?? null); $camera->setRelation('health', $health); });