= DATE_SUB(CURDATE(), INTERVAL ? DAY) GROUP BY driver_id HAVING grand_total_seconds > 60 -- (اختياري) تجاهل من عمل أقل من دقيقة ORDER BY grand_total_seconds DESC "; $stmt = $con_tracking->prepare($sql_summary); $stmt->execute([$daysToLookBack]); $summary_data = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($summary_data)) { // حفظ ملف فارغ وإنهاء saveJsonFile($savePath, ["last_updated" => date('Y-m-d H:i:s'), "data" => []]); printSuccess("No active drivers found in summary.", $savePath); exit; } // ================================================================= // 2. جلب تفاصيل السائقين (الأسماء) من السيرفر الرئيسي 📝 // ================================================================= // استخراج الـ IDs $driver_ids = array_column($summary_data, 'driver_id'); // تجهيز الـ Placeholders (?,?,?) $placeholders = implode(',', array_fill(0, count($driver_ids), '?')); $sql_drivers = "SELECT id, name_arabic, phone, created_at FROM driver WHERE id IN ($placeholders)"; $stmt_d = $con->prepare($sql_drivers); $stmt_d->execute($driver_ids); $drivers_raw = $stmt_d->fetchAll(PDO::FETCH_ASSOC); // تحويل البيانات لـ Map لسرعة الدمج: [id => data] $drivers_map = []; foreach ($drivers_raw as $d) { $drivers_map[$d['id']] = $d; } // ================================================================= // 3. دمج البيانات وفك التشفير وتنسيق الوقت 🔄 // ================================================================= $final_report = []; $fieldsToDecrypt = ['phone', 'name_arabic']; // الحقول المشفرة foreach ($summary_data as $row) { $did = $row['driver_id']; $seconds = $row['grand_total_seconds']; // البيانات الشخصية $personalData = isset($drivers_map[$did]) ? $drivers_map[$did] : ['name_arabic' => 'Unknown', 'phone' => '']; // فك التشفير foreach ($fieldsToDecrypt as $field) { if (!empty($personalData[$field])) { try { $personalData[$field] = $encryptionHelper->decryptData($personalData[$field]); } catch (Exception $e) { // ابقها مشفرة أو ضع قيمة افتراضية عند الفشل } } } // تنسيق الوقت (مقروء للبشر) $hours = floor($seconds / 3600); $minutes = floor(($seconds % 3600) / 60); $human_time = sprintf("%d ساعة و %d دقيقة", $hours, $minutes); // بناء الصف النهائي $final_report[] = [ 'driver_id' => $did, 'name' => $personalData['name_arabic'], 'phone' => $personalData['phone'], 'join_date' => $personalData['created_at'], // تاريخ انضمام السائق 'total_seconds' => $seconds, 'active_time' => $human_time, 'days_active' => $row['days_worked'] // عدد الأيام التي عمل فيها خلال الـ 10 أيام ]; } // ================================================================= // 4. الحفظ والنشر 💾 // ================================================================= $output = [ "last_updated" => date('Y-m-d H:i:s'), "period_days" => $daysToLookBack, "total_drivers" => count($final_report), "data" => $final_report ]; saveJsonFile($savePath, $output); printSuccess("Report generated based on Daily Summary.", $savePath); } catch (Exception $e) { jsonError("Error: " . $e->getMessage()); } // --- دوال مساعدة --- function saveJsonFile($path, $data) { $json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); file_put_contents($path, $json); } ?>