patientAuthService = $patientAuthService; } /** * 获取我的申请单列表 * POST /api/h5/applications */ public function list(Request $request) { $payload = $request->attributes->get('payload'); $idCardNo = $this->patientAuthService->getPatientIdCardNo($payload); $status = $request->input('status', null); $query = DB::table('exam_application as ea') ->leftJoin('patient_type as pt', 'ea.patient_type', '=', 'pt.mask') ->where('ea.patient_id_card_no', $idCardNo) ->whereNotNull('ea.patient_id_card_no') ->select([ 'ea.id', 'ea.his_order_id', 'ea.his_request_no', 'ea.patient_type', 'ea.patient_name', 'ea.patient_gender', 'ea.patient_age', 'ea.examination_item_name', 'ea.examination_item_code', 'ea.examination_department_name', 'ea.apply_department_name', 'ea.apply_doctor_name', 'ea.apply_time', 'ea.payment_status', 'ea.clinical_diagnosis', 'ea.notes', 'ea.status', 'ea.created_at', 'pt.name as patient_type_name' ]); if ($status !== null) { $query->where('ea.status', $status); } $list = $query->orderBy('ea.apply_time', 'desc') ->orderBy('ea.id', 'desc') ->get(); // 为已预约的医嘱附加预约信息 $appointmentIds = $list->where('status', 1)->pluck('id')->toArray(); $appointments = []; if (!empty($appointmentIds)) { $appointments = DB::table('exam_appointment as ea') ->leftJoin('department_resource as dr', 'ea.department_resource_id', '=', 'dr.id') ->leftJoin('plan as p', 'ea.time_slot_id', '=', 'p.id') ->whereIn('ea.exam_application_id', $appointmentIds) ->where('ea.status', 1) ->select([ 'ea.id', 'ea.exam_application_id', 'ea.appointment_time', 'ea.status as appointment_status', 'dr.name as resource_name', 'p.start_time as slot_start_time', 'p.end_time as slot_end_time' ]) ->get() ->keyBy('exam_application_id') ->toArray(); } foreach ($list as $item) { if ($item->status === 1 && isset($appointments[$item->id])) { $item->appointment_info = $appointments[$item->id]; } else { $item->appointment_info = null; } } return Rs::success(['list' => $list]); } /** * 获取申请单详情(含检查项目详情) * POST /api/h5/application/detail */ public function detail(Request $request) { $payload = $request->attributes->get('payload'); $idCardNo = $this->patientAuthService->getPatientIdCardNo($payload); $applicationId = $request->input('application_id'); if (empty($applicationId)) { return Rs::error('请提供申请单ID'); } $application = DB::table('exam_application as ea') ->leftJoin('patient_type as pt', 'ea.patient_type', '=', 'pt.mask') ->where('ea.id', $applicationId) ->where('ea.patient_id_card_no', $idCardNo) ->select([ 'ea.*', 'pt.name as patient_type_name' ]) ->first(); if (!$application) { return Rs::error('未找到该申请单'); } // 查询关联的检查项目详情 $examItem = DB::table('exam_item') ->where('code', $application->examination_item_code) ->where('deleted', 0) ->select([ 'id', 'code', 'name', 'desc', 'need_appointment', 'exam_part_code', 'fasting_status', 'check_tips', 'check_time', 'use_seats', 'status' ]) ->first(); $application->exam_item_detail = $examItem; // 如果已预约,附加预约详情 if ($application->status == 1) { $appointment = DB::table('exam_appointment as ea') ->leftJoin('department_resource as dr', 'ea.department_resource_id', '=', 'dr.id') ->leftJoin('channel as c', 'ea.channel_id', '=', 'c.id') ->leftJoin('plan as p', 'ea.time_slot_id', '=', 'p.id') ->where('ea.exam_application_id', $applicationId) ->where('ea.status', 1) ->select([ 'ea.id', 'ea.appointment_time', 'ea.status as appointment_status', 'ea.department_resource_id', 'dr.name as resource_name', 'c.name as channel_name', 'p.start_time as slot_start_time', 'p.end_time as slot_end_time', 'dr.cancel_reason_required' ]) ->first(); $application->appointment_info = $appointment; } return Rs::success($application); } }