我写的代码如下 可还出现了重复抢单现项。
求指导:
public function actionReceipt()
{
//检查令牌
if ($this->beforeActionRet["retCode"] == 1000) {
$orderNo = Yii::$app->request->post('orderNo');
$deliverID = Yii::$app->request->post('userID');
$order = $this->checkOrder($orderNo);
$delver = $this->findModel($deliverID);
if ($delver == null) {
return Json::encode(["retCode" => '1004', 'retMsg' => '用户不存在']);
}
//如果抢完了 返回参数
if ($order->orderStatus == 2) {
return Json::encode(["retCode" => "1007", "retMsg" => "此订单已被抢走了"]);
}
//满足未抢单执行
if ($order->orderStatus === 1 && $order->deliverID === null) {
$order->isNewRecord = false;
$order->printStatus = 2;
$transaction = Yii::$app->db->beginTransaction();
try {
$orderDeliver = OrderDeliver::find()->where(['orderNo' => $orderNo])->one();
if (!$orderDeliver) {
$orderDeliver = new OrderDeliver();
}
$orderDeliver->orderNo = $orderNo;
$orderDeliver->deliverID = $deliverID;
$orderDeliver->managerCode = Deliver::findOne($deliverID)->managerCode;
$orderInfo = Order::find()->where(['orderNo' => $orderNo])->one();
$addressInfo = CustAddress::find()->select('address,phone')->where(['id' => $orderInfo['addressID']])->one();
$SN = Device::find()->select('SN')->where(['resId' => $orderInfo['resID']])->one()['SN'];
$orders = OrderDetail::find()->where(['orderNo' => $orderNo])->asArray()->all();
$mobilePhone = $orderInfo['userName'];
$totalPrice = $orderInfo['amount'] + $orderInfo['deliverFee'];
$deliveryPhone = Deliver::findOne($deliverID)->username;
if (isset($SN) && !empty($SN)) {
$feiE = new FeiE($SN);
if ($orderDeliver->save() && Order::updateOrder($orderNo, $deliverID)) {
$transaction->commit();
$order = $this->checkOrder($orderNo);
if ($order->printStatus == 1) {
$feiE->create_ticket($orders, $orderNo, $orderInfo, $addressInfo['phone']);
$this->setMessage($mobilePhone, $totalPrice, $deliveryPhone);
$this->pushSocket($orderNo, $orderInfo['resID']);
}
$retData = [
'retCode' => 1000,
'retMsg' => '派单成功',
'body' => [
'resultCode' => 2000,
'resultMsg' => 'SUCCESS'
]
];
return json_encode($retData);
}
}
if ($orderDeliver->save() && Order::updateOrder($orderNo, $deliverID)) {
$this->setMessage($mobilePhone, $totalPrice, $deliveryPhone);
$this->pushSocket($orderNo, $orderInfo['resID']);
$retData = [
'retCode' => 1000,
'retMsg' => '派单成功',
'body' => [
'resultCode' => 2000,
'resultMsg' => 'SUCCESS'
]
];
$transaction->commit();
return json_encode($retData);
}
} catch (Exception $e) {
$retData = [
'retCode' => 1001,
'retMsg' => '派单失败',
'body' => [
'resultCode' => $e->getCode(),
'resultMsg' => $e->getMessage()
]
];
$transaction->rollBack();
return json_encode($retData);
}
}
}
return Json::encode($this->beforeActionRet);
}
本文由 alijon 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。