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

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
{
#[Inject]
protected ValidatorFactoryInterface $validationFactory;
/**
* 创建问诊订单
* @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;
/**
* @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 每日最大接诊数量

View File

@ -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();// 当前页码

View File

@ -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' => "请您选择疾病",

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.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),

View File

@ -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",
];

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\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']);
});
});