From 9b137d16f542dfa03206699e7e0ad352652b3cad Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Mon, 27 Feb 2023 13:58:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E9=97=AE=E8=AF=8A=E9=85=8D=E7=BD=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/OrderInquiryController.php | 3 - app/Controller/SystemController.php | 32 ++++++++ app/Model/SystemInquiryConfig.php | 2 +- app/Model/UserDoctor.php | 98 +++++++++++------------ app/Request/OrderInquiryRequest.php | 15 ++++ app/Request/SystemRequest.php | 54 +++++++++++++ app/Request/UserDoctorRequest.php | 6 +- app/Services/PatientDoctorService.php | 15 ++-- app/Services/SystemService.php | 64 +++++++++++++++ config/routes.php | 13 ++- 10 files changed, 236 insertions(+), 66 deletions(-) create mode 100644 app/Controller/SystemController.php create mode 100644 app/Request/SystemRequest.php create mode 100644 app/Services/SystemService.php diff --git a/app/Controller/OrderInquiryController.php b/app/Controller/OrderInquiryController.php index d9e0a69..e4c345a 100644 --- a/app/Controller/OrderInquiryController.php +++ b/app/Controller/OrderInquiryController.php @@ -18,9 +18,6 @@ use Psr\Http\Message\ResponseInterface; */ class OrderInquiryController extends AbstractController { - #[Inject] - protected ValidatorFactoryInterface $validationFactory; - /** * 创建问诊订单 * @return ResponseInterface diff --git a/app/Controller/SystemController.php b/app/Controller/SystemController.php new file mode 100644 index 0000000..75e3efc --- /dev/null +++ b/app/Controller/SystemController.php @@ -0,0 +1,32 @@ +container->get(SystemRequest::class); + $request->scene('getSystemInquiryConfig')->validateResolved(); + + $SystemService = new SystemService(); + $data = $SystemService->getSystemInquiryConfig(); + return $this->response->json($data); + } +} \ No newline at end of file diff --git a/app/Model/SystemInquiryConfig.php b/app/Model/SystemInquiryConfig.php index fa51b43..fe85e20 100644 --- a/app/Model/SystemInquiryConfig.php +++ b/app/Model/SystemInquiryConfig.php @@ -10,7 +10,7 @@ use Hyperf\Database\Model\Collection; use Hyperf\Snowflake\Concern\Snowflake; /** - * @property int $system_inquiry_config_id 主键id + * @property string $system_inquiry_config_id 主键id * @property int $inquiry_type 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) * @property int $inquiry_mode 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) * @property int $max_work_num_day 每日最大接诊数量 diff --git a/app/Model/UserDoctor.php b/app/Model/UserDoctor.php index 7e157f0..fb982a3 100644 --- a/app/Model/UserDoctor.php +++ b/app/Model/UserDoctor.php @@ -52,10 +52,10 @@ use Hyperf\Utils\Arr; * @property string $brief_introduction 医生简介 * @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $updated_at 修改时间 - * @property-read \Hyperf\Database\Model\Collection|DoctorExpertise[] $DoctorExpertise - * @property-read \Hyperf\Database\Model\Collection|DoctorInquiryConfig[] $DoctorInquiryConfig - * @property-read Hospital $Hospital - * @property-read \Hyperf\Database\Model\Collection|OrderInquiry[] $OrderInquiry + * @property-read \Hyperf\Database\Model\Collection|DoctorExpertise[] $DoctorExpertise + * @property-read \Hyperf\Database\Model\Collection|DoctorInquiryConfig[] $DoctorInquiryConfig + * @property-read Hospital $Hospital + * @property-read \Hyperf\Database\Model\Collection|OrderInquiry[] $OrderInquiry */ class UserDoctor extends Model { @@ -185,16 +185,15 @@ class UserDoctor extends Model ->get($fields); - return $datas; } /** * 获取问诊医生列表 * 专家问诊-公益问诊共用 + * @param string $keyword * @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 @@ -202,73 +201,72 @@ 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 = [],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 = [], string|int $sort_order = 1, array $fields = ["*"], int $page = null, ?int $per_page = 10): array { - $result = self::with([ + $query = self::with([ "Hospital:hospital_id,hospital_name,hospital_status,hospital_level_name,province_id,city_id", - "DoctorExpertise" => function($query) use($doctor_expertise_params){ + "DoctorExpertise" => function ($query) use ($doctor_expertise_params) { $query->where($doctor_expertise_params); }, "DoctorExpertise.DiseaseClassExpertise:expertise_id,expertise_name", - "DoctorInquiryConfig" => function($query) use($sort_order){ + "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->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 == 3) { // 价格从低到高 - $query->orderBy('inquiry_price','asc'); - }elseif ($sort_order == 4){ + $query->orderBy('inquiry_price', 'asc'); + } elseif ($sort_order == 4) { // 价格从高到低 - $query->orderBy('inquiry_price','desc');// 价格从高到低 + $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 . '%'); + ->whereHas('Hospital', function ($query) use ($hospital_params) { + $query->where($hospital_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 . '%'); + }); }); }) - ->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){ + ->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 == 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 == 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('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');// 名称排名 + $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); + }); + + $result = $query->paginate($per_page, $fields, "page", $page); $data = array(); $data['current_page'] = $result->currentPage();// 当前页码 diff --git a/app/Request/OrderInquiryRequest.php b/app/Request/OrderInquiryRequest.php index 7d1008d..70b4cc4 100644 --- a/app/Request/OrderInquiryRequest.php +++ b/app/Request/OrderInquiryRequest.php @@ -29,6 +29,10 @@ class OrderInquiryRequest extends FormRequest 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) ], + 'getInquiryConfigTime' => [ // 获取系统问诊时间 + 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + ], ]; /** @@ -45,6 +49,8 @@ class OrderInquiryRequest extends FormRequest public function rules(): array { return [ + 'inquiry_type' => 'required|integer|min:1|max:3', + 'inquiry_mode' => 'required|integer|min:1|max:5', 'patient_id' => 'required', 'family_id' => 'required', 'disease_class_id' => 'required', @@ -62,6 +68,15 @@ class OrderInquiryRequest extends FormRequest public function messages(): array { return [ + 'inquiry_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'patient_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'disease_class_id.required' => "请您选择疾病", diff --git a/app/Request/SystemRequest.php b/app/Request/SystemRequest.php new file mode 100644 index 0000000..0cc52e0 --- /dev/null +++ b/app/Request/SystemRequest.php @@ -0,0 +1,54 @@ + [ // 获取系统问诊配置 快速问诊-问诊购药 + 'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) + 'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员) + ], + ]; + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'inquiry_type' => 'required|integer|min:1|max:4', + 'inquiry_mode' => 'required|integer|min:1|max:5', + ]; + } + + /** + * 获取已定义验证规则的错误消息. + */ + public function messages(): array + { + return [ + 'inquiry_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + ]; + } +} diff --git a/app/Request/UserDoctorRequest.php b/app/Request/UserDoctorRequest.php index 4f2d27b..af2f6ab 100644 --- a/app/Request/UserDoctorRequest.php +++ b/app/Request/UserDoctorRequest.php @@ -98,13 +98,15 @@ class UserDoctorRequest extends FormRequest 'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), + 'inquiry_mode.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'is_open.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'is_open.boolean' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_price.required' => "请填写价格", 'inquiry_price.min' => "价格填写错误", 'inquiry_price.numeric' => "价格填写错误", - 'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), - 'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'inquiry_mode.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'work_num_day.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'work_num_day.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index 6b532f0..065084e 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -61,9 +61,6 @@ class PatientDoctorService extends BaseService "doctor_id", "user_id", "user_name", - "open_id", - "status", - "iden_auth_status", "multi_point_status", "is_bind_bank", "is_recommend", @@ -74,7 +71,6 @@ class PatientDoctorService extends BaseService "department_custom_id", "department_custom_name", "hospital_id", - "hospital_name", "served_patients_num", "praise_rate", "avg_response_time", @@ -137,6 +133,9 @@ class PatientDoctorService extends BaseService }else{ $user_doctor['is_display_score'] = true; } + + // 头像 + $user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); } } return success($user_doctors); @@ -161,12 +160,8 @@ class PatientDoctorService extends BaseService "doctor_id", "user_id", "user_name", - "open_id", - "status", "iden_auth_status", "multi_point_status", - "is_bind_bank", - "is_recommend", "sex", "age", "avatar", @@ -268,6 +263,9 @@ class PatientDoctorService extends BaseService $result['is_display_score'] = true; } + // 头像 + $result['avatar'] = addAliyunOssWebsite($user_doctor['avatar']); + return success($result); } @@ -291,7 +289,6 @@ class PatientDoctorService extends BaseService "doctor_title", "department_custom_name", "hospital_id", - "hospital_name", "be_good_at", "brief_introduction", ]; diff --git a/app/Services/SystemService.php b/app/Services/SystemService.php new file mode 100644 index 0000000..247937e --- /dev/null +++ b/app/Services/SystemService.php @@ -0,0 +1,64 @@ +request->getAttribute("userInfo") ?? []; + + $inquiry_type = $this->request->input('inquiry_type'); + $inquiry_mode = $this->request->input('inquiry_mode'); + + if ($inquiry_type != 2 && $inquiry_type != 4){ + return fail(); + } + + $params = array(); + $params['inquiry_type'] = $inquiry_type; + $params['inquiry_mode'] = $inquiry_mode; + $system_inquiry_config = SystemInquiryConfig::getOne($params); + if (empty($system_inquiry_config)){ + return fail(); + } + + $fields = [ + 'inquiry_time_id', + 'start_time', + 'end_time', + 'time_interval', + ]; + $params = array(); + $params['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id']; + $system_inquiry_time = SystemInquiryTime::getList($params,$fields); + if (empty($system_inquiry_time)){ + return fail(); + } + + + $time = []; + foreach ($system_inquiry_time as $item){ + $time[] = $item['start_time'] . '-' . $item['end_time']; + } + + $result = []; + $result['time'] = $time; + $result['times_number'] = $system_inquiry_config['times_number']; // 沟通次数(0为不限制次数) + $result['duration'] = $system_inquiry_config['duration']; // 沟通时长(分钟,0为不限制时长) + $result['inquiry_price'] = $system_inquiry_config['inquiry_price']; // 接诊价格 + + return success($result); + } +} \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index 05806a0..f909923 100644 --- a/config/routes.php +++ b/config/routes.php @@ -23,6 +23,7 @@ use App\Controller\PatientCenterController; use App\Controller\PatientDoctorController; use App\Controller\PatientFamilyController; use App\Controller\SafeController; +use App\Controller\SystemController; use App\Controller\UserController; use App\Controller\UserDoctorController; use App\Services\SafeService; @@ -178,6 +179,8 @@ Router::addGroup('/patient', function () { Router::post('', [OrderInquiryController::class, 'addInquiryOrder']); }); + // 检测是否存在进行中的问诊订单 + Router::post('/check', [OrderInquiryController::class, 'addInquiryOrder']); }); // 医生数据 @@ -227,7 +230,6 @@ Router::addGroup('/code', function () { Router::post('/phone', [CodeController::class, 'getPhoneCode']); }); - // 省市区 Router::addGroup('/area', function () { // 获取省份信息 @@ -279,3 +281,12 @@ Router::addGroup('/basic', function () { // 获取医生评价 Router::get('/evaluation', [UserDoctorController::class, 'getDoctorEvaluationList']); + +// 系统配置 +Router::addGroup('/system', function () { + // 问诊 + Router::addGroup('/inquiry', function () { + // 获取系统问诊配置 快速问诊-问诊购药 + Router::get('/config', [SystemController::class, 'getSystemInquiryConfig']); + }); +}); \ No newline at end of file