|
|
@@ -650,103 +650,124 @@ class IntraCityController extends BaseController
|
|
|
Yii::error('订单不存在.store_order_id: ' . $storeOrderId . ',wx_store_id: ' . $wxStoreId);
|
|
|
return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
|
|
|
}
|
|
|
- // 从 $storeOrderId 提取 orderId
|
|
|
- $arr = explode('_', $storeOrderId);
|
|
|
- $orderId = intval($arr[0]);
|
|
|
- if ($orderId == 0) {
|
|
|
- Yii::error('订单号为0. store_order_id: ' . $storeOrderId . ',wx_store_id: ' . $wxStoreId);
|
|
|
- return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
|
|
|
+ $orderId = $eo->orderId ?? 0;
|
|
|
+ if (empty($orderId)) {
|
|
|
+ $errRemind = '订单号为空,store_order_id: ' . $storeOrderId . ',wx_store_id: ' . $wxStoreId;
|
|
|
+ Yii::error($errRemind, 'intracity');
|
|
|
+ noticeUtil::push($errRemind, '15280215347');
|
|
|
+ return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误2']);
|
|
|
+ }
|
|
|
+ $order = OrderClass::getById($orderId, true, 'id,mainId,status,sendStatus');
|
|
|
+ if (empty($order)) {
|
|
|
+ $errRemind = '没有找到订单,store_order_id: ' . $storeOrderId . ',wx_store_id: ' . $wxStoreId;
|
|
|
+ Yii::error($errRemind, 'intracity');
|
|
|
+ noticeUtil::push($errRemind, '15280215347');
|
|
|
+ return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误3']);
|
|
|
}
|
|
|
+ $orderStatus = intval($callbackData['order_status']);
|
|
|
+
|
|
|
+ //同个配送单,同个状态的,5秒内不允许重复请求,重要勿删
|
|
|
+ $uniqueId = $storeOrderId . '_' . $orderStatus;
|
|
|
+ util::checkRepeatCommit($uniqueId, 5);
|
|
|
|
|
|
$tx = Yii::$app->db->beginTransaction(); // ====================== 开启事务
|
|
|
$msg = ''; // 发通知的内容(默认为空,根据情况生成。没有内容则不会发通知)
|
|
|
- $orderStatus = intval($callbackData['order_status']);
|
|
|
switch ($orderStatus) {
|
|
|
- // 订单创建成功
|
|
|
+ // 订单创建成功,已叫跑腿,等跑腿接单
|
|
|
case IntraCityExpress::ORDER_STATUS_CREATED:
|
|
|
- $eo->orderStatus = 1;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => 3, 'sendStatus' => 0]);
|
|
|
- break;
|
|
|
-
|
|
|
- // 商家取消订单
|
|
|
- case IntraCityExpress::ORDER_STATUS_CANCELED_BY_MERCHANT:
|
|
|
- $eo->orderStatus = 2;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|取消
|
|
|
- OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
- $msg = '取消配送,订单编号 ';
|
|
|
+ if ($order->status == 2) {
|
|
|
+ $eo->orderStatus = 1;
|
|
|
+ $eo->save();
|
|
|
+ $order->status = 3;
|
|
|
+ $order->sendStatus = 0;
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
break;
|
|
|
-
|
|
|
- // 配送方取消订单
|
|
|
- case IntraCityExpress::ORDER_STATUS_CANCELED_BY_DELIVERY:
|
|
|
- $eo->orderStatus = 3;
|
|
|
- $eo->status = 0;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|取消
|
|
|
- OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
- $msg = '配送方取消配送,订单编号 ';
|
|
|
- break;
|
|
|
-
|
|
|
// 配送员接单
|
|
|
case IntraCityExpress::ORDER_STATUS_ACCEPTED:
|
|
|
- $eo->orderStatus = 4;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => 3, 'sendStatus' => 1]); //订单创建时已执行了,这儿重复更新
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 4;
|
|
|
+ $eo->save();
|
|
|
+ $order->sendStatus = 1;
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
// 配送员到店
|
|
|
case IntraCityExpress::ORDER_STATUS_ARRIVED:
|
|
|
- $eo->orderStatus = 5;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => 3, 'sendStatus' => 4]); //订单创建时已执行了,这儿重复更新
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 5;
|
|
|
+ $eo->save();
|
|
|
+ $order->sendStatus = 4;
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
break;
|
|
|
-
|
|
|
// 配送中
|
|
|
case IntraCityExpress::ORDER_STATUS_DELIVERING:
|
|
|
- $eo->orderStatus = 6;
|
|
|
- OrderClass::updateById($orderId, ['sendStatus' => 5]);
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 6;
|
|
|
+ $eo->save();
|
|
|
+ $order->sendStatus = 5;
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // 配送完成
|
|
|
+ case IntraCityExpress::ORDER_STATUS_COMPLETED:
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 8;
|
|
|
+ $eo->save();
|
|
|
+ $order->status = 4;//配送完成
|
|
|
+ $order->sendStatus = 2;//配送完成
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ // 商家取消订单
|
|
|
+ case IntraCityExpress::ORDER_STATUS_CANCELED_BY_MERCHANT:
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 2;
|
|
|
+ $eo->save();
|
|
|
+ $order->status = 2;//取消配送
|
|
|
+ $order->sendStatus = 3;//取消配送
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
+ $msg = '取消配送,订单编号 ';
|
|
|
break;
|
|
|
-
|
|
|
// 配送员撤单
|
|
|
case IntraCityExpress::ORDER_STATUS_WITHDRAWN:
|
|
|
- $eo->orderStatus = 7;
|
|
|
- $eo->status = 0;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|未发货
|
|
|
- OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
+ //todo 配送员撤单,目前我们认为会重新派单,先不要有任何操作!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
$msg = '跑腿取消配送,订单编号 ';
|
|
|
break;
|
|
|
-
|
|
|
- // 配送完成
|
|
|
- case IntraCityExpress::ORDER_STATUS_COMPLETED:
|
|
|
- $eo->orderStatus = 8;
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 已完成|已送达
|
|
|
- OrderClass::updateById($orderId, ['status' => 4, 'sendStatus' => 2]);
|
|
|
+ // 配送方取消订单
|
|
|
+ case IntraCityExpress::ORDER_STATUS_CANCELED_BY_DELIVERY:
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 3;
|
|
|
+ $eo->status = 0;
|
|
|
+ $eo->save();
|
|
|
+ $order->status = 2;//取消配送
|
|
|
+ $order->sendStatus = 3;//取消配送
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
+ $msg = '配送方取消配送,订单编号 ';
|
|
|
break;
|
|
|
-
|
|
|
// 配送异常
|
|
|
case IntraCityExpress::ORDER_STATUS_EXCEPTION:
|
|
|
- $eo->orderStatus = 9;
|
|
|
- $eo->status = 0;
|
|
|
- noticeUtil::push('同城配送异常 --- store_order_id(orderId):' . $storeOrderId . ',wx_store_id:' . $wxStoreId);
|
|
|
- // 更新 xhOrder 表的订单状态与配送状态 -- 待配送|未发货
|
|
|
- OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
+ if ($order->status == 3) {
|
|
|
+ $eo->orderStatus = 9;
|
|
|
+ $eo->status = 0;
|
|
|
+ $eo->save();
|
|
|
+ $order->status = 2;//取消配送
|
|
|
+ $order->sendStatus = 3;//取消配送
|
|
|
+ $order->save();
|
|
|
+ }
|
|
|
$msg = '订单配送异常,订单编号 ';
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
- if ($msg != '') { // $msg 不为空,则发通知
|
|
|
+ if (empty($msg)) { // $msg 不为空,则发通知
|
|
|
$order = OrderClass::getById($orderId, true, 'id, shopId, customName, sendNum');
|
|
|
$shop = ShopClass::getById($order->shopId, true, 'id, ptStyle, mainId');
|
|
|
$result = $msg . $order->sendNum;
|
|
|
WxMessageClass::expressErrorInform($shop, $order->customName, $orderId, $result);
|
|
|
}
|
|
|
- $re = $eo->save();
|
|
|
- if (!$re) {
|
|
|
- noticeUtil::push('同城配送回调更新订单状态失败. store_order_id:' . $storeOrderId . ',wx_store_id:' . $wxStoreId . ',status:' . $eo->status);
|
|
|
- Yii::error('更新订单状态失败. store_order_id:' . $storeOrderId . ',wx_store_id:' . $wxStoreId . ',status:' . $eo->status);
|
|
|
- $tx->rollBack(); // ====================== 事务回滚
|
|
|
- return $this->asJson(['return_code' => 1, 'return_msg' => '系统错误']);
|
|
|
- }
|
|
|
-
|
|
|
$tx->commit(); // ====================== 事务提交
|
|
|
return $this->asJson(['return_code' => 0, 'return_msg' => 'OK']); // 成功状态的返回数据
|
|
|
} catch (\Exception $e) {
|