|
|
@@ -328,22 +328,19 @@ class IntraCityController extends BaseController
|
|
|
$field = 'mainId, status, sendStatus, repeat, forward, orderSn, userId, actPrice, sendNum';
|
|
|
$order = OrderClass::getById($orderId, false, $field);
|
|
|
if (empty($order)) {
|
|
|
- util::fail('订单出错');
|
|
|
+ util::fail('没有找到订单');
|
|
|
}
|
|
|
if ($order['mainId'] != $this->mainId) {
|
|
|
- util::fail('订单出错');
|
|
|
+ util::fail('不是你的订单');
|
|
|
}
|
|
|
// 不能创建配送的几种订单状态
|
|
|
- $notCanCreateStatus = [OrderClass::ORDER_STATUS_UN_PAY, OrderClass::ORDER_STATUS_SENDING, OrderClass::ORDER_STATUS_COMPLETE, OrderClass::ORDER_HAD_REFUND];
|
|
|
- if (in_array($order['status'], $notCanCreateStatus)) {
|
|
|
- Yii::error('订单号:' . $orderId . ' 的状态是 ' . $order['status'] . ',不允许创建配送');
|
|
|
- util::fail('当前订单状态无法创建配送');
|
|
|
+ if ($order['status'] != 2) {
|
|
|
+ util::fail('不能叫跑腿,请刷新页面哈');
|
|
|
}
|
|
|
// 不能创建配送的几种配送状态
|
|
|
- $notCanCreateSendStatus = [OrderClass::SEND_STATUS_SENDING, OrderClass::SEND_STATUS_COMPLETED];
|
|
|
- if (in_array($order['sendStatus'], $notCanCreateSendStatus)) {
|
|
|
- Yii::error('订单号:' . $orderId . ' 的配送状态是 ' . $order['sendStatus'] . ',不允许重复创建配送');
|
|
|
- util::fail('当前订单配送状态无法创建配送');
|
|
|
+ $notCanCreateSendStatus = [-1, 3];
|
|
|
+ if (!in_array($order['sendStatus'], $notCanCreateSendStatus)) {
|
|
|
+ util::fail('不能叫跑腿,请刷新页面');
|
|
|
}
|
|
|
if ($order['repeat'] == 1) {
|
|
|
util::fail('收款码订单不支持跑腿');
|
|
|
@@ -403,8 +400,11 @@ class IntraCityController extends BaseController
|
|
|
// 通过 userId 获取 openid(小程序OpenId)
|
|
|
$user = UserClass::getById($order['userId'], false, 'id, miniOpenId');
|
|
|
if (empty($user)) {
|
|
|
- Yii::error('获取用户openId出错');
|
|
|
- util::fail('数据出错');
|
|
|
+ util::fail('用户信息缺失');
|
|
|
+ }
|
|
|
+ $miniOpenId = $user['miniOpenId'] ?? '';
|
|
|
+ if (empty($miniOpenId)) {
|
|
|
+ util::fail('没有找到用户的微信数据');
|
|
|
}
|
|
|
|
|
|
$cargo = [
|
|
|
@@ -436,7 +436,7 @@ class IntraCityController extends BaseController
|
|
|
$orderData = [
|
|
|
'wx_store_id' => $shopExt['wxStoreId'],
|
|
|
'store_order_id' => $storeOrderId, //同一个门店订单编号要保证唯一,相同的订单号会重入
|
|
|
- 'user_openid' => $user['miniOpenId'],
|
|
|
+ 'user_openid' => $miniOpenId,
|
|
|
'user_lng' => $post['user_lng'],
|
|
|
'user_lat' => $post['user_lat'],
|
|
|
'user_address' => $post['user_address'],
|
|
|
@@ -463,13 +463,15 @@ class IntraCityController extends BaseController
|
|
|
$result = IntraCityExpress::createOrder($orderData);
|
|
|
|
|
|
if (isset($result['errcode']) && $result['errcode'] === 0) {
|
|
|
- OrderClass::updateById($orderId, ['sendStatus' => 1]); // 更新订单状态为配送中
|
|
|
+ $deliveryId = $result['service_trans_id'] ?? '';
|
|
|
+ // 更新订单状态为配送中,已呼叫小哥,等小哥接单
|
|
|
+ OrderClass::updateById($orderId, ['sendStatus' => 0,'status'=>3, 'deliveryId' => $deliveryId]);
|
|
|
|
|
|
// 保存进 xhExpressOrder 表
|
|
|
$orderData = [
|
|
|
'mainId' => $this->mainId,
|
|
|
'shopId' => $this->shopId,
|
|
|
- 'deliveryId' => $result['service_trans_id'] ?? '',
|
|
|
+ 'deliveryId' => $deliveryId,
|
|
|
'wxOrderId' => $result['wx_order_id'] ?? '',
|
|
|
'wxStoreId' => $result['wx_store_id'] ?? '',
|
|
|
'storeOrderId' => $result['store_order_id'] ?? '',
|
|
|
@@ -613,10 +615,10 @@ class IntraCityController extends BaseController
|
|
|
$result = IntraCityExpress::cancelOrder($wxOrderId, $storeOrderId, $wxStoreId);
|
|
|
if (isset($result['errcode']) && $result['errcode'] === 0) {
|
|
|
// 更新订单状态
|
|
|
- OrderClass::updateById($orderId, ['sendStatus' => OrderClass::SEND_STATUS_CANCEL]);//设置为取消状态
|
|
|
+ OrderClass::updateById($orderId, ['sendStatus' => 3]);//设置为取消状态
|
|
|
$eo = ExpressOrderClass::getByCondition(['storeOrderId' => $storeOrderId, 'wxStoreId' => $wxStoreId], true);
|
|
|
if (!empty($eo)) {
|
|
|
- $eo->status = ExpressOrder::STATUS_CANCELED;
|
|
|
+ $eo->status = 3;
|
|
|
$eo->cancelTime = date('Y-m-d H:i:s');
|
|
|
$eo->deductfee = $result['deductfee'];
|
|
|
$eo->save();
|
|
|
@@ -674,13 +676,12 @@ class IntraCityController extends BaseController
|
|
|
// 记录回调日志
|
|
|
Yii::info('同城配送回调:' . json_encode($callbackData, JSON_UNESCAPED_UNICODE));
|
|
|
|
|
|
- $storeOrderId = isset($callbackData['store_order_id']) ? $callbackData['store_order_id'] : 0;
|
|
|
- $wxStoreId = isset($callbackData['wx_store_id']) ? $callbackData['wx_store_id'] : ''; //微信门店编号
|
|
|
+ $storeOrderId = $callbackData['store_order_id'] ?? 0;
|
|
|
+ $wxStoreId = $callbackData['wx_store_id'] ?? ''; //微信门店编号
|
|
|
if (empty($storeOrderId) || empty($wxStoreId)) {
|
|
|
return $this->asJson(['return_code' => 1, 'return_msg' => '请求参数不正确']);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
try {
|
|
|
// 使用 storeOrderId 与 wxStoreId 去查询 xhExpressOrder 表
|
|
|
$eo = ExpressOrderClass::getByCondition(['storeOrderId' => $storeOrderId, 'wxStoreId' => $wxStoreId], true, false);
|
|
|
@@ -702,70 +703,71 @@ class IntraCityController extends BaseController
|
|
|
switch ($orderStatus) {
|
|
|
// 订单创建成功
|
|
|
case IntraCityExpress::ORDER_STATUS_CREATED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_CREATED;
|
|
|
- $eo->status = ExpressOrder::STATUS_CREATED;
|
|
|
+ $eo->orderStatus = 1;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_SENDING, 'sendStatus' => OrderClass::SEND_STATUS_SENDING]);
|
|
|
+ OrderClass::updateById($orderId, ['status' => 3, 'sendStatus' => 0]);
|
|
|
break;
|
|
|
|
|
|
// 商家取消订单
|
|
|
case IntraCityExpress::ORDER_STATUS_CANCELED_BY_MERCHANT:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_CANCELED_BY_MERCHANT;
|
|
|
+ $eo->orderStatus = 2;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 待配送|取消
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_CANCEL]);
|
|
|
+ OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
$msg = '取消配送,订单编号:';
|
|
|
break;
|
|
|
|
|
|
// 配送方取消订单
|
|
|
case IntraCityExpress::ORDER_STATUS_CANCELED_BY_DELIVERY:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_CANCELED_BY_DELIVERY;
|
|
|
- $eo->status = ExpressOrder::STATUS_CANCELED;
|
|
|
+ $eo->orderStatus = 3;
|
|
|
+ $eo->status = 0;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 待配送|取消
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_CANCEL]);
|
|
|
+ OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
$msg = '配送方取消配送,订单编号:';
|
|
|
break;
|
|
|
|
|
|
// 配送员接单
|
|
|
case IntraCityExpress::ORDER_STATUS_ACCEPTED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_ACCEPTED;
|
|
|
+ $eo->orderStatus = 4;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_SENDING, 'sendStatus' => OrderClass::SEND_STATUS_SENDING]); //订单创建时已执行了,这儿重复更新
|
|
|
+ OrderClass::updateById($orderId, ['status' => 3, 'sendStatus' => 1]); //订单创建时已执行了,这儿重复更新
|
|
|
break;
|
|
|
|
|
|
// 配送员到店
|
|
|
case IntraCityExpress::ORDER_STATUS_ARRIVED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_ARRIVED;
|
|
|
+ $eo->orderStatus = 5;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 配送中|已发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_SENDING, 'sendStatus' => OrderClass::SEND_STATUS_SENDING]); //订单创建时已执行了,这儿重复更新
|
|
|
+ OrderClass::updateById($orderId, ['status' => 3, 'sendStatus' => 4]); //订单创建时已执行了,这儿重复更新
|
|
|
break;
|
|
|
|
|
|
// 配送中
|
|
|
case IntraCityExpress::ORDER_STATUS_DELIVERING:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_DELIVERING;
|
|
|
+ $eo->orderStatus = 6;
|
|
|
+ OrderClass::updateById($orderId, ['sendStatus' => 5]);
|
|
|
break;
|
|
|
|
|
|
// 配送员撤单
|
|
|
case IntraCityExpress::ORDER_STATUS_WITHDRAWN:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_WITHDRAWN;
|
|
|
+ $eo->orderStatus = 7;
|
|
|
+ $eo->status = 0;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 待配送|未发货
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_UNSEND]);
|
|
|
+ OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
$msg = '跑腿取消配送,订单编号:';
|
|
|
break;
|
|
|
|
|
|
// 配送完成
|
|
|
case IntraCityExpress::ORDER_STATUS_COMPLETED:
|
|
|
- $eo->orderStatus = ExpressOrder::ORDER_STATUS_COMPLETED;
|
|
|
- $eo->status = ExpressOrder::STATUS_COMPLETED;
|
|
|
+ $eo->orderStatus = 8;
|
|
|
// 更新 xhOrder 表的订单状态与配送状态 -- 已完成|已送达
|
|
|
- OrderClass::updateById($orderId, ['status' => OrderClass::ORDER_STATUS_COMPLETE, 'sendStatus' => OrderClass::SEND_STATUS_COMPLETED]);
|
|
|
+ OrderClass::updateById($orderId, ['status' => 4, 'sendStatus' => 2]);
|
|
|
break;
|
|
|
|
|
|
// 配送异常
|
|
|
case IntraCityExpress::ORDER_STATUS_EXCEPTION:
|
|
|
- $eo->orderStatus = ExpressOrder::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' => OrderClass::ORDER_STATUS_UN_SEND, 'sendStatus' => OrderClass::SEND_STATUS_UNSEND]);
|
|
|
+ OrderClass::updateById($orderId, ['status' => 2, 'sendStatus' => 3]);
|
|
|
$msg = '订单配送异常,订单编号:';
|
|
|
break;
|
|
|
}
|