'integer', 'user_id' => 'integer', 'status' => 'integer', 'idcard_status' => 'integer', 'iden_auth_status' => 'integer', 'multi_point_status' => 'integer', 'is_bind_bank' => 'integer', 'is_recommend' => 'integer', 'sex' => 'integer', 'age' => 'integer', 'doctor_title' => 'integer', 'department_custom_id' => 'integer', 'hospital_id' => 'integer', 'served_patients_num' => 'integer', 'number_of_fans' => 'integer', 'is_online' => 'integer', 'is_img_expert_reception' => 'integer', 'is_img_welfare_reception' => 'integer', 'is_img_quick_reception' => 'integer', 'is_platform_deep_cooperation' => 'integer', 'is_enterprise_deep_cooperation' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime']; protected string $primaryKey = "doctor_id"; /** * 关联医院表 */ public function Hospital(): HasOne { return $this->hasOne(Hospital::class, 'hospital_id', 'hospital_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 $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', 'DoctorInquiryConfig.SystemInquiryConfig' ]) ->where($params) ->orderBy("is_platform_deep_cooperation", "desc") ->orderBy("served_patients_num", "desc") ->orderBy("praise_rate", "desc") ->limit($limit) ->get($fields); return $datas; } /** * 获取问诊医生列表 * 专家问诊-公益问诊共用 * @param array $hospital_params 医院搜索条件 * @param array $doctor_params 医生搜索条件 * @param array $doctor_or_params 医生搜索条件 * @param array $doctor_expertise_params * @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 = [],string|int $sort_order = 1,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { $result = 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; }, 'DoctorInquiryConfig.SystemInquiryConfig', ]) ->where($doctor_params) ->when($keyword,function ($query, $keyword){ $query->where(function($query) use ($keyword){ $query->orwhere("user_name",'like','%' . $keyword . '%'); $query->orwhere("hospital_name",'like','%' . $keyword . '%'); $query->orwhere("department_custom_name",'like','%' . $keyword . '%'); }); }) ->when($sort_order,function ($query,$sort_order){ if ($sort_order == 1){ $query->orderBy('is_recommend','desc');// 是否首页推荐(0:否 1:是) $query->orderBy('avg_response_time','desc');// 响应时间快 $query->orderBy('served_patients_num','desc');// 服务数从多到少 $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"),'asc');// 名称排名 }elseif ($sort_order == 2){ // 响应时间快 $query->orderBy('avg_response_time','desc'); $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"),'asc');// 名称排名 }elseif ($sort_order == 3){ // 响应时间快 $query->orderBy('avg_response_time','desc'); $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"),'asc');// 名称排名 }elseif ($sort_order == 4){ // 响应时间快 $query->orderBy('avg_response_time','desc'); $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"),'asc');// 名称排名 }elseif ($sort_order == 5){ // 服务数从多到少 $query->orderBy('served_patients_num','desc'); $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"),'asc');// 名称排名 } return $query; }) ->whereExists(function ($query) use($hospital_params){ $query->select(Db::raw(1)) ->from('hospital') ->whereColumn('hospital.hospital_id','user_doctor.hospital_id') ->where($hospital_params); }) ->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; } }