diff --git a/app/Model/User.php b/app/Model/User.php index beea059..99d7c37 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -24,7 +24,8 @@ use Hyperf\Snowflake\Concern\Snowflake; * @property int $sex 性别(0:未知 1:男 2:女) * @property string $avatar 头像 * @property int $is_online 是否在线(0:不在线 1:在线) - * @property string $last_login_at 最后登陆时间 + * @property string $login_at 小程序登陆时间 + * @property string $im_login_at im登陆时间 * @property string $login_ip 登陆ip * @property string $created_by 创建者id(后台用户表id,前台用户表id) * @property \Carbon\Carbon $created_at 创建时间 @@ -42,7 +43,7 @@ class User extends Model /** * The attributes that are mass assignable. */ - protected array $fillable = ['user_id', 'user_name', 'user_account', 'mobile', 'wx_mobile', 'user_password', 'salt', 'user_type', 'user_status', 'register_method', 'age', 'sex', 'avatar', 'is_online', 'last_login_at', 'login_ip', 'created_by', 'created_at', 'updated_at']; + protected array $fillable = ['user_id', 'user_name', 'user_account', 'mobile', 'wx_mobile', 'user_password', 'salt', 'user_type', 'user_status', 'register_method', 'age', 'sex', 'avatar', 'is_online', 'login_at', 'im_login_at', 'login_ip', 'created_by', 'created_at', 'updated_at']; protected string $primaryKey = "user_id"; diff --git a/app/Model/UserDoctor.php b/app/Model/UserDoctor.php index 405ff9a..4f2ec2a 100644 --- a/app/Model/UserDoctor.php +++ b/app/Model/UserDoctor.php @@ -204,108 +204,6 @@ class UserDoctor extends Model return $datas; } -// /** -// * 获取问诊医生列表 -// * 专家问诊-公益问诊共用 -// * @param string $keyword -// * @param array $hospital_params 医院搜索条件 -// * @param array $doctor_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 -// { -// $query = self::with([ -// "Hospital:hospital_id,hospital_name,hospital_status,hospital_level_name,province_id,city_id", -// "DoctorExpertise", -// "DoctorInquiryConfig" => function ($query) use ($sort_order) { -// $query->whereIn('inquiry_type', [1, 3]) -// ->where('inquiry_mode', 1); -// }, -// ]) -// ->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) { -// $params = array(); -// $params['inquiry_mode'] = 1;// 接诊方式:图文 -// $query->where($params)->whereIn('inquiry_type', [1, 3]); -// }); -// -// 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(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(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(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(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');// 名称排名 -// } -// } -// -// $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; -// } - /** * 获取问诊医生列表 * 专家问诊-公益问诊共用 @@ -314,13 +212,14 @@ class UserDoctor extends Model * @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 $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 = [],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", @@ -332,6 +231,7 @@ class UserDoctor extends Model $query->where('is_enable', 1); } }, + "User:user_id,is_online" ]) ->where($doctor_params) ->when($keyword, function ($query, $keyword) { @@ -355,7 +255,7 @@ class UserDoctor extends Model if (!empty($is_search_welfare_reception)){ $params['is_enable'] = 1; } - + $query->where($params); if (!empty($is_search_welfare_reception)){ @@ -363,6 +263,14 @@ class UserDoctor extends Model } }); + 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) { @@ -382,7 +290,7 @@ class UserDoctor extends Model $query->orderByRaw('avg_response_time = 0 ASC'); $query->orderBy('avg_response_time'); $query->orderBy('served_patients_num', 'desc');// 服务数从多到少 - $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"), 'asc');// 名称排名 + $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) { // 响应时间快 @@ -420,6 +328,62 @@ class UserDoctor extends Model 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; + } + /** * 获取是否存在 diff --git a/app/Request/PatientDoctorRequest.php b/app/Request/PatientDoctorRequest.php index 06fbe19..b323fbb 100644 --- a/app/Request/PatientDoctorRequest.php +++ b/app/Request/PatientDoctorRequest.php @@ -15,7 +15,8 @@ class PatientDoctorRequest extends FormRequest 'province_id', 'city_id', 'sort_order', - 'keyword' + 'keyword', + 'is_first_online' // 是否优先在线(1:是) ], 'getDoctorInquiryCheck' => [ // 检测是否可以接诊 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) @@ -45,6 +46,7 @@ class PatientDoctorRequest extends FormRequest 'inquiry_type' => 'required|integer|min:1|max:4', 'inquiry_mode' => 'required|integer|min:1|max:5', 'my_doctor_type' => 'required|integer|min:1|max:2', + 'is_first_online' => 'integer|min:1|max:1', ]; } @@ -69,6 +71,9 @@ class PatientDoctorRequest extends FormRequest 'my_doctor_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'my_doctor_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'my_doctor_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_first_online.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_first_online.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'is_first_online.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), ]; } } diff --git a/app/Services/IndexService.php b/app/Services/IndexService.php index da99fa0..a2b2517 100644 --- a/app/Services/IndexService.php +++ b/app/Services/IndexService.php @@ -332,7 +332,6 @@ class IndexService extends BaseService "user_name", "status", "avatar", - "is_online", ]; $user_pharmacist = UserPharmacist::getOne($params,$fields); @@ -350,6 +349,16 @@ class IndexService extends BaseService $user_pharmacist['avatar'] = addAliyunOssWebsite($user_pharmacist['avatar']); + // 获取用户数据 + $params = array(); + $params['user_id'] = $user_pharmacist['user_id']; + $user = User::getOne($params); + if (empty($user)){ + return fail(); + } + + $user_pharmacist['is_online'] = $user['is_online']; + // 获取药师审方数量 $params = array(); $params['pharmacist_id'] = $user_pharmacist['pharmacist_id']; diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index 170d436..17425fa 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -15,135 +15,13 @@ use App\Model\PatientFollow; use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel; use App\Model\SystemInquiryConfig; use App\Model\SystemInquiryTime; +use App\Model\User; use App\Model\UserDoctor; use App\Model\UserDoctor as UserDoctorModel; use Hyperf\DbConnection\Db; class PatientDoctorService extends BaseService { -// /** -// * 获取问诊医生列表 -// * 专家问诊-公益问诊共用 -// * @return array -// */ -// public function getInquiryDoctorList(): array -// { -// $expertise_id = $this->request->input('expertise_id'); -// $province_id = $this->request->input('province_id'); -// $city_id = $this->request->input('city_id'); -// $sort_order = $this->request->input('sort_order',1); -// $keyword = $this->request->input('keyword',""); -// $is_search_welfare_reception = $this->request->input('is_search_welfare_reception',0); -// $page = $this->request->input('page',1); -// $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:删除) -// -// $doctor_params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) -// $doctor_params["is_bind_bank"] = 1;// 是否已绑定结算银行卡(0:否 1:是) -// -//// if (!empty($is_search_welfare_reception)){ -//// $doctor_params["is_img_welfare_reception"] = $is_search_welfare_reception;// 是否参加公益图文问诊(0:否 1:是) -//// } -// -// $fields = [ -// "doctor_id", -// "user_id", -// "user_name", -// "multi_point_status", -// "is_bind_bank", -// "is_recommend", -// "avatar", -// "doctor_title", -// "department_custom_id", -// "department_custom_name", -// "hospital_id", -// "served_patients_num", -// "praise_rate", -// "avg_response_time", -// "number_of_fans", -// "is_online", -// "be_good_at", -// ]; -// -// $user_doctors = UserDoctor::getInquiryDoctorPage($keyword,$hospital_params, $doctor_params,$doctor_expertise_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']; -// } -// unset($data['DiseaseClassExpertise']); -// } -// } -// -// // 处理问诊价格 -// $user_doctor['price'] = 0; -// $user_doctor['free_clinic_price'] = 0; -// 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_type'] == 1) { -// // 专家 -// $user_doctor['price'] = $doctor_inquiry_config['inquiry_price'] ?? 0; -// } -// if ($doctor_inquiry_config['inquiry_type'] == 3) { -// // 公益 -// $user_doctor['free_clinic_price'] = $doctor_inquiry_config['inquiry_price']; -// } -// } -// } -// } -// -// // 好评率-超过5个已结束的订单后展示 -// $user_doctor['praise_rate'] = floor($user_doctor['praise_rate'] * 0.05 * 100) / 100; -// // 响应时间-超过5个已结束的订单后展示 -// $user_doctor['avg_response_time'] = (float)floor($user_doctor['avg_response_time'] * 10) / 10; -// -// // 获取医生订单数 -// $params = array(); -// $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) { -// $user_doctor['is_display_score'] = false; -// } else { -// $user_doctor['is_display_score'] = true; -// } -// -// // 头像 -// $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); -// } -// } -// return success($user_doctors); -// } - /** * 获取问诊医生列表 * 专家问诊-公益问诊共用 @@ -157,6 +35,7 @@ class PatientDoctorService extends BaseService $sort_order = $this->request->input('sort_order',1); $keyword = $this->request->input('keyword',""); $is_search_welfare_reception = $this->request->input('is_search_welfare_reception',0); // 是否参加公益图文问诊(0:否 1:是) + $is_first_online = $this->request->input('is_first_online',0); // 是否优先在线(1:是) $page = $this->request->input('page',1); $per_page = $this->request->input('per_page',10); @@ -202,11 +81,10 @@ class PatientDoctorService extends BaseService "praise_rate", "avg_response_time", "number_of_fans", - "is_online", "be_good_at", ]; - $user_doctors = UserDoctor::getInquiryDoctorPage($keyword,$hospital_params, $doctor_params,$doctor_expertise_params,$is_search_welfare_reception, $sort_order, $fields,$page,$per_page); + $user_doctors = UserDoctor::getInquiryDoctorPage($keyword,$hospital_params, $doctor_params,$doctor_expertise_params,$is_search_welfare_reception,$is_first_online, $sort_order, $fields,$page,$per_page); if (!empty($user_doctors['data'])) { foreach ($user_doctors['data'] as &$user_doctor) { @@ -307,7 +185,6 @@ class PatientDoctorService extends BaseService "praise_rate", "avg_response_time", "number_of_fans", - "is_online", "be_good_at", "brief_introduction", ]; @@ -328,6 +205,7 @@ class PatientDoctorService extends BaseService $result['hospital'] = []; $result['days'] = 0; $result['doctor_inquiry_config'] = 0; + $result['is_online'] = 0; // 获取医生医院数据 $fields = [ @@ -437,6 +315,14 @@ class PatientDoctorService extends BaseService // 头像 $result['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); + // 获取用户数据 + $params = array(); + $params['user_id'] = $user_doctor['user_id']; + $user = User::getOne($params); + if (!empty($user)){ + $result['is_online'] = $user['is_online']; + } + return success($result); } @@ -652,7 +538,8 @@ class PatientDoctorService extends BaseService * 获取我的问诊、关注医生列表 * @return array */ - public function getDoctorList(){ + public function getDoctorList(): array + { $user_info = $this->request->getAttribute("userInfo") ?? []; $my_doctor_type = $this->request->input('my_doctor_type'); // 医生类型(1:问诊 2:关注) @@ -937,6 +824,14 @@ class PatientDoctorService extends BaseService continue; } + // 获取用户数据 + $params = array(); + $params['user_id'] = $user_doctor['user_id']; + $user = User::getOne($params); + if (empty($user)){ + continue; + } + // 获取医生医院 $hospital_name = ""; if (!empty($user_doctor['hospital_id'])){ @@ -964,6 +859,9 @@ class PatientDoctorService extends BaseService $data['days'] = ceil((strtotime(date('Y-m-d', strtotime('+1 day'))) - strtotime($patient_history_doctor['created_at'])) / 86400); } + // 在线状态 + $data['is_online'] = $user['is_online']; + $results[] = $data; unset($data); diff --git a/app/Services/UserPharmacistService.php b/app/Services/UserPharmacistService.php index d44b523..4e0f0a7 100644 --- a/app/Services/UserPharmacistService.php +++ b/app/Services/UserPharmacistService.php @@ -69,7 +69,7 @@ class UserPharmacistService extends BaseService $data = array(); $data['is_online'] = $is_online; if ($is_online == 1){ - $data['last_login_at'] = date('Y-m_d,H:i:s',time()); + $data['login_at'] = date('Y-m_d,H:i:s',time()); } $params = array(); diff --git a/config/routes.php b/config/routes.php index 7024eac..b22f2d3 100644 --- a/config/routes.php +++ b/config/routes.php @@ -730,7 +730,7 @@ Router::get('/case', [InquiryController::class, 'getPatientInquiryCase']); // 测试使用 Router::addGroup('/test', function () { - Router::get('', [TestController::class, 'test']); + Router::get('', [TestController::class, 'test_17']); // Router::get('/uninquiry', [TestController::class, 'uninquiry']);