Просмотр исходного кода

1. 跑腿没有包邮,但是在小于 hsFreeKm 下免跑腿费 2. 配送订单详情查询完成(只剩 顺丰)

shizhongqi 8 месяцев назад
Родитель
Сommit
a3ad7beaaa

+ 1 - 1
app-mall/controllers/OrderController.php

@@ -524,7 +524,7 @@ class OrderController extends BaseController
             $sendDistance = 0;
             $sendCost = 0;
 
-            if ($goodsData['freightType'] == 0 && $sendType == dict::getDict('sendType', 'thirdSend')) {
+            if ($sendType == dict::getDict('sendType', 'thirdSend')) {
                 // if (dict::getDict('hasMap') == 0) {
                 //     util::fail('不能使用跑腿,请选其它方式');
                 // }

+ 56 - 1
common/components/delivery/services/DispatchService.php

@@ -3,7 +3,9 @@ namespace common\components\delivery\services;
 
 use biz\shop\classes\ShopClass;
 use bizGhs\express\classes\DeliveryAuthTokenClass;
+use bizGhs\express\classes\GhsDeliveryOrderClass;
 use bizGhs\order\classes\OrderItemClass;
+use bizHd\express\classes\HdDeliveryOrderClass;
 use common\components\delivery\helpers\HttpClient;
 use common\components\delivery\services\adapter\{DadaAdapter,
     Functions,
@@ -11,6 +13,7 @@ use common\components\delivery\services\adapter\{DadaAdapter,
     HuolalaAdapter,
     FengniaoAdapter,
     ShunfengAdapter}; // MeituanAdapter, DadaAdapter, UUAdapter,
+use common\components\util;
 use Yii;
 
 /**
@@ -120,12 +123,64 @@ class DispatchService
     public function selectOrder($orderId, $thirdOrderNo='')
     {
         $adapter = $this->getAdapter();
+
         if ($adapter instanceof ShansongAdapter) {
-            return $adapter->selectOrder($orderId, $thirdOrderNo);
+            $deliveryOrder = $this->getDeliveryOrder($orderId, 'shansong');
+            return $adapter->selectOrder($deliveryOrder['orderId'], $thirdOrderNo);
+        }
+        if ($adapter instanceof HuolalaAdapter) {
+            $deliveryOrder = $this->getDeliveryOrder($orderId, 'huolala');
+        //    if(isset($deliveryOrder->ghsOrderId)){ // 批发
+        //        $order = OrderClass::getById($deliveryOrder->ghsOrderId, true, 'id,sendType,sendStatus,deliveryId,purchaseId,customId,status');
+        //    }elseif(isset($deliveryOrder->hdOrderId)){ // 零售
+        //        $order = HdOrderClass::getById($deliveryOrder->hdOrderId, true, 'id,sendType,sendStatus,deliveryId,customId,status');
+        //    }
+            return $adapter->selectOrder($deliveryOrder['orderId']);
         }
+
+        if ($adapter instanceof FengniaoAdapter) {
+            //order_id 和 partner_order_code 必填一个
+            return $adapter->selectOrder(['order_id'=>$thirdOrderNo]);
+        }
+
+        if ($adapter instanceof ShunfengAdapter) {
+            return $adapter->selectOrder($orderId);
+        }
+
         return $adapter->selectOrder($orderId);
     }
 
+    /**
+     * 根据订单号查找配送订单
+     *
+     * @param string $orderId
+     * @return object|null
+     */
+    private function getDeliveryOrder($orderId, $deliveryId)
+    {
+        // 查找批发配送订单
+        $deliveryOrder = GhsDeliveryOrderClass::getByCondition([
+            'deliveryId' => $deliveryId,
+            'ghsOrderId' => $orderId
+        ], false, null, 'id,orderId');
+
+        if ($deliveryOrder) {
+            return $deliveryOrder;
+        }
+
+        // 查找零售配送订单
+        $deliveryOrder =  HdDeliveryOrderClass::getByCondition([
+            'deliveryId' => $deliveryId,
+            'hdOrderId' => $orderId
+        ], false, null, 'id,orderId');
+
+        if ($deliveryOrder) {
+            return $deliveryOrder;
+        }
+
+        util::fail('未找到对应的配送订单: ' . $orderId);
+    }
+
     public function cancelOrder($orderId, $reason)
     {
         $adapter = $this->getAdapter();

+ 6 - 2
common/components/delivery/services/adapter/ShansongAdapter.php

@@ -272,12 +272,16 @@ class ShansongAdapter extends Shansong implements Adapter
         if (isset($resp['status']) && $resp['status'] == 200 && isset($resp['data'])) {
             $respData = $resp['data'];
             return [
-                'platform' => 'shansong',
+                'code' => 0,
                 'data' => $respData
             ];
         }
 
-        return null;
+        return [
+            'code' => (int)($resp['200'] ?? -1),
+            'msg' => $resp['msg'] ?? 'Unknown error',
+            'data' => null
+        ];
     }
 
     public function cancelOrder($orderId)