初始化提交

This commit is contained in:
2023-02-17 17:10:16 +08:00
commit 4ca844f470
152 changed files with 20390 additions and 0 deletions
+371
View File
@@ -0,0 +1,371 @@
<?php
namespace App\Services;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode;
use App\Model\DoctorExpertise;
use App\Model\DoctorInquiryConfig as DoctorInquiryConfigModel;
use App\Model\Hospital;
use App\Model\OrderEvaluation;
use App\Model\OrderInquiry;
use App\Model\PatientFollow;
use App\Model\PatientHistoryInquiry as PatientHistoryInquiryModel;
use App\Model\UserDoctor;
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');
$keyword = $this->request->input('keyword');
// 组合条件
$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_online"] = 1;// 是否在线(0:不在线 1:在线)
$doctor_params["is_img_expert_reception"] = 1;// 是否参加专家图文接诊(0:否 1:是)
$fields = [
"doctor_id",
"user_id",
"user_name",
"open_id",
"status",
"iden_auth_status",
"multi_point_status",
"is_bind_bank",
"is_recommend",
"sex",
"age",
"avatar",
"doctor_title",
"department_custom_id",
"department_custom_name",
"hospital_id",
"hospital_name",
"served_patients_num",
"praise_rate",
"avg_response_time",
"number_of_fans",
"is_online",
"is_img_expert_reception",
"is_img_welfare_reception",
"is_platform_deep_cooperation",
"be_good_at",
];
$user_doctors = UserDoctor::getInquiryDoctorPage($keyword,$hospital_params,$doctor_params,$doctor_expertise_params,$sort_order,$fields);
// 处理数据
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'];
}
}
}
unset($user_doctor['DoctorInquiryConfig']);
}
// 好评率-超过5个已结束的订单后展示
$user_doctor['praise_rate'] = ceil($user_doctor['praise_rate'] * 0.05 * 100) / 100;
// 响应时间-超过5个已结束的订单后展示
$user_doctor['avg_response_time'] = ceil($user_doctor['avg_response_time'] * 0.05 * 100) / 100 * 60;
// 获取医生订单数
$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;
}
}
}
return success($user_doctors);
}
/**
* 获取问诊医生详情
* @return array
*/
public function getInquiryDoctorInfo(): array
{
$doctor_id = $this->request->route('doctor_id');
$user_info = $this->request->getAttribute("userInfo") ?? [];
$result = array();
$result['hospital'] = [];
$result['days'] = 0;
$result['doctor_inquiry_config'] = [];
$fields = [
"doctor_id",
"user_id",
"user_name",
"open_id",
"status",
"iden_auth_status",
"multi_point_status",
"is_bind_bank",
"is_recommend",
"sex",
"age",
"avatar",
"doctor_title",
"department_custom_id",
"department_custom_name",
"hospital_id",
"served_patients_num",
"praise_rate",
"avg_response_time",
"number_of_fans",
"is_online",
"is_img_expert_reception",
"is_img_welfare_reception",
"is_platform_deep_cooperation",
"be_good_at",
];
$params = array();
$params['doctor_id'] = $doctor_id;
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::HTTP_SUCCESS,"医生错误");
}
$result = $user_doctor->toArray();
$result['doctor_title_name'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
$result['hospital'] = [];
$result['days'] = 0;
$result['doctor_inquiry_config'] = 0;
// 获取医生医院数据
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$result['hospital'] = $hospital;
}
// 获取服务天数
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['doctor_id'] = $doctor_id;
$params['history_status'] = 1;
$patient_history_doctor = PatientHistoryInquiryModel::getOne($params);
// 按照天来计算,当日为1,前一天为2 未服务过为0
if (!empty($patient_history_doctor['created_at'])) {
$result['days'] = ceil((strtotime(date('Y-m-d', strtotime('+1 day'))) - strtotime($patient_history_doctor['created_at'])) / 86400);
}
// 获取关注状态
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['doctor_id'] = $doctor_id;
$result['follow'] = PatientFollow::getExists($params);
// 获取问诊价格
// 专家-公益
$params = array();
$params[] = ['doctor_id','=',$doctor_id];
$params[] = ['inquiry_mode','=',1];// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
$doctor_inquiry_config = DoctorInquiryConfigModel::getInquiryConfigList($params);
if (!empty($doctor_inquiry_config)){
foreach ($doctor_inquiry_config as &$value){
// 获取医生当日已付款的全部订单
$params = array();
$params[] = ['doctor_id','=',$doctor_id];
$params[] = ['inquiry_type','=',$value['inquiry_type']];
$params[] = ['inquiry_mode','=',1];
$params[] = ['inquiry_status','=',3];
$params[] = ['inquiry_refund_status','=',0];
$value['order_inquiry_count'] = OrderInquiry::getCount($params);
unset($value['SystemInquiryConfig']);
}
$result['doctor_inquiry_config'] = $doctor_inquiry_config;
}
// 好评率-超过5个已结束的订单后展示
$result['praise_rate'] = ceil($user_doctor['praise_rate'] * 0.05 * 100) / 100;
// 响应时间-超过5个已结束的订单后展示
$result['avg_response_time'] = ceil($user_doctor['avg_response_time'] * 0.05 * 100) / 100 * 60;
$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){
$result['is_display_score'] = false;
}else{
$result['is_display_score'] = true;
}
return success($result);
}
/**
* 获取医生评价
* @return array
*/
public function getDoctorEvaluationList(): array
{
$doctor_id = $this->request->input('doctor_id');
$page = $this->request->input('page', 1);
$per_page = $this->request->input('per_page', 10);
$user_info = $this->request->getAttribute("userInfo") ?? [];
$params = array();
$params['doctor_id'] = $doctor_id;
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)){
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
$params = array();
$params['doctor_id'] = $doctor_id;
$order_evaluation = OrderEvaluation::getPage($params);
if (!empty($order_evaluation['data'])){
foreach ($order_evaluation['data'] as &$data){
// 处理综合评分
if ($data['avg_score'] != 0){
$data['avg_score'] = ceil($data['avg_score'] * 0.05 * 100) / 100;
}
}
}
return $order_evaluation;
}
/**
* 医生详情简介-详情中的简介
* @return array
*/
public function getDoctorProfile(): array
{
$doctor_id = $this->request->route('doctor_id');
$user_info = $this->request->getAttribute("userInfo") ?? [];
$fields = [
"doctor_id",
"user_id",
"user_name",
"status",
"iden_auth_status",
"avatar",
"doctor_title",
"department_custom_name",
"hospital_id",
"hospital_name",
"be_good_at",
"brief_introduction",
];
$params = array();
$params['doctor_id'] = $doctor_id;
$params['status'] = 1; // 状态(0:禁用 1:正常 2:删除)
$params["iden_auth_status"] = 1;// 身份认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::CLIENT_HTTP_ERROR);
}
$user_doctor = $user_doctor->toArray();
$user_doctor['doctor_title_name'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 获取医生医院数据
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital'] = $hospital;
}
// 获取医生已选择专长
$UserDoctorService = new UserDoctorService();
$user_doctor['doctor_expertise'] = $UserDoctorService->getDoctorSelectedExpertise($doctor_id);
return success($user_doctor);
}
}