From 562163ea3671c0649ad53487007b5c4ecd127424 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Thu, 11 May 2023 13:35:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=82=A3=E8=80=85=E7=AB=AF?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/UserDoctor.php | 31 +----------- app/Services/PatientDoctorService.php | 73 +++++++++++++++++---------- 2 files changed, 47 insertions(+), 57 deletions(-) diff --git a/app/Model/UserDoctor.php b/app/Model/UserDoctor.php index f3e743f..68bdc9c 100644 --- a/app/Model/UserDoctor.php +++ b/app/Model/UserDoctor.php @@ -203,36 +203,9 @@ class UserDoctor extends Model * @param int|null $per_page * @return array */ - public static function getInquiryDoctorPage(string $keyword = "", array $hospital_params = [], array $doctor_params = [], array $doctor_expertise_params = [], string|int $sort_order = 1, array $fields = ["*"], int $page = null, ?int $per_page = 10): array + public static function getInquiryDoctorPage(string $keyword = "", array $doctor_params = [], string|int $sort_order = 1, array $fields = ["*"], int $page = null, ?int $per_page = 10): array { - $query = self::with([ - "Hospital:hospital_id,hospital_name,hospital_status,hospital_level_name,province_id,city_id", - "DoctorExpertise" => function ($query) use ($doctor_expertise_params) { - $query->where($doctor_expertise_params); - }, - "DoctorExpertise.DiseaseClassExpertise:expertise_id,expertise_name", - "DoctorInquiryConfig" => function ($query) use ($sort_order) { - $params = array(); - $params['inquiry_mode'] = 1;// 接诊方式:图文 - $query->where($params)->whereIn('inquiry_type', [1, 3]); - if ($sort_order == 1) { - // 综合 - $query->orderBy('inquiry_price', 'asc');// 价格从低到高 - } elseif ($sort_order == 3) { - // 价格从低到高 - $query->orderBy('inquiry_price', 'asc'); - } elseif ($sort_order == 4) { - // 价格从高到低 - $query->orderBy('inquiry_price', 'desc');// 价格从高到低 - } - - return $query; - }, - ]) - ->where($doctor_params) - ->whereHas('Hospital', function ($query) use ($hospital_params) { - $query->where($hospital_params); - }) + $query = self::where($doctor_params) ->when($keyword, function ($query, $keyword) { $query->where(function ($query) use ($keyword) { $query->orwhere("user_name", 'like', '%' . $keyword . '%'); diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index bb94e67..6ca8c6e 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -4,7 +4,9 @@ namespace App\Services; use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; +use App\Model\DiseaseClassExpertise; use App\Model\DoctorExpertise; +use App\Model\DoctorInquiryConfig; use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel; use App\Model\Hospital; use App\Model\OrderEvaluation; @@ -36,24 +38,7 @@ class PatientDoctorService extends BaseService $per_page = $this->request->input('per_page',10); // 组合条件 - $hospital_params = array();// 医院搜索 $doctor_params = array();// 医生搜索 - $doctor_expertise_params = array();// 医生专长搜索 - - // 省市区 - 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]; - } - - // 医生专长 - if (!empty($expertise_id)) { - $doctor_expertise_params['expertise_id'] = $expertise_id; - } // 固定医生查询条件 $doctor_params['status'] = 1; // 状态(0:禁用 1:正常 2:删除) @@ -88,28 +73,41 @@ class PatientDoctorService extends BaseService "be_good_at", ]; - $user_doctors = UserDoctor::getInquiryDoctorPage($keyword, $hospital_params, $doctor_params, $doctor_expertise_params, $sort_order, $fields,$page,$per_page); + $user_doctors = UserDoctor::getInquiryDoctorPage($keyword, $doctor_params, $sort_order, $fields,$page,$per_page); // 处理数据 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'])) { - $data['expertise_name'] = $data['DiseaseClassExpertise']['expertise_name']; + // 处理医生专长 + $user_doctor['doctor_expertises'] = []; + + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id']; + $doctor_expertises = DoctorExpertise::getList($params); + if (!empty($doctor_expertises)){ + foreach ($doctor_expertises as &$doctor_expertise){ + $params = array(); + $params['expertise_id'] = $doctor_expertise['expertise_id']; + $disease_class_expertise = DiseaseClassExpertise::getOne($params); + if (!empty($disease_class_expertise)){ + $doctor_expertise['expertise_name'] = $disease_class_expertise['expertise_name']; } - unset($data['DiseaseClassExpertise']); } + + $user_doctor['doctor_expertises'] = $doctor_expertises; } - // 问诊价格 + // 处理问诊价格 $user_doctor['price'] = 0; $user_doctor['free_clinic_price'] = 0; - if (!empty($user_doctor['DoctorInquiryConfig'])) { - foreach ($user_doctor['DoctorInquiryConfig'] as $doctor_inquiry_config) { + + $params = array(); + $params['inquiry_mode'] = 1; + $doctor_inquiry_configs = DoctorInquiryConfig::getInquiryConfigList($params,['*']); + if (!empty($doctor_inquiry_configs)) { + foreach ($doctor_inquiry_configs as $doctor_inquiry_config) { if ($doctor_inquiry_config['inquiry_mode'] == 1) { if ($doctor_inquiry_config['inquiry_type'] == 1) { // 专家 @@ -121,7 +119,26 @@ class PatientDoctorService extends BaseService } } } - unset($user_doctor['DoctorInquiryConfig']); + unset($doctor_inquiry_configs); + } + + // 处理医生医院 + $user_doctor['hospital'] = []; + + $params = array(); + $params['hospital_id'] = $user_doctor['hospital_id']; + + $fields = [ + 'hospital_id', + 'hospital_name', + 'hospital_status', + 'hospital_level_name', + 'province_id', + 'city_id' + ]; + $hospital = Hospital::getOne($params,$fields); + if (!empty($hospital)){ + $user_doctor['hospital'] = $hospital; } // 好评率-超过5个已结束的订单后展示