Update: 2026-07-05 18:33:35
This commit is contained in:
@@ -19,8 +19,9 @@ require_once __DIR__ . '/../functions.php';
|
|||||||
set_time_limit(0);
|
set_time_limit(0);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$con = Database::get('main');
|
$con = Database::get('main');
|
||||||
$redis = getRedisConnection();
|
$conRide = Database::get('ride');
|
||||||
|
$redis = getRedisConnection();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
die("Database connection failed: " . $e->getMessage() . "\n");
|
die("Database connection failed: " . $e->getMessage() . "\n");
|
||||||
}
|
}
|
||||||
@@ -28,19 +29,30 @@ try {
|
|||||||
echo "Starting Auto Marketing Pusher Engine...\n";
|
echo "Starting Auto Marketing Pusher Engine...\n";
|
||||||
|
|
||||||
// 1. استخراج الركاب الخاملين في آخر ساعتين (الذين لم يقموا بأي طلب اليوم)
|
// 1. استخراج الركاب الخاملين في آخر ساعتين (الذين لم يقموا بأي طلب اليوم)
|
||||||
// نبحث في جدول locations أو tokens للركاب الذين لديهم نشاط قريب دون رحلات
|
// First, fetch active passenger IDs from the ride database
|
||||||
|
$stmtRide = $conRide->query("SELECT DISTINCT passenger_id FROM ride WHERE DATE(created_at) = CURDATE()");
|
||||||
|
$activePassengerIds = $stmtRide->fetchAll(PDO::FETCH_COLUMN);
|
||||||
|
|
||||||
|
if (!empty($activePassengerIds)) {
|
||||||
|
$placeholders = implode(',', array_fill(0, count($activePassengerIds), '?'));
|
||||||
|
$notInSql = "WHERE p.id NOT IN ($placeholders) AND p.status = 'notDeleted'";
|
||||||
|
} else {
|
||||||
|
$notInSql = "WHERE p.status = 'notDeleted'";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then, fetch idle passengers from the main database
|
||||||
$sqlIdle = "
|
$sqlIdle = "
|
||||||
SELECT p.id as passenger_id, t.token, p.country_code
|
SELECT p.id as passenger_id, t.token, IFNULL(MAX(pol.country_code), 'JO') as country_code
|
||||||
FROM passengers p
|
FROM passengers p
|
||||||
JOIN tokens t ON p.id = t.passengerID
|
JOIN tokens t ON p.id = t.passengerID
|
||||||
WHERE p.id NOT IN (
|
LEFT JOIN passenger_opening_locations pol ON pol.passenger_id = p.id
|
||||||
SELECT passenger_id FROM rides WHERE DATE(created_at) = CURDATE()
|
$notInSql
|
||||||
)
|
GROUP BY p.id, t.token
|
||||||
LIMIT 1000
|
LIMIT 1000
|
||||||
";
|
";
|
||||||
// ملاحظة: في بيئة الإنتاج، استخدم جدول فتح التطبيق (App Opens) للحصول على دقة أعلى للركاب الذين فتحوا التطبيق مؤخراً.
|
|
||||||
|
|
||||||
$stmtIdle = $con->query($sqlIdle);
|
$stmtIdle = $con->prepare($sqlIdle);
|
||||||
|
$stmtIdle->execute($activePassengerIds);
|
||||||
$idlePassengers = $stmtIdle->fetchAll(PDO::FETCH_ASSOC);
|
$idlePassengers = $stmtIdle->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
if (empty($idlePassengers)) {
|
if (empty($idlePassengers)) {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ $sqlHistory = "
|
|||||||
ROUND(pickup_lng / :grid) * :grid AS cell_lng,
|
ROUND(pickup_lng / :grid) * :grid AS cell_lng,
|
||||||
country_code,
|
country_code,
|
||||||
COUNT(*) AS demand_score
|
COUNT(*) AS demand_score
|
||||||
FROM rides
|
FROM ride
|
||||||
WHERE
|
WHERE
|
||||||
status IN ('completed', 'cancelled_by_driver', 'timeout')
|
status IN ('completed', 'cancelled_by_driver', 'timeout')
|
||||||
AND HOUR(created_at) = :next_hour
|
AND HOUR(created_at) = :next_hour
|
||||||
|
|||||||
Reference in New Issue
Block a user