检测是否可以接诊
This commit is contained in:
@@ -11,6 +11,8 @@ use App\Model\OrderEvaluation;
|
||||
use App\Model\OrderInquiry;
|
||||
use App\Model\PatientFollow;
|
||||
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
|
||||
use App\Model\SystemInquiryConfig;
|
||||
use App\Model\SystemInquiryTime;
|
||||
use App\Model\UserDoctor;
|
||||
|
||||
class PatientDoctorService extends BaseService
|
||||
@@ -34,17 +36,17 @@ class PatientDoctorService extends BaseService
|
||||
$doctor_expertise_params = array();// 医生专长搜索
|
||||
|
||||
// 省市区
|
||||
if (!empty($province_id) ){
|
||||
if (empty($city_id)){
|
||||
if (!empty($province_id)) {
|
||||
if (empty($city_id)) {
|
||||
// 省份存在时需和城市在一块
|
||||
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
|
||||
}
|
||||
$hospital_params[] = ['province_id','=',$province_id];
|
||||
$hospital_params[] = ['city_id','=',$city_id];
|
||||
$hospital_params[] = ['province_id', '=', $province_id];
|
||||
$hospital_params[] = ['city_id', '=', $city_id];
|
||||
}
|
||||
|
||||
// 医生专长
|
||||
if (!empty($expertise_id)){
|
||||
if (!empty($expertise_id)) {
|
||||
$doctor_expertise_params['expertise_id'] = $expertise_id;
|
||||
}
|
||||
|
||||
@@ -82,17 +84,17 @@ class PatientDoctorService extends BaseService
|
||||
"be_good_at",
|
||||
];
|
||||
|
||||
$user_doctors = UserDoctor::getInquiryDoctorPage($keyword,$hospital_params,$doctor_params,$doctor_expertise_params,$sort_order,$fields);
|
||||
$user_doctors = UserDoctor::getInquiryDoctorPage($keyword, $hospital_params, $doctor_params, $doctor_expertise_params, $sort_order, $fields);
|
||||
|
||||
// 处理数据
|
||||
if (!empty($user_doctors['data'])){
|
||||
foreach ($user_doctors['data'] as &$user_doctor){
|
||||
if (!empty($user_doctors['data'])) {
|
||||
foreach ($user_doctors['data'] as &$user_doctor) {
|
||||
$user_doctor['doctor_title_name'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
|
||||
|
||||
// 医生专长
|
||||
if (!empty($user_doctor['DoctorExpertise'])){
|
||||
foreach ($user_doctor['DoctorExpertise'] as &$data){
|
||||
if (!empty($data['DiseaseClassExpertise'])){
|
||||
if (!empty($user_doctor['DoctorExpertise'])) {
|
||||
foreach ($user_doctor['DoctorExpertise'] as &$data) {
|
||||
if (!empty($data['DiseaseClassExpertise'])) {
|
||||
$data['expertise_name'] = $data['DiseaseClassExpertise']['expertise_name'];
|
||||
}
|
||||
unset($data['DiseaseClassExpertise']);
|
||||
@@ -102,9 +104,9 @@ class PatientDoctorService extends BaseService
|
||||
// 问诊价格
|
||||
$user_doctor['price'] = 0;
|
||||
$user_doctor['free_clinic_price'] = 0;
|
||||
if (!empty($user_doctor['DoctorInquiryConfig'])){
|
||||
if (!empty($user_doctor['DoctorInquiryConfig'])) {
|
||||
foreach ($user_doctor['DoctorInquiryConfig'] as $doctor_inquiry_config) {
|
||||
if ($doctor_inquiry_config['inquiry_mode'] == 1){
|
||||
if ($doctor_inquiry_config['inquiry_mode'] == 1) {
|
||||
if ($doctor_inquiry_config['inquiry_type'] == 1) {
|
||||
// 专家
|
||||
$user_doctor['price'] = $doctor_inquiry_config['inquiry_price'] ?? 0;
|
||||
@@ -128,9 +130,9 @@ class PatientDoctorService extends BaseService
|
||||
$params['doctor_id'] = $user_doctor['doctor_id'];
|
||||
$params['inquiry_status'] = 6; // 已结束
|
||||
$inquiry_order_count = OrderInquiry::getCount($params);
|
||||
if (empty($inquiry_order_count) || $inquiry_order_count == 0){
|
||||
if (empty($inquiry_order_count) || $inquiry_order_count == 0) {
|
||||
$user_doctor['is_display_score'] = false;
|
||||
}else{
|
||||
} else {
|
||||
$user_doctor['is_display_score'] = true;
|
||||
}
|
||||
|
||||
@@ -184,9 +186,9 @@ class PatientDoctorService extends BaseService
|
||||
$params['doctor_id'] = $doctor_id;
|
||||
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
|
||||
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
|
||||
$user_doctor = UserDoctor::getOne($params,$fields);
|
||||
if (empty($user_doctor)){
|
||||
return fail(HttpEnumCode::HTTP_SUCCESS,"医生错误");
|
||||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||||
if (empty($user_doctor)) {
|
||||
return fail(HttpEnumCode::HTTP_SUCCESS, "医生错误");
|
||||
}
|
||||
|
||||
$result = $user_doctor->toArray();
|
||||
@@ -206,8 +208,8 @@ class PatientDoctorService extends BaseService
|
||||
|
||||
$params = array();
|
||||
$params['hospital_id'] = $user_doctor['hospital_id'];
|
||||
$hospital = Hospital::getOne($params,$fields);
|
||||
if (!empty($hospital)){
|
||||
$hospital = Hospital::getOne($params, $fields);
|
||||
if (!empty($hospital)) {
|
||||
$result['hospital'] = $hospital;
|
||||
}
|
||||
|
||||
@@ -231,18 +233,18 @@ class PatientDoctorService extends BaseService
|
||||
// 获取问诊价格
|
||||
// 专家-公益
|
||||
$params = array();
|
||||
$params[] = ['doctor_id','=',$doctor_id];
|
||||
$params[] = ['inquiry_mode','=',1];// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
|
||||
$params[] = ['doctor_id', '=', $doctor_id];
|
||||
$params[] = ['inquiry_mode', '=', 1];// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
|
||||
$doctor_inquiry_config = DoctorInquiryConfigModel::getInquiryConfigList($params);
|
||||
if (!empty($doctor_inquiry_config)){
|
||||
foreach ($doctor_inquiry_config as &$value){
|
||||
if (!empty($doctor_inquiry_config)) {
|
||||
foreach ($doctor_inquiry_config as &$value) {
|
||||
// 获取医生当日已付款的全部订单
|
||||
$params = array();
|
||||
$params[] = ['doctor_id','=',$doctor_id];
|
||||
$params[] = ['inquiry_type','=',$value['inquiry_type']];
|
||||
$params[] = ['inquiry_mode','=',1];
|
||||
$params[] = ['inquiry_status','=',3];
|
||||
$params[] = ['inquiry_refund_status','=',0];
|
||||
$params[] = ['doctor_id', '=', $doctor_id];
|
||||
$params[] = ['inquiry_type', '=', $value['inquiry_type']];
|
||||
$params[] = ['inquiry_mode', '=', 1];
|
||||
$params[] = ['inquiry_status', '=', 3];
|
||||
$params[] = ['inquiry_refund_status', '=', 0];
|
||||
$value['order_inquiry_count'] = OrderInquiry::getCount($params);
|
||||
}
|
||||
$result['doctor_inquiry_config'] = $doctor_inquiry_config;
|
||||
@@ -257,9 +259,9 @@ class PatientDoctorService extends BaseService
|
||||
$params['doctor_id'] = $user_doctor['doctor_id'];
|
||||
$params['inquiry_status'] = 6; // 已结束
|
||||
$inquiry_order_count = OrderInquiry::getCount($params);
|
||||
if (empty($inquiry_order_count) || $inquiry_order_count == 0){
|
||||
if (empty($inquiry_order_count) || $inquiry_order_count == 0) {
|
||||
$result['is_display_score'] = false;
|
||||
}else{
|
||||
} else {
|
||||
$result['is_display_score'] = true;
|
||||
}
|
||||
|
||||
@@ -297,8 +299,8 @@ class PatientDoctorService extends BaseService
|
||||
$params['doctor_id'] = $doctor_id;
|
||||
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
|
||||
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
|
||||
$user_doctor = UserDoctor::getOne($params,$fields);
|
||||
if (empty($user_doctor)){
|
||||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||||
if (empty($user_doctor)) {
|
||||
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
|
||||
}
|
||||
|
||||
@@ -315,8 +317,8 @@ class PatientDoctorService extends BaseService
|
||||
|
||||
$params = array();
|
||||
$params['hospital_id'] = $user_doctor['hospital_id'];
|
||||
$hospital = Hospital::getOne($params,$fields);
|
||||
if (!empty($hospital)){
|
||||
$hospital = Hospital::getOne($params, $fields);
|
||||
if (!empty($hospital)) {
|
||||
$user_doctor['hospital'] = $hospital;
|
||||
}
|
||||
|
||||
@@ -326,4 +328,119 @@ class PatientDoctorService extends BaseService
|
||||
|
||||
return success($user_doctor);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否可以接诊
|
||||
* @return array
|
||||
*/
|
||||
public function getDoctorInquiryCheck(): array
|
||||
{
|
||||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||||
|
||||
$inquiry_type = $this->request->input('inquiry_type');
|
||||
$inquiry_mode = $this->request->input('inquiry_mode');
|
||||
$doctor_id = $this->request->input('doctor_id','');
|
||||
|
||||
// 检测是否存在未完成的问诊订单
|
||||
$params = array();
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$params['inquiry_type'] = $inquiry_type;
|
||||
$params['inquiry_mode'] = $inquiry_mode;
|
||||
$order_inquiry = OrderInquiry::getOne($params);
|
||||
if (!empty($order_inquiry)) {
|
||||
// 1:待支付 2:待分配 3:待接诊 4:已接诊
|
||||
if (in_array($order_inquiry['inquiry_status'], [1, 2, 3, 4])) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR,"当前有未完成服务,不允许再次购买",[$order_inquiry['order_inquiry_id']]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($doctor_id)){
|
||||
// 获取医生信息
|
||||
$params = array();
|
||||
$params['doctor_id'] = $user_info['client_user_id'];
|
||||
|
||||
$fields = [
|
||||
'doctor_id',
|
||||
'user_name',
|
||||
'iden_auth_status',
|
||||
'idcard_status',
|
||||
'multi_point_status',
|
||||
'avatar',
|
||||
'is_bind_bank',
|
||||
];
|
||||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||||
if (empty($user_doctor)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||||
}
|
||||
|
||||
// 检测医生身份认证
|
||||
$UserDoctorService = new UserDoctorService();
|
||||
$res = $UserDoctorService->checkDoctorAuth($user_doctor);
|
||||
if ($res !== true) {
|
||||
return fail();
|
||||
}
|
||||
|
||||
if ($user_doctor['is_img_expert_reception'] != 1) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "医生未开通在线问诊服务");
|
||||
}
|
||||
}
|
||||
|
||||
if ($inquiry_type == 2 || $inquiry_type == 4){
|
||||
// 快速问诊-问诊购药
|
||||
// 获取问诊配置
|
||||
$params = array();
|
||||
$params['inquiry_type'] = $inquiry_type;
|
||||
$params['inquiry_mode'] = $inquiry_mode;
|
||||
$system_inquiry_config = SystemInquiryConfig::getOne($params);
|
||||
if (empty($system_inquiry_config)){
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
// 获取系统工作时间
|
||||
$params = array();
|
||||
$params['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id'];
|
||||
$system_inquiry_time = SystemInquiryTime::getList($params);
|
||||
if (empty($system_inquiry_time)){
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
// 检测当前是否坐班时间
|
||||
$is_time_pass = false;
|
||||
|
||||
foreach ($system_inquiry_time as $item){
|
||||
$start_time = strtotime(date('Y-m-d') . ' ' .$item['start_time']);
|
||||
$end_time = strtotime(date('Y-m-d') . ' ' .$item['end_time']);
|
||||
if ($start_time < time() && $end_time > time()){
|
||||
// 符合当前时间区间
|
||||
$is_time_pass = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$is_time_pass){
|
||||
// 非坐班时间
|
||||
// 检测是否存在对应问诊的在线医生
|
||||
$UserDoctorService = new UserDoctorService();
|
||||
$is_online = $UserDoctorService->checkDoctorOnline($inquiry_type);
|
||||
if (!$is_online){
|
||||
$UserDoctorService = new UserDoctorService();
|
||||
|
||||
// 获取当前时间10分钟前接诊中的医生
|
||||
$doctors = $UserDoctorService->getBeforeCurrentTimeDoctor(10,$inquiry_type);
|
||||
if (empty($doctors)){
|
||||
// 获取当前时间30分钟前接诊中的医生
|
||||
$doctors = $UserDoctorService->getBeforeCurrentTimeDoctor(30,$inquiry_type);
|
||||
if (empty($doctors)){
|
||||
return fail(HttpEnumCode::HTTP_ERROR,'当前不再就诊时间范围内,请您选择其它问诊服务');
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
// 坐班时间,检测全部医生接诊是否达到上限-暂不处理
|
||||
// 获取符合条件医生
|
||||
// 获取当前医生接诊订单数
|
||||
}
|
||||
}
|
||||
|
||||
return success();
|
||||
}
|
||||
}
|
||||
@@ -771,5 +771,70 @@ class UserDoctorService extends BaseService
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测是否存在对应问诊的在线医生
|
||||
* @param int|string $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
* @return bool
|
||||
*/
|
||||
public function checkDoctorOnline(int|string $inquiry_type): bool
|
||||
{
|
||||
$params = array();
|
||||
$params['status'] = 1; // 状态
|
||||
$params['idcard_status'] = 1; // 实名认证状态
|
||||
$params['iden_auth_status'] = 1;// 身份认证状态
|
||||
|
||||
if ($inquiry_type == 4){
|
||||
// 问诊购药
|
||||
$params['multi_point_status'] = 1;// 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
|
||||
}
|
||||
|
||||
$params['is_online'] = 1;// 是否在线(0:不在线 1:在线)
|
||||
|
||||
switch ($inquiry_type) {
|
||||
case 1:
|
||||
// 专家
|
||||
$params['is_img_expert_reception'] = 1;// 是否参加专家图文接诊(0:否 1:是)
|
||||
break;
|
||||
case 2:
|
||||
// 快速
|
||||
$params['is_img_quick_reception'] = 1;// 是否参加快速图文接诊(0:否 1:是)
|
||||
break;
|
||||
case 3:
|
||||
// 公益
|
||||
$params['is_img_welfare_reception'] = 1;// 是否参加公益图文问诊(0:否 1:是)
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new BusinessException();
|
||||
break;
|
||||
}
|
||||
|
||||
return UserDoctor::getExists($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前时间N分钟前接诊中的医生
|
||||
* @param string|int $minute 分钟
|
||||
* @param int|string $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
* @return array
|
||||
*/
|
||||
public function getBeforeCurrentTimeDoctor(string|int $minute,int|string $inquiry_type): array
|
||||
{
|
||||
// 获取当前时间n分钟前时间
|
||||
$date = date('Y-m-d H:i:s',time() - $minute * 60);
|
||||
|
||||
$params = array();
|
||||
$params[] = ['inquiry_type','=',$inquiry_type]; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
$params[] = ['inquiry_mode','=',1];
|
||||
$params[] = ['reception_time','>',$date];
|
||||
|
||||
$inquiry_status_params = array();
|
||||
$inquiry_status_params = [4,5];
|
||||
$order_inquiry = OrderInquiry::getInquiryStatusList($params,$inquiry_status_params);
|
||||
if (empty($order_inquiry)){
|
||||
return [];
|
||||
}
|
||||
|
||||
return $order_inquiry->toArray();
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
|
||||
|
||||
/**
|
||||
* 患者
|
||||
*/
|
||||
class UserPatientService extends BaseService
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user