cancel(); } protected function cancel() { $t = \Yii::$app->db->beginTransaction(); try { CommonLog::saveLog($this->event->order->id,'订单取消canceled事件start'); /* @var OrderEvent $event */ $this->action(); $t->commit(); CommonLog::saveLog($this->event->order->id,'订单取消canceled事件end'); } catch (\Exception $exception) { $t->rollBack(); throw $exception; } } protected function action() { $this->couponResume()->extraCancel($this->event->order)->goodsAddStock($this->event->order); // $this->couponResume()->sendTemplate()->goodsAddStock($this->event->order)->sendSmsToUser(); } /** * 优惠券恢复 * @return $this */ protected function couponResume() { // 优惠券恢复 if ($this->event->order->use_user_coupon_id) { $userCoupon = UserCoupon::findOne(['id' => $this->event->order->use_user_coupon_id]); $userCoupon->is_use = 0; $userCoupon->save(); } CommonLog::saveLog($this->event->order->id,'订单取消优惠券恢复'); return $this; } /** * 额外的取消处理 * @param $order * @throws Exception * @throws \yii\base\Exception */ protected function extraCancel($order) { (new CommonOrder())->extraCancel($order); return $this; } protected function sendTemplate() { // try { // $order = $this->event->order; // $remark = $order->cancel_status == 1 ? '商家同意取消' : '商家拒绝取消'; // // $goodsName = ''; // foreach ($order->detail as $orderDetail) { // $goodsName .= $orderDetail->goods->name; // } // // TemplateList::getInstance()->getTemplateClass(OrderCancelInfo::TPL_NAME)->send([ // 'goodsName' => $goodsName, // 'order_no' => $order->order_no, // 'price' => $order->total_pay_price, // 'remark' => $remark, // 'user' => $order->user, // 'page' => 'pages/order/index/index?status=2' // ]); // } catch (\Exception $exception) { // \Yii::error('模板消息发送: ' . $exception->getMessage()); // } return $this; } /** * @param Order $order * @throws Exception */ protected function goodsAddStock($order) { /* @var OrderDetail[] $orderDetail */ $orderDetail = $order->detail; $goodsAttrIdList = []; $goodsNum = []; foreach ($orderDetail as $item) { $goodsInfo = json_decode($item->goods_info,true); $goodsAttrIdList[] = $goodsInfo['goods_attr']['id']; $goodsNum[$goodsInfo['goods_attr']['id']] = $item->num; } $goodsAttrList = GoodsAttr::find()->where(['id' => $goodsAttrIdList])->all(); /* @var GoodsAttr[] $goodsAttrList */ foreach ($goodsAttrList as $goodsAttr) { $goodsAttr->updateStock($goodsNum[$goodsAttr->id], 'add'); } CommonLog::saveLog($this->event->order->id,'订单取消商品库存返还'); return $this; } protected function sendSmsToUser() { // try { // \Yii::warning('----消息发送提醒----'); // $order = $this->event->order; // if (!$order->user->mobile) { // throw new \Exception('用户未绑定手机号无法发送'); // } // $messageService = new MessageService(); // $messageService->user = $order->user; // $messageService->content = [ // 'mch_id' => $order->mch_id, // 'args' => [substr($order->order_no, -6)] // ]; // $messageService->platform = PlatformConfig::getInstance()->getPlatform($order->user); // $messageService->tplKey = OrderCancelInfo::TPL_NAME; // $res = $messageService->templateSend(); // } catch (\Exception $exception) { // \Yii::error('向用户发送短信消息失败'); // \Yii::error($exception); // } return $this; } }