196 lines
7.3 KiB
PHP
196 lines
7.3 KiB
PHP
<?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;
|
||
}
|
||
}
|
||
}
|