first commit

This commit is contained in:
Hamza-Ayed
2026-06-09 08:40:31 +03:00
commit d8901e1a87
3161 changed files with 536187 additions and 0 deletions

View 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);
}
?>