diff --git a/app/Http/Controllers/Admin/BasicSettings/ApkVersionController.php b/app/Http/Controllers/Admin/BasicSettings/ApkVersionController.php index 56ca415..6ea7ccf 100644 --- a/app/Http/Controllers/Admin/BasicSettings/ApkVersionController.php +++ b/app/Http/Controllers/Admin/BasicSettings/ApkVersionController.php @@ -29,10 +29,30 @@ class ApkVersionController extends AdminController ->with('machine') ->get(); + // 撈取所有還沒執行的 OTA 預約排程 + $pendingSchedules = \App\Models\Machine\OtaSchedule::where('status', 'pending')->get(); + + // 蒐集所有預約機台 ID,一次性撈出以避免 N+1 + $allScheduledMachineIds = []; + foreach ($pendingSchedules as $sch) { + if (is_array($sch->target_value)) { + $allScheduledMachineIds = array_merge($allScheduledMachineIds, $sch->target_value); + } + } + $allScheduledMachineIds = array_unique(array_filter($allScheduledMachineIds)); + + $scheduledMachinesMap = []; + if (count($allScheduledMachineIds) > 0) { + $scheduledMachinesMap = \App\Models\Machine\Machine::whereIn('id', $allScheduledMachineIds) + ->get() + ->keyBy('id'); + } + foreach ($versions as $version) { $pending = []; $completed = []; + // 1. 已排入指令(已發送或執行中)的 RemoteCommand foreach ($commands as $cmd) { $cmdVersionCode = $cmd->payload['version_code'] ?? null; if ($cmdVersionCode == $version->version_code) { @@ -44,6 +64,20 @@ class ApkVersionController extends AdminController } } + // 2. 還沒有執行的預約排程中的機台 + foreach ($pendingSchedules as $sch) { + if ($sch->apk_version_id == $version->id) { + $machineIds = $sch->target_value; + if (is_array($machineIds)) { + foreach ($machineIds as $mId) { + if (isset($scheduledMachinesMap[$mId])) { + $pending[] = $scheduledMachinesMap[$mId]; + } + } + } + } + } + $version->pending_machines = collect($pending)->filter()->unique('id'); $version->completed_machines = collect($completed)->filter()->unique('id'); }