KTVCentral/app/Console/Commands/CheckRoomOnlineStatus.php

48 lines
1.5 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Room;
use App\Models\MachineStatus;
use App\Enums\RoomStatus;
2025-06-27 14:55:45 +08:00
use App\Http\Resources\RoomResource;
use Carbon\Carbon;
use App\Services\MachineStatusForwarder;
class CheckRoomOnlineStatus extends Command
{
protected $signature = 'rooms:check-online-status';
protected $description = 'Check if each room has recent MachineStatus data, mark offline if outdated';
public function handle()
{
$now = Carbon::now();
$threshold = $now->subMinutes(10);
// 所有房間
$rooms = Room::with('branch')->get();
foreach ($rooms as $room) {
$branch = optional($room->branch);
$latestStatus = MachineStatus::where('hostname', $room->type->value.$room->name)
->latest('created_at')
->first();
if (!$latestStatus || $latestStatus->created_at < $threshold) {
$room->is_online = false;
$room->log_source='system';
$room->log_message='checkRoomOnline';
$room->save();
$this->info("Room [{$room->name}] marked as offline (no recent MachineStatus)");
}
2025-06-05 21:51:27 +08:00
$response = (new MachineStatusForwarder(
$branch->external_ip ?? '',
'/api/room/receiveSwitch',
2025-06-27 14:55:45 +08:00
(new RoomResource($room))->toArray(request())
2025-06-05 21:51:27 +08:00
))->forward();
}
return 0;
}
}