File manager - Edit - /home/webapp69.cm.in.th/u69319090039/Shop39/public/app/Services/TrackingService.php
Back
<?php interface CarrierInterface { public function getCarrierName(): string; public function getCarrierCode(): string; public function getTrackingUrl(string $trackingNumber): string; } class ThailandPostCarrier implements CarrierInterface { public function getCarrierName(): string { return 'Thailand Post (ไปรษณีย์ไทย)'; } public function getCarrierCode(): string { return 'Thailand Post'; } public function getTrackingUrl(string $trackingNumber): string { return 'https://track.thailandpost.co.th/?trackNumber=' . urlencode($trackingNumber); } } class FlashExpressCarrier implements CarrierInterface { public function getCarrierName(): string { return 'Flash Express'; } public function getCarrierCode(): string { return 'Flash Express'; } public function getTrackingUrl(string $trackingNumber): string { return 'https://www.flashexpress.co.th/tracking/?se=' . urlencode($trackingNumber); } } class JTExpressCarrier implements CarrierInterface { public function getCarrierName(): string { return 'J&T Express'; } public function getCarrierCode(): string { return 'J&T Express'; } public function getTrackingUrl(string $trackingNumber): string { return 'https://www.jtexpress.co.th/index/query/gzquery.html?bill_code=' . urlencode($trackingNumber); } } class KerryExpressCarrier implements CarrierInterface { public function getCarrierName(): string { return 'Kerry / KEX Express'; } public function getCarrierCode(): string { return 'Kerry Express'; } public function getTrackingUrl(string $trackingNumber): string { return 'https://th.kerryexpress.com/th/track/?track=' . urlencode($trackingNumber); } } class GenericCarrier implements CarrierInterface { private string $name; public function __construct(string $name = 'Standard Shipping') { $this->name = $name; } public function getCarrierName(): string { return $this->name; } public function getCarrierCode(): string { return $this->name; } public function getTrackingUrl(string $trackingNumber): string { return '#'; } } class TrackingService { private static array $carriers = []; public static function registerCarrier(CarrierInterface $carrier): void { self::$carriers[strtolower($carrier->getCarrierCode())] = $carrier; } public static function getCarrier(string $carrierCode): CarrierInterface { $key = strtolower(trim($carrierCode)); if (isset(self::$carriers[$key])) { return self::$carriers[$key]; } return new GenericCarrier(!empty($carrierCode) ? $carrierCode : 'ขนส่งทั่วไป'); } public static function init(): void { self::registerCarrier(new ThailandPostCarrier()); self::registerCarrier(new FlashExpressCarrier()); self::registerCarrier(new JTExpressCarrier()); self::registerCarrier(new KerryExpressCarrier()); } public static function getTrackingInfo(int $orderId): array { $db = Database::getInstance(); // Fetch order details $stmt = $db->prepare("SELECT id, order_number, user_id, status, tracking_number, carrier FROM orders WHERE id = :oid LIMIT 1"); $stmt->execute(['oid' => $orderId]); $order = $stmt->fetch(); if (!$order) { return [ 'success' => false, 'message' => 'ไม่พบข้อมูลคำสั่งซื้อ' ]; } $trackingNumber = trim((string)($order['tracking_number'] ?? '')); if (empty($trackingNumber)) { return [ 'success' => true, 'has_tracking' => false, 'tracking_number' => null, 'carrier' => null, 'current_stage' => 0, 'events' => [], 'message' => 'ยังไม่มีหมายเลขติดตามพัสดุ' ]; } $carrierObj = self::getCarrier($order['carrier'] ?? 'Thailand Post'); // Fetch tracking logs from database $logStmt = $db->prepare("SELECT status_key, status_name, location, description, event_time FROM order_tracking_logs WHERE order_id = :oid ORDER BY event_time DESC, id DESC"); $logStmt->execute(['oid' => $orderId]); $logs = $logStmt->fetchAll(); // Calculate progress stage (1: รับเข้าระบบ, 2: ระหว่างขนส่ง, 3: กำลังนำจ่าย, 4: นำจ่ายสำเร็จ) $orderStatus = strtolower($order['status']); $currentStage = 1; $statusMessage = 'รับเข้าระบบ'; $isFailed = ($orderStatus === 'cancelled' || $orderStatus === 'failed' || $orderStatus === 'returned'); if ($orderStatus === 'delivered') { $currentStage = 4; $statusMessage = 'นำจ่ายสำเร็จ'; } elseif (!empty($logs)) { $latestKey = strtolower($logs[0]['status_key']); if (in_array($latestKey, ['delivered', 'success'])) { $currentStage = 4; $statusMessage = 'นำจ่ายสำเร็จ'; } elseif (in_array($latestKey, ['arriving', 'out_for_delivery'])) { $currentStage = 3; $statusMessage = 'กำลังนำจ่าย'; } elseif (in_array($latestKey, ['in_transit', 'transporting', 'accepted'])) { $currentStage = ($latestKey === 'accepted') ? 1 : 2; $statusMessage = $logs[0]['status_name']; } } elseif ($orderStatus === 'shipping') { $currentStage = 2; $statusMessage = 'อยู่ระหว่างการขนส่ง'; } $formattedEvents = []; foreach ($logs as $log) { $timestamp = strtotime($log['event_time']); $formattedEvents[] = [ 'date' => date('d/m/Y', $timestamp), 'time' => date('H:i', $timestamp) . ' น.', 'location' => $log['location'], 'status_name' => $log['status_name'], 'status_key' => $log['status_key'], 'description' => $log['description'] ]; } return [ 'success' => true, 'has_tracking' => true, 'tracking_number' => $trackingNumber, 'carrier_name' => $carrierObj->getCarrierName(), 'carrier_url' => $carrierObj->getTrackingUrl($trackingNumber), 'current_stage' => $currentStage, 'current_status_name' => $statusMessage, 'is_failed' => $isFailed, 'events' => $formattedEvents ]; } } TrackingService::init();
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.36 |
proxy
|
phpinfo
|
Settings