Update: 2026-07-09 01:55:25
This commit is contained in:
@@ -116,4 +116,54 @@ function getCurrencyByCountry(string $countryCode): string {
|
||||
|
||||
return $currencies[$countryCode] ?? 'SYP'; // افتراضي: ليرة سورية
|
||||
}
|
||||
|
||||
/**
|
||||
* يقدّر مقدار زيادة أجرة السائق عندنا مقارنة بأقرب منافس لنفس الرحلة.
|
||||
* يعتمد على معاملات المنافس المخزّنة بـ Redis (يحدّثها cron_ai_engine.php
|
||||
* كل 3 ساعات على مفتاح pricing:driver_comparison:{country_code}) — لا يوجد
|
||||
* أي استعلام مباشر لقاعدة البيانات هنا لتفادي أي تأخير وقت إنشاء الرحلة.
|
||||
*
|
||||
* @return array|null ['extra' => float, 'currency' => string, 'competitor_name' => string]
|
||||
* أو null إذا ما في بيانات كافية أو الفرق مش مجدي يُعرض
|
||||
*/
|
||||
function estimateDriverEarningsAdvantage(
|
||||
string $countryCode,
|
||||
float $distanceKm,
|
||||
float $durationMin,
|
||||
float $ourDriverPrice,
|
||||
$redis
|
||||
): ?array {
|
||||
if (!$redis || $ourDriverPrice <= 0) return null;
|
||||
|
||||
try {
|
||||
$json = $redis->get("pricing:driver_comparison:{$countryCode}");
|
||||
} catch (Exception $e) {
|
||||
return null;
|
||||
}
|
||||
if (!$json) return null;
|
||||
|
||||
$data = json_decode($json, true);
|
||||
if (!is_array($data) || empty($data['competitor_name'])) return null;
|
||||
|
||||
$competitorFare = (float)($data['base_fare'] ?? 0)
|
||||
+ (float)($data['km_rate'] ?? 0) * $distanceKm
|
||||
+ (float)($data['min_rate'] ?? 0) * $durationMin;
|
||||
|
||||
if ($competitorFare <= 0) return null;
|
||||
|
||||
$commissionPct = (float)($data['commission_pct'] ?? 20.0);
|
||||
$competitorDriverPayout = $competitorFare * (1 - $commissionPct / 100);
|
||||
|
||||
$extra = round($ourDriverPrice - $competitorDriverPayout, 2);
|
||||
|
||||
// حد أدنى نسبي (3% من أجرة سائق المنافس) حتى ما نعرض فرق تافه أو غير موثوق
|
||||
$minMeaningful = $competitorDriverPayout * 0.03;
|
||||
if ($extra <= $minMeaningful) return null;
|
||||
|
||||
return [
|
||||
'extra' => $extra,
|
||||
'currency' => $data['currency'] ?? 'SYP',
|
||||
'competitor_name' => $data['competitor_name'],
|
||||
];
|
||||
}
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user