Files
FloatBackOfffice/CRONS/update_surge_price_data.php
dev-chiefworks f76abffdcd first commit
2022-05-31 16:21:53 -04:00

142 lines
4.5 KiB
PHP

<?php
echo "[".date("Y-m-d H:i:s")."] update_surge_price_data job is starting.\n";
require('./lock.php');
$lock_file = lock_pid_file();
require('../backend.php');
$db_host = $savvyext->cfgReadChar('database.host');
$db_name = $savvyext->cfgReadChar('database.name');
$db_user = $savvyext->cfgReadChar('database.user');
$db_pass = $savvyext->cfgReadChar('database.pass');
$db_port = $savvyext->cfgReadLong('database.port');
$connstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}";
$con = pg_connect($connstr);
$db_host = $savvyext->cfgReadChar('database_replica.host');
$db_name = $savvyext->cfgReadChar('database_replica.name');
$db_user = $savvyext->cfgReadChar('database_replica.user');
$db_pass = $savvyext->cfgReadChar('database_replica.pass');
$db_port = $savvyext->cfgReadLong('database_replica.port');
$readOnlyReplicaConnstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}";
$readOnlyReplicaConn = pg_connect($readOnlyReplicaConnstr);
if ($con===FALSE || $readOnlyReplicaConn===FALSE) {
unlock_pid_file($lock_file);
die ("Could not connect to server\n");
}
$radius = 100;
$rate = 1.1;
$numberOfDays = 365;
// update surge price data for trip (parsedemail_item)
$query = "
SELECT
cpvt.data_source_id,
cpvt.data_source,
cpvt.cost,
a1.latitude AS location_start_lat,
a1.longitude AS location_start_lng,
a2.latitude AS location_end_lat,
a2.longitude AS location_end_lng
FROM
(
SELECT
*
FROM
union_trip_and_quote_view_table
WHERE
(
data_source = 1
AND data_source_id >
(
SELECT
CASE WHEN max(tpc.data_source_id) IS NULL THEN
0
ELSE
max(tpc.data_source_id)
END
FROM
trip_surge_price AS tpc
WHERE
tpc.data_source = 1
)
)
OR
(
data_source = 2
AND data_source_id >
(
SELECT
CASE WHEN max(tpc.data_source_id) IS NULL THEN
0
ELSE
max(tpc.data_source_id)
END FROM trip_surge_price AS tpc
WHERE
tpc.data_source = 2
)
)
) AS cpvt
LEFT JOIN address a1 ON cpvt.location_start_id = a1.id
LEFT JOIN address a2 ON cpvt.location_end_id = a2.id
";
$rs = pg_query($readOnlyReplicaConn, $query);
if ($rs===FALSE) {
unlock_pid_file($lock_file);
die("Cannot execute query: $query\n");
}
while ($row = pg_fetch_assoc($rs)) {
$root_id = $row['data_source_id'];
$root_type = $row['data_source'];
$location_start_lng = $row['location_start_lng'];
$location_start_lat = $row['location_start_lat'];
$location_end_lng = $row['location_end_lng'];
$location_end_lat = $row['location_end_lat'];
$cost = $row['cost'];
$check_surge_query = "
SELECT
avg(result.cost) AS avg_cost
FROM
(
SELECT
cost
FROM
union_trip_and_quote_view_table AS utaqvt
LEFT JOIN address a1 ON utaqvt.location_start_id = a1.id
LEFT JOIN address a2 ON utaqvt.location_end_id = a2.id
WHERE
utaqvt.travel_date BETWEEN NOW() - INTERVAL '" . $numberOfDays . " days' AND NOW()
AND ST_DWithin (a1.geometry, ST_MakePoint ('".pg_escape_string($location_start_lng)."', '".pg_escape_string($location_start_lat)."')::geography, '".$radius."')
AND ST_DWithin (a2.geometry, ST_MakePoint ('".pg_escape_string($location_end_lng)."', '".pg_escape_string($location_end_lat)."')::geography, '".$radius."')
) AS result
";
$rs_exists = pg_query($readOnlyReplicaConn, $check_surge_query);
while ($data = pg_fetch_object($rs_exists)) {
if((float)$cost > ((float)$data->avg_cost * $rate)) {
$executeQuery = "
INSERT INTO trip_surge_price (data_source_id, data_source)
VALUES('".pg_escape_string($root_id)."', '".pg_escape_string($root_type)."')
";
$result = pg_query($con, $executeQuery);
echo "[".date("Y-m-d H:i:s")."] Update surge option data for trip record: " . $root_id;
echo "\n";
}
}
}
pg_close($con);
pg_close($readOnlyReplicaConn);
echo "[".date("Y-m-d H:i:s")."] update_surge_price_data job complete.\n";
unlock_pid_file($lock_file);
?>