parent
b8f34743b4
commit
1531ad9f01
@ -0,0 +1,163 @@ |
||||
<?php |
||||
declare(strict_types = 1); |
||||
|
||||
namespace App\Http\Controllers\Hospital; |
||||
|
||||
|
||||
use App\Exceptions\GeneralException; |
||||
use App\Http\Controllers\Controller; |
||||
use App\Models\Department; |
||||
use App\Models\DepartmentCategory; |
||||
use App\Models\Doctor; |
||||
use App\Models\Navigation; |
||||
use Illuminate\Http\JsonResponse; |
||||
use Illuminate\Http\Request; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
|
||||
class IntroduceController extends Controller |
||||
{ |
||||
|
||||
/** |
||||
* 获取科室列表 |
||||
* @return JsonResponse |
||||
*/ |
||||
public function deptLists(): JsonResponse |
||||
{ |
||||
$category_lists = DepartmentCategory::select('id as category_id', 'name as category_name') |
||||
->orderBy('sort', 'DESC') |
||||
->orderBy('id', 'ASC') |
||||
->get(); |
||||
$category_lists = $category_lists->keyBy('category_id')->map(function ($value) { return (array)$value; })->toArray(); |
||||
|
||||
$department_lists = Department::select('dept_id', 'dept_name', 'category_id') |
||||
->where('is_enable', 1) |
||||
->orderBy('sort', 'DESC') |
||||
->orderBy('id', 'ASC') |
||||
->get(); |
||||
|
||||
foreach ($department_lists as $v) { |
||||
$category_lists[$v->category_id]['item_lists'][] = [ |
||||
'dept_id' => $v->dept_id, |
||||
'dept_name' => $v->dept_name, |
||||
'introduction' => $v->introduction ?: '' |
||||
]; |
||||
} |
||||
|
||||
return jsonResponse(Response::HTTP_OK, 'success.', array_values($category_lists)); |
||||
} |
||||
|
||||
/** |
||||
* 科室详情 |
||||
* @param Request $request |
||||
* @param string $dept_id |
||||
* @return JsonResponse |
||||
* @throws GeneralException |
||||
*/ |
||||
public function deptDetails(Request $request, string $dept_id): JsonResponse |
||||
{ |
||||
$department_details = Department::where('dept_id', $dept_id) |
||||
->where('is_enable', 1) |
||||
->first(); |
||||
|
||||
if (empty($department_details)) { |
||||
throw new GeneralException('找不到该科室信息'); |
||||
} |
||||
|
||||
$details = [ |
||||
'dept_id' => $department_details->dept_id, |
||||
'dept_name' => $department_details->dept_name, |
||||
'category_id' => $department_details->category_id, |
||||
'category_name' => $department_details->departmentCategory->name, |
||||
'introduction' => $department_details->introduction ?: '', |
||||
]; |
||||
|
||||
return jsonResponse(Response::HTTP_OK, 'success.', $details); |
||||
} |
||||
|
||||
/** |
||||
* 获取医生列表 |
||||
* @return JsonResponse |
||||
*/ |
||||
public function doctorLists(): JsonResponse |
||||
{ |
||||
$doctor_lists = Doctor::select( |
||||
'doctors.dept_id', |
||||
'departments.dept_name', |
||||
'doctors.doctor_id', |
||||
'doctors.doctor_name', |
||||
'doctors.doctor_title', |
||||
'doctors.doctor_specialty', |
||||
'doctors.avatar as doctor_avatar', |
||||
'doctors.is_expert', |
||||
'doctors.sort', |
||||
) |
||||
->join('departments', 'doctors.dept_id', '=', 'departments.dept_id') |
||||
->where('doctors.is_enable', 1) |
||||
->orderBy('doctors.sort', 'DESC') |
||||
->orderBy('doctors.is_expert', 'DESC') |
||||
->orderBy('doctors.id', 'ASC') |
||||
->get() |
||||
->toArray(); |
||||
|
||||
foreach ($doctor_lists as $k => $v) { |
||||
$doctor_lists[$k]['doctor_avatar'] = $v['doctor_avatar'] ?: ''; |
||||
} |
||||
|
||||
return jsonResponse(Response::HTTP_OK, 'success.', $doctor_lists); |
||||
} |
||||
|
||||
/** |
||||
* 获取医生详情 |
||||
* @param Request $request |
||||
* @param string $doctor_id |
||||
* @return JsonResponse |
||||
* @throws GeneralException |
||||
*/ |
||||
public function doctorDetails(Request $request, string $doctor_id): JsonResponse |
||||
{ |
||||
$doctor_details = Doctor::where('doctor_id', $doctor_id) |
||||
->where('is_enable', 1) |
||||
->first(); |
||||
|
||||
if (empty($doctor_details)) { |
||||
throw new GeneralException('找不到该科室信息'); |
||||
} |
||||
|
||||
$details = [ |
||||
'dept_id' => $doctor_details->dept_id, |
||||
'dept_name' => $doctor_details->department->dept_name, |
||||
'doctor_id' => $doctor_details->doctor_id, |
||||
'doctor_name' => $doctor_details->doctor_name, |
||||
'doctor_title' => $doctor_details->doctor_title, |
||||
'doctor_specialty' => $doctor_details->doctor_specialty, |
||||
'avatar' => $doctor_details->avatar ?: '', |
||||
'introduction' => $doctor_details->introduction ?: '', |
||||
'is_expert' => $doctor_details->is_expert, |
||||
]; |
||||
|
||||
return jsonResponse(Response::HTTP_OK, 'success.', $details); |
||||
} |
||||
|
||||
/** |
||||
* 获取医院导航信息 |
||||
* @throws GeneralException |
||||
*/ |
||||
public function navigationDetails(Request $request): JsonResponse |
||||
{ |
||||
$navigation_details = Navigation::select('area_id', 'area_name', 'longitude', 'latitude', 'address', 'telephone', 'traffic', 'guide') |
||||
->where('area_id', 1) |
||||
->where('is_enable', 1) |
||||
->first(); |
||||
|
||||
if (empty($navigation_details)) { |
||||
throw new GeneralException('找不到导航信息'); |
||||
} |
||||
|
||||
$details = $navigation_details->toArray(); |
||||
$details['traffic'] = !empty($details['traffic']) ? html_entity_decode($details['traffic']) : ''; |
||||
$details['guide'] = !empty($details['guide']) ? html_entity_decode($details['guide']) : ''; |
||||
|
||||
|
||||
return jsonResponse(Response::HTTP_OK, 'success.', $details); |
||||
} |
||||
} |
@ -0,0 +1,55 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo; |
||||
|
||||
class DepartmentTip extends Model |
||||
{ |
||||
use HasFactory; |
||||
|
||||
/** |
||||
* @var string |
||||
*/ |
||||
protected $connection = 'mysql_admin'; |
||||
|
||||
/** |
||||
* @var string |
||||
*/ |
||||
protected $table = 'department_tips'; |
||||
|
||||
/** |
||||
* The attributes that are mass assignable. |
||||
* |
||||
* @var array<int, string> |
||||
*/ |
||||
protected $fillable = [ |
||||
'dept_id', |
||||
'title', |
||||
'message', |
||||
'is_enable' |
||||
]; |
||||
|
||||
/** |
||||
* The attributes that should be cast. |
||||
* |
||||
* @var array<string, string> |
||||
*/ |
||||
protected $casts = [ |
||||
'id' => 'integer', |
||||
'is_enable' => 'integer', |
||||
]; |
||||
|
||||
/** |
||||
* 科室分类 |
||||
* @return BelongsTo |
||||
*/ |
||||
public function department(): BelongsTo |
||||
{ |
||||
return $this->belongsTo(Department::class, 'dept_id', 'dept_id'); |
||||
} |
||||
} |
@ -0,0 +1,55 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace App\Models; |
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo; |
||||
|
||||
class Navigation extends Model |
||||
{ |
||||
use HasFactory; |
||||
|
||||
/** |
||||
* @var string |
||||
*/ |
||||
protected $connection = 'mysql_admin'; |
||||
|
||||
/** |
||||
* @var string |
||||
*/ |
||||
protected $table = 'hospital_navigations'; |
||||
|
||||
/** |
||||
* The attributes that are mass assignable. |
||||
* |
||||
* @var array<int, string> |
||||
*/ |
||||
protected $fillable = [ |
||||
'area_id', |
||||
'area_name', |
||||
'longitude', |
||||
'latitude', |
||||
'address', |
||||
'telephone', |
||||
'traffic', |
||||
'guide', |
||||
'sort', |
||||
'is_enable', |
||||
]; |
||||
|
||||
/** |
||||
* The attributes that should be cast. |
||||
* |
||||
* @var array<string, string> |
||||
*/ |
||||
protected $casts = [ |
||||
'id' => 'integer', |
||||
'area_id' => 'integer', |
||||
'sort' => 'integer', |
||||
'is_enable' => 'integer', |
||||
]; |
||||
|
||||
} |
Loading…
Reference in new issue