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

196 lines
7.3 KiB
PHP
Raw Normal View History

2024-09-19 11:32:39 +08:00
<?php
namespace common\jobs;
use common\enums\ImMessageSendTypeEnum;
use common\enums\UserRoleEnum;
use common\forms\ImMessageForm;
2024-12-19 19:20:27 +08:00
use common\models\oldDb\ImMessageSession;
use common\models\oldDb\ImMessageSessionOrder;
use common\models\oldDb\Order;
use common\models\oldDb\OrderLog;
2024-09-19 11:32:39 +08:00
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();
2024-12-19 19:20:27 +08:00
/* @var \common\models\oldDb\Order $order */
2024-09-19 11:32:39 +08:00
$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;
}
}
}