修改获取问诊医生列表
This commit is contained in:
+79
-29
@@ -214,7 +214,8 @@ class UserDoctor extends Model
|
||||
* @param array $hospital_params 医院搜索条件
|
||||
* @param array $doctor_params 医生搜索条件
|
||||
* @param array $doctor_expertise_params
|
||||
* @param array $doctor_inquiry_config_params
|
||||
* @param array $inquiry_type
|
||||
* @param array $inquiry_mode
|
||||
* @param string|int $is_first_online 是否优先在线(1:是)
|
||||
* @param string|int $sort_order
|
||||
* @param array $fields
|
||||
@@ -222,7 +223,7 @@ 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 = [],array $doctor_inquiry_config_params = [],string|int $is_first_online = 0, string|int $sort_order = 1, array $fields = ["*"], int $page = null, ?int $per_page = 10): array
|
||||
public static function getInquiryDoctorPage(string $keyword = "", array $hospital_params = [], array $doctor_params = [], array $doctor_expertise_params = [],array $inquiry_type = [],array $inquiry_mode = [],string|int $is_first_online = 0, 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",
|
||||
@@ -245,23 +246,42 @@ class UserDoctor extends Model
|
||||
})
|
||||
->whereHas('DoctorExpertise', function ($query) use ($doctor_expertise_params) {
|
||||
$query->where($doctor_expertise_params);
|
||||
})
|
||||
->whereHas('DoctorInquiryConfig', function ($query) use ($doctor_inquiry_config_params) {
|
||||
$params = array();
|
||||
$params['is_enable'] = 1;
|
||||
|
||||
if (!empty($doctor_inquiry_config_params)){
|
||||
if (!empty($doctor_inquiry_config_params['inquiry_mode'])){
|
||||
$params['inquiry_mode'] = $doctor_inquiry_config_params['inquiry_mode'];
|
||||
}
|
||||
|
||||
if (!empty($doctor_inquiry_config_params['inquiry_type'])){
|
||||
$params['inquiry_type'] = $doctor_inquiry_config_params['inquiry_type'];
|
||||
}
|
||||
}
|
||||
|
||||
$query->where($params);
|
||||
});
|
||||
// ->whereHas('DoctorInquiryConfig', function ($query) use ($doctor_inquiry_config_params) {
|
||||
// $params = array();
|
||||
// $params['is_enable'] = 1;
|
||||
//
|
||||
// if (!empty($doctor_inquiry_config_params)){
|
||||
// if (!empty($doctor_inquiry_config_params['inquiry_mode'])){
|
||||
// $params['inquiry_mode'] = $doctor_inquiry_config_params['inquiry_mode'];
|
||||
// }
|
||||
//
|
||||
// if (!empty($doctor_inquiry_config_params['inquiry_type'])){
|
||||
// $params['inquiry_type'] = $doctor_inquiry_config_params['inquiry_type'];
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// $query->where($params);
|
||||
// });
|
||||
// ->whereHas('DoctorInquiryConfig', function ($query) use ($doctor_inquiry_config_params) {
|
||||
// $params = array();
|
||||
// $params['is_enable'] = 1;
|
||||
//
|
||||
// if (!empty($doctor_inquiry_config_params)){
|
||||
// if (!empty($doctor_inquiry_config_params['inquiry_mode'])){
|
||||
// $inquiry_mode = explode(',',$doctor_inquiry_config_params['inquiry_mode']);
|
||||
// $query->whereIn('inquiry_mode', $inquiry_mode);
|
||||
// }
|
||||
//
|
||||
// if (!empty($doctor_inquiry_config_params['inquiry_type'])){
|
||||
// $inquiry_type = explode(',',$doctor_inquiry_config_params['inquiry_type']);
|
||||
// $query->whereIn('inquiry_type', $inquiry_type);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// $query->where($params);
|
||||
// });
|
||||
|
||||
|
||||
if ($is_first_online == 1){
|
||||
$query->join('user as u', function ($query) {
|
||||
@@ -272,16 +292,46 @@ class UserDoctor extends Model
|
||||
}
|
||||
|
||||
if (!empty($sort_order)){
|
||||
// if (in_array($sort_order,[1,3,4])){
|
||||
// $query = $query->join('doctor_inquiry_config', function ($query) {
|
||||
// $query->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id')
|
||||
// ->whereIn('inquiry_type', [1, 3])
|
||||
// ->whereIn('inquiry_mode', [1,2,6,7])
|
||||
// ->orderBy('inquiry_price', 'desc')
|
||||
// ->take(1);
|
||||
// })
|
||||
// ->select("user_doctor.*")
|
||||
// ->groupBy("user_doctor.doctor_id");
|
||||
// }
|
||||
|
||||
// select doctor_id, min(price) price_min from price group by doctor_id
|
||||
if (in_array($sort_order,[1,3,4])){
|
||||
$query = $query->join('doctor_inquiry_config', function ($query) {
|
||||
$query->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id')
|
||||
->whereIn('inquiry_type', [1, 3])
|
||||
->whereIn('inquiry_mode', [1,2,6,7])
|
||||
->orderBy('inquiry_price', 'desc')
|
||||
->take(1);
|
||||
})
|
||||
->select("user_doctor.*")
|
||||
->groupBy("user_doctor.doctor_id");
|
||||
$raw = "inquiry_price as min_inquiry_price";
|
||||
if ($sort_order == 1){
|
||||
// 综合-价格从低到高
|
||||
$raw = "MIN(inquiry_price) as min_inquiry_price";
|
||||
} elseif ($sort_order == 3){
|
||||
// 价格从低到高
|
||||
$raw = "MIN(inquiry_price) as min_inquiry_price";
|
||||
} elseif ($sort_order == 4){
|
||||
// 价格从高到低
|
||||
$raw = "MAX(inquiry_price) as min_inquiry_price";
|
||||
}
|
||||
|
||||
$latestPosts = Db::table('doctor_inquiry_config')
|
||||
->select('doctor_inquiry_config.doctor_id', Db::raw($raw))
|
||||
->where('is_enable', 1);
|
||||
if (!empty($inquiry_type)){
|
||||
$latestPosts = $latestPosts->whereIn('inquiry_type', $inquiry_type)
|
||||
->whereIn('inquiry_mode',$inquiry_mode);
|
||||
}
|
||||
|
||||
$latestPosts = $latestPosts->groupBy(["doctor_inquiry_config.doctor_id"]);
|
||||
|
||||
$query = $query
|
||||
->joinSub($latestPosts, 'doctor_inquiry_config', function($join) {
|
||||
$join->on('user_doctor.doctor_id', '=', 'doctor_inquiry_config.doctor_id');
|
||||
});
|
||||
}
|
||||
|
||||
if ($sort_order == 1) {
|
||||
@@ -291,7 +341,7 @@ class UserDoctor extends Model
|
||||
$query->orderBy('avg_response_time');
|
||||
$query->orderBy('served_patients_num', 'desc');// 服务数从多到少
|
||||
$query->orderBy(Db::raw("convert(substr(gdxz_user_doctor.user_name,1,1) using `GBK`)"), 'asc');// 名称排名
|
||||
$query->orderBy('doctor_inquiry_config.inquiry_price', 'asc');
|
||||
$query->orderBy('doctor_inquiry_config.min_inquiry_price', 'asc');
|
||||
} elseif ($sort_order == 2) {
|
||||
// 响应时间快
|
||||
$query->orderByRaw('avg_response_time = 0 ASC');
|
||||
@@ -305,7 +355,7 @@ class UserDoctor extends Model
|
||||
$query->orderBy(Db::raw("convert(substr(gdxz_user_doctor.user_name,1,1) using `GBK`)"), 'asc');// 名称排名
|
||||
} elseif ($sort_order == 4) {
|
||||
// 价格从高到低
|
||||
$query->orderBy('doctor_inquiry_config.inquiry_price', 'desc');
|
||||
$query->orderBy('doctor_inquiry_config.min_inquiry_price', 'desc');
|
||||
$query->orderByRaw('avg_response_time = 0 ASC');
|
||||
$query->orderBy('avg_response_time');
|
||||
$query->orderBy(Db::raw("convert(substr(gdxz_user_doctor.user_name,1,1) using `GBK`)"), 'asc');// 名称排名
|
||||
|
||||
Reference in New Issue
Block a user