Initial commit with updated Auth and media ignored
This commit is contained in:
130
ride/location/getDriverTimeOnline.php
Executable file
130
ride/location/getDriverTimeOnline.php
Executable file
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
// getDriverTimeOnline.php
|
||||
// الغرض: توليد تقرير نشاط السائقين لآخر 10 أيام بناءً على الملخص اليومي
|
||||
|
||||
require_once __DIR__ . '/../../get_connect.php';
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
// إعدادات التقرير
|
||||
$daysToLookBack = 10; // عدد الأيام في الماضي
|
||||
$jsonFileName = 'active_drivers_cache.json';
|
||||
$savePath = __DIR__ . '/' . $jsonFileName;
|
||||
|
||||
try {
|
||||
// =================================================================
|
||||
// 1. جلب البيانات من جدول الملخصات (سيرفر اللوكيشن) ⚡
|
||||
// =================================================================
|
||||
// نجمع الثواني لكل سائق خلال الفترة المحددة
|
||||
|
||||
$sql_summary = "
|
||||
SELECT
|
||||
driver_id,
|
||||
SUM(total_seconds) as grand_total_seconds,
|
||||
COUNT(DISTINCT date) as days_worked -- (اختياري) معرفة عدد أيام العمل الفعلية
|
||||
FROM driver_daily_summary
|
||||
WHERE date >= 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);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user