From db681b219af259ccbf47cba97703ace5f45e9230 Mon Sep 17 00:00:00 2001 From: "OU.ZAIKOU" Date: Thu, 5 Feb 2026 01:24:19 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E3=83=80=E3=83=83=E3=82=B7=E3=83=A5?= =?UTF-8?q?=E3=83=9C=E3=83=BC=E3=83=89=E3=80=91=E3=82=B0=E3=83=A9=E3=83=95?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/InformationController.php | 60 +++- .../admin/information/dashboard.blade.php | 290 +++++++++++------- 2 files changed, 236 insertions(+), 114 deletions(-) diff --git a/app/Http/Controllers/Admin/InformationController.php b/app/Http/Controllers/Admin/InformationController.php index a44c017..fe5c447 100644 --- a/app/Http/Controllers/Admin/InformationController.php +++ b/app/Http/Controllers/Admin/InformationController.php @@ -236,7 +236,65 @@ class InformationController extends Controller ]; } - return view('admin.information.dashboard', compact('totalStats', 'cityStats')); + // グラフ用データ: city_name と utilization_rate, waiting_count のみ + $cityStatsChart = []; + foreach ($cities as $city) { + $parkIds = DB::table('park') + ->where('city_id', $city->city_id) + ->pluck('park_id') + ->toArray(); + + // park_standard と park_number の合計 + $parkNumberStats = DB::table('park_number') + ->whereIn('park_id', $parkIds) + ->selectRaw('COALESCE(SUM(park_standard), 0) as total_standard, COALESCE(SUM(park_number), 0) as total_number') + ->first(); + + $parkStandard = $parkNumberStats->total_standard ?? 0; + $parkNumber = $parkNumberStats->total_number ?? 0; + + // 利用率計算:floor((park_number / park_standard) * 100) + $utilizationRate = $parkStandard > 0 + ? (int) floor(($parkNumber / $parkStandard) * 100) + : 0; + + // 予約待ち人数 + $waitingCount = 0; + if (!empty($parkIds)) { + $waitingQuery = DB::table('reserve') + ->whereIn('park_id', $parkIds) + ->where('valid_flag', 1) + ->whereNull('contract_id'); + + try { + DB::table('reserve') + ->select(DB::raw('1')) + ->whereNotNull('reserve_cancel_flag') + ->limit(1) + ->first(); + + $waitingQuery = $waitingQuery + ->where(function ($q) { + $q->whereNull('reserve_cancel_flag') + ->orWhere('reserve_cancel_flag', 0); + }) + ->whereNull('reserve_cancelday'); + } catch (\Exception $e) { + // キャンセルフラグが未運用 + } + + $waitingCount = $waitingQuery->count(); + } + + $cityStatsChart[] = [ + 'city_id' => $city->city_id, + 'city_name' => $city->city_name, + 'utilization_rate' => $utilizationRate, + 'waiting_count' => $waitingCount, + ]; + } + + return view('admin.information.dashboard', compact('totalStats', 'cityStats', 'cityStatsChart')); } // ステータス一括更新(着手=2 / 対応完了=3) diff --git a/resources/views/admin/information/dashboard.blade.php b/resources/views/admin/information/dashboard.blade.php index d7a8630..af852d8 100644 --- a/resources/views/admin/information/dashboard.blade.php +++ b/resources/views/admin/information/dashboard.blade.php @@ -257,125 +257,189 @@ @push('scripts') -@endpush \ No newline at end of file + + +@endpush +