Сортировка запроса с тестового сервера fhir - PullRequest
0 голосов
/ 17 июня 2019

Я хочу отсортировать запрос, полученный с тестового сервера 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";

    }
}

...