Browse Source

快递鸟改传参

lizhen_gitee 2 months ago
parent
commit
0d648849a8

+ 3 - 1
addons/shopro/library/express/adapter/Kdniao.php

@@ -155,8 +155,10 @@ class Kdniao
         $params = [
             'ShipperCode' => $data['express_code'],
             'LogisticCode' => $data['express_no'],
-            'Callback' => $data['Callback'],
         ];
+        if(isset($data['Callback']) && !empty($data['Callback'])){
+            $params['Callback'] = $data['Callback'];
+        }
 
         if ($data['express_code'] == 'JD') {
             // 京东青龙配送单号

+ 38 - 1
addons/shopro/library/express/provider/Base.php

@@ -76,7 +76,7 @@ class Base implements ExpressInterface
      * @param mixed $orderExpress
      * @return array
      */
-    protected function updateExpress(array $data, $orderExpress) 
+    protected function updateExpress(array $data, $orderExpress)
     {
         // 更新包裹状态
         if (is_numeric($orderExpress)) {
@@ -89,6 +89,19 @@ class Base implements ExpressInterface
             $this->syncTraces($data['traces'], $orderExpress);
         }
     }
+    protected function updateAftersale(array $data, $orderExpress)
+    {
+        // 更新包裹状态
+        if (is_numeric($orderExpress)) {
+            $orderExpress = Aftersale::find($orderExpress);
+        }
+        if ($orderExpress) {
+            $orderExpress->express_status = $data['status'];
+            $orderExpress->save();
+
+            $this->syncTracesAftersale($data['traces'], $orderExpress);
+        }
+    }
 
 
     /**
@@ -122,4 +135,28 @@ class Base implements ExpressInterface
             $orderExpressLog->save();
         }
     }
+    protected function syncTracesAftersale($traces, $orderExpress)
+    {
+        // 查询现有轨迹记录
+        $orderExpressLog = AftersaleExpressLog::where('order_aftersale_id', $orderExpress->id)->select();
+
+        $log_count = count($orderExpressLog);
+        if ($log_count > 0) {
+            // 移除已经存在的记录
+            array_splice($traces, 0, $log_count);
+        }
+
+        // 增加包裹记录
+        foreach ($traces as $k => $trace) {
+            $orderExpressLog = new AftersaleExpressLog();
+
+            $orderExpressLog->user_id = $orderExpress['user_id'];
+            $orderExpressLog->order_id = $orderExpress['order_id'];
+            $orderExpressLog->order_aftersale_id = $orderExpress['id'];
+            $orderExpressLog->content = $trace['content'];
+            $orderExpressLog->change_date = $trace['change_date'];
+            $orderExpressLog->status = $trace['status'];
+            $orderExpressLog->save();
+        }
+    }
 }

+ 20 - 5
addons/shopro/library/express/provider/Kdniao.php

@@ -6,7 +6,7 @@ use think\Log;
 use think\exception\HttpResponseException;
 use addons\shopro\library\express\adapter\Kdniao as KdniaoServer;
 use app\admin\model\shopro\order\Express;
-use app\admin\model\shopro\order\ExpressLog;
+use app\admin\model\shopro\order\Aftersale;
 
 class Kdniao extends Base
 {
@@ -109,7 +109,14 @@ class Kdniao extends Base
             $expressData = $data['Data'];
 
             foreach ($expressData as $key => $express) {
-                $orderExpress = Express::where('express_no', $express['LogisticCode'])->where('express_code', $express['ShipperCode'])->find();
+                $Callback = (isset($express['Callback']) && !empty($express['Callback'])) ? $express['Callback'] : 'Express';
+                $Callback = $Callback == 'Express' ? 'Express' : 'Aftersale';
+
+                if($Callback == 'Express'){
+                    $orderExpress = Express::where('express_no', $express['LogisticCode'])->where('express_code', $express['ShipperCode'])->find();
+                }else{
+                    $orderExpress = Aftersale::where('express_no', $express['LogisticCode'])->where('express_code', $express['ShipperCode'])->find();
+                }
 
                 if (!$orderExpress) {
                     // 包裹不存在,记录日志信息,然后继续下一个
@@ -123,7 +130,8 @@ class Kdniao extends Base
                         // 需要重新订阅
                         $this->subscribe([
                             'express_code' => $express['ShipperCode'],
-                            'express_no' => $express['LogisticCode']
+                            'express_no' => $express['LogisticCode'],
+                            'Callback'   => $Callback,
                         ]);
                     }
 
@@ -140,7 +148,12 @@ class Kdniao extends Base
                     'traces' => $traces
                 ]);
 
-                $this->updateExpress($formatResult, $orderExpress);
+                if($Callback == 'Express'){
+                    $this->updateExpress($formatResult, $orderExpress);
+                }else{
+                    $this->updateAftersale($formatResult, $orderExpress);
+                }
+
             }
         } catch (HttpResponseException $e) {
             $data = $e->getResponse()->getData();
@@ -252,8 +265,10 @@ class Kdniao extends Base
             'express_code' => $data['express_code'] ?? '',
             'express_no' => $data['express_no'],
             'phone' => (isset($data['phone']) && $data['phone']) ? substr($data['phone'], 7) : '',
-            'Callback' => $data['Callback'],
         ];
+        if(isset($data['Callback']) && !empty($data['Callback'])){
+            $requestData['Callback'] = $data['Callback'];
+        }
 
         return $requestData;
     }