db->beginTransaction(); try { $this->setRequest(); $successCount = 0; $user_ids = []; foreach ($this->up_ids as $up_id) { /* @var Order $order */ $order = Order::find() ->where([ 'su_id' => $this->su_id, 'up_id' => $up_id, ]) ->one(); if (!$order) { continue; // 无订单记录跳过 } if (in_array($order->user_id, $user_ids)) { continue; // 已发送过跳过 } $user_ids[] = $order->user_id; /* @var ImMessageSession $ims */ $ims = ImMessageSession::find()->where([ 'user_id' => $order->user_id, 'service_id' => $this->su_id, 'type' => ImSessionTypeEnum::USER_DOC, ]) ->orderBy(['updated_at' => SORT_ASC]) ->one(); if (!$ims) { continue; // 无历史会话跳过 } $form = new ImMessageForm; $form->ims_id = $ims->id; $form->from_id = $this->su_id; $form->to_id = $order->user_id; $form->content = $this->content; $form->type = ImMessageSendTypeEnum::SERVICE_SEND; try { $form->sendMessage(true); $successCount++; } catch (\Exception $exception) { \Yii::error($exception); } } $t->commit(); \Yii::info(Carbon::now()->toDateTimeString() . "{$this->su_id}成功群发{$successCount}个用户"); } catch (\Exception $exception) { $t->rollBack(); \Yii::error($exception); } } }