新增医生设置视频预约时间 及延迟通知队列

This commit is contained in:
2024-01-16 14:57:01 +08:00
parent 3f81b6e73d
commit ccc4934700
6 changed files with 487 additions and 19 deletions
+34 -17
View File
@@ -5,6 +5,8 @@ namespace App\Services;
use App\Amqp\Producer\AutoFinishInquiryDelayDirectProducer;
use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer;
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
use App\Amqp\Producer\SendSmsMessageProducer;
use App\Amqp\Producer\SendVideoNoticeDelayDirectProducer;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
@@ -41,6 +43,7 @@ use App\Utils\PcreMatch;
use Extend\Wechat\WechatPay;
use GuzzleHttp\Exception\GuzzleException;
use Hyperf\Amqp\Producer;
use Hyperf\Context\ApplicationContext;
use Hyperf\DbConnection\Db;
use Hyperf\Redis\Redis;
use Hyperf\Snowflake\IdGeneratorInterface;
@@ -1314,8 +1317,6 @@ class InquiryService extends BaseService
/**
* 医生设置视频预约时间
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function addVideoReservationDate(): array
{
@@ -1391,8 +1392,6 @@ class InquiryService extends BaseService
// 创建订单
Db::beginTransaction();
$generator = $this->container->get(IdGeneratorInterface::class);
try {
if (empty($order_inquiry_video)){
// 创建视频预约数据
@@ -1433,7 +1432,15 @@ class InquiryService extends BaseService
$params['doctor_id'] = $order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)) {
return fail(HttpEnumCode::SERVER_ERROR, "赠送失败");
return fail(HttpEnumCode::SERVER_ERROR, "设置失败");
}
// 获取订单用户数据
$params = array();
$params['user_id'] = $order_inquiry['user_id'];
$user = User::getOne($params);
if (empty($user)){
return fail(HttpEnumCode::SERVER_ERROR, "设置失败");
}
// 发送im消息
@@ -1441,23 +1448,33 @@ class InquiryService extends BaseService
if ($is_reservation){
// 修改
// 已成功预约视频问诊时间-医生
$imService->addVideoReservationTimeToDoctor($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$reservation_time);
// 已成功预约视频问诊时间-患者
$imService->addVideoReservationTimeToPatient($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$reservation_time);
}else{
// 新增
// 已成功修改视频问诊时间-医生
$imService->modifyVideoReservationTimeToDoctor($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$reservation_time);
// 已成功修改视频问诊时间-患者
$imService->modifyVideoReservationTimeToPatient($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id'],$reservation_time);
}
// 发送短信-患者-视频预约成功
// 患者-通知患者视频时间
$sendSmsService = new SendSmsService($user['mobile']);
$sendSmsService->noticePatientVideoTime($user_doctor['user_name'],$reservation_time);
// 成功预约视频问诊时间
// 成功修改视频问诊时间
// 赠送回合数消息
$imService->giveFreeRounds($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id'],$times_number,$give_expiration_time);
// 发送站内、订阅失败发送短信消息-患者-赠送回合数
$MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']);
$MessagePush->doctorGiveFreeRounds($times_number,$give_expiration_time);
// 增加延迟队列通知-视频问诊即将开始
$time = strtotime($reservation_time) - 4*60;
$message = new SendVideoNoticeDelayDirectProducer($data);
$message->setDelayMs(1000 * $time);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
return fail(HttpEnumCode::SERVER_ERROR, "设置失败");
}
}catch (\Throwable $e){
Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage());
}