医生设置视频预约时间
This commit is contained in:
parent
4226ace7c0
commit
cf7ea42781
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user