From c97dd332f025fc21079bae70e89758de4435da03 Mon Sep 17 00:00:00 2001 From: meusinfirmary Date: Wed, 16 Jul 2025 18:04:04 +0700 Subject: [PATCH] update --- app/Models/Tracks.php | 69 ++++++++++++++++++---- resources/views/menu_v1/vehicles.blade.php | 15 ----- 2 files changed, 57 insertions(+), 27 deletions(-) diff --git a/app/Models/Tracks.php b/app/Models/Tracks.php index 06cc63f..9e6ad1b 100755 --- a/app/Models/Tracks.php +++ b/app/Models/Tracks.php @@ -313,8 +313,8 @@ class Tracks extends Model $query .= " v.id as vid,v.device_id,v.nopol1,v.nopol2,v.nopol3"; $query .= " ,tr.id as master_id,tr.latitude,tr.longitude,tr.speed,tr.orientation"; $query .= " - ,(tr.crt + ( 9 * 3600 )) AS lst_loc_crt - ,(tr.crt_d + ( 9 * 3600 )) AS lst_loc_crt_d + ,(tr.crt + ( 7 * 3600 )) AS lst_loc_crt + ,(tr.crt_d + ( 7 * 3600 )) AS lst_loc_crt_d ,tr.crt_s AS lst_loc_crt_s"; $query .= " ,tr.ignition,tr.stts_engine"; $query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1"; @@ -356,21 +356,66 @@ class Tracks extends Model if (isset($filter["limit"])) { $query .= " LIMIT ?"; - $params[] = $filter["limit"] ?? 500; + $params[] = $filter["limit"] ?? 1000; } $query .= " ;"; - - // return DB::select($query, $params); $rawTracks = DB::select($query, $params); - // $cleanTracks = self::filterJumps($rawTracks); - $cleanTracks = $rawTracks; - //dd($cleanTracks); + $rawTracks = collect($rawTracks); - // if (isset($filter["limit"])) { - // return array_slice($cleanTracks, 0, $filter["limit"]); - // } - return $cleanTracks; + $filtered = collect(); + $zeroBlock = collect(); + $tempBlock = collect(); + + $lastIndex = $rawTracks->count() - 1; + + foreach ($rawTracks as $i => $track) { + $isZero = $track->speed == 0; + + if ($i === $lastIndex) { + if ($isZero) { + $zeroBlock->push($track); + } else { + if ($zeroBlock->isNotEmpty()) { + $tempBlock = $zeroBlock; + $tempBlock->push($track); + + $zerosOnly = $tempBlock->filter(fn($t) => $t->speed == 0); + + if ($zerosOnly->count() === 1) { + $filtered->push($zerosOnly->first()); + } elseif ($zerosOnly->count() > 1) { + $filtered->push($zerosOnly->first()); + $filtered->push($zerosOnly->last()); + } + } else { + $filtered->push($track); + } + } + continue; + } + + if ($isZero) { + $zeroBlock->push($track); + } else { + if ($zeroBlock->isNotEmpty()) { + $filtered->push($zeroBlock->first()); + $zeroBlock = collect(); + } + $filtered->push($track); + } + } + + if ($zeroBlock->isNotEmpty() && $rawTracks->last()->speed == 0) { + if ($zeroBlock->count() === 1) { + $filtered->push($zeroBlock->first()); + } else { + $filtered->push($zeroBlock->first()); + $filtered->push($zeroBlock->last()); + } + } + + return $filtered->take(500); } public static function nearestInCircle($lat, $lng, $rad, $filter = []) diff --git a/resources/views/menu_v1/vehicles.blade.php b/resources/views/menu_v1/vehicles.blade.php index 91c0262..c50c0a4 100755 --- a/resources/views/menu_v1/vehicles.blade.php +++ b/resources/views/menu_v1/vehicles.blade.php @@ -9,21 +9,6 @@ @endsection @section('customcss') - @endsection @section('content')