update
This commit is contained in:
@ -49,262 +49,471 @@ class Tracks extends Model
|
||||
* device sudah sampai dilokasi pengantaran dan dimatikan, ketika dipakai lagi data tracking yang lama kelihatan dan loncat
|
||||
* untuk mengatasi itu di service_tracking juga perlu validasi tambahan, entah seperti apa caranya
|
||||
*/
|
||||
|
||||
// public static function listCurrentTracks($filter = [])
|
||||
// {
|
||||
// $now = time();
|
||||
// $params = [];
|
||||
|
||||
// $query = "SELECT";
|
||||
// $query .=
|
||||
// " v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
|
||||
// $query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
|
||||
// $query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
|
||||
// $query .= " ,client.id as client_group_id,client.c_name as client_group_name";
|
||||
// $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";
|
||||
// $query .=
|
||||
// " ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
|
||||
// $query .=
|
||||
// " ,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";
|
||||
// $query .=
|
||||
// ",rate.fast_time as rate_fast_time,rate.long_time as rate_long_time,rate.sell_kg as rate_sell_kg,rate.sell_cbm as rate_sell_cbm,rate.sell_ftl as rate_sell_ftl";
|
||||
// }
|
||||
// if (isset($filter["get_order_data"])) {
|
||||
// $query .=
|
||||
// ",ord.id as ord_id,ord.code as ord_code,ord.status as ord_stts,ord.crt as ord_crt,ord_pck.pck_name as ord_pck_name,ord_pck.pck_addr as ord_pck_addr,ord_drop.drop_name as ord_drop_name,ord_drop.drop_addr as ord_drop_addr";
|
||||
// $query .=
|
||||
// ",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) ord_pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) ord_drop_ktname";
|
||||
// $query .=
|
||||
// ",ord_drv.drv_name as ord_drv_name,ord_drv.drv_phone_val as ord_drv_phone_val,ord_drv.drv_phone2_val as ord_drv_phone2_val,ord_drv.drv_addr as ord_drv_addr";
|
||||
// $query .= ",ord_c.c_name as ord_c_name,ord_c.c_pt_name as ord_c_pt_name";
|
||||
// }
|
||||
// $query .= " FROM t_vehicles AS v";
|
||||
// $query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
|
||||
// $query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
|
||||
// $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 = ?";
|
||||
// $params[] = $filter["status"];
|
||||
// }
|
||||
// if (isset($filter["is_in_ord"])) {
|
||||
// $query .= " AND v.is_in_ord = ?";
|
||||
// $params[] = $filter["is_in_ord"];
|
||||
// }
|
||||
// if (isset($filter["nopol1"]) && isset($filter["nopol2"]) && isset($filter["nopol3"])) {
|
||||
// $query .= " AND v.nopol1 = ? AND v.nopol2 = ? AND v.nopol3 = ?";
|
||||
// array_push($params, $filter["nopol1"], $filter["nopol2"], $filter["nopol3"]);
|
||||
// }
|
||||
// if (isset($filter["vid"])) {
|
||||
// $query .= " AND v.id = ?";
|
||||
// $params[] = $filter["vid"];
|
||||
// }
|
||||
// if (isset($filter["vids"])) {
|
||||
// if ($filter["vids"] && count($filter["vids"]) > 0) {
|
||||
// $binds_vids = "";
|
||||
// foreach ($filter["vids"] as $k => $v) {
|
||||
// $binds_vids .= "?,";
|
||||
// $params[] = $v;
|
||||
// }
|
||||
// if (substr($binds_vids, -1) === ",") {
|
||||
// $binds_vids = substr($binds_vids, 0, -1);
|
||||
// }
|
||||
// $query .= " AND v.id IN ($binds_vids)";
|
||||
// } else {
|
||||
// $query .= " AND v.id = ?";
|
||||
// $params[] = 0;
|
||||
// }
|
||||
// }
|
||||
// if (isset($filter["own_by_vdr_id"])) {
|
||||
// $query .= " AND v.vendor_id = ?";
|
||||
// $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 .=
|
||||
// " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_ftl = ? 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_ftl,
|
||||
// $filter["active_rates"]->long_time
|
||||
// );
|
||||
// }
|
||||
// if (isset($filter["prefer_truck_type"])) {
|
||||
// $query .= " AND v.type_id = ?";
|
||||
// $params[] = $filter["prefer_truck_type"];
|
||||
// }
|
||||
// if (isset($filter["get_order_data"])) {
|
||||
// if (isset($filter["client_id"])) {
|
||||
// $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 =
|
||||
// " SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . self::T_TRACKS . " WHERE vhc_id = ?";
|
||||
// $_query = DB::select($_query, [$_list->vid]);
|
||||
// $_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage;
|
||||
|
||||
// $_query =
|
||||
// "
|
||||
// SELECT
|
||||
// crt_s as lst_idle_at
|
||||
// FROM
|
||||
// " .
|
||||
// self::T_TRACKS .
|
||||
// "
|
||||
// WHERE
|
||||
// stts_engine = " .
|
||||
// self::STTS_EN_IDLING .
|
||||
// "
|
||||
// AND vhc_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 = ?
|
||||
// AND crt_s <= ?
|
||||
// ORDER BY
|
||||
// id DESC
|
||||
// LIMIT 1
|
||||
// )
|
||||
// ORDER BY
|
||||
// id ASC
|
||||
// LIMIT 1";
|
||||
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
|
||||
// $_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
|
||||
|
||||
// $_query =
|
||||
// "SELECT crt_s as lst_stop_at FROM " .
|
||||
// self::T_TRACKS .
|
||||
// " WHERE stts_engine = " .
|
||||
// self::STTS_EN_STOPING .
|
||||
// " AND vhc_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 = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
|
||||
// ) ORDER BY id ASC LIMIT 1 ";
|
||||
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
|
||||
// $_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
|
||||
|
||||
// $_query =
|
||||
// " SELECT COUNT(id) as lst_heartbeat FROM " .
|
||||
// self::T_TRACKS .
|
||||
// " WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
|
||||
// ($now - 10 * 60) .
|
||||
// " AND " .
|
||||
// $now .
|
||||
// " LIMIT 1";
|
||||
// $_query = DB::select($_query, [$_list->vid]);
|
||||
// $_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
|
||||
// }
|
||||
// // em
|
||||
// return $list;
|
||||
// }
|
||||
|
||||
// public static function listCurrentTracks($filter = [])
|
||||
// {
|
||||
// $now = time();
|
||||
// $params = [];
|
||||
|
||||
// $query = "SELECT";
|
||||
// $query .=
|
||||
// " v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
|
||||
// $query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
|
||||
// $query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
|
||||
// $query .= " ,client.id as client_group_id,client.c_name as client_group_name";
|
||||
// $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";
|
||||
|
||||
// $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";
|
||||
// $query .=
|
||||
// " ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
|
||||
// $query .=
|
||||
// " ,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";
|
||||
|
||||
// $query .= " FROM t_vehicles AS v";
|
||||
// $query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
|
||||
// $query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
|
||||
// $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";
|
||||
// $query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
|
||||
// $query .=
|
||||
// " LEFT JOIN t_gps_tracks_address AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
|
||||
|
||||
// $query .= " WHERE v.dlt is null";
|
||||
// $query .= " AND tr.latitude != 0 AND tr.latitude is not null";
|
||||
// $query .= " GROUP BY v.id";
|
||||
// $query .= " ORDER BY tr.crt_d DESC";
|
||||
// $query .= " LIMIT 500;";
|
||||
|
||||
// $list = DB::select($query, $params);
|
||||
// foreach ($list as $_list) {
|
||||
// $_query = "SELECT sum_milleage as vhc_sum_milleage FROM t_vehicles WHERE id = ?";
|
||||
// $_query = DB::select($_query, [$_list->vid]);
|
||||
// $_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage ?? 0;
|
||||
|
||||
// $_query = "
|
||||
// SELECT
|
||||
// crt_s as lst_idle_at
|
||||
// FROM
|
||||
// t_gps_tracks
|
||||
// WHERE
|
||||
// stts_engine = 2
|
||||
// AND vhc_id = ?
|
||||
// AND crt_s >= (
|
||||
// SELECT
|
||||
// crt_s
|
||||
// FROM
|
||||
// t_gps_tracks
|
||||
// WHERE
|
||||
// stts_engine IN (0, 1)
|
||||
// AND vhc_id = ?
|
||||
// AND crt_s <= ?
|
||||
// ORDER BY
|
||||
// id DESC
|
||||
// LIMIT 1
|
||||
// )
|
||||
// ORDER BY
|
||||
// id ASC
|
||||
// LIMIT 1";
|
||||
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
|
||||
// $_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
|
||||
|
||||
// $_query = "SELECT crt_s as lst_stop_at FROM t_gps_tracks WHERE stts_engine = 0 AND vhc_id = ? AND crt_s >= (
|
||||
// SELECT crt_s FROM t_gps_tracks WHERE stts_engine IN (2,1) AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
|
||||
// ) ORDER BY id ASC LIMIT 1 ";
|
||||
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
|
||||
// $_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
|
||||
|
||||
// $_query =
|
||||
// " SELECT COUNT(id) as lst_heartbeat FROM t_gps_tracks WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
|
||||
// ($now - 10 * 60) .
|
||||
// " AND " .
|
||||
// $now .
|
||||
// " LIMIT 1";
|
||||
// $_query = DB::select($_query, [$_list->vid]);
|
||||
// $_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
|
||||
// }
|
||||
// return $list;
|
||||
// }
|
||||
|
||||
public static function listCurrentTracks($filter = [])
|
||||
{
|
||||
$now = time();
|
||||
$params = [];
|
||||
|
||||
$query = "SELECT";
|
||||
$query .=
|
||||
" v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
|
||||
$query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
|
||||
$query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
|
||||
$query .= " ,client.id as client_group_id,client.c_name as client_group_name";
|
||||
$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";
|
||||
$list = DB::select(
|
||||
"
|
||||
SELECT
|
||||
v.id as vid, v.device_id, v.name as vhc_name,
|
||||
c.name as vhc_cat_name, t.name as vhc_type_name,
|
||||
v.nopol1, v.nopol2, v.nopol3, vd.fvhc_img,
|
||||
v.is_track_holiday, v.track_sch_d, v.track_sch_h,
|
||||
vd.speed_limit, v.crt as vhc_crt,
|
||||
client.id as client_group_id, client.c_name as client_group_name,
|
||||
tr.ignition, tr.stts_engine, tr.stts_gps, tr.stts_gsm,
|
||||
tr.pre_milleage, tr.sum_milleage, tr.vhc_milleage, v.sum_milleage AS vhc_sum_milleage_1,
|
||||
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,
|
||||
tr.crt AS lst_loc_crt, tr.crt_d AS lst_loc_crt_d, tr.crt_s AS lst_loc_crt_s,
|
||||
tr_addr.master_id AS lst_addr_master_id,
|
||||
tr_addr.country_text AS lst_country_text, tr_addr.state_text AS lst_state_text,
|
||||
tr_addr.city_text AS lst_city_text, tr_addr.district_text AS lst_district_text,
|
||||
tr_addr.village_text AS lst_village_text, tr_addr.postcode AS lst_postcode,
|
||||
tr_addr.streets AS lst_streets, tr_addr.fulladdress AS lst_fulladdress
|
||||
FROM t_vehicles AS v
|
||||
INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid
|
||||
INNER JOIN t_vehicles_types AS t ON v.type_id = t.id
|
||||
INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id
|
||||
LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id
|
||||
LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id
|
||||
LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id
|
||||
LEFT JOIN t_gps_tracks_address AS tr_addr ON tr.latitude = tr_addr.lat AND tr.longitude = tr_addr.lng
|
||||
WHERE v.dlt IS NULL
|
||||
AND tr.latitude != 0 AND tr.latitude IS NOT NULL
|
||||
GROUP BY v.id
|
||||
ORDER BY tr.crt_d DESC
|
||||
LIMIT 20
|
||||
",
|
||||
$params
|
||||
);
|
||||
|
||||
// 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";
|
||||
$query .=
|
||||
" ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
|
||||
$query .=
|
||||
" ,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";
|
||||
$query .=
|
||||
",rate.fast_time as rate_fast_time,rate.long_time as rate_long_time,rate.sell_kg as rate_sell_kg,rate.sell_cbm as rate_sell_cbm,rate.sell_ftl as rate_sell_ftl";
|
||||
}
|
||||
if (isset($filter["get_order_data"])) {
|
||||
$query .=
|
||||
",ord.id as ord_id,ord.code as ord_code,ord.status as ord_stts,ord.crt as ord_crt,ord_pck.pck_name as ord_pck_name,ord_pck.pck_addr as ord_pck_addr,ord_drop.drop_name as ord_drop_name,ord_drop.drop_addr as ord_drop_addr";
|
||||
$query .=
|
||||
",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) ord_pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) ord_drop_ktname";
|
||||
$query .=
|
||||
",ord_drv.drv_name as ord_drv_name,ord_drv.drv_phone_val as ord_drv_phone_val,ord_drv.drv_phone2_val as ord_drv_phone2_val,ord_drv.drv_addr as ord_drv_addr";
|
||||
$query .= ",ord_c.c_name as ord_c_name,ord_c.c_pt_name as ord_c_pt_name";
|
||||
}
|
||||
$query .= " FROM t_vehicles AS v";
|
||||
$query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
|
||||
$query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
|
||||
$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 = ?";
|
||||
$params[] = $filter["status"];
|
||||
}
|
||||
if (isset($filter["is_in_ord"])) {
|
||||
$query .= " AND v.is_in_ord = ?";
|
||||
$params[] = $filter["is_in_ord"];
|
||||
}
|
||||
if (isset($filter["nopol1"]) && isset($filter["nopol2"]) && isset($filter["nopol3"])) {
|
||||
$query .= " AND v.nopol1 = ? AND v.nopol2 = ? AND v.nopol3 = ?";
|
||||
array_push($params, $filter["nopol1"], $filter["nopol2"], $filter["nopol3"]);
|
||||
}
|
||||
if (isset($filter["vid"])) {
|
||||
$query .= " AND v.id = ?";
|
||||
$params[] = $filter["vid"];
|
||||
}
|
||||
if (isset($filter["vids"])) {
|
||||
if ($filter["vids"] && count($filter["vids"]) > 0) {
|
||||
$binds_vids = "";
|
||||
foreach ($filter["vids"] as $k => $v) {
|
||||
$binds_vids .= "?,";
|
||||
$params[] = $v;
|
||||
}
|
||||
if (substr($binds_vids, -1) === ",") {
|
||||
$binds_vids = substr($binds_vids, 0, -1);
|
||||
}
|
||||
$query .= " AND v.id IN ($binds_vids)";
|
||||
} else {
|
||||
$query .= " AND v.id = ?";
|
||||
$params[] = 0;
|
||||
}
|
||||
}
|
||||
if (isset($filter["own_by_vdr_id"])) {
|
||||
$query .= " AND v.vendor_id = ?";
|
||||
$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 .=
|
||||
" AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_ftl = ? 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_ftl,
|
||||
$filter["active_rates"]->long_time
|
||||
);
|
||||
}
|
||||
if (isset($filter["prefer_truck_type"])) {
|
||||
$query .= " AND v.type_id = ?";
|
||||
$params[] = $filter["prefer_truck_type"];
|
||||
}
|
||||
if (isset($filter["get_order_data"])) {
|
||||
if (isset($filter["client_id"])) {
|
||||
$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 =
|
||||
" SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . self::T_TRACKS . " WHERE vhc_id = ?";
|
||||
$_query = DB::select($_query, [$_list->vid]);
|
||||
$_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage;
|
||||
|
||||
$_query =
|
||||
"
|
||||
SELECT
|
||||
crt_s as lst_idle_at
|
||||
FROM
|
||||
" .
|
||||
self::T_TRACKS .
|
||||
"
|
||||
WHERE
|
||||
stts_engine = " .
|
||||
self::STTS_EN_IDLING .
|
||||
"
|
||||
AND vhc_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 = ?
|
||||
AND crt_s <= ?
|
||||
ORDER BY
|
||||
id DESC
|
||||
LIMIT 1
|
||||
)
|
||||
ORDER BY
|
||||
id ASC
|
||||
LIMIT 1";
|
||||
$_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
|
||||
$_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
|
||||
|
||||
$_query =
|
||||
"SELECT crt_s as lst_stop_at FROM " .
|
||||
self::T_TRACKS .
|
||||
" WHERE stts_engine = " .
|
||||
self::STTS_EN_STOPING .
|
||||
" AND vhc_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 = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
|
||||
) ORDER BY id ASC LIMIT 1 ";
|
||||
$_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
|
||||
$_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
|
||||
|
||||
$_query =
|
||||
" SELECT COUNT(id) as lst_heartbeat FROM " .
|
||||
self::T_TRACKS .
|
||||
" WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
|
||||
($now - 10 * 60) .
|
||||
" AND " .
|
||||
$now .
|
||||
" LIMIT 1";
|
||||
$_query = DB::select($_query, [$_list->vid]);
|
||||
$_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
|
||||
$_list->vhc_sum_milleage = self::getVehicleMileage($_list->vid);
|
||||
$_list->lst_idle_at = self::getIdleAt($_list->vid, $_list->lst_loc_crt_s);
|
||||
$_list->lst_stop_at = self::getStopAt($_list->vid, $_list->lst_loc_crt_s);
|
||||
$_list->lst_heartbeat = self::getHeartbeat($_list->vid, $now);
|
||||
}
|
||||
// em
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
private static function getVehicleMileage($vhc_id)
|
||||
{
|
||||
$res = DB::select("SELECT sum_milleage as vhc_sum_milleage FROM t_vehicles WHERE id = ? LIMIT 1", [
|
||||
$vhc_id,
|
||||
]);
|
||||
return $res[0]->vhc_sum_milleage ?? 0;
|
||||
}
|
||||
|
||||
private static function getIdleAt($vhc_id, $ref_crt_s)
|
||||
{
|
||||
$res = DB::select(
|
||||
"
|
||||
SELECT crt_s as lst_idle_at
|
||||
FROM t_gps_tracks
|
||||
WHERE stts_engine = 2
|
||||
AND vhc_id = ?
|
||||
AND crt_s >= (
|
||||
SELECT crt_s FROM t_gps_tracks
|
||||
WHERE stts_engine IN (0, 1) AND vhc_id = ? AND crt_s <= ?
|
||||
ORDER BY id DESC LIMIT 1
|
||||
)
|
||||
ORDER BY id ASC LIMIT 1
|
||||
",
|
||||
[$vhc_id, $vhc_id, $ref_crt_s]
|
||||
);
|
||||
|
||||
return count($res) > 0 ? $res[0]->lst_idle_at : "";
|
||||
}
|
||||
|
||||
private static function getStopAt($vhc_id, $ref_crt_s)
|
||||
{
|
||||
$res = DB::select(
|
||||
"
|
||||
SELECT crt_s as lst_stop_at
|
||||
FROM t_gps_tracks
|
||||
WHERE stts_engine = 0 AND vhc_id = ?
|
||||
AND crt_s >= (
|
||||
SELECT crt_s FROM t_gps_tracks
|
||||
WHERE stts_engine IN (2,1) AND vhc_id = ? AND crt_s <= ?
|
||||
ORDER BY id DESC LIMIT 1
|
||||
)
|
||||
ORDER BY id ASC LIMIT 1
|
||||
",
|
||||
[$vhc_id, $vhc_id, $ref_crt_s]
|
||||
);
|
||||
|
||||
return count($res) > 0 ? $res[0]->lst_stop_at : "";
|
||||
}
|
||||
|
||||
private static function getHeartbeat($vhc_id, $now)
|
||||
{
|
||||
$start = $now - 600;
|
||||
$res = DB::select(
|
||||
"
|
||||
SELECT COUNT(id) as lst_heartbeat
|
||||
FROM t_gps_tracks
|
||||
WHERE vhc_id = ?
|
||||
AND action = 'heartbeat'
|
||||
AND crt BETWEEN ? AND ?
|
||||
LIMIT 1
|
||||
",
|
||||
[$vhc_id, $start, $now]
|
||||
);
|
||||
|
||||
return count($res) > 0 ? $res[0]->lst_heartbeat : 0;
|
||||
}
|
||||
|
||||
public static function lastMoveTracks($vid, $filter = [])
|
||||
{
|
||||
$now = time();
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user