jwtService = $jwtService; } /** * 患者登录(身份证号+姓名) * 从 exam_application 表中查找匹配的患者记录 */ public function login(string $idCardNo, string $name): array { $application = DB::table('exam_application') ->where('patient_id_card_no', $idCardNo) ->where('patient_name', $name) ->first(); if (!$application) { return ['success' => false, 'message' => '未找到匹配的患者信息,请核实身份证号和姓名']; } $patientIds = DB::table('exam_application') ->where('patient_id_card_no', $idCardNo) ->pluck('patient_id') ->unique() ->values() ->toArray(); $payload = [ 'type' => 'patient', 'patient_id_card_no' => $idCardNo, 'patient_name' => $name, 'patient_ids' => $patientIds, ]; $token = $this->jwtService->generateToken($payload); return [ 'success' => true, 'message' => '登录成功', 'data' => [ 'access_token' => $token, 'token_type' => 'Bearer', 'patient_name' => $name, 'patient_id_card_no' => $idCardNo, ] ]; } public function getPatientIdCardNo(array $payload): ?string { return $payload['patient_id_card_no'] ?? null; } public function getPatientName(array $payload): ?string { return $payload['patient_name'] ?? null; } public function getPatientIds(array $payload): array { return $payload['patient_ids'] ?? []; } public function isPatient(array $payload): bool { return ($payload['type'] ?? '') === 'patient'; } }