医生设置视频预约时间

This commit is contained in:
wucongxing 2024-01-15 09:06:19 +08:00
parent 4226ace7c0
commit cf7ea42781
4 changed files with 189 additions and 13 deletions

View File

@ -163,4 +163,20 @@ class InquiryController extends AbstractController
$data = $InquiryService->addDoctorGiveInquiryOrder();
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);
}
}

View File

@ -14,8 +14,7 @@ use Hyperf\Snowflake\Concern\Snowflake;
* @property string $reservation_time 预约时间
* @property int $is_send_reservation_notice 是否已发送预约通知0: 1:是)
* @property int $is_video 是否已开视频0: 1:是)
* @property string $start_time 开始时间
* @property string $end_time 结束时间
* @property int $update_number 修改次数
* @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间
*/
@ -31,7 +30,7 @@ class OrderInquiryVideo extends Model
/**
* The attributes that are mass assignable.
*/
protected array $fillable = ['inquiry_video_id', 'order_inquiry_id', 'reservation_time', 'is_send_reservation_notice', 'is_video', 'start_time', 'end_time', 'created_at', 'updated_at'];
protected array $fillable = ['inquiry_video_id', 'order_inquiry_id', 'reservation_time', 'is_send_reservation_notice', 'is_video', 'update_number', 'created_at', 'updated_at'];
protected string $primaryKey = "inquiry_video_id";
@ -56,4 +55,19 @@ class OrderInquiryVideo extends Model
{
return self::where($params)->get($fields);
}
/**
* 新增-批量
* @param array $data 新增数据
* @return \Hyperf\Database\Model\Model|OrderInquiryVideo
*/
public static function addOrderInquiryVideo(array $data): \Hyperf\Database\Model\Model|OrderInquiryVideo
{
return self::create($data);
}
public static function edit(array $params = [], array $data = []): int
{
return self::where($params)->update($data);
}
}

View File

@ -49,6 +49,10 @@ class InquiryRequest extends FormRequest
'times_number', // 沟通次数0为不限制次数
'duration', // 沟通时长分钟0为不限制时长
],
'addVideoReservationDate' => [ // 医生设置视频预约时间
'order_inquiry_id',
'reservation_time', // 预约时间
],
];
/**
@ -87,6 +91,7 @@ class InquiryRequest extends FormRequest
'inquiry_status' => 'required|integer|min:0|max:4',
'times_number' => "required|min:0|max:999|numeric",
'duration' => "required|min:0|max:21600|numeric",
'reservation_time' => "required",
];
}
@ -123,6 +128,7 @@ class InquiryRequest extends FormRequest
'inquiry_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'order_inquiry_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'reservation_time.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
];
}
}

View File

@ -886,7 +886,6 @@ class InquiryService extends BaseService
$follow = false; // 关注状态
$is_evaluation = false; // 评价状态
$is_reservation_video = false; // 预约视频状态
// 获取医生问诊配置-问诊购药
$multi_point_enable = 0;
@ -917,14 +916,6 @@ class InquiryService extends BaseService
$is_evaluation = OrderEvaluation::getExists($params);
}
// 获取视频数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_video = OrderInquiryVideo::getOne($params);
if (!empty($order_inquiry_video)){
$is_reservation_video = true;
}
$result = array();
$result['doctor_user_id'] = $user_doctor['user_id'];
$result['patient_user_id'] = $order_inquiry['user_id'];
@ -945,7 +936,6 @@ class InquiryService extends BaseService
$result['reception_time'] = $order_inquiry['reception_time'] ?: null; // 接诊时间
$result['multi_point_status'] = $user_doctor['multi_point_status'] ?: null;// 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
$result['multi_point_enable'] = $multi_point_enable;// 医生问诊购药是否开启
$result['is_reservation_video'] = $is_reservation_video;// 预约视频状态
return success($result);
}
@ -1321,6 +1311,156 @@ class InquiryService extends BaseService
return success($result);
}
/**
* 医生设置视频预约时间
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
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 (time() >= $complete_time){
return fail(HttpEnumCode::HTTP_ERROR, "已无法设置/修改视频时间,可立即发起视频");
}
// 获取是否已经预约
$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, "已无法设置/修改视频时间,可立即发起视频");
}
}
// 创建订单
Db::beginTransaction();
$generator = $this->container->get(IdGeneratorInterface::class);
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, "赠送失败");
}
// 发送im消息
$imService = new ImService();
// 发送短信-患者-视频预约成功
// 成功预约视频问诊时间
// 成功修改视频问诊时间
// 赠送回合数消息
$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);
}
/**
* 获取医生未接诊订单数量
* @param string $doctor_id 医生id