diff --git a/app/Amqp/Consumer/SendVideoNoticeDelayDirectConsumer.php b/app/Amqp/Consumer/SendVideoNoticeDelayDirectConsumer.php index 9b31c8a..9283652 100644 --- a/app/Amqp/Consumer/SendVideoNoticeDelayDirectConsumer.php +++ b/app/Amqp/Consumer/SendVideoNoticeDelayDirectConsumer.php @@ -5,9 +5,10 @@ declare(strict_types=1); namespace App\Amqp\Consumer; use App\Model\OrderInquiry; -use App\Model\OrderInquiryVideo; use App\Model\User; use App\Model\UserDoctor; +use App\Model\VideoRecord; +use App\Model\VideoReservation; use App\Services\SendSmsService; use App\Utils\Log; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; @@ -96,25 +97,28 @@ class SendVideoNoticeDelayDirectConsumer extends ConsumerMessage // 获取视频预约状态 $params = array(); $params['order_inquiry_id'] = $data['order_inquiry_id']; - $order_inquiry_video = OrderInquiryVideo::getOne($params); - if (empty($order_inquiry_video)){ + $video_reservation = VideoReservation::getOne($params); + if (empty($video_reservation)){ Log::getInstance("queue-SendVideoNotice")->error("缺少视频预约数据" ); return Result::DROP; } - if ($order_inquiry_video['is_send_reservation_notice'] == 1){ + if ($video_reservation['is_send_reservation_notice'] == 1){ Log::getInstance("queue-SendVideoNotice")->info("已发送过一次通知,无需发送" ); return Result::ACK; } // 检测是否已开过视频 - if ($order_inquiry_video['is_video'] == 1){ + $params = array(); + $params['order_inquiry_id'] = $video_reservation['order_inquiry_id']; + $video_records = VideoRecord::getOne($params); + if (!empty($video_records)) { Log::getInstance("queue-SendVideoNotice")->info("已开过视频,无需发送" ); return Result::ACK; } // 检测通知时间 - $reservation_time = strtotime($order_inquiry_video['reservation_time']); + $reservation_time = strtotime($video_reservation['reservation_time']); if ($reservation_time < time()){ Log::getInstance("queue-SendVideoNotice")->info("当前时间已超过预约时间,无需发送" ); return Result::ACK; @@ -169,8 +173,8 @@ class SendVideoNoticeDelayDirectConsumer extends ConsumerMessage $data['is_send_reservation_notice'] = 1; $params = array(); - $params['inquiry_video_id'] = $order_inquiry_video['inquiry_video_id']; - $res = OrderInquiryVideo::edit($params,$data); + $params['inquiry_video_id'] = $video_reservation['inquiry_video_id']; + $res = VideoReservation::edit($params,$data); if (!$res){ Db::rollBack(); Log::getInstance("queue-SendVideoNotice")->error("修改失败"); diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 3b68ddc..d8a14c1 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -37,6 +37,7 @@ use App\Model\UserCoupon; use App\Model\UserDoctor; use App\Model\UserPatient; use App\Model\UserSystem; +use App\Model\VideoReservation; use App\Services\BaseService; use App\Services\ImService; use App\Services\InquiryService; @@ -1714,10 +1715,10 @@ class CallBackController extends AbstractController $request_params = $this->request->getBody()->getContents(); $SdkAppId = $this->request->header("SdkAppId"); $Sign = $this->request->header("Sign"); + $Sign = stripslashes($Sign); + try { Log::getInstance("CallBackController-trtcRoomCallBack")->info(json_encode($request_params, JSON_UNESCAPED_UNICODE)); - Log::getInstance("CallBackController-trtcRoomCallBack")->info(json_encode($SdkAppId, JSON_UNESCAPED_UNICODE)); - Log::getInstance("CallBackController-trtcRoomCallBack")->info(json_encode($Sign, JSON_UNESCAPED_UNICODE)); if (empty($SdkAppId)) { return $this->TrtcErrorReturn("缺少SdkAppId字段"); @@ -1730,42 +1731,77 @@ class CallBackController extends AbstractController // 鉴定回调签名 $VideoSafe = new VideoSafe(); $result = $VideoSafe->validateSign($request_params,$Sign); - dump($result); -// if (!$result) { -// return $this->TrtcErrorReturn("回调签名不匹配"); -// } + if (!$result) { + return $this->TrtcErrorReturn("回调签名不匹配"); + } $request_params = json_decode($request_params,true); - die; - + // 验证参数 if (empty($request_params['EventGroupId'])){ - return $this->ImErrorReturn("回调事件为空"); + return $this->TrtcErrorReturn("回调事件组为空"); } - $userService = new UserService(); - - if ($request_params['CallbackCommand'] == "State.StateChange"){ - // 用户状态变更 - $result = $userService->userImLoginStatus($request_params); - if ($result['code'] == 0){ - return $this->ImErrorReturn($result['message']); - } - }elseif ($request_params['CallbackCommand'] == "C2C.CallbackAfterSendMsg"){ - // 用户im消息发送后回调 - $result = $userService->userImAfterSendMsg($request_params); - if ($result['code'] == 0){ - return $this->ImErrorReturn($result['message']); - } - }else{ - return $this->ImErrorReturn("非法事件"); + if (empty($request_params['EventType'])){ + return $this->TrtcErrorReturn("回调事件类型为空"); } - } catch (\Exception $e) { + + if (empty($request_params['EventInfo'])){ + return $this->TrtcErrorReturn("回调事件信息为空"); + } + + if (empty($request_params['EventInfo']['RoomId'])){ + return $this->TrtcErrorReturn("缺少房间id"); + } + + // 排除数据 + if ($request_params['EventGroupId'] != 1){ + return $this->TrtcErrorReturn("回调地址推送错误"); + } + + if (!in_array($request_params['EventType'],[101,102,103])){ + return $this->TrtcErrorReturn("事件类型错误"); + } + } catch (\Throwable $e) { // 验证失败 - return $this->ImErrorReturn($e->getMessage()); + return $this->TrtcErrorReturn($e->getMessage()); } - Log::getInstance()->info("Im回调数据处理成功"); + // 处理业务逻辑 + try { + // 检测缓存-只允许同时处理同一房间的一个请求,防止数据库冲突 + $redis = $this->container->get(Redis::class); + $redis_key = "trtcCallBack_" . $request_params['EventInfo']['RoomId']; + $redis_value = $redis->get($redis_key); + if (!empty($redis_value)){ + return $this->TrtcErrorReturn("存在正在处理的回调"); + } + + $redis->set($redis_key, 1, 10); + + // 获取房间id + $params = array(); + $params['room_id'] = $request_params['EventInfo']['RoomId']; + $video_reservation = VideoReservation::getLastOne($params); + if (empty($video_reservation)){ + return $this->TrtcErrorReturn("存在正在处理的回调"); + } + + // 处理创建房间 + // 处理解散房间 + // 处理进入房间 + + + + + // 删除缓存 + + }catch (\Throwable $e){ + // 验证失败 + return $this->TrtcErrorReturn($e->getMessage()); + } + + Log::getInstance("CallBackController-trtcRoomCallBack")->info("音视频回调-房间数据处理成功"); return $this->ImSuccessReturn(); } @@ -1783,8 +1819,6 @@ class CallBackController extends AbstractController try { Log::getInstance("CallBackController-trtcMediaCallBack")->info(json_encode($request_params, JSON_UNESCAPED_UNICODE)); - Log::getInstance("CallBackController-trtcMediaCallBack")->info(json_encode($SdkAppId, JSON_UNESCAPED_UNICODE)); - Log::getInstance("CallBackController-trtcMediaCallBack")->info(json_encode($Sign, JSON_UNESCAPED_UNICODE)); if (empty($SdkAppId)) { return $this->TrtcErrorReturn("缺少SdkAppId字段"); diff --git a/app/Controller/InquiryController.php b/app/Controller/InquiryController.php index 5f8af29..ce5dd46 100644 --- a/app/Controller/InquiryController.php +++ b/app/Controller/InquiryController.php @@ -164,22 +164,6 @@ class InquiryController extends AbstractController return $this->response->json($data); } - /** - * 医生设置视频预约时间 - * @return ResponseInterface - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function addVideoReservationDate(): ResponseInterface - { - $request = $this->container->get(InquiryRequest::class); - $request->scene('addVideoReservationDate')->validateResolved(); - - $InquiryService = new InquiryService(); - $data = $InquiryService->addVideoReservationDate(); - return $this->response->json($data); - } - /** * 获取视频问诊消息内页基础数据 * @return ResponseInterface diff --git a/app/Controller/VideoController.php b/app/Controller/VideoController.php new file mode 100644 index 0000000..49b482a --- /dev/null +++ b/app/Controller/VideoController.php @@ -0,0 +1,49 @@ +container->get(VideoRequest::class); + $request->scene('addVideoReservationDate')->validateResolved(); + + $videoService = new VideoService(); + $data = $videoService->addVideoReservationDate(); + return $this->response->json($data); + } + + /** + * 创建音视频房间 + * @return ResponseInterface + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function addVideoRoom(): ResponseInterface + { + $request = $this->container->get(VideoRequest::class); + $request->scene('addVideoRoom')->validateResolved(); + + $videoService = new VideoService(); + $data = $videoService->addVideoRoom(); + return $this->response->json($data); + } +} \ No newline at end of file diff --git a/app/Model/OrderInquiryVideo.php b/app/Model/VideoRecord.php similarity index 60% rename from app/Model/OrderInquiryVideo.php rename to app/Model/VideoRecord.php index cdd71f9..d37fb34 100644 --- a/app/Model/OrderInquiryVideo.php +++ b/app/Model/VideoRecord.php @@ -9,30 +9,30 @@ namespace App\Model; use Hyperf\Snowflake\Concern\Snowflake; /** - * @property int $inquiry_video_id 主键id + * @property int $records_id 主键id * @property int $order_inquiry_id 问诊订单id - * @property string $reservation_time 预约时间 - * @property int $is_send_reservation_notice 是否已发送预约通知(0:否 1:是) - * @property int $is_video 是否已开视频(0:否 1:是) - * @property int $update_number 修改次数 + * @property string $room_id 房间id + * @property int $video_status 视频状态(1:已发起 2:患者进入房间 3:开始通话 4:结束) + * @property string $start_video_time 开始视频时间 + * @property string $stop_video_time 结束视频时间 * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 */ -class OrderInquiryVideo extends Model +class VideoRecord extends Model { use Snowflake; /** * The table associated with the model. */ - protected ?string $table = 'order_inquiry_video'; + protected ?string $table = 'video_records'; /** * The attributes that are mass assignable. */ - protected array $fillable = ['inquiry_video_id', 'order_inquiry_id', 'reservation_time', 'is_send_reservation_notice', 'is_video', 'update_number', 'created_at', 'updated_at']; + protected array $fillable = ['records_id', 'order_inquiry_id', 'room_id', 'video_status', 'start_video_time', 'stop_video_time', 'created_at', 'updated_at']; - protected string $primaryKey = "inquiry_video_id"; + protected string $primaryKey = "records_id"; /** * 获取信息-单条 @@ -59,9 +59,9 @@ class OrderInquiryVideo extends Model /** * 新增-批量 * @param array $data 新增数据 - * @return \Hyperf\Database\Model\Model|OrderInquiryVideo + * @return \Hyperf\Database\Model\Model|VideoRecord */ - public static function addOrderInquiryVideo(array $data): \Hyperf\Database\Model\Model|OrderInquiryVideo + public static function addVideoRecord(array $data): \Hyperf\Database\Model\Model|VideoRecord { return self::create($data); } diff --git a/app/Model/VideoReservation.php b/app/Model/VideoReservation.php new file mode 100644 index 0000000..eb7c760 --- /dev/null +++ b/app/Model/VideoReservation.php @@ -0,0 +1,88 @@ +first($fields); + } + + /** + * 获取信息-多条 + * @param array $params + * @param array $fields + * @return object|null + */ + public static function getList(array $params, array $fields = ['*']): object|null + { + return self::where($params)->get($fields); + } + + /** + * 新增-批量 + * @param array $data 新增数据 + * @return \Hyperf\Database\Model\Model|VideoReservation + */ + public static function addVideoReservation(array $data): \Hyperf\Database\Model\Model|VideoReservation + { + return self::create($data); + } + + public static function edit(array $params = [], array $data = []): int + { + return self::where($params)->update($data); + } + + /** + * 获取信息-最后一条 + * @param array $params + * @param array $fields + * @return object|null + */ + public static function getLastOne(array $params, array $fields = ['*']): object|null + { + return self::where($params)->latest()->first($fields); + } +} diff --git a/app/Request/VideoRequest.php b/app/Request/VideoRequest.php new file mode 100644 index 0000000..bae804f --- /dev/null +++ b/app/Request/VideoRequest.php @@ -0,0 +1,52 @@ + [ // 医生设置视频预约时间 + 'order_inquiry_id', + 'reservation_time', // 预约时间 + ], + 'addVideoRoom' => [ // 创建音视频房间 + 'order_inquiry_id', + ], + ]; + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'order_inquiry_id' => 'required', + 'reservation_time' => "required", + ]; + } + + /** + * 获取已定义验证规则的错误消息. + */ + public function messages(): array + { + return [ + 'order_inquiry_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'reservation_time.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + ]; + } +} diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index afed408..79afb54 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -22,7 +22,6 @@ use App\Model\OrderInquiry; use App\Model\OrderInquiryCase; use App\Model\OrderInquiryCoupon; use App\Model\OrderInquiryRefund; -use App\Model\OrderInquiryVideo; use App\Model\OrderPrescription; use App\Model\OrderProductCoupon; use App\Model\PatientFamily; @@ -37,6 +36,8 @@ use App\Model\User; use App\Model\UserCoupon; use App\Model\UserDoctor; use App\Model\UserPatient; +use App\Model\VideoRecord; +use App\Model\VideoReservation; use App\Utils\Log; use App\Utils\Mask; use App\Utils\PcreMatch; @@ -211,7 +212,7 @@ class InquiryService extends BaseService try { // 实际付款金额 - $payment_amount_total = bcsub($inquiry_price , $coupon_amount_total,2); + $payment_amount_total = bcsub($inquiry_price, $coupon_amount_total, 2); if ($payment_amount_total < 0) { $payment_amount_total = 0; } @@ -262,109 +263,109 @@ class InquiryService extends BaseService $data['disease_desc'] = $request_params['disease_desc']; // 病情描述(主诉) $data['diagnose_images'] = $diagnose_images ?? ""; // 复诊凭证(多个使用逗号分隔) - if ($patient_family['age'] != null){ + if ($patient_family['age'] != null) { $data['age'] = $patient_family['age'];// 患者年龄 } // 身高(cm) - if ($patient_family['height'] != null){ + if ($patient_family['height'] != null) { $data['height'] = $patient_family['height']; } // 体重(kg) - if ($patient_family['weight'] != null){ + if ($patient_family['weight'] != null) { $data['weight'] = $patient_family['weight']; } // 职业id-职业名称 - if ($patient_family['job_id'] != null){ + if ($patient_family['job_id'] != null) { $data['job_id'] = $patient_family['job_id']; - if ($patient_family['job_name'] != null){ + if ($patient_family['job_name'] != null) { $data['job_name'] = $patient_family['job_name']; } } // 民族id-民族名称 - if ($patient_family['nation_id'] != null){ + if ($patient_family['nation_id'] != null) { $data['nation_id'] = $patient_family['nation_id']; - if ($patient_family['nation_name'] != null){ + if ($patient_family['nation_name'] != null) { $data['nation_name'] = $patient_family['nation_name']; } } // 婚姻状况 - if ($patient_family['marital_status'] != null){ + if ($patient_family['marital_status'] != null) { $data['marital_status'] = $patient_family['marital_status']; } // 家庭成员-健康情况 - if (!empty($patient_family_health)){ - if ($patient_family_health['diagnosis_hospital'] != null){ + if (!empty($patient_family_health)) { + if ($patient_family_health['diagnosis_hospital'] != null) { $data['diagnosis_hospital'] = $patient_family_health['diagnosis_hospital']; // 确诊医院 } - if ($patient_family_health['is_take_medicine'] != null){ + if ($patient_family_health['is_take_medicine'] != null) { $data['is_take_medicine'] = $patient_family_health['is_take_medicine']; // 正在服药 - if ($patient_family_health['drugs_name'] != null){ + if ($patient_family_health['drugs_name'] != null) { $data['drugs_name'] = $patient_family_health['drugs_name']; // 正在服药名称 } } } // 家庭成员-个人情况 - if (!empty($patient_family_personal)){ - if ($patient_family_personal['drink_wine_status'] != null){ + if (!empty($patient_family_personal)) { + if ($patient_family_personal['drink_wine_status'] != null) { $data['drink_wine_status'] = $patient_family_personal['drink_wine_status']; // 饮酒状态 } - if ($patient_family_personal['smoke_status'] != null){ + if ($patient_family_personal['smoke_status'] != null) { $data['smoke_status'] = $patient_family_personal['smoke_status']; // 吸烟状态 } - if ($patient_family_personal['chemical_compound_status'] != null){ + if ($patient_family_personal['chemical_compound_status'] != null) { $data['chemical_compound_status'] = $patient_family_personal['chemical_compound_status']; // 化合物状态 - if ($patient_family_personal['chemical_compound_describe'] != null){ + if ($patient_family_personal['chemical_compound_describe'] != null) { $data['chemical_compound_describe'] = $patient_family_personal['chemical_compound_describe']; // 化合物描述 } } - if ($patient_family_personal['is_operation'] != null){ + if ($patient_family_personal['is_operation'] != null) { $data['is_operation'] = $patient_family_personal['is_operation']; // 是否存在手术 - if ($patient_family_personal['operation'] != null){ + if ($patient_family_personal['operation'] != null) { $data['operation'] = $patient_family_personal['operation']; // 手术描述 } } } // 过敏史 - if (array_key_exists("is_allergy_history",$request_params)){ + if (array_key_exists("is_allergy_history", $request_params)) { if ($request_params['is_allergy_history'] !== null) { $data['is_allergy_history'] = $request_params['is_allergy_history']; // 是否存在过敏史(0:否 1:是) - if ($request_params['allergy_history'] != ""){ + if ($request_params['allergy_history'] != "") { $data['allergy_history'] = $request_params['allergy_history']; // 过敏史描述 } } } // 家族病史 - if (array_key_exists("is_family_history",$request_params)){ + if (array_key_exists("is_family_history", $request_params)) { if ($request_params['is_family_history'] !== null) { $data['is_family_history'] = $request_params['is_family_history']; // 是否存在家族病史(0:否 1:是) - if ($request_params['family_history'] != ""){ + if ($request_params['family_history'] != "") { $data['family_history'] = $request_params['family_history']; // 家族病史描述 } } } // 是否备孕、妊娠、哺乳期(0:否 1:是) - if (array_key_exists("is_pregnant",$request_params)){ + if (array_key_exists("is_pregnant", $request_params)) { if ($request_params['is_pregnant'] !== null) { $data['is_pregnant'] = $request_params['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是) } } // 是否存在禁忌药物(0:否 1:是)问诊购药时存在 - if (array_key_exists("is_taboo",$request_params)){ + if (array_key_exists("is_taboo", $request_params)) { if ($request_params['is_taboo'] !== null) { $data['is_taboo'] = $request_params['is_taboo']; // 是否存在禁忌药物(0:否 1:是)问诊购药时存在 } @@ -378,7 +379,7 @@ class InquiryService extends BaseService // 处理优惠卷数据 if (!empty($user_coupons)) { - foreach ($user_coupons as $user_coupon){ + foreach ($user_coupons as $user_coupon) { // 增加问诊优惠卷表 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id @@ -525,11 +526,11 @@ class InquiryService extends BaseService // 民族 $nation_name = ""; - if (isset($patient_family)){ - if (!empty($patient_family['nation_name'])){ + if (isset($patient_family)) { + if (!empty($patient_family['nation_name'])) { $nation_name = $patient_family['nation_name']; - }else{ - if (!empty($order_inquiry_case['nation_name'])){ + } else { + if (!empty($order_inquiry_case['nation_name'])) { $nation_name = $order_inquiry_case['nation_name']; } } @@ -900,7 +901,7 @@ class InquiryService extends BaseService $params['inquiry_mode'] = 1; $doctor_inquiry_config = DoctorInquiryConfig::getOne($params); if (!empty($doctor_inquiry_config)) { - if ($doctor_inquiry_config['is_enable'] == 1){ + if ($doctor_inquiry_config['is_enable'] == 1) { $multi_point_enable = 1;// 是否开启问诊购药 } } @@ -921,20 +922,20 @@ class InquiryService extends BaseService } // 处理问诊回合数及时长-兼容旧数据 - if (empty($order_inquiry['times_number']) || empty($order_inquiry['duration'])){ + if (empty($order_inquiry['times_number']) || empty($order_inquiry['duration'])) { $params = array(); $params['inquiry_type'] = $order_inquiry['inquiry_type']; $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; $system_inquiry_config = SystemInquiryConfig::getOne($params); - if (empty($system_inquiry_config)){ + if (empty($system_inquiry_config)) { return fail(); } - if (empty($order_inquiry['times_number'])){ + if (empty($order_inquiry['times_number'])) { $order_inquiry['times_number'] = $system_inquiry_config['times_number']; } - if (empty($order_inquiry['duration'])){ + if (empty($order_inquiry['duration'])) { $order_inquiry['duration'] = $system_inquiry_config['duration']; } } @@ -987,7 +988,7 @@ class InquiryService extends BaseService $params['user_id'] = $item['user_id']; $params['family_id'] = $item['family_id']; - $inquiry_status_params = [5,6]; + $inquiry_status_params = [5, 6]; $fields = [ 'order_inquiry_id', @@ -1011,11 +1012,11 @@ class InquiryService extends BaseService 'created_at', ]; - $order_inquiry = OrderInquiry::getInquiryStatusLastOne($params,$inquiry_status_params,$fields); + $order_inquiry = OrderInquiry::getInquiryStatusLastOne($params, $inquiry_status_params, $fields); unset($item['user_id']); unset($item['family_id']); - if (!empty($order_inquiry)){ + if (!empty($order_inquiry)) { $item = $order_inquiry->toArray(); $params = array(); @@ -1173,8 +1174,8 @@ class InquiryService extends BaseService $params['patient_id'] = $patient_id; $params['doctor_id'] = $doctor_id; - $inquiry_status_params = [3,4,5,6,7]; - $order_inquiry = OrderInquiry::getInquiryStatusLastOne($params,$inquiry_status_params); + $inquiry_status_params = [3, 4, 5, 6, 7]; + $order_inquiry = OrderInquiry::getInquiryStatusLastOne($params, $inquiry_status_params); if (empty($order_inquiry)) { return success(""); } @@ -1201,7 +1202,7 @@ class InquiryService extends BaseService } // 检测赠送的回合数和周期 - if (!in_array($duration,[3*60,7*60,5*60])){ + if (!in_array($duration, [3 * 60, 7 * 60, 5 * 60])) { return fail(HttpEnumCode::HTTP_ERROR, "请重新选择周期"); } @@ -1215,7 +1216,7 @@ class InquiryService extends BaseService } // 检测订单状态 - if (!in_array($order_inquiry['inquiry_status'],[5,6,7])){ + if (!in_array($order_inquiry['inquiry_status'], [5, 6, 7])) { return fail(HttpEnumCode::HTTP_ERROR, "问诊订单未完成,不可赠送"); } @@ -1237,7 +1238,7 @@ class InquiryService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_case = OrderInquiryCase::getOne($params); - if (empty($order_inquiry_case)){ + if (empty($order_inquiry_case)) { return fail(); } @@ -1295,7 +1296,7 @@ class InquiryService extends BaseService // 不处理意向用药 Db::commit(); - }catch (\Throwable $e){ + } catch (\Throwable $e) { Db::rollBack(); Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); @@ -1304,7 +1305,7 @@ class InquiryService extends BaseService // 发送消息 try { // 赠送到期时间 - $give_expiration_time = date('Y-m-d H:i:s',time()+$duration * 60); + $give_expiration_time = date('Y-m-d H:i:s', time() + $duration * 60); // 获取订单医生数据 $params = array(); @@ -1318,187 +1319,12 @@ class InquiryService extends BaseService $imService = new ImService(); // 赠送回合数消息 - $imService->giveFreeRounds($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id'],$times_number,$give_expiration_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); - }catch (\Throwable $e){ - Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); - } - - $result = array(); - $result['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id - $result['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 - - return success($result); - } - - /** - * 医生设置视频预约时间 - * @return array - */ - public function addVideoReservationDate(): array - { - $user_info = $this->request->getAttribute("userInfo") ?? []; - - $order_inquiry_id = $this->request->input('order_inquiry_id'); - $reservation_time = $this->request->input('reservation_time'); - - // 检测预约时间 - if (time() >= strtotime($reservation_time)){ - return fail(HttpEnumCode::HTTP_ERROR, "预约时间须大于当前时间"); - } - - // 获取问诊订单数据 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry_id; - $params['doctor_id'] = $user_info['client_user_id']; - $order_inquiry = OrderInquiry::getOne($params); - if (empty($order_inquiry)) { - return fail(); - } - - if ($order_inquiry['inquiry_type'] != 1){ - return fail(); - } - - if ($order_inquiry['inquiry_mode'] != 2){ - return fail(HttpEnumCode::HTTP_ERROR, "订单类型错误"); - } - - // 检测订单状态 - if ($order_inquiry['inquiry_status'] != 4){ - return fail(HttpEnumCode::HTTP_ERROR, "订单状态错误"); - } - - // 获取系统问诊配置 - $params = array(); - $params['inquiry_type'] = $order_inquiry['inquiry_type']; - $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; - $system_inquiry_config = SystemInquiryConfig::getOne($params); - if (empty($system_inquiry_config)){ - return fail(); - } - - // 问诊结束时间 - $complete_time = strtotime($order_inquiry['reception_time']) + $system_inquiry_config['duration'] * 60 - 10 * 60; - - // 检测问诊结束时间 预约时间不可超出视频问诊结束时间 - if (strtotime($reservation_time) >= $complete_time){ - return fail(HttpEnumCode::HTTP_ERROR, "预约时间不可超出视频问诊结束时间"); - } - - // 获取是否已经预约 - $is_reservation = false; - - $params = array(); - $params['order_inquiry_id'] = $order_inquiry_id; - $order_inquiry_video = OrderInquiryVideo::getOne($params); - if (!empty($order_inquiry_video)){ - // 检测是否已开过视频 - if ($order_inquiry_video['is_video'] == 1){ - return fail(HttpEnumCode::HTTP_ERROR, "已开过视频时间,无需再修改预约时间"); - } - - // 检测预约时间修改次数 - if ($order_inquiry_video['update_number'] >= 1){ - return fail(HttpEnumCode::HTTP_ERROR, "已无法设置/修改视频时间,可立即发起视频"); - } - - $is_reservation = true; - } - - Db::beginTransaction(); - - try { - if (empty($order_inquiry_video)){ - // 创建视频预约数据 - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $data['reservation_time'] = $reservation_time; - $order_inquiry_video = OrderInquiryVideo::addOrderInquiryVideo($data); - if (empty($order_inquiry_video)){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "设置失败"); - } - }else{ - // 修改预约时间 - $data = array(); - $data['reservation_time'] = $reservation_time; - $data['update_number'] = 1; - - $params = array(); - $params['inquiry_video_id'] = $order_inquiry_video['inquiry_video_id']; - $res = OrderInquiryVideo::edit($params,$data); - if (!$res){ - Db::rollBack(); - return fail(HttpEnumCode::SERVER_ERROR, "设置失败"); - } - } - - Db::commit(); - }catch (\Throwable $e){ - Db::rollBack(); - Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); - return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); - } - - // 发送消息 - try { - // 获取订单医生数据 - $params = array(); - $params['doctor_id'] = $order_inquiry['doctor_id']; - $user_doctor = UserDoctor::getOne($params); - if (empty($user_doctor)) { - 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消息 - $imService = new ImService(); - - 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); - - // 增加延迟队列通知-视频问诊即将开始-时间大于5分钟 - $time = strtotime($reservation_time) - 5*60; - if ($time > time()){ - $data = array(); - $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $message = new SendVideoNoticeDelayDirectProducer($data); - $message->setDelayMs(1000 * (strtotime($reservation_time) - time())); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - return fail(HttpEnumCode::SERVER_ERROR, "设置失败"); - } - } - }catch (\Throwable $e){ + $MessagePush->doctorGiveFreeRounds($times_number, $give_expiration_time); + } catch (\Throwable $e) { Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); } @@ -1547,15 +1373,19 @@ class InquiryService extends BaseService // 获取视频预约数据 $params = array(); $params['order_inquiry_id'] = $order_inquiry_id; - $order_inquiry_video = OrderInquiryVideo::getOne($params); - if (!empty($order_inquiry_video)){ + $video_reservation = VideoReservation::getOne($params); + if (!empty($video_reservation)) { $is_reservation_time = true; // 是否已设置预约时间 - if ($order_inquiry_video['is_video'] == 1){ + $update_number = $video_reservation['update_number']; // 修改次数 + + // 检测是否已开过视频 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $video_records = VideoRecord::getOne($params); + if (!empty($video_records)) { $is_video = true; // 是否已开视频(0:否 1:是) } - - $update_number = $order_inquiry_video['update_number']; // 修改次数 } $result = array(); @@ -1637,7 +1467,7 @@ class InquiryService extends BaseService $reception_time = [$start_date, $end_date]; - $inquiry_status_params = [4,5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $inquiry_status_params = [4, 5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params); @@ -1669,11 +1499,11 @@ class InquiryService extends BaseService $reception_time = [$start_date, $end_date]; - $inquiry_status_params = [4,5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $inquiry_status_params = [4, 5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $inquiry_type_not_params = [2,4]; + $inquiry_type_not_params = [2, 4]; - $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params,$inquiry_type_not_params); + $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); return $amount_total_sum ?: 0; } @@ -1736,9 +1566,9 @@ class InquiryService extends BaseService $inquiry_status_params = [5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $inquiry_type_not_params = [2,4]; + $inquiry_type_not_params = [2, 4]; - $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params,$inquiry_type_not_params); + $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); return $amount_total_sum ?: 0; } @@ -1784,9 +1614,9 @@ class InquiryService extends BaseService $inquiry_status_params = [6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $inquiry_type_not_params = [2,4]; + $inquiry_type_not_params = [2, 4]; - $order_inquiry = OrderInquiry::getCooperationDoctorCanWithdrawalInquiryOrder($params,$inquiry_status_params,$inquiry_type_not_params); + $order_inquiry = OrderInquiry::getCooperationDoctorCanWithdrawalInquiryOrder($params, $inquiry_status_params, $inquiry_type_not_params); if (empty($order_inquiry)) { return []; } @@ -1899,9 +1729,9 @@ class InquiryService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_coupons = OrderInquiryCoupon::getList($params); - if (!empty($order_inquiry_coupons)){ + if (!empty($order_inquiry_coupons)) { $userCouponService = new UserCouponService(); - foreach ($order_inquiry_coupons as $order_inquiry_coupon){ + foreach ($order_inquiry_coupons as $order_inquiry_coupon) { // 退还优惠卷 $userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']); @@ -2026,9 +1856,9 @@ class InquiryService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_inquiry_coupons = OrderInquiryCoupon::getList($params); - if (!empty($order_inquiry_coupons)){ + if (!empty($order_inquiry_coupons)) { $userCouponService = new UserCouponService(); - foreach ($order_inquiry_coupons as $order_inquiry_coupon){ + foreach ($order_inquiry_coupons as $order_inquiry_coupon) { // 退还优惠卷 $userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']); @@ -2153,7 +1983,7 @@ class InquiryService extends BaseService } // 随机初始时间 - $time = mt_rand(60,600); + $time = mt_rand(60, 600); $wait_pay_time = 60 * 30;// 待支付时间 $wait_assign_time = 60 * 5;// 待分配时间 $wait_inquiry_time = 0; // 待接诊时间 @@ -2188,7 +2018,7 @@ class InquiryService extends BaseService case '1': // 待支付 $wait_pay_time = $wait_pay_time - (time() - strtotime($order_inquiry['created_at'])); - if ($wait_pay_time < 0 ){ + if ($wait_pay_time < 0) { $wait_pay_time = 0; } @@ -2201,7 +2031,7 @@ class InquiryService extends BaseService case '3': // 待接诊 $wait_inquiry_time = $wait_inquiry_time - (time() - strtotime($order_inquiry['pay_time'])); - if ($wait_inquiry_time < 0 ){ + if ($wait_inquiry_time < 0) { $wait_inquiry_time = 0; } @@ -2210,7 +2040,7 @@ class InquiryService extends BaseService case '4': // 已接诊 $wait_finish_time = $wait_finish_time - (time() - strtotime($order_inquiry['reception_time'])); - if ($wait_finish_time < 0 ){ + if ($wait_finish_time < 0) { $wait_finish_time = 0; } @@ -2220,7 +2050,7 @@ class InquiryService extends BaseService break; } - if ($time < 0){ + if ($time < 0) { $time = 0; } diff --git a/app/Services/VideoService.php b/app/Services/VideoService.php index d0750b5..0cc3efa 100644 --- a/app/Services/VideoService.php +++ b/app/Services/VideoService.php @@ -2,9 +2,295 @@ namespace App\Services; +use App\Amqp\Producer\SendVideoNoticeDelayDirectProducer; +use App\Constants\HttpEnumCode; use App\Exception\BusinessException; +use App\Model\OrderInquiry; +use App\Model\SystemInquiryConfig; +use App\Model\User; +use App\Model\UserDoctor; +use App\Model\VideoRecord; +use App\Model\VideoReservation; +use App\Utils\Log; use Extend\TencentVideo\Safe as VideoSafe; +use Hyperf\Amqp\Producer; +use Hyperf\DbConnection\Db; +/** + * 视频 + */ class VideoService extends BaseService { + /** + * 医生设置视频预约时间 + * @return array + */ + public function addVideoReservationDate(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_inquiry_id = $this->request->input('order_inquiry_id'); + $reservation_time = $this->request->input('reservation_time'); + + // 检测预约时间 + if (time() >= strtotime($reservation_time)) { + return fail(HttpEnumCode::HTTP_ERROR, "预约时间须大于当前时间"); + } + + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $params['doctor_id'] = $user_info['client_user_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(); + } + + if ($order_inquiry['inquiry_type'] != 1) { + return fail(); + } + + if ($order_inquiry['inquiry_mode'] != 2) { + return fail(HttpEnumCode::HTTP_ERROR, "订单类型错误"); + } + + // 检测订单状态 + if ($order_inquiry['inquiry_status'] != 4) { + return fail(HttpEnumCode::HTTP_ERROR, "订单状态错误"); + } + + // 获取系统问诊配置 + $params = array(); + $params['inquiry_type'] = $order_inquiry['inquiry_type']; + $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; + $system_inquiry_config = SystemInquiryConfig::getOne($params); + if (empty($system_inquiry_config)) { + return fail(); + } + + // 问诊结束时间 + $complete_time = strtotime($order_inquiry['reception_time']) + $system_inquiry_config['duration'] * 60 - 10 * 60; + + // 检测问诊结束时间 预约时间不可超出视频问诊结束时间 + if (strtotime($reservation_time) >= $complete_time) { + return fail(HttpEnumCode::HTTP_ERROR, "预约时间不可超出视频问诊结束时间"); + } + + // 获取是否已经预约 + $is_reservation = false; + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $video_reservation = VideoReservation::getOne($params); + if (!empty($video_reservation)) { + // 检测预约时间修改次数 + if ($video_reservation['update_number'] >= 1) { + return fail(HttpEnumCode::HTTP_ERROR, "已无法设置/修改视频时间,可立即发起视频"); + } + + // 检测是否已开过视频 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $video_records = VideoRecord::getOne($params); + if (!empty($video_records)) { + return fail(HttpEnumCode::HTTP_ERROR, "已开过视频时间,无需再修改预约时间"); + } + + $is_reservation = true; + } + + Db::beginTransaction(); + + try { + if (empty($video_reservation)) { + // 获取用户-医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "设置失败"); + } + + // 创建视频预约数据 + $data = array(); + $data['patient_id'] = $order_inquiry['patient_id']; + $data['patient_user_id'] = $order_inquiry['user_id']; + $data['doctor_id'] = $order_inquiry['doctor_id']; + $data['doctor_user_id'] = $user_doctor['user_id']; + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['room_id'] = substr($order_inquiry['doctor_id'], -5) . substr(time(), -4); + $data['reservation_time'] = $reservation_time; + $video_reservation = VideoReservation::addVideoReservation($data); + if (empty($video_reservation)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "设置失败"); + } + } else { + // 修改预约时间 + $data = array(); + $data['reservation_time'] = $reservation_time; + $data['update_number'] = 1; + + $params = array(); + $params['inquiry_video_id'] = $video_reservation['inquiry_video_id']; + $res = VideoReservation::edit($params, $data); + if (!$res) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "设置失败"); + } + } + + Db::commit(); + } catch (\Throwable $e) { + Db::rollBack(); + Log::getInstance("InquiryService-addDoctorGiveInquiryOrder")->error($e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); + } + + // 发送消息 + try { + // 获取订单医生数据 + $params = array(); + $params['doctor_id'] = $order_inquiry['doctor_id']; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)) { + 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消息 + $imService = new ImService(); + + 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); + + // 增加延迟队列通知-视频问诊即将开始-时间大于5分钟 + $time = strtotime($reservation_time) - 5 * 60; + if ($time > time()) { + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $message = new SendVideoNoticeDelayDirectProducer($data); + $message->setDelayMs(1000 * (strtotime($reservation_time) - 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()); + } + + $result = array(); + $result['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id + $result['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号 + + return success($result); + } + + /** + * 创建音视频房间 + * @return array + */ + public function addVideoRoom(): array + { + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $order_inquiry_id = $this->request->input('order_inquiry_id'); + + // 获取问诊订单数据 + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $params['doctor_id'] = $user_info['client_user_id']; + $order_inquiry = OrderInquiry::getOne($params); + if (empty($order_inquiry)) { + return fail(); + } + + if ($order_inquiry['inquiry_type'] != 1) { + return fail(); + } + + if ($order_inquiry['inquiry_mode'] != 2) { + return fail(HttpEnumCode::HTTP_ERROR, "订单类型错误"); + } + + // 检测订单状态-问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + if ($order_inquiry['inquiry_status'] == 3) { + return fail(HttpEnumCode::HTTP_ERROR, "订单未接诊,无法发起视频"); + } + + if ($order_inquiry['inquiry_status'] == 5) { + return fail(HttpEnumCode::HTTP_ERROR, "订单已完成,无法发起视频"); + } + + if ($order_inquiry['inquiry_status'] == 6) { + return fail(HttpEnumCode::HTTP_ERROR, "订单已结束,无法发起视频"); + } + + if ($order_inquiry['inquiry_status'] == 7) { + return fail(HttpEnumCode::HTTP_ERROR, "订单已取消,无法发起视频"); + } + + $params = array(); + $params['order_inquiry_id'] = $order_inquiry_id; + $video_reservation = VideoReservation::getOne($params); + if (empty($video_reservation)) { + return fail(HttpEnumCode::HTTP_ERROR, "您还没有和患者预约视频时间,无法发起视频"); + } + + if (empty($video_reservation['room_id'])){ + // 视频房间创建错误,无房间号 + return fail(HttpEnumCode::SERVER_ERROR); + } + + Db::beginTransaction(); + + try { + // 增加视频记录 + $data = array(); + $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; + $data['room_id'] = $video_reservation['room_id']; + $data['video_status'] = 1; + $data['start_video_time'] = date('Y-m-d H:i:s', time()); + $video_records = VideoRecord::addVideoRecord($data); + if (empty($video_records)) { + Db::rollBack(); + return fail(HttpEnumCode::SERVER_ERROR, "发起视频失败"); + } + + Db::commit(); + } catch (\Throwable $e) { + Db::rollBack(); + Log::getInstance("VideoService-addVideoRoom")->error($e->getMessage()); + return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage()); + } + + return success($video_reservation['room_id']); + } } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 7583e49..f1dab07 100644 --- a/config/routes.php +++ b/config/routes.php @@ -34,6 +34,7 @@ use App\Controller\UserController; use App\Controller\UserDoctorController; use App\Controller\UserPatientController; use App\Controller\UserPharmacistController; +use App\Controller\VideoController; use App\Middleware\Rule\LockRequestMiddleware; use Hyperf\HttpServer\Router\Router; @@ -142,7 +143,10 @@ Router::addGroup('/doctor', function () { // 视频 Router::addGroup('/video', function () { // 医生设置视频预约时间 - Router::post('/date', [InquiryController::class, 'addVideoReservationDate']); + Router::post('/date', [VideoController::class, 'addVideoReservationDate']); + + // 创建音视频房间 + Router::post('/room', [VideoController::class, 'addVideoRoom']); }); }); diff --git a/extend/TencentVideo/Safe.php b/extend/TencentVideo/Safe.php index 3f54464..62a679c 100644 --- a/extend/TencentVideo/Safe.php +++ b/extend/TencentVideo/Safe.php @@ -24,14 +24,16 @@ class Safe extends Base */ public function validateSign(string $body, string $sign): bool { - $token = config('video.token'); - if (empty($token)) { - throw new BusinessException("Video Token Config Error"); - } +// $token = config('video.token'); +// if (empty($token)) { +// throw new BusinessException("Video Token Config Error"); +// } +// dump($token); - $hash = hash_hmac( 'sha256', $body, "123654", true ); + $hash = hash_hmac( 'sha256', $body, "NDc5MzExMDIYdusl2NDMxNDg5L", true ); $sys_sign = base64_encode($hash); + dump($sign); dump($sys_sign); if ($sign != $sys_sign) { @@ -40,4 +42,5 @@ class Safe extends Base return true; } + } \ No newline at end of file