Files
xk-api-yii/common/jobs/OrderPayImJob.php

196 lines
7.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace common\jobs;
use common\enums\ImMessageSendTypeEnum;
use common\enums\UserRoleEnum;
use common\forms\ImMessageForm;
use common\models\oldDb\ImMessageSession;
use common\models\oldDb\ImMessageSessionOrder;
use common\models\oldDb\Order;
use common\models\oldDb\OrderLog;
use yii\queue\JobInterface;
use yii\queue\Queue;
//支付后发送问诊消息
class OrderPayImJob extends BaseJob implements JobInterface
{
public $orderId;
/**
* @param Queue $queue which pushed and is handling the job
*/
public function execute($queue)
{
$this->exec($this->orderId);
}
//方便调试
public function exec($orderId){
$this->orderId = $orderId;
OrderLog::saveLog($this->orderId,'发送问诊消息start');
$t = \Yii::$app->db->beginTransaction();
try {
$this->setRequest();
/* @var \common\models\oldDb\Order $order */
$order = Order::find()->where([
'id' => $this->orderId,
'is_pay' => 1,
'cancel_status' => 0
])->with('inquiry','user')->one();
if (!$order || !$order->inquiry) {
OrderLog::saveLog($this->orderId,'订单不存在或者问诊信息不存在');
throw new \Exception('订单不存在或者问诊信息不存在');
}
//------------------------------------------发消息-----------------------------------------------------------
//创建会话
$ims = new ImMessageSession();
$ims->user_id = $order->user_id;
$ims->service_id = $order->su_id;
$ims->type = UserRoleEnum::DOCTOR;
$ims->saveOrFail();
$ims_id = $ims->id;
//绑定订单和会话消息的关系
$session_order = new ImMessageSessionOrder();
$session_order->ims_id = $ims_id;
$session_order->order_id = $this->orderId;
$session_order->saveOrFail();
//发送病情
$message = [
'type' => 'desc',
'from_User' => [
'id' => $order->user->id,
'name' => $order->user->nickname,
'avatar' => $order->user->avatarurl
],
'data' => [
'text' => $order->inquiry->desc
],
];
$form = new ImMessageForm();
$form->ims_id = $ims_id;
$form->from_id = $order->user_id;
$form->to_id = $order->su_id;
$form->type = ImMessageSendTypeEnum::USER_SEND;
$form->content = json_encode($message);
$form->sendMessage();
//发送基本健康信息
$message = [
'type' => 'text_a',
'from_User' => [
'id' => $order->user->id,
'name' => $order->user->nickname,
'avatar' => $order->user->avatarurl
],
'data' => [
'text' => $order->id
],
];
$form = new ImMessageForm();
$form->ims_id = $ims_id;
$form->from_id = $order->user_id;
$form->to_id = $order->su_id;
$form->type = ImMessageSendTypeEnum::USER_SEND;
$form->content = json_encode($message);
$form->sendMessage();
//发送图片信息
$message = [
'type' => 'images',
'from_User' => [
'id' => $order->user->id,
'name' => $order->user->nickname,
'avatar' => $order->user->avatarurl
],
'data' => [
'text' => $order->inquiry->images
],
];
$form = new ImMessageForm();
$form->ims_id = $ims_id;
$form->from_id = $order->user_id;
$form->to_id = $order->su_id;
$form->type = ImMessageSendTypeEnum::USER_SEND;
$form->content = json_encode($message);
$form->sendMessage();
//就诊记录
if($order->inquiry->is_visit && $order->inquiry->visit_desc){
$message = [
'type' => 'record',
'from_User' => [
'id' => $order->user->id,
'name' => $order->user->nickname,
'avatar' => $order->user->avatarurl
],
'data' => [
'text' => $order->inquiry->visit_desc
],
];
$form = new ImMessageForm();
$form->ims_id = $ims_id;
$form->from_id = $order->user_id;
$form->to_id = $order->su_id;
$form->type = ImMessageSendTypeEnum::USER_SEND;
$form->content = json_encode($message);
$form->sendMessage();
}
//以医生身份给用户发送一条提示信息
$message = [
'type' => 'system',
'from_User' => [
'id' => $order->su_id,
'name' => $order->serviceUser->docInfo->name,
'avatar' => $order->serviceUser->docIdentity->work_avator
],
'data' => [
'text' => '温馨提示:您可继续补充问诊内容,便于更快确认病情,医生均在临床一线工作,还请耐心等待,医生接诊时会第一时间短信通知您'
],
];
$form = new ImMessageForm();
$form->ims_id = $ims_id;
$form->from_id = $order->su_id;
$form->to_id = $order->user_id;
$form->type = ImMessageSendTypeEnum::SERVICE_SEND;//!!
$form->content = json_encode($message);
$form->sendMessage();
//以用户身份给医生发送一条事件消息
$message = [
'type' => 'end',
'from_User' => [
'id' => $order->user->id,
'name' => $order->user->nickname,
'avatar' => $order->user->avatarurl
],
'data' => [
'text' => '请在24小时内接诊超时将会自动退诊'
],
];
$form = new ImMessageForm();
$form->ims_id = $ims_id;
$form->from_id = $order->user_id;
$form->to_id = $order->su_id;
$form->type = ImMessageSendTypeEnum::USER_SEND;
$form->content = json_encode($message);
$form->sendMessage();
//----------------------------------------发消息-------------------------------------------------------------
$t->commit();
OrderLog::saveLog($this->orderId,'发送问诊消息end');
} catch (\Exception $exception) {
$t->rollBack();
\Yii::error($exception);
OrderLog::saveLog($this->orderId,'发送问诊消息异常:'.$exception->getMessage());
return;
}
}
}