orderId,'订单自动退款队列start'); $t = \Yii::$app->db->beginTransaction(); try { $this->setRequest(); $order = Order::find()->where([ 'id' => $this->orderId, 'is_pay' => 1, 'cancel_status' => 0, 'accept_status' => OrderAcceptEnum::WAIT_ACCEPT ])->with('session')->one(); if(!$order){ throw new Exception('未接诊订单不存在'); } $ims_id = $order->session->ims_id; $ImMessageSession = ImMessageSession::findOne($ims_id); if(!$ImMessageSession){ throw new Exception('未接诊订单会话不存在'); } //生成记录 $orderRefund = new OrderRefund(); $orderRefund->user_id = $order->user_id; $orderRefund->order_id = $order->id; $orderRefund->refund_no = FuncHelper::generate_order_no('RF'); $orderRefund->refund_price = $order->total_pay_price; $orderRefund->remark = '超时未接诊自动退款'; $orderRefund->saveOrFail(); //取消状态 $order->cancel_status = 1; $order->cancel_time = time(); $order->cancel_remark = '超时未接诊自动取消'; //接诊状态 $order->accept_status = OrderAcceptEnum::TIMEOUT_ACCEPT; //退款状态 $order->refund_status = 1; $order->refund_time = time(); $order->saveOrFail(); //会话修改为已结束 $ImMessageSession->status = ImSessionStatusEnum::END; $ImMessageSession->saveOrFail(); //退款操作 $refundForm = new \common\forms\OrderRefundForm(); $refundForm->refundMoney($orderRefund); $t->commit(); OrderLog::saveLog($this->orderId,'订单自动退款队列end'); } catch (\Exception $exception) { $t->rollBack(); OrderLog::saveLog($this->orderId,'订单自动退款队列异常:'.$exception->getMessage()); return; } } }