修改了预约视频时间、增加了创建音视频房间接口
This commit is contained in:
parent
fcfb84e6c6
commit
10aae768cb
@ -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("修改失败");
|
||||
|
||||
@ -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字段");
|
||||
|
||||
@ -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
|
||||
|
||||
49
app/Controller/VideoController.php
Normal file
49
app/Controller/VideoController.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Request\InquiryRequest;
|
||||
use App\Request\VideoRequest;
|
||||
use App\Services\InquiryService;
|
||||
use App\Services\VideoService;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
/**
|
||||
* 视频
|
||||
*/
|
||||
class VideoController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* 医生设置视频预约时间
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function addVideoReservationDate(): ResponseInterface
|
||||
{
|
||||
$request = $this->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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
88
app/Model/VideoReservation.php
Normal file
88
app/Model/VideoReservation.php
Normal file
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
|
||||
|
||||
use Hyperf\Snowflake\Concern\Snowflake;
|
||||
|
||||
/**
|
||||
* @property int $reservation_id 主键id
|
||||
* @property int $patient_id 患者id
|
||||
* @property int $patient_user_id 患者用户id
|
||||
* @property int $doctor_id 医生id
|
||||
* @property int $doctor_user_id 医生用户id
|
||||
* @property int $order_inquiry_id 问诊订单id
|
||||
* @property string $room_id 房间号
|
||||
* @property string $reservation_time 预约时间
|
||||
* @property int $is_send_reservation_notice 是否已发送预约通知(0:否 1:是)
|
||||
* @property int $update_number 修改次数
|
||||
* @property \Carbon\Carbon $created_at 创建时间
|
||||
* @property \Carbon\Carbon $updated_at 修改时间
|
||||
*/
|
||||
class VideoReservation extends Model
|
||||
{
|
||||
use Snowflake;
|
||||
|
||||
/**
|
||||
* The table associated with the model.
|
||||
*/
|
||||
protected ?string $table = 'video_reservation';
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*/
|
||||
protected array $fillable = ['reservation_id', 'patient_id', 'patient_user_id', 'doctor_id', 'doctor_user_id', 'order_inquiry_id', 'room_id', 'reservation_time', 'is_send_reservation_notice', 'update_number', 'created_at', 'updated_at'];
|
||||
|
||||
protected string $primaryKey = "reservation_id";
|
||||
|
||||
/**
|
||||
* 获取信息-单条
|
||||
* @param array $params
|
||||
* @param array $fields
|
||||
* @return object|null
|
||||
*/
|
||||
public static function getOne(array $params, array $fields = ['*']): object|null
|
||||
{
|
||||
return self::where($params)->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);
|
||||
}
|
||||
}
|
||||
52
app/Request/VideoRequest.php
Normal file
52
app/Request/VideoRequest.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Request;
|
||||
|
||||
use App\Constants\HttpEnumCode;
|
||||
use Hyperf\Validation\Request\FormRequest;
|
||||
use Hyperf\Validation\Rule;
|
||||
|
||||
class VideoRequest extends FormRequest
|
||||
{
|
||||
protected array $scenes = [
|
||||
'addVideoReservationDate' => [ // 医生设置视频预约时间
|
||||
'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),
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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']);
|
||||
}
|
||||
}
|
||||
@ -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']);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user