瀏覽代碼

跑腿配送时间确认与修改

shizhongqi 8 月之前
父節點
當前提交
19dbdf3c47

+ 22 - 10
common/components/delivery/services/DispatchService.php

@@ -223,7 +223,7 @@ class DispatchService
     public function getAllPlatformPrice($order, $shop, $orderTime)
     {
         // 第一步:准备前置数据(同步进行,因为某些平台需要这些数据)
-        $preparedData = $this->preparePlatformData($order, $shop);
+        $preparedData = $this->preparePlatformData($order, $shop, $orderTime);
 
         if (empty($preparedData)) {
             return ['error' => '所有平台数据准备失败'];
@@ -250,7 +250,7 @@ class DispatchService
      * @param array $shop 店铺信息
      * @return array 各平台的订单数据
      */
-    private function preparePlatformData($order, $shop)
+    private function preparePlatformData($order, $shop, $orderTime)
     {
         $preparedData = [];
 
@@ -278,7 +278,7 @@ class DispatchService
         // 准备 Shansong 数据
         if (isset($this->adapters['shansong'])) {
             try {
-                $preparedData['shansong'] = $this->prepareShansongData($order, $shop);
+                $preparedData['shansong'] = $this->prepareShansongData($order, $shop, $orderTime);
             } catch (\Exception $e) {
                 Yii::warning("Shansong 数据准备失败: {$e->getMessage()}");
             }
@@ -433,9 +433,9 @@ class DispatchService
     /**
      * 准备闪送订单数据
      */
-    private function prepareShansongData($order, $shop)
+    private function prepareShansongData($order, $shop, $orderTime)
     {
-        return [
+        $data = [
             'platform' => 'shansong',
             'cityName' => $shop['city'],
             'sender' => [
@@ -455,21 +455,33 @@ class DispatchService
                     'toMobile' => Functions::getMobile($order),
                     'toLatitude' => (float)$order['lat'],
                     'toLongitude' => (float)$order['long'],
-                    'goodType' => 7,
+                    'goodType' => 7, //鲜花
                     'weight' => (int)round($order['weight']),
                     'remarks' => $order['remark'] ?? '',
                 ]
             ],
-            'appointType' => 0,
-            'appointmentDate' => '',
+            'appointType' => 0, //预约类型: 0立即单,1预约单
             'travelWay' => 0,
             'deliveryType' => 1,
-            'expectStartTime' => null,
-            'expectEndTime' => null,
 
             //补充额外的订单数据
             'sendNum' => $order['sendNum'],
         ];
+
+        // appointmentDate 预约时间
+        // yyyy-MM-dd HH:mm格式(例如:2020-02-02 22:00),指的是预约取件时间,只支持一个小时以后两天以内
+        $timestamp = strtotime($orderTime);
+        if($timestamp > time() + 3600){
+            $data['appointType'] = 1; // 修改预约类型
+            $data['appointmentDate'] = $orderTime;
+
+            // 'expectStartTime' 期望送达时间起始时间  -- 毫秒级时间戳。期望送达时间为时间点时,无需传本参数;期望送达时间为时间段时,期望送达时间为expectStartTime至expectEndTime
+            // 'expectEndTime'  期望送达时间终止时间 -- 毫秒级时间戳。期望送达时间为时间点时,只需传本参数;期望送达时间为时间段时,期望送达时间为expectStartTime至expectEndTime
+            $data['expectStartTime'] = ($timestamp + 900) * 1000;
+            $data['expectEndTime'] = ($timestamp + 1800) * 1000;
+        }
+
+        return $data;
     }
 
     /**

+ 8 - 2
common/components/delivery/services/adapter/FengniaoAdapter.php

@@ -124,7 +124,11 @@ class FengniaoAdapter extends Fengniao implements Adapter
             'serial_number' => $order['sendNum'] // 配送编号,方便寻找订单对应的花材
         ];
         if($orderType == 3) {
-            $orderData['require_receive_time'] = strtotime($params['pickupTime']) * 1000;
+            // 预计出餐时间	单位:毫秒 -- 预约单该字段必填
+            $orderData['expect_fetch_time'] = strtotime($params['pickupTime']) * 1000;
+
+            // 需要送达时间 = 取件时间 + 30分钟
+            $orderData['require_receive_time'] = (strtotime($params['pickupTime']) + 1800) * 1000;
         }
 
         return $orderData;
@@ -303,6 +307,7 @@ class FengniaoAdapter extends Fengniao implements Adapter
         if (!empty($data['require_receive_time'])) {
             $businessData['require_receive_time'] = $data['require_receive_time'];
         }
+        // 预计出餐时间	单位:毫秒 预约单该字段必填
         if (!empty($data['expect_fetch_time'])) {
             $businessData['expect_fetch_time'] = (int)$data['expect_fetch_time'];
         }
@@ -494,7 +499,8 @@ class FengniaoAdapter extends Fengniao implements Adapter
         if (!empty($data['order_add_time'])) {
             $businessData['order_add_time'] = (int)$data['order_add_time'];
         }
-        if ($orderType == 3) { // 订单类型为预约单时必传,如需要送达时间 –---  推单时间 < 60min,则蜂鸟配送开放平台自动将订单类型置为即时单
+        // 订单类型为预约单时必传,如需要送达时间 –---  推单时间 < 60min,则蜂鸟配送开放平台自动将订单类型置为即时单
+        if ($orderType == 3) {
             $businessData['require_receive_time'] = strtotime($orderTime)*1000;
         }
 

+ 1 - 1
common/components/delivery/services/adapter/HuolalaAdapter.php

@@ -194,7 +194,7 @@ class HuolalaAdapter extends Huolala implements Adapter
     {
         //用车时间 -- 用车时间(unix时间戳:秒)。 取值范围:(当前时间+10分钟)<=用车时间<=(当前时间+5天)
         $orderTime = strtotime($params['pickupTime']);
-        if($orderTime < (time()+600)) {
+        if($orderTime < (time()+600) ) {
             $orderTime = time() + 600;
         }
         $cityId = $params['city_id'];

+ 1 - 1
common/components/delivery/services/adapter/ShunfengAdapter.php

@@ -137,9 +137,9 @@ class ShunfengAdapter extends Shunfeng implements Adapter
         // 用户期望上门时间 --  expect_pickup_time
         $expectPickupTime = isset($params['pickupTime']) ? strtotime($params['pickupTime']) : time();
         if($expectPickupTime > time() + 3600){ // 用户期望上门时间大于当前时间+1小时,则认为是预约单
+            $data['is_appoint'] = 1; // 是否预约单(0:非预约单)-- 修改为预约单
             $data['appoint_type'] = 2;
             $data['expect_pickup_time'] = $expectPickupTime;
-            $data['is_appoint'] = 1; // 是否预约单(0:非预约单)-- 修改为预约单
         }
 
         return $data;