新增获取系统问诊配置接口

This commit is contained in:
wucongxing 2023-02-27 13:58:30 +08:00
parent 8a87298095
commit 9b137d16f5
10 changed files with 236 additions and 66 deletions

View File

@ -18,9 +18,6 @@ use Psr\Http\Message\ResponseInterface;
*/ */
class OrderInquiryController extends AbstractController class OrderInquiryController extends AbstractController
{ {
#[Inject]
protected ValidatorFactoryInterface $validationFactory;
/** /**
* 创建问诊订单 * 创建问诊订单
* @return ResponseInterface * @return ResponseInterface

View File

@ -0,0 +1,32 @@
<?php
namespace App\Controller;
use App\Request\SystemRequest;
use App\Services\SystemService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
/**
* 系统配置
*/
class SystemController extends AbstractController
{
/**
* 获取系统问诊时间
* 快速问诊-问诊购药
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getSystemInquiryConfig(): ResponseInterface
{
$request = $this->container->get(SystemRequest::class);
$request->scene('getSystemInquiryConfig')->validateResolved();
$SystemService = new SystemService();
$data = $SystemService->getSystemInquiryConfig();
return $this->response->json($data);
}
}

View File

@ -10,7 +10,7 @@ use Hyperf\Database\Model\Collection;
use Hyperf\Snowflake\Concern\Snowflake; 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_type 接诊类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
* @property int $inquiry_mode 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员) * @property int $inquiry_mode 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
* @property int $max_work_num_day 每日最大接诊数量 * @property int $max_work_num_day 每日最大接诊数量

View File

@ -185,16 +185,15 @@ class UserDoctor extends Model
->get($fields); ->get($fields);
return $datas; return $datas;
} }
/** /**
* 获取问诊医生列表 * 获取问诊医生列表
* 专家问诊-公益问诊共用 * 专家问诊-公益问诊共用
* @param string $keyword
* @param array $hospital_params 医院搜索条件 * @param array $hospital_params 医院搜索条件
* @param array $doctor_params 医生搜索条件 * @param array $doctor_params 医生搜索条件
* @param array $doctor_or_params 医生搜索条件
* @param array $doctor_expertise_params * @param array $doctor_expertise_params
* @param string|int $sort_order * @param string|int $sort_order
* @param array $fields * @param array $fields
@ -204,7 +203,7 @@ class UserDoctor extends Model
*/ */
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", "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); $query->where($doctor_expertise_params);
@ -227,14 +226,18 @@ class UserDoctor extends Model
return $query; return $query;
}, },
'DoctorInquiryConfig.SystemInquiryConfig',
]) ])
->where($doctor_params) ->where($doctor_params)
->whereHas('Hospital', function ($query) use ($hospital_params) {
$query->where($hospital_params);
})
->when($keyword, function ($query, $keyword) { ->when($keyword, function ($query, $keyword) {
$query->where(function ($query) use ($keyword) { $query->where(function ($query) use ($keyword) {
$query->orwhere("user_name", 'like', '%' . $keyword . '%'); $query->orwhere("user_name", 'like', '%' . $keyword . '%');
$query->orwhere("hospital_name",'like','%' . $keyword . '%');
$query->orwhere("department_custom_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) { ->when($sort_order, function ($query, $sort_order) {
@ -261,14 +264,9 @@ class UserDoctor extends Model
$query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"), 'asc');// 名称排名 $query->orderBy(Db::raw("convert(substr(user_name,1,1) using `GBK`)"), 'asc');// 名称排名
} }
return $query; return $query;
}) });
->whereExists(function ($query) use($hospital_params){
$query->select(Db::raw(1)) $result = $query->paginate($per_page, $fields, "page", $page);
->from('hospital')
->whereColumn('hospital.hospital_id','user_doctor.hospital_id')
->where($hospital_params);
})
->paginate($per_page, $fields, "page", $page);
$data = array(); $data = array();
$data['current_page'] = $result->currentPage();// 当前页码 $data['current_page'] = $result->currentPage();// 当前页码

View File

@ -29,6 +29,10 @@ class OrderInquiryRequest extends FormRequest
'inquiry_type', // 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) 'inquiry_type', // 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
'inquiry_mode', // 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员) '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 public function rules(): array
{ {
return [ return [
'inquiry_type' => 'required|integer|min:1|max:3',
'inquiry_mode' => 'required|integer|min:1|max:5',
'patient_id' => 'required', 'patient_id' => 'required',
'family_id' => 'required', 'family_id' => 'required',
'disease_class_id' => 'required', 'disease_class_id' => 'required',
@ -62,6 +68,15 @@ class OrderInquiryRequest extends FormRequest
public function messages(): array public function messages(): array
{ {
return [ 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), 'patient_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'disease_class_id.required' => "请您选择疾病", 'disease_class_id.required' => "请您选择疾病",

View File

@ -0,0 +1,54 @@
<?php
declare(strict_types=1);
namespace App\Request;
use App\Constants\HttpEnumCode;
use Hyperf\Validation\Request\FormRequest;
class SystemRequest extends FormRequest
{
protected array $scenes = [
'getSystemInquiryConfig' => [ // 获取系统问诊配置 快速问诊-问诊购药
'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),
];
}
}

View File

@ -98,13 +98,15 @@ class UserDoctorRequest extends FormRequest
'inquiry_type.integer' => 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.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_type.max' => 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.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_open.boolean' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'is_open.boolean' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_price.required' => "请填写价格", 'inquiry_price.required' => "请填写价格",
'inquiry_price.min' => "价格填写错误", 'inquiry_price.min' => "价格填写错误",
'inquiry_price.numeric' => "价格填写错误", '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), 'inquiry_mode.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'work_num_day.required' => 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), 'work_num_day.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),

View File

@ -61,9 +61,6 @@ class PatientDoctorService extends BaseService
"doctor_id", "doctor_id",
"user_id", "user_id",
"user_name", "user_name",
"open_id",
"status",
"iden_auth_status",
"multi_point_status", "multi_point_status",
"is_bind_bank", "is_bind_bank",
"is_recommend", "is_recommend",
@ -74,7 +71,6 @@ class PatientDoctorService extends BaseService
"department_custom_id", "department_custom_id",
"department_custom_name", "department_custom_name",
"hospital_id", "hospital_id",
"hospital_name",
"served_patients_num", "served_patients_num",
"praise_rate", "praise_rate",
"avg_response_time", "avg_response_time",
@ -137,6 +133,9 @@ class PatientDoctorService extends BaseService
}else{ }else{
$user_doctor['is_display_score'] = true; $user_doctor['is_display_score'] = true;
} }
// 头像
$user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);
} }
} }
return success($user_doctors); return success($user_doctors);
@ -161,12 +160,8 @@ class PatientDoctorService extends BaseService
"doctor_id", "doctor_id",
"user_id", "user_id",
"user_name", "user_name",
"open_id",
"status",
"iden_auth_status", "iden_auth_status",
"multi_point_status", "multi_point_status",
"is_bind_bank",
"is_recommend",
"sex", "sex",
"age", "age",
"avatar", "avatar",
@ -268,6 +263,9 @@ class PatientDoctorService extends BaseService
$result['is_display_score'] = true; $result['is_display_score'] = true;
} }
// 头像
$result['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);
return success($result); return success($result);
} }
@ -291,7 +289,6 @@ class PatientDoctorService extends BaseService
"doctor_title", "doctor_title",
"department_custom_name", "department_custom_name",
"hospital_id", "hospital_id",
"hospital_name",
"be_good_at", "be_good_at",
"brief_introduction", "brief_introduction",
]; ];

View File

@ -0,0 +1,64 @@
<?php
namespace App\Services;
use App\Model\SystemInquiryConfig;
use App\Model\SystemInquiryTime;
/**
* 系统配置
*/
class SystemService extends BaseService
{
/**
* 获取系统问诊时间
* 快速问诊-问诊购药
* @return array
*/
public function getSystemInquiryConfig(): array
{
$user_info = $this->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);
}
}

View File

@ -23,6 +23,7 @@ use App\Controller\PatientCenterController;
use App\Controller\PatientDoctorController; use App\Controller\PatientDoctorController;
use App\Controller\PatientFamilyController; use App\Controller\PatientFamilyController;
use App\Controller\SafeController; use App\Controller\SafeController;
use App\Controller\SystemController;
use App\Controller\UserController; use App\Controller\UserController;
use App\Controller\UserDoctorController; use App\Controller\UserDoctorController;
use App\Services\SafeService; use App\Services\SafeService;
@ -178,6 +179,8 @@ Router::addGroup('/patient', function () {
Router::post('', [OrderInquiryController::class, 'addInquiryOrder']); 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::post('/phone', [CodeController::class, 'getPhoneCode']);
}); });
// 省市区 // 省市区
Router::addGroup('/area', function () { Router::addGroup('/area', function () {
// 获取省份信息 // 获取省份信息
@ -279,3 +281,12 @@ Router::addGroup('/basic', function () {
// 获取医生评价 // 获取医生评价
Router::get('/evaluation', [UserDoctorController::class, 'getDoctorEvaluationList']); Router::get('/evaluation', [UserDoctorController::class, 'getDoctorEvaluationList']);
// 系统配置
Router::addGroup('/system', function () {
// 问诊
Router::addGroup('/inquiry', function () {
// 获取系统问诊配置 快速问诊-问诊购药
Router::get('/config', [SystemController::class, 'getSystemInquiryConfig']);
});
});