hasOne(Hospital::class, 'hospital_id', 'hospital_id'); } /** * 关联用户表 */ public function User(): HasOne { return $this->hasOne(User::class, 'user_id', 'user_id'); } /** * 关联问诊配置表(一对多) * @return HasMany */ public function DoctorInquiryConfig(): HasMany { return $this->hasMany(DoctorInquiryConfig::class, "doctor_id", "doctor_id"); } /** * 关联医生专长表 * @return HasMany */ public function DoctorExpertise(): HasMany { return $this->hasMany(DoctorExpertise::class, "doctor_id", "doctor_id"); } /** * 关联订单-问诊表表 * @return HasMany */ public function OrderInquiry(): HasMany { return $this->hasMany(OrderInquiry::class, "doctor_id", "doctor_id"); } /** * 获取医生信息-单条 * @param array $params * @param array $fields * @return object|null */ public static function getOne(array $params, array $fields = ['*']): object|null { return self::where($params)->first($fields); } /** * 获取数据-多 * @param array $params * @param array $fields * @return Collection|array */ public static function getList(array $params = [], array $fields = ['*']): Collection|array { return self::where($params)->get($fields); } /** * 新增医生-批量 * @param array $data 新增数据 * @return \Hyperf\Database\Model\Model|UserDoctor */ public static function addUserDoctor(array $data): \Hyperf\Database\Model\Model|UserDoctor { return self::create($data); } /** * 修改医生-批量 * @param array $params * @param array $data * @return int */ public static function editUserDoctor(array $params = [], array $data = []): int { return self::where($params)->update($data); } /** * 首页推荐医生 * 推荐规则: * 1:平台深度合作医生 * 2:接诊量由高到低的医生 * 3:好评率由高到低的医生 * 5:在线 * 6:5个 * @param int $limit 数量 * @param array $fields * @return array|Collection|\Hyperf\Utils\Collection */ public static function getIndexRecommendDoctorLimit(int $limit = 5, array $fields = ['*']): array|Collection|\Hyperf\Utils\Collection { $params = array(); // 状态(0:禁用 1:正常 2:删除) $params["status"] = 1; // 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) $params["iden_auth_status"] = 1; // // 是否在线(0:不在线 1:在线) // $params["is_online"] = 1; // // 是否参加专家图文接诊(0:否 1:是) // $params["is_img_expert_reception"] = 1; $datas = self::with([ 'Hospital:hospital_id,hospital_name,hospital_level_name', "DoctorInquiryConfig", "User" ]) ->where($params) ->orderBy("is_recommend", "desc") ->orderBy("is_platform_deep_cooperation", "desc") ->orderBy("served_patients_num", "desc") ->orderBy("praise_rate", "desc") ->limit($limit) ->get($fields); return $datas; } /** * 获取问诊医生列表 * 专家问诊-公益问诊共用 * @param string $keyword * @param array $hospital_params 医院搜索条件 * @param array $doctor_params 医生搜索条件 * @param array $doctor_expertise_params * @param int $is_search_welfare_reception 是否搜索公益问诊 * @param string|int $is_first_online 是否优先在线(1:是) * @param string|int $sort_order * @param array $fields * @param int|null $page * @param int|null $per_page * @return array */ public static function getInquiryDoctorPage(string $keyword = "", array $hospital_params = [], array $doctor_params = [], array $doctor_expertise_params = [],int $is_search_welfare_reception = 0,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", "DoctorExpertise", "DoctorInquiryConfig" => function ($query) use ($is_search_welfare_reception) { $query->where('inquiry_mode', 1); if (!empty($is_search_welfare_reception)){ $query->where('inquiry_type', 3); $query->where('is_enable', 1); } }, "User:user_id,is_online" ]) ->where($doctor_params) ->when($keyword, function ($query, $keyword) { $query->where(function ($query) use ($keyword) { $query->orwhere("user_name", 'like', '%' . $keyword . '%'); $query->orwhere("department_custom_name", 'like', '%' . $keyword . '%'); $query->orWhereHas('Hospital', function ($query) use ($keyword) { $query->where('hospital_name', 'like', '%' . $keyword . '%'); }); }); }) ->whereHas('Hospital', function ($query) use ($hospital_params) { $query->where($hospital_params); }) ->whereHas('DoctorExpertise', function ($query) use ($doctor_expertise_params) { $query->where($doctor_expertise_params); }) ->whereHas('DoctorInquiryConfig', function ($query) use ($is_search_welfare_reception) { $params = array(); $params['inquiry_mode'] = 1;// 接诊方式:图文 if (!empty($is_search_welfare_reception)){ $params['is_enable'] = 1; } $query->where($params); if (!empty($is_search_welfare_reception)){ $query->where('inquiry_type', 3); } }); if ($is_first_online == 1){ $query->join('user as u', function ($query) { $query->on('user_doctor.user_id', '=', 'u.user_id'); }) ->select("user_doctor.*") ->orderBy('u.is_online', 'desc'); } 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]) ->where('inquiry_mode', 1) ->orderBy('inquiry_price', 'desc') ->take(1); }) ->select("user_doctor.*") ->groupBy("user_doctor.doctor_id"); } if ($sort_order == 1) { // 综合-价格从低到高 $query->orderBy('is_recommend', 'desc');// 是否首页推荐(0:否 1:是) $query->orderByRaw('avg_response_time = 0 ASC'); $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'); } elseif ($sort_order == 2) { // 响应时间快 $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');// 名称排名 } elseif ($sort_order == 3) { // 价格从低到高 $query->orderBy('doctor_inquiry_config.inquiry_price', 'asc'); $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');// 名称排名 } elseif ($sort_order == 4) { // 价格从高到低 $query->orderBy('doctor_inquiry_config.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');// 名称排名 } elseif ($sort_order == 5) { // 服务数从多到少 $query->orderBy('served_patients_num', 'desc'); $query->orderBy(Db::raw("convert(substr(gdxz_user_doctor.user_name,1,1) using `GBK`)"), 'asc');// 名称排名 } } $result = $query->paginate($per_page, $fields, "page", $page); $data = array(); $data['current_page'] = $result->currentPage();// 当前页码 $data['total'] = $result->total();//数据总数 $data['data'] = $result->items();//数据 $data['per_page'] = $result->perPage();//每页个数 $data['last_page'] = $result->lastPage();//最后一页 return $data; } /** * 获取问诊医生列表 * 专家问诊-公益问诊共用 * @param string $keyword * @param array $hospital_params 医院搜索条件 * @param array $doctor_params 医生搜索条件 * @param array $doctor_expertise_params * @param int $is_search_welfare_reception 是否搜索公益问诊 * @param string|int $is_first_online 是否优先在线(1:是) * @param string|int $sort_order * @param array $fields * @param int|null $page * @param int|null $per_page * @return array */ public static function getInquiryDoctorPageTest(string $keyword = "", array $hospital_params = [], array $doctor_params = [], array $doctor_expertise_params = [],int $is_search_welfare_reception = 0,string|int $is_first_online = 0, string|int $sort_order = 1, array $fields = ["*"], int $page = null, ?int $per_page = 10): array { $doctors = UserDoctor::join('user', function ($query) { $query->on('user_doctor.user_id', '=', 'user.user_id'); }) ->select("user_doctor.*") ->orderBy('user.is_online', 'desc') ->get(); dump($doctors->toArray()); return $doctors; // $query = self::orderBy('served_patients_num', 'desc'); // // if ($is_first_online == 1){ // $query = $query->join('user', function ($query) { // $query->on('user_doctor.user_id', '=', 'user.user_id')s // ->orderBy('user.is_online', 'desc'); // }) // ->select(['user_doctor.*','user.is_online']); // }q // if (!empty($sort_order)){ // if ($sort_order == 1) { // // 综合-价格从低到高 // $query->orderBy('served_patients_num', 'desc');// 服务数从多到少 // } // } // $result = $query->paginate($per_page, $fields, "page", $page); // // $data = array(); // $data['current_page'] = $result->currentPage();// 当前页码 // $data['total'] = $result->total();//数据总数 // $data['data'] = $result->items();//数据 // $data['per_page'] = $result->perPage();//每页个数 // $data['last_page'] = $result->lastPage();//最后一页 // return $data; } /** * 获取是否存在 * @param array $params * @return bool */ public static function getExists(array $params): bool { return self::where($params)->exists(); } /** * 获取医生数据 * 关联医院表 * @param array $params * @param array $fields * @return object|null */ public static function getWithHospitalOne(array $params,array $fields = ['*']): object|null { return self::with([ "Hospital:hospital_id,hospital_name,hospital_level_name" ]) ->where($params) ->first($fields); } /** * 获取数据单 * @param array $params * @param array $not_in_params * @param array $fields * @return object|null */ public static function getUserDoctorNotInOne(array $params = [], array $not_in_params = [],array $fields = ['*']): object|null { return self::where($params)->whereNotIn('doctor_id',$not_in_params)->first($fields); } /** * 获取数据-多 * @param array $params * @param array $not_in_params * @param array $fields * @return Collection|array|\Hyperf\Utils\Collection */ public static function getUserDoctorNotInList(array $params = [], array $not_in_params = [],array $fields = ['*']): Collection|array|\Hyperf\Utils\Collection { return self::where($params)->whereNotIn('doctor_id',$not_in_params)->get($fields); } /** * 自增 * @param array $params * @param string $field * @param float $numeral * @return int */ public static function inc(array $params,string $field,float $numeral = 1): int { return self::where($params)->increment($field,$numeral); } /** * 自减 * @param array $params * @param string $field * @param float $numeral * @return int */ public static function dec(array $params,string $field,float $numeral = 1): int { return self::where($params)->decrement($field,$numeral); } /** * 获取先思达合作医生列表 * @param array $params * @param array $hospital_params * @param array $fields * @return array|Collection */ public static function getDiagnoCoopDoctorList(array $params,array $hospital_params,array $fields = ['*']): array|Collection { return self::with([ "Hospital:hospital_id,hospital_name,hospital_level_name" ]) ->whereHas('Hospital', function ($query) use ($hospital_params) { $query->where($hospital_params); }) ->where($params) ->get($fields); } /** * 获取医生数据-医生配置 * @param array $params * @param array $not_in_params * @param array $doctor_inquiry_config_params * @param array $fields * @return Collection|array|\Hyperf\Utils\Collection */ public static function getListWithConfig(array $params = [], array $not_in_params = [],array $doctor_inquiry_config_params = [],array $fields = ['*']): Collection|array|\Hyperf\Utils\Collection { $doctor_ids = Db::table('doctor_inquiry_config')->where($doctor_inquiry_config_params)->select("doctor_id"); return self::where($params) ->whereNotIn('doctor_id',$not_in_params) ->whereIn("doctor_id",$doctor_ids) ->get($fields); } }