Przeglądaj źródła

圆通同步快递接口调整

hu hao 4 lat temu
rodzic
commit
5cbf31fa19

+ 1 - 0
app/Console/Commands/SyncOrderPackageLogisticRouteTask.php

@@ -46,6 +46,7 @@ class SyncOrderPackageLogisticRouteTask extends Command
         LogService::log(SyncOrderPackageLogisticRouteTask::class, "同步快递信息定时任务启动", '');
         ini_set('memory_limit', '2226M');
         $this->service = app('OrderPackageReceivedSyncService');
+        $this->service->syncLogisticRouteYTO();
         $this->service->syncLogisticRouteByAliJiSu();
         $this->service->syncLogisticRoute();
     }

+ 5 - 9
app/Jobs/LogisticYTOSync.php

@@ -2,7 +2,6 @@
 
 namespace App\Jobs;
 
-use App\Services\LogisticYDService;
 use App\Services\LogisticYTOService;
 use App\Services\LogService;
 use App\Services\OrderPackageReceivedSyncService;
@@ -14,9 +13,6 @@ use Illuminate\Queue\SerializesModels;
 
 class LogisticYTOSync implements ShouldQueue
 {
-    public $tries = 2;
-    public $timeout = 10;
-
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
     /**
@@ -48,13 +44,13 @@ class LogisticYTOSync implements ShouldQueue
     {
         LogService::log(LogisticYTOSync::class, "JOB-YTO", $this->logistic_number);
         $this->logisticYTOService = app('LogisticYTOService');
+        $this->orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
         $nativeResponse = $this->logisticYTOService->query($this->logistic_number);
         $formattedData = $this->logisticYTOService->format($nativeResponse,$this->logistic_number);
-        $this->orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
-        if (count($formattedData)>0 && $formattedData['logistic_number']??false){
-            $this->orderPackageReceivedSyncService->update([$formattedData]);
-        }else{
-            LogService::log(LogisticYTOService::class, "YTO快递无快递单号异常", $formattedData);
+        try {
+            if ($formattedData && isset($formattedData['logistic_number'])) $this->orderPackageReceivedSyncService->update([$formattedData]);
+        } catch (\Exception $e) {
+            LogService::log(LogisticYTOService::class, "YTO快递无快递单号异常", json_encode($formattedData));
         }
     }
 }

+ 7 - 4
app/Services/LogisticYTOService.php

@@ -2,10 +2,9 @@
 
 namespace App\Services;
 
-use App\OrderPackage;
+
 use App\Traits\ServiceAppAop;
 use Carbon\Carbon;
-use Doctrine\DBAL\Connection;
 use Illuminate\Support\Facades\Http;
 
 class LogisticYTOService
@@ -56,7 +55,12 @@ class LogisticYTOService
             try {
                 if (is_array($response))$result['logistic_number'] = $response[0]->waybill_No;
             } catch (\Exception $e) {
-                LogService::log(LogisticYTOService::class, "YTO快递信息异常", $response);
+                LogService::log(LogisticYTOService::class, "YTO快递信息异常", $logistic_number);
+                return [
+                    'logistic_number' => $logistic_number,
+                    'exception_type' => '其他',
+                    'exception' => '是',
+                ];
             }
             if (!empty($response) && is_array($response)) {
                 $lastNativeRoute = $response[count($response) - 1];
@@ -68,7 +72,6 @@ class LogisticYTOService
                 $exceptionData = $orderPackageReceivedSyncService->setExceptionType($result, $lastNativeRoute ? $lastNativeRoute->upload_Time : null);
                 $result['exception_type'] = $exceptionData['exception_type'];
                 $result['exception'] = $exceptionData['exception'];
-
             } else {
                 $result['status'] = null;
                 $result['transfer_status'] = [];

+ 27 - 8
app/Services/OrderPackageReceivedSyncService.php

@@ -71,20 +71,19 @@ class OrderPackageReceivedSyncService
                 }
             }
             //更新圆通
-            if (array_key_exists('YTO', $logisticNumbers)) {
-                $YTOLogisticNumbers = $logisticNumbers['YTO'];
-                LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法-YTO", $YTOLogisticNumbers);
-                foreach ($YTOLogisticNumbers as $logistic_number) {
-                    LogisticYTOSync::dispatch($logistic_number);
-                }
-            }
+//            if (array_key_exists('YTO', $logisticNumbers)) {
+//                $YTOLogisticNumbers = $logisticNumbers['YTO'];
+//                LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法-YTO", $YTOLogisticNumbers);
+//                foreach ($YTOLogisticNumbers as $logistic_number) {
+//                    LogisticYTOSync::dispatch($logistic_number);
+//                }
+//            }
         });
     }
 
     public function syncLogisticRouteByAliJiSu()
     {
         ini_set('max_execution_time', 2 * 60 * 60);
-        LogService::log(OrderPackageReceivedSyncService::class, "阿里同步快递信息定时方法", '');
         $query = OrderPackage::query()
             ->select(['logistic_number', 'order_id'])
             ->whereIn('order_id',function ($query){
@@ -95,6 +94,7 @@ class OrderPackageReceivedSyncService
         $query = $query->where('sent_at', '>=', now()->subDays(20))
             ->whereNull('received_at');
         $query->chunk(200, function ($orderPackages) {
+            LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法-阿里公用接口", json_encode($orderPackages));
             foreach ($orderPackages as $orderPackage){
                 if ($orderPackage && $orderPackage->logistic_number)LogisticAliJiSuSync::dispatch($orderPackage->logistic_number);
             }
@@ -113,11 +113,30 @@ class OrderPackageReceivedSyncService
         $query = $query->where('created_at', '>=', now()->subDays(20))
             ->whereNull('received_at')->where('logistic_number','like','JD%');
         $query->chunk(200, function ($orderPackages) {
+            LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法-JD", json_encode($orderPackages));
             foreach ($orderPackages as $orderPackage){
                 if ($orderPackage && $orderPackage->logistic_number)LogisticAliJiSuSync::dispatch($orderPackage->logistic_number);
             }
         });
     }
+    public function syncLogisticRouteYTO(){
+        ini_set('max_execution_time', 120);
+        $query = OrderPackage::query()
+            ->select(['logistic_number', 'order_id'])
+            ->whereIn('order_id',function ($query){
+                $query->from('orders')->selectRaw('id')->whereIn('logistic_id',function ($builder){
+                    $builder->from('logistics')->selectRaw('id')->where('type','!=','物流')->where('belong_company','圆通');
+                });
+            });
+        $query = $query->where('sent_at', '>=', now()->subDays(20))
+            ->whereNull('received_at');
+        $query->chunk(1000, function ($orderPackages) {
+            LogService::log(OrderPackageReceivedSyncService::class, "同步快递信息定时方法-YTO", json_encode($orderPackages));
+            foreach ($orderPackages as $orderPackage){
+                if ($orderPackage && $orderPackage->logistic_number)LogisticYTOSync::dispatch($orderPackage->logistic_number);
+            }
+        });
+    }
     /**
      * 根据传递的承运商与快递单号更新快递信息
      * @param array $logisticNumbers 快递单号

+ 2 - 2
tests/Services/LogisticYTOService/FormatTest.php

@@ -28,11 +28,11 @@ class FormatTest extends TestCase
      */
     public function format_test()
     {
-        $response=$this->service->query('YT5481469185320');
+        $response=$this->service->query('YT5555835896970');
         if (is_object($response))$this->assertEquals('1001', $response->code);
         if (!is_object($response)){
             $this->assertNotEmpty($response);
-            $result = $this->service->format($response);
+            $result = $this->service->format($response,'YT5555835896970');
             $this->assertNotEmpty($result);
         }