130 lines
5.1 KiB
PHP
130 lines
5.1 KiB
PHP
<?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);
|
|
}
|
|
?>
|