Я хочу отсортировать запрос, полученный с тестового сервера fhir.
Как вы видите по следующей ссылке, я могу легко позволить мне сгенерировать ссылку для сортировки моего запроса пациентов по возрастанию или убыванию.
Но проблема в том, что он вообще не работает.
Ничего не меняется в моем HTML-файле, независимо от того, что я изменяю. Я пытался подниматься и опускаться. Я попробовал это без какого-либо поискового фильтра. Это всегда показывает мне одно и то же
package sample.mvc;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.api.IResource;
import ca.uhn.fhir.model.dstu2.resource.Bundle;
import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
import ca.uhn.fhir.model.dstu2.resource.Patient;
import ca.uhn.fhir.parser.IParser;
import ca.uhn.fhir.rest.client.api.IGenericClient;
import ca.uhn.fhir.rest.gclient.StringClientParam;
//import sample.jersey.db.History;
import sample.jersey.db.PatientRepository;
/**
* Demo Klasse zur Anbindung an FHIR Repo mit beispielhafter Spezifikation einer
* Suche nach Patienten. Ergebnis der Suchanfrage von FHIR Repo wird an Client
* via Template Engine weitergeleitet.
*
*/
@Controller
public class FhirControllerEndpoint {
// Logger erzeugen
//private static final org.slf4j.Logger logger = LoggerFactory.getLogger(DemoFhirControllerEndpoint.class);
FhirContext ctx = FhirContext.forDstu3();
String serverBase = "http://141.37.123.37:8080/baseDstu3/";
String infoBase = "https://fhirtest.uhn.ca/resource?serverId=hapi_dev&pretty=true&resource=Patient";
IGenericClient client = ctx.newRestfulGenericClient(serverBase);
@Autowired
PatientRepository patientRepository;
@GetMapping("/")
public String getSearch() {
return "search";
}
@RequestMapping("/patHinzu")
public String patHinzu(Model model) {
/*
// Suche durchführen
org.hl7.fhir.dstu3.model.Bundle response = client.search().forResource(Patient.class)
// .where(Patient.BIRTHDATE.beforeOrEquals().day("2017-01-01"))
// .and(Patient.CAREPROVIDER.hasChainedProperty(Organization.NAME.matches().value("Health")))
.returnBundle(org.hl7.fhir.dstu3.model.Bundle.class).execute();
// Beispielhafte Ausgabe auf der Console von Details der Ergebnisliste
ArrayList<sample.jersey.db.Patient> list = new ArrayList<sample.jersey.db.Patient>();
for (Entry e : response.getEntry()) {
Patient p = (Patient) e.getResource();
sample.jersey.db.Patient pat = new sample.jersey.db.Patient();
pat.setId(p.getId().getIdPartAsLong());
pat.setName(p.getNameFirstRep().getNameAsSingleString());
try {
pat.setBirthdate(p.getBirthDate().toString());
}
catch (NullPointerException ex){
pat.setBirthdate("missing");
}
list.add(pat);
patientRepository.save(pat);
// logger.info(p.toString() + ": " + e.getFullUrl());
// logger.info("Name: " + p.getNameFirstRep().getNameAsSingleString());
//logger.info("Birthdate: " + p.getBirthDate().toString());
}
// Aufbereitung der Daten für die Visualisierung in HTML
model.addAttribute("p_repo", serverBase);
model.addAttribute("p_info", infoBase);
model.addAttribute("p_number", response.getEntry().size());
model.addAttribute("patientList", list);
if (response.getTotal() == null)
model.addAttribute("p_total", "Not Available");
else
model.addAttribute("p_total", response.getTotal());
// fhir.ftl Template benutzen */
return "patientHinzufuegen";
}
@RequestMapping("/allePat")
public String allePat(Model model,
@RequestParam(value = "vorname", defaultValue = "") String vorname,
@RequestParam(value = "nachname", defaultValue = "") String nachname,
@RequestParam(value = "gender", defaultValue = "") String gender,
@RequestParam(value = "id", defaultValue = "") String id,
@RequestParam(value = "date", defaultValue = "") String date) {
// Liste für View
ArrayList<sample.jersey.db.Patient> listPat = new ArrayList<sample.jersey.db.Patient>();
org.hl7.fhir.dstu3.model.Bundle results =client.search().forResource(org.hl7.fhir.dstu3.model.Patient.class)
.where(new StringClientParam("birthdate").contains().value(date))
.and(new StringClientParam("family").matches().value(vorname))
.and(new StringClientParam("given").matches().value(nachname))
.and(new StringClientParam("gender").matches().value(gender))
.and(new StringClientParam("id").matches().value(id))
.and(new StringClientParam("_count").matches().value("50"))
.where(org.hl7.fhir.dstu3.model.Patient.NAME.matches().value(vorname)).returnBundle(org.hl7.fhir.dstu3.model.Bundle.class).execute();
for (BundleEntryComponent entry : results.getEntry()) {
org.hl7.fhir.dstu3.model.Patient patient = (org.hl7.fhir.dstu3.model.Patient) entry.getResource();
sample.jersey.db.Patient viewPatient = new sample.jersey.db.Patient();
viewPatient.setName(patient.getNameFirstRep().getNameAsSingleString());
viewPatient.setId(patient.getId());
viewPatient.setBirthdate(patient.getBirthDateElement().getValueAsString());
viewPatient.setGender(patient.getGender());
listPat.add(viewPatient);
}
// Aufbereitung der Daten für die Visualisierung in HTML
model.addAttribute("mylist", listPat);
model.addAttribute("p_repo",0);
model.addAttribute("p_info",0);
model.addAttribute("p_total",0);
// fhir.ftl Template benutzen
return "allePatienten";
}
@RequestMapping("/patSuche")
public String patSuche(Model model,
@RequestParam(value = "vorname", defaultValue = "") String vorname,
@RequestParam(value = "nachname", defaultValue = "") String nachname,
@RequestParam(value = "date", defaultValue = "") String date) {
// Liste für View
ArrayList<sample.jersey.db.Patient> listPat = new ArrayList<sample.jersey.db.Patient>();
if (vorname.length() >= 1 || nachname.length() >= 1 || date.length() >= 1) {
org.hl7.fhir.dstu3.model.Bundle results =client.search().forResource(org.hl7.fhir.dstu3.model.Patient.class)
.where(new StringClientParam("birthdate").contains().value(date))
.and(new StringClientParam("family").matches().value(vorname))
.and(new StringClientParam("given").matches().value(nachname))
.and(new StringClientParam("_count").matches().value("50"))
.where(org.hl7.fhir.dstu3.model.Patient.NAME.matches().value(vorname)).returnBundle(org.hl7.fhir.dstu3.model.Bundle.class).execute();
for (BundleEntryComponent entry : results.getEntry()) {
org.hl7.fhir.dstu3.model.Patient patient = (org.hl7.fhir.dstu3.model.Patient) entry.getResource();
sample.jersey.db.Patient viewPatient = new sample.jersey.db.Patient();
viewPatient.setName(patient.getNameFirstRep().getNameAsSingleString());
viewPatient.setId(patient.getId());
viewPatient.setBirthdate(patient.getBirthDateElement().getValueAsString());
viewPatient.setGender(patient.getGender());
listPat.add(viewPatient);
}
}
// Aufbereitung der Daten für die Visualisierung in HTML
model.addAttribute("mylist", listPat);
model.addAttribute("p_repo",0);
model.addAttribute("p_info",0);
model.addAttribute("p_total",0);
// fhir.ftl Template benutzen
return "patientSuchen";
}
@RequestMapping("/mediVerwaltung")
public String medi() {
return "medikamente";
}
@RequestMapping("/login")
public String login(Model model,
@RequestParam(value = "username", defaultValue = "") String username,
@RequestParam(value = "passwort", defaultValue = "") String password) {
/*
// Liste für View
ArrayList<sample.jersey.db.Patient> listPat = new ArrayList<sample.jersey.db.Patient>();
org.hl7.fhir.dstu3.model.Bundle results =client.search().forResource(org.hl7.fhir.dstu3.model.Patient.class)
.and(new StringClientParam("family").matches().value(username))
.where(org.hl7.fhir.dstu3.model.Patient.NAME.matches().value(username)).returnBundle(org.hl7.fhir.dstu3.model.Bundle.class).execute();
for (BundleEntryComponent entry : results.getEntry()) {
org.hl7.fhir.dstu3.model.Patient patient = (org.hl7.fhir.dstu3.model.Patient) entry.getResource();
sample.jersey.db.Patient viewPatient = new sample.jersey.db.Patient();
viewPatient.setName(patient.getNameFirstRep().getNameAsSingleString());
viewPatient.setId(patient.getId());
viewPatient.setBirthdate(patient.getBirthDateElement().getValueAsString());
viewPatient.setGender(patient.getGender());
listPat.add(viewPatient);
}
// Aufbereitung der Daten für die Visualisierung in HTML
model.addAttribute("mylist", listPat);
model.addAttribute("p_repo",0);
model.addAttribute("p_info",0);
model.addAttribute("p_total",0);
*/
// fhir.ftl Template benutzen
return "login";
}
}