This commit is contained in:
meusinfirmary
2025-07-23 04:44:20 +07:00
parent db6fe59062
commit 3e6ea0b3d4
9 changed files with 641 additions and 402 deletions

View File

@ -63,17 +63,6 @@ class Tracks_copy extends Model
$query .= " ,tr.ignition,tr.stts_engine,tr.stts_gps,tr.stts_gsm";
$query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
// FRO
// $query .= " ,(SELECT SUM(pre_milleage) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id LIMIT 1) as vhc_sum_milleage";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_IDLING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_STOPING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_idle_at";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_STOPING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_IDLING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_stop_at";
$query .=
" ,tr.id AS lst_master_id,tr.latitude AS lst_lat,tr.longitude AS lst_lng,tr.speed AS lst_speed,tr.orientation AS lst_orientation";
$query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
@ -83,9 +72,6 @@ class Tracks_copy extends Model
" ,tr_addr.district_text AS lst_district_text,tr_addr.village_text AS lst_village_text,tr_addr.postcode AS lst_postcode";
$query .= " ,tr_addr.streets AS lst_streets,tr_addr.fulladdress AS lst_fulladdress";
// FRO
// $query .= " ,(SELECT COUNT(id) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id AND action = 'heartbeat' AND crt BETWEEN ".($now-(10*60))." AND ".$now." LIMIT 1) as lst_heartbeat"; // heartbeat last data on further 10 minutes
if (isset($filter["active_rates"])) {
$query .=
",rate.vdr_id as rate_vdr_id,rate.vhc_type as rate_vhc_type,rate.origin_prov as rate_origin_prov,rate.dest_city as rate_dest_city,rate.dest_district as rate_dest_district";
@ -107,45 +93,23 @@ class Tracks_copy extends Model
$query .= " INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id";
$query .= " LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id";
$query .= " LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id";
// get last updated row from many rows
// $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY device_id ORDER BY crt DESC ) AS tr1 ON (v.device_id = tr1.device_id)"; // cara lama berlaku utk gps tracker saja
// // $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id, vhc_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY vhc_id ORDER BY crt DESC ) AS tr1 ON (v.id = tr1.vhc_id)"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI)
// $query .= " LEFT JOIN " . self::T_TRACKS . " AS tr ON (tr.crt = tr1.max_crt)";
// get last updated tracking from updated table realtime
// $query .= " LEFT JOIN db_trucking.t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
$query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// $query .= " LEFT JOIN " . self::T_TRACKS_ADDR . " AS tr_addr ON tr.id = tr_addr.master_id";
//FRO
$query .=
" LEFT JOIN " .
self::T_TRACKS_ADDR .
" AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
if (isset($filter["active_rates"])) {
// $query .= " INNER JOIN t_conf_rates as rate ON v.type_id = rate.vhc_type";
$query .= " INNER JOIN t_conf_rates as rate ON v.vendor_id = rate.vdr_id";
}
if (isset($filter["get_order_data"])) {
// the old way => only 1 order 1 vehicle
$query .= " LEFT JOIN t_orders as ord ON v.ord_id = ord.id";
$query .= " LEFT JOIN t_orders_pickups as ord_pck ON v.ord_id = ord_pck.ord_id";
$query .= " LEFT JOIN t_orders_drops as ord_drop ON v.ord_id = ord_drop.ord_id";
$query .= " LEFT JOIN t_orders_drivers as ord_drv ON v.ord_id = ord_drv.ord_id";
$query .= " LEFT JOIN t_orders_clients as ord_c ON v.ord_id = ord_c.ord_id";
// the new way => can handle 2 order in 1 vehicle
// $query .= " LEFT JOIN t_orders_vehicles as ord_vhc ON v.id = ord_vhc.vhc_id";
// $query .= " LEFT JOIN t_orders as ord ON ord_vhc.ord_id = ord.id";
// $query .= " LEFT JOIN t_orders_pickups as ord_pck ON ord_vhc.ord_id = ord_pck.ord_id";
// $query .= " LEFT JOIN t_orders_drops as ord_drop ON ord_vhc.ord_id = ord_drop.ord_id";
// $query .= " LEFT JOIN t_orders_drivers as ord_drv ON ord_vhc.ord_id = ord_drv.ord_id";
// $query .= " LEFT JOIN t_orders_clients as ord_c ON ord_vhc.ord_id = ord_c.ord_id";
}
$query .= " WHERE v.dlt is null";
// $query .= " AND tr.action IN ('location','alarm')"; // kalo gamau ngambil data heartbeat(idling)
// $query .= " AND tr.device_id = v.device_id"; // cara lama berlaku utk gps tracker saja
// $query .= " AND tr.vhc_id = v.id"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI) // bikin lemot
$query .= " AND tr.latitude != 0 AND tr.latitude is not null";
if (isset($filter["status"])) {
$query .= " AND v.status = ?";
@ -184,11 +148,6 @@ class Tracks_copy extends Model
$params[] = $filter["own_by_vdr_id"];
}
if (isset($filter["active_rates"])) {
// v1
// $query .= " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.dest_district != 0";
// $query .= " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_kg = ? AND rate.sell_cbm = ? AND rate.long_time = ?";
// array_push($params, $filter['active_rates']->origin_prov, $filter['active_rates']->dest_city, $filter['active_rates']->dest_district, $filter['active_rates']->sell_kg, $filter['active_rates']->sell_cbm, $filter['active_rates']->long_time);
// v2
$query .=
" AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.is_active = " . ConfRates::IS_ACTIVE;
$query .=
@ -211,21 +170,16 @@ class Tracks_copy extends Model
$query .= " AND ord_c.c_id = ?";
$params[] = $filter["client_id"];
}
// $query .= " AND ord.status IN (22,4)";
}
if (isset($filter["company"])) {
$query .= " AND client.id = ?";
$params[] = $filter["company"];
}
// $query .= " AND v.id = 70";
$query .= " GROUP BY v.id";
$query .= " ORDER BY tr.crt_d DESC";
$query .= " LIMIT 500;";
// dd($query);
$list = DB::select($query, $params);
foreach ($list as $_list) {
$_query =
@ -301,7 +255,6 @@ class Tracks_copy extends Model
$_query = DB::select($_query, [$_list->vid]);
$_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
}
// em
return $list;
}