Browse Source

同步中通路由信息

ANG YU 5 years ago
parent
commit
36c055fa40

+ 121 - 0
app/Jobs/LogisticZopSync.php

@@ -0,0 +1,121 @@
+<?php
+
+namespace App\Jobs;
+
+use App\library\zop\ZopClient;
+use App\library\zop\ZopProperties;
+use App\library\zop\ZopRequest;
+use App\Services\OrderPackageReceivedSyncService;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Support\Carbon;
+
+class LogisticZopSync implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $logistic_number;
+
+    /**
+     * Create a new job instance.
+     *
+     * @param $logistic_number
+     */
+    public function __construct($logistic_number)
+    {
+        $this->logistic_number = $logistic_number;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        //
+        ini_set('max_execution_time', 10);
+        sleep(12);
+        $zopResult = [];
+        $url = config('api_logistic.ZTO.url');
+        $xAppKey = config('api_logistic.ZTO.x-appKey');
+        $appSecret = config('api_logistic.ZTO.appSecret');
+        $properties = new ZopProperties($xAppKey, $appSecret);
+        $client = new ZopClient($properties);
+        $request = new ZopRequest();
+
+        $request->setUrl($url);
+        $request->setBody(json_encode([
+            'billCode' => $this->logistic_number,
+        ]));
+        $response = json_decode($client->execute($request));
+        if ($response->status) {
+            $zopResult[] = [
+                'routes' => $response->result,
+                'logisticNum' => $this->logistic_number,
+            ];
+        }
+        $result = $this->transformRoutes($zopResult);
+
+        /**
+         * @var $orderPackageReceivedSyncService OrderPackageReceivedSyncService
+         */
+        $orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
+        $orderPackageReceivedSyncService->update($result);
+    }
+
+    /**
+     * 转换快递路由信息
+     * @param array $routs 快递路由
+     * @return array
+     */
+    public function transformRoutes(array $routs): array
+    {
+        $result = [];
+        foreach ($routs as $route) {
+            $resultItem = [];
+            $resultItem['logistic_number'] = $route['logisticNum'];
+            $itemRoutes = $route['routes'];
+            if (empty($itemRoutes)) {
+                continue;
+            }
+            $lastRoute = $itemRoutes[count($itemRoutes) - 1];
+            switch ($lastRoute->scanType) {
+                case '收件':
+                    $resultItem['status'] = '已揽收';
+                    break;
+                case '到件':
+                case '发件':
+                    $resultItem['status'] = '在途';
+                    break;
+                case 'ARRIVAL':
+                case '派件':
+                    $resultItem['status'] = '派送中';
+                    break;
+                case 'SIGNED':
+                case '签收':
+                    $resultItem['status'] = '已收件';
+                    $resultItem['received_at'] = Carbon::parse($lastRoute->scanDate / 1000)->toDateTimeString();
+                    break;
+                default:
+                    break;
+            }
+            $transfer_status = [];
+            foreach ($itemRoutes as $item) {
+                $data = [];
+                $data['accept_time'] = Carbon::parse($item->scanDate / 1000)->toDateTimeString();
+                $scanSite = $item->scanSite;
+                $data['accept_address'] = $scanSite->prov . '-' . $scanSite->name;
+                $data['remark'] = $item->scanType;
+
+                $transfer_status[] = $data;
+            }
+            $resultItem['transfer_status'] = $transfer_status;
+            $result[] = $resultItem;
+        }
+        return $result;
+    }
+}

+ 3 - 2
app/Services/LogisticZopService.php

@@ -4,12 +4,10 @@
 namespace App\Services;
 namespace App\Services;
 
 
 
 
-use App\Exceptions\WarningException;
 use App\library\zop\ZopClient;
 use App\library\zop\ZopClient;
 use App\library\zop\ZopProperties;
 use App\library\zop\ZopProperties;
 use App\library\zop\ZopRequest;
 use App\library\zop\ZopRequest;
 use Carbon\Carbon;
 use Carbon\Carbon;
-use Tightenco\Collect\Support\Collection;
 
 
 class LogisticZopService
 class LogisticZopService
 {
 {
@@ -62,6 +60,9 @@ class LogisticZopService
             $resultItem = [];
             $resultItem = [];
             $resultItem['logistic_number'] = $route['logisticNum'];
             $resultItem['logistic_number'] = $route['logisticNum'];
             $itemRoutes = $route['routes'];
             $itemRoutes = $route['routes'];
+            if (empty($itemRoutes)) {
+                continue;
+            }
             $lastRoute = $itemRoutes[count($itemRoutes) - 1];
             $lastRoute = $itemRoutes[count($itemRoutes) - 1];
             switch ($lastRoute->scanType) {
             switch ($lastRoute->scanType) {
                 case '收件':
                 case '收件':

+ 9 - 7
app/Services/OrderPackageReceivedSyncService.php

@@ -4,6 +4,7 @@
 namespace App\Services;
 namespace App\Services;
 
 
 
 
+use App\Jobs\LogisticZopSync;
 use App\OrderPackage;
 use App\OrderPackage;
 use Carbon\Carbon;
 use Carbon\Carbon;
 use Exception;
 use Exception;
@@ -22,7 +23,13 @@ class OrderPackageReceivedSyncService
      */
      */
     public function syncLogisticRoute()
     public function syncLogisticRoute()
     {
     {
-        $this->update($this->getLogisticRoutes($this->getLogisticNumbers()));
+        $logisticNumbers = $this->getLogisticNumbers();
+        $this->update($this->getLogisticRoutes($logisticNumbers));
+        //更新中通
+        $ZTOLogisticNumbers = $logisticNumbers['ZTO'];
+        foreach ($ZTOLogisticNumbers as $logisticNumber) {
+            LogisticZopSync::dispatch($logisticNumber);
+        }
     }
     }
 
 
     /**
     /**
@@ -48,9 +55,7 @@ class OrderPackageReceivedSyncService
     public function getLogisticRoutes(array $request): array
     public function getLogisticRoutes(array $request): array
     {
     {
         $this->logisticSFService = new LogisticSFService();
         $this->logisticSFService = new LogisticSFService();
-        $this->logisticZopService = new LogisticZopService();
         $resultSF = [];
         $resultSF = [];
-        $resultZT = [];
         $resultYD = [];
         $resultYD = [];
         $resultYT = [];
         $resultYT = [];
         $resultOther = [];
         $resultOther = [];
@@ -59,9 +64,6 @@ class OrderPackageReceivedSyncService
                 case "SF":
                 case "SF":
                     $resultSF = $this->logisticSFService->get($logisticNums);
                     $resultSF = $this->logisticSFService->get($logisticNums);
                     break;
                     break;
-                case "ZTO":
-                    $resultZT = $this->logisticZopService->get($logisticNums);
-                    break;
                 case "YD":
                 case "YD":
                     $resultYD = [];
                     $resultYD = [];
                     break;
                     break;
@@ -73,7 +75,7 @@ class OrderPackageReceivedSyncService
                     break;
                     break;
             }
             }
         }
         }
-        return array_merge($resultSF, $resultYD, $resultYT, $resultZT, $resultOther);
+        return array_merge($resultSF, $resultYD, $resultYT, $resultOther);
     }
     }
 
 
     public function update(array $orderPackages)
     public function update(array $orderPackages)

+ 2 - 2
config/api_logistic.php

@@ -106,6 +106,6 @@ return [
         'x-appKey' => 'c51c718eb899e9f706979',
         'x-appKey' => 'c51c718eb899e9f706979',
         'appSecret' => '9f664e3ab08049874aa417720840161a',
         'appSecret' => '9f664e3ab08049874aa417720840161a',
     ],
     ],
-    'init_date' => '2021-03-19 23:59:59',
-    'days' => 7,
+    'init_date' => '2021-04-07 23:59:59',
+    'days' => 2,
 ];
 ];

+ 1 - 1
tests/Services/LogisticZopService/LogisticZopServiceTest.php

@@ -26,7 +26,7 @@ class LogisticZopServiceTest extends TestCase
      */
      */
     public function get_test()
     public function get_test()
     {
     {
-        $result = $this->logisticZopService->get(['73228022816494']);
+        $result = $this->logisticZopService->get(['75451837176537']);
         dd($result);
         dd($result);
     }
     }