diff --git a/backend/bot/cron_auto_marketing_pusher.php b/backend/bot/cron_auto_marketing_pusher.php index d5b8bf03..01bb568b 100644 --- a/backend/bot/cron_auto_marketing_pusher.php +++ b/backend/bot/cron_auto_marketing_pusher.php @@ -19,8 +19,9 @@ require_once __DIR__ . '/../functions.php'; set_time_limit(0); try { - $con = Database::get('main'); - $redis = getRedisConnection(); + $con = Database::get('main'); + $conRide = Database::get('ride'); + $redis = getRedisConnection(); } catch (Exception $e) { die("Database connection failed: " . $e->getMessage() . "\n"); } @@ -28,19 +29,30 @@ try { echo "Starting Auto Marketing Pusher Engine...\n"; // 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 = " - 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 JOIN tokens t ON p.id = t.passengerID - WHERE p.id NOT IN ( - SELECT passenger_id FROM rides WHERE DATE(created_at) = CURDATE() - ) + LEFT JOIN passenger_opening_locations pol ON pol.passenger_id = p.id + $notInSql + GROUP BY p.id, t.token LIMIT 1000 "; -// ملاحظة: في بيئة الإنتاج، استخدم جدول فتح التطبيق (App Opens) للحصول على دقة أعلى للركاب الذين فتحوا التطبيق مؤخراً. -$stmtIdle = $con->query($sqlIdle); +$stmtIdle = $con->prepare($sqlIdle); +$stmtIdle->execute($activePassengerIds); $idlePassengers = $stmtIdle->fetchAll(PDO::FETCH_ASSOC); if (empty($idlePassengers)) { diff --git a/backend/bot/cron_predictive_demand.php b/backend/bot/cron_predictive_demand.php index 801849fa..87b59c9f 100644 --- a/backend/bot/cron_predictive_demand.php +++ b/backend/bot/cron_predictive_demand.php @@ -55,7 +55,7 @@ $sqlHistory = " ROUND(pickup_lng / :grid) * :grid AS cell_lng, country_code, COUNT(*) AS demand_score - FROM rides + FROM ride WHERE status IN ('completed', 'cancelled_by_driver', 'timeout') AND HOUR(created_at) = :next_hour