This commit is contained in:
meusinfirmary
2025-07-24 03:10:14 +07:00
parent f257a1b7f2
commit 79596192d3
2 changed files with 1075 additions and 230 deletions

View File

@ -347,14 +347,17 @@ class Tracks extends Model
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 .=
" 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 " . self::T_TRACKS_ADDR . " AS tr_addr ON tr.latitude = tr_addr.lat AND tr.longitude = tr_addr.lng";
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.vendor_id = rate.vdr_id";
@ -402,8 +405,10 @@ class Tracks extends Model
$params[] = $filter["own_by_vdr_id"];
}
if (isset($filter["active_rates"])) {
$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 = ?";
$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,
@ -434,242 +439,72 @@ class Tracks extends Model
// 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 ?? "";
$_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
$_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 ?? "";
[
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
$_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 ?? "";
[
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 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 = [];
// $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
// );
// foreach ($list as $_list) {
// $_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);
// }
// 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();

1010
app/Models/Tracks_copy_last.php Executable file

File diff suppressed because it is too large Load Diff