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

1. util::checkRepeatCommit()函数的参数统一使用平台的订单状态变量,不是转换后的订单状态
2. 查询配送订单的查询条件:由'orderStatus!=' => -1 变更为 'orderStatus' => ['not in', [-1, -2]]
3. 其它代码修改

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

+ 1 - 1
app-ghs/controllers/DeliveryController.php

@@ -425,7 +425,7 @@ class DeliveryController extends BaseController
         $post['order_cancel_role'] = 1; //1:商户取消, 2:用户取消
         $ret = $ds->cancelOrder($orderId, $post);
         if ($ret['code'] == 0) {
-            $ghsOrder = OrderClass::getById($ghsOrderId, true, 'id, sendDistance, sendStatus, deliveryId, purchaseId, status');
+            $ghsOrder = OrderClass::getById($ghsOrderId, true, 'id, sendDistance, sendStatus, deliveryId, purchaseId, status, purchaseId');
             $ghsOrder->sendDistance = 0;
 
             // 测试发现取消配送没回调的平台,统一在这主动更新配送状态

+ 1 - 1
app-ghs/models/delivery/CancelOrderForm.php

@@ -51,7 +51,7 @@ class CancelOrderForm extends BaseForm
         if (!$this->hasErrors()) {
             // 检查配送订单是否存在
             $gdo = GhsDeliveryOrderClass::getByCondition(
-                ['mainId' => Yii::$app->controller->mainId, 'ghsOrderId' => $this->ghsOrderId, 'orderStatus!=' => -1],
+                ['mainId' => Yii::$app->controller->mainId, 'ghsOrderId' => $this->ghsOrderId, 'orderStatus' => ['not in', [-1, -2]]],
                 false,
                 'orderId, deliveryId'
             );

+ 1 - 1
app-ghs/models/delivery/CancelReasonForm.php

@@ -41,7 +41,7 @@ class CancelReasonForm extends BaseForm
     {
         if (!$this->hasErrors()) {
             $gdo = GhsDeliveryOrderClass::getByCondition(
-                ['mainId' => Yii::$app->controller->mainId, 'ghsOrderId' => $this->ghsOrderId, 'orderStatus!=' => -1],
+                ['mainId' => Yii::$app->controller->mainId, 'ghsOrderId' => $this->ghsOrderId, 'orderStatus' => ['not in', [-1, -2]]],
                 false
             );
             

+ 5 - 0
app-hd/controllers/DeliveryController.php

@@ -2,6 +2,7 @@
 
 namespace hd\controllers;
 
+use biz\common\classes\HdNotifyClass;
 use Yii;
 use biz\ghs\classes\GhsClass;
 use bizGhs\custom\classes\CustomClass;
@@ -298,12 +299,16 @@ class DeliveryController extends BaseController
         if ($ret['code'] == 0) {
             $Order = OrderClass::getById($hdOrderId, true, 'id, sendDistance, sendStatus, deliveryId');
             $Order->sendDistance = 0;
+
             if(in_array($platform, ['shunfeng'])){ // 测试发现取消配送没回调的平台,统一在这主动更新配送状态
                 $Order->sendStatus = -1;
 
                 // 更新跑腿订单与批发订单状态
                 $hdo->orderStatus = -1;
+
+                HdNotifyClass::ptErrorNotify($Order->id, '商家主动取消');
             }
+
             $hdo->cancelCost = $ret['platform'] !== 'fengniao' ? $ret['data']['deductionFee'] : $cancelCostCent; // 由于蜂鸟平台返回的扣费不一样造成
             if (!$hdo->save()) {
                 Yii::error('保存配送订单失败: ' . json_encode($hdo->errors));

+ 4 - 4
common/components/delivery/platform/dada/CallBackHandler.php

@@ -91,7 +91,7 @@ class CallBackHandler
 
         // 更新主订单
         if ($isGhs) {
-            util::checkRepeatCommit('ghs_pt_' . $order->id . '_' . $sendStatus, 2);
+            util::checkRepeatCommit('ghs_pt_' . $order->id . '_' . $dadaStatus, 2);
             //$order = OrderClass::getById($order->id, true, 'id,sendType,sendStatus,deliveryId,purchaseId,customId,status');
             
             if ($order) {
@@ -120,7 +120,7 @@ class CallBackHandler
             }
         } else {
              // 零售订单处理
-            util::checkRepeatCommit('hd_pt_' . $order->id . '_' . $sendStatus, 2);
+            util::checkRepeatCommit('hd_pt_' . $order->id . '_' . $dadaStatus, 2);
             //$order = HdOrderClass::getById($order->id, true, 'id,sendType,sendStatus,deliveryId,customId,status');
             // 取消/异常 (且当前状态未取消)
             if (!in_array($order->sendStatus, [-2, -1]) && in_array($sendStatus, [-1, -2])) {
@@ -169,7 +169,7 @@ class CallBackHandler
              $gdos = GhsDeliveryOrderClass::getAllByCondition([
                 'deliveryId' => 'dada',
                 'ghsOrderId' => $order->id,
-                'orderStatus!=' => -1
+                'orderStatus' => ['not in', [-1, -2]],
             ], 'id DESC', '*', null, true);
             if(count($gdos)>=2){
                 noticeUtil::push("xhGhsDeliveryOrder ghsOrderId={$order->id} 有两笔以上是在配送中");
@@ -184,7 +184,7 @@ class CallBackHandler
             $hdos = HdDeliveryOrderClass::getAllByCondition([
                 'deliveryId' => 'dada',
                 'hdOrderId' => $order->id,
-                'orderStatus!=' => -1
+                'orderStatus' => ['not in', [-1, -2]],
             ], 'id DESC', '*', null, true);
             if(count($hdos)>=2){
                 noticeUtil::push("xhHdDeliveryOrder hdOrderId={$order->id} 有两笔以上是在配送中");

+ 7 - 10
common/components/delivery/platform/didi/CallBackHandler.php

@@ -180,7 +180,6 @@ class CallBackHandler
         // 查找主订单 (假设 outOrderNo 为 orderSn)
         $order = OrderClass::getByCondition(['orderSn' => $outOrderNo], true);
         $isGhs = true;
-
         if (!$order) {
             $order = HdOrderClass::getByCondition(['orderSn' => $outOrderNo], true);
             $isGhs = false;
@@ -205,19 +204,17 @@ class CallBackHandler
         }
 
         $sendStatus = $this->convertOrderSendStatus($didiStatus);
-        
         // 如果状态无法映射,则忽略
         if ($sendStatus === null) {
             return true; 
         }
-
         // 更新配送订单状态
         $deliveryOrder->orderStatus = $sendStatus;
         $deliveryOrder->save();
 
         // 更新主订单
         if ($isGhs) {
-            util::checkRepeatCommit('ghs_pt_' . $order->id . '_' . $sendStatus, 2);
+            util::checkRepeatCommit('ghs_pt_' . $order->id . '_' . $didiStatus, 2);
             
             if ($order) {
                 // 已送达
@@ -247,7 +244,7 @@ class CallBackHandler
             }
         } else {
              // 零售订单处理
-            util::checkRepeatCommit('hd_pt_' . $order->id . '_' . $sendStatus, 2);
+            util::checkRepeatCommit('hd_pt_' . $order->id . '_' . $didiStatus, 2);
             
             if (!in_array($order->sendStatus, [-2, -1]) && in_array($sendStatus, [-1, -2])) {
                 $event = $this->cancelFrom($data);
@@ -274,7 +271,7 @@ class CallBackHandler
              $gdos = GhsDeliveryOrderClass::getAllByCondition([
                 'deliveryId' => 'didi',
                 'ghsOrderId' => $order->id,
-                'orderStatus!=' => -1
+                'orderStatus' => ['not in', [-1, -2]],
             ], 'id DESC', '*', null, true);
             if(count($gdos)>=2){
                 noticeUtil::push("xhGhsDeliveryOrder ghsOrderId={$order->id} 有两笔以上是在配送中");
@@ -311,8 +308,8 @@ class CallBackHandler
             'ARRIVED_FROM_ADDRESS' => 20, // 到达起点 -> 已分配骑手(或30骑手已到店)
             'LEAVE_FROM_ADDRESS' => 4,  // 已取货 -> 配送中
             'ARRIVED_TO_ADDRESS' => 4,  // 到达终点 -> 配送中
-            'SERVICE_FINISH' => 5,      // 已送达
-            'SUBMIT_CHARGE' => 5,       // 费用提交 -> 已送达
+            'SERVICE_FINISH' => 4,      //
+            'SUBMIT_CHARGE' => 4,       //
             'COMPLETED' => 5,           // 已完成 -> 已送达
             'CANCEL' => -1,             // 已取消
         ];
@@ -329,8 +326,8 @@ class CallBackHandler
              'ARRIVED_FROM_ADDRESS' => 3,
              'LEAVE_FROM_ADDRESS' => 3,
              'ARRIVED_TO_ADDRESS' => 3,
-             'SERVICE_FINISH' => 4,
-             'SUBMIT_CHARGE' => 4,
+             //'SERVICE_FINISH' => 4,
+             //'SUBMIT_CHARGE' => 4,
              'COMPLETED' => 4,
          ];
          return isset($map[$didiStatus]) ? $map[$didiStatus] : null;

+ 2 - 2
common/components/delivery/platform/fengniao/CallBackNotify.php

@@ -61,7 +61,7 @@ class CallBackNotify
         $orderStatus = OrderStatusUtil::convertStatus($data['order_status']);
 
         if(isset($deliveryOrder->ghsOrderId)){ // 批发
-            util::checkRepeatCommit('ghs_pt_'.$deliveryOrder->ghsOrderId.'_'.$sendStatus, 2); // 防止重复回调
+            util::checkRepeatCommit('ghs_pt_'.$deliveryOrder->ghsOrderId.'_'.$data['order_status'], 2); // 防止重复回调
 
             $order = OrderClass::getById($deliveryOrder->ghsOrderId, true, 'id,sendType,sendStatus,deliveryId,purchaseId,customId,status');
             // 确认送达或取消订单,更新主订单状态
@@ -83,7 +83,7 @@ class CallBackNotify
             $order->status = $orderStatus;
             $order->save();
         }elseif(isset($deliveryOrder->hdOrderId)){ // 零售
-            util::checkRepeatCommit('hd_pt_'.$deliveryOrder->hdOrderId.'_'.$sendStatus, 2); // 防止重复回调
+            util::checkRepeatCommit('hd_pt_'.$deliveryOrder->hdOrderId.'_'.$data['order_status'], 2); // 防止重复回调
 
             $order = HdOrderClass::getById($deliveryOrder->hdOrderId, true, 'id,sendType,sendStatus,deliveryId,customId,status');
             if (!in_array($order->sendStatus, [-2, -1]) && ($sendStatus == -1 || $sendStatus == -2)) {

+ 2 - 2
common/components/delivery/platform/huolala/CallBackHandler.php

@@ -63,7 +63,7 @@ class CallBackHandler
 
 
             if(isset($deliveryOrder->ghsOrderId)){ // 批发
-                util::checkRepeatCommit('ghs_pt_'.$deliveryOrder->ghsOrderId.'_'.$sendStatus, 2); // 防止重复回调
+                util::checkRepeatCommit('ghs_pt_'.$deliveryOrder->ghsOrderId.'_'.$eventType, 2); // 防止重复回调
 
                 $order = OrderClass::getById($deliveryOrder->ghsOrderId, true, 'id,sendStatus,deliveryId,purchaseId,customId,status');
                 if ($order) {
@@ -91,7 +91,7 @@ class CallBackHandler
                     Yii::warning('未找到主订单: ghsOrderId=' . $deliveryOrder->ghsOrderId, 'huolala-callback');
                 }
             }elseif(isset($deliveryOrder->hdOrderId)){ // 零售
-                util::checkRepeatCommit('hd_pt_'.$deliveryOrder->hdOrderId.'_'.$sendStatus, 2); // 防止重复回调
+                util::checkRepeatCommit('hd_pt_'.$deliveryOrder->hdOrderId.'_'.$eventType, 2); // 防止重复回调
 
                 $order = HdOrderClass::getById($deliveryOrder->hdOrderId, true, 'id,sendType,sendStatus,deliveryId,customId,status');
                 if ($order) {

+ 2 - 2
common/components/delivery/platform/shansong/OrderStatusCallBack.php

@@ -64,7 +64,7 @@ class OrderStatusCallBack
             // 区分类别,然后更新主订单状态
             if(isset($deliveryOrder->ghsOrderId)){ // 批发
                 $type = '批发';
-                util::checkRepeatCommit('ghs_pt_'.$deliveryOrder->ghsOrderId.'_'.$sendStatus, 2);// 防止重复回调
+                util::checkRepeatCommit('ghs_pt_'.$deliveryOrder->ghsOrderId.'_'.$data['status'].'_'.$subStatus, 2);// 防止重复回调
                 $order = OrderClass::getById($deliveryOrder->ghsOrderId, true, 'id,sendType,sendStatus,deliveryId,purchaseId,customId,status');
 
                 if ($order) {
@@ -89,7 +89,7 @@ class OrderStatusCallBack
                 }
             }elseif(isset($deliveryOrder->hdOrderId)){ // 零售
                 $type = '零售';
-                util::checkRepeatCommit('hd_pt_'.$deliveryOrder->hdOrderId.'_'.$sendStatus, 2);// 防止重复回调
+                util::checkRepeatCommit('hd_pt_'.$deliveryOrder->hdOrderId.'_'.$data['status'].'_'.$subStatus, 2);// 防止重复回调
                 $order = HdOrderClass::getById($deliveryOrder->hdOrderId, true, 'id,sendType,sendStatus,deliveryId,customId,status');
                 $order->status = $orderStatus;
 

+ 2 - 2
common/components/delivery/platform/shunfeng/CallBackHandler.php

@@ -125,7 +125,7 @@ class CallBackHandler
 
         // 更新主订单
         if (isset($deliveryOrder->ghsOrderId)) { // 批发
-            util::checkRepeatCommit('ghs_pt_' . $deliveryOrder->ghsOrderId . '_' . $sendStatus, 2);
+            util::checkRepeatCommit('ghs_pt_' . $deliveryOrder->ghsOrderId . '_' . $data['order_status'], 2);
             $order = OrderClass::getById($deliveryOrder->ghsOrderId, true, 'id,sendType,sendStatus,deliveryId,purchaseId,customId,status');
             if ($order) {
                 if ($extraHandler) {
@@ -141,7 +141,7 @@ class CallBackHandler
                 $order->save();
             }
         } elseif (isset($deliveryOrder->hdOrderId)) { // 零售
-            util::checkRepeatCommit('hd_pt_' . $deliveryOrder->hdOrderId . '_' . $sendStatus, 2);
+            util::checkRepeatCommit('hd_pt_' . $deliveryOrder->hdOrderId . '_' . $data['order_status'], 2);
             $order = HdOrderClass::getById($deliveryOrder->hdOrderId, true, 'id,sendType,sendStatus,deliveryId,customId,status');
             if ($order) {
                 if ($extraHandler) {