diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php new file mode 100644 index 0000000..8751f5c --- /dev/null +++ b/app/Http/Controllers/ReportsController.php @@ -0,0 +1,34 @@ + ConfRates::getLanesActive(), + // 'provs' => Region::listProv(), + // 'vendors' => Users::getUsersActiveByRole(Users::ROLE_VENDOR), + // 'truck_types' => ConfTruckTypes::listTruckTypes(ConfTruckTypes::IS_ACTIVE), + ]; + + return view('menu_v1.reports.vehicle_trips', $data); + } + + +} diff --git a/app/Http/Controllers/TrackController.php b/app/Http/Controllers/TrackController.php index d6cccaf..26dc4af 100755 --- a/app/Http/Controllers/TrackController.php +++ b/app/Http/Controllers/TrackController.php @@ -143,8 +143,8 @@ class TrackController extends Controller $filter["start_date"] = $req->start_date; $filter["end_date"] = $req->end_date; - $filter["start_date"] = strtotime(gmdate("Y-m-d H:i:s", $req->start_date)); - $filter["end_date"] = strtotime(gmdate("Y-m-d H:i:s", $req->end_date)); + // $filter["start_date"] = strtotime(gmdate("Y-m-d H:i:s", $req->start_date)); + // $filter["end_date"] = strtotime(gmdate("Y-m-d H:i:s", $req->end_date)); $filter["limit"] = 100000; } else { diff --git a/app/Models/Tracks.php b/app/Models/Tracks.php index 50d3842..c809e2e 100755 --- a/app/Models/Tracks.php +++ b/app/Models/Tracks.php @@ -436,85 +436,88 @@ class Tracks extends Model $query .= " GROUP BY v.id ORDER BY tr.crt_d DESC LIMIT 500"; $list = DB::select($query, $params); - + // dd($list); // Post-processing per row - foreach ($list as $_list) { - $_list->vhc_sum_milleage = - optional( - DB::select( - "SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . - self::T_TRACKS . - " WHERE vhc_id = ?", - [$_list->vid] - ) - )[0]->vhc_sum_milleage ?? ""; + // foreach ($list as $_list) { + // $_list->vhc_sum_milleage = + // optional( + // DB::select( + // "SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . + // self::T_TRACKS . + // " WHERE vhc_id = ?", + // [$_list->vid] + // ) + // )[0]->vhc_sum_milleage ?? ""; - $_list->lst_idle_at = - optional( - DB::select( - "SELECT crt_s FROM " . - self::T_TRACKS . - " WHERE stts_engine = ? AND vhc_id = ? AND crt_s >= ( - SELECT crt_s FROM " . - self::T_TRACKS . - " WHERE stts_engine IN (?, ?) AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1 - ) ORDER BY id ASC LIMIT 1", - [ - self::STTS_EN_IDLING, - $_list->vid, - self::STTS_EN_STOPING, - self::STTS_EN_MOVING, - $_list->vid, - $_list->lst_loc_crt_s, - ] - ) - )[0]->crt_s ?? ""; + // $_list->lst_idle_at = + // optional( + // DB::select( + // "SELECT crt_s FROM " . + // self::T_TRACKS . + // " WHERE stts_engine = ? AND vhc_id = ? AND crt_s >= ( + // SELECT crt_s FROM " . + // self::T_TRACKS . + // " WHERE stts_engine IN (?, ?) AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1 + // ) ORDER BY id ASC LIMIT 1", + // [ + // self::STTS_EN_IDLING, + // $_list->vid, + // self::STTS_EN_STOPING, + // self::STTS_EN_MOVING, + // $_list->vid, + // $_list->lst_loc_crt_s, + // ] + // ) + // )[0]->crt_s ?? ""; - $_list->lst_stop_at = - optional( - DB::select( - "SELECT crt_s FROM " . - self::T_TRACKS . - " WHERE stts_engine = ? AND vhc_id = ? AND crt_s >= ( - SELECT crt_s FROM " . - self::T_TRACKS . - " WHERE stts_engine IN (?, ?) AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1 - ) ORDER BY id ASC LIMIT 1", - [ - self::STTS_EN_STOPING, - $_list->vid, - self::STTS_EN_IDLING, - self::STTS_EN_MOVING, - $_list->vid, - $_list->lst_loc_crt_s, - ] - ) - )[0]->crt_s ?? ""; + // $_list->lst_stop_at = + // optional( + // DB::select( + // "SELECT crt_s FROM " . + // self::T_TRACKS . + // " WHERE stts_engine = ? AND vhc_id = ? AND crt_s >= ( + // SELECT crt_s FROM " . + // self::T_TRACKS . + // " WHERE stts_engine IN (?, ?) AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1 + // ) ORDER BY id ASC LIMIT 1", + // [ + // self::STTS_EN_STOPING, + // $_list->vid, + // self::STTS_EN_IDLING, + // self::STTS_EN_MOVING, + // $_list->vid, + // $_list->lst_loc_crt_s, + // ] + // ) + // )[0]->crt_s ?? ""; - $_list->lst_heartbeat = - optional( - DB::select( - "SELECT COUNT(id) as lst_heartbeat FROM " . - self::T_TRACKS . - " WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN ? AND ? LIMIT 1", - [$_list->vid, $now - 600, $now] - ) - )[0]->lst_heartbeat ?? ""; - } + // $_list->lst_heartbeat = + // optional( + // DB::select( + // "SELECT COUNT(id) as lst_heartbeat FROM " . + // self::T_TRACKS . + // " WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN ? AND ? LIMIT 1", + // [$_list->vid, $now - 600, $now] + // ) + // )[0]->lst_heartbeat ?? ""; + // } return $list; } public static function lastMoveTracks($vid, $filter = []) { + // dd($vid, $filter); $now = time(); $params = []; $query = "SELECT"; $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"; + // ,(tr.crt + ( 7 * 3600 )) AS lst_loc_crt + // ,(tr.crt_d + ( 7 * 3600 )) AS lst_loc_crt_d $query .= " - ,(tr.crt + ( 7 * 3600 )) AS lst_loc_crt - ,(tr.crt_d + ( 7 * 3600 )) AS lst_loc_crt_d + ,tr.crt AS lst_loc_crt + ,tr.crt_d 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"; @@ -563,61 +566,88 @@ class Tracks extends Model $query .= " ;"; $rawTracks = DB::select($query, $params); $rawTracks = collect($rawTracks); + // dd($rawTracks->toJson(JSON_PRETTY_PRINT)); + // dd($rawTracks); - $filtered = collect(); - $zeroBlock = collect(); - $tempBlock = collect(); + // // filter + // $filtered = collect(); + // $zeroBlock = collect(); + // $tempBlock = collect(); - $lastIndex = $rawTracks->count() - 1; + // $lastIndex = $rawTracks->count() - 1; - foreach ($rawTracks as $i => $track) { - $isZero = $track->speed == 0; + // 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); + // 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); + // $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 ($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 ($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()); + // } + // } + + // grouping by trip + $groupTrip = []; + $temp = []; + + // loop from top to bottom + foreach ($rawTracks as $item) { + if ($item->ignition == 4) { + // collect data when ignition is 4 + $temp[] = $item; + } else { + // if ignition != 4, save group if exists then reset + if (!empty($temp)) { + $groupTrip[] = $temp; + $temp = []; + } + } + } + // add last collected group if any + if (!empty($temp)) { + $groupTrip[] = $temp; + } + // dd($groupTrip); - 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); - return $filtered; + return $groupTrip; } public static function nearestInCircle($lat, $lng, $rad, $filter = []) diff --git a/resources/views/app/app.blade.php b/resources/views/app/app.blade.php index fc22308..98fcee2 100755 --- a/resources/views/app/app.blade.php +++ b/resources/views/app/app.blade.php @@ -15,6 +15,7 @@ +