Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/de/uniluebeck/mi/projmi6/Main.java
master
Johannes 10 years ago
parent
commit
425e789966
2 changed files with 67 additions and 46 deletions
  1. +28
    -10
      src/main/java/de/uniluebeck/mi/projmi6/Main.java
  2. +39
    -36
      src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Sender.java

+ 28
- 10
src/main/java/de/uniluebeck/mi/projmi6/Main.java View File

@@ -7,7 +7,6 @@ import de.uniluebeck.mi.projmi6.db.DBHandler;
import de.uniluebeck.mi.projmi6.hapi.HL7Receiver;
import de.uniluebeck.mi.projmi6.hapi.HL7Server;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.collections.FXCollections;
import javafx.concurrent.Task;
@@ -48,9 +47,10 @@ public class Main extends Application {
public static int OPS_PORT = 1112;


private HL7Server server;

/**
* Because building the GUI from FXML is a bit costly
* and loading the master data takes some time,
* Cuz building the GUI from FXML is a bit costly,
* it's done from its own thread.
*/
private Task<Parent> loadMainWindowTask = new Task<Parent>() {
@@ -111,21 +111,36 @@ public class Main extends Application {
* @param args Commandline parameters
*/
public static void main(String[] args) {
if (isRunning()) {
LoggerFactory.getLogger(Main.class).error("App already running or Port 1111 in use.");
System.exit(2);
}
launch(args);
}


/**
* Server instance that is currently running
* @return true wenn der Port 1111 bereits belegt ist, false sonst.
*/
private HL7Server server;
private static boolean isRunning() {
ServerSocket socket = null;
try {
socket = new ServerSocket(1111);
socket.setReuseAddress(true);
return false;
} catch (IOException ignored) {
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException ignored) {
}
}
}
return true;
}

/**
* In the application lifecycle, this method will be called when closing.
*/
@Override
public void stop() throws Exception {
//Stop the server
if (server != null) {
server.stop();
server.shutdown();
@@ -135,6 +150,9 @@ public class Main extends Application {

@Override
public void start(Stage primaryStage) {
// TODO: Jojo kann das weg?
// System.out.println(getClass().getClassLoader().getResource("").toExternalForm());

primaryStage.getIcons().add(icon);

Stage loadingMessage = createLoadWindow(loadMainWindowTask.messageProperty());


+ 39
- 36
src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Sender.java View File

@@ -25,76 +25,78 @@ import java.util.List;
/**
* Manages all HL7 sending tasks. This includes: creating a message, sending the message,
* Created by taschi on 22.11.15.
*
*/
public class HL7Sender {

/**
* generates an ADT_A05 message for data exchange with OPS group
*
*
* @param fall to create the message from this content. patient and diagnosis are linked to fall
* @throws HL7Exception, IOException, SQLException
*/
public static void createMessageADT_A01(Fall fall) throws HL7Exception, IOException, SQLException {
Patient patient = fall.getPatient();
ADT_A01 adt = new ADT_A01();
ADT_A01 adt_a01 = new ADT_A01();

//default MSH Values (Sets Segments: 1,2,7,9,10,11
adt.initQuickstart("ADT", "A01", "P");
//default MSH Values (Sets Segments: 1,2,7,9,10,11,12
adt_a01.initQuickstart("ADT", "A01", "P");

//MSH Segment:
MSH mshSegment = adt.getMSH();
mshSegment.getMsh3_SendingApplication().getNamespaceID().parse("KISGruppe6");
mshSegment.getMsh5_ReceivingApplication().getNamespaceID().parse("OPS Gruppe von Maurice und Torben");
mshSegment.getMsh12_VersionID().getVersionID().parse("2.5.1");
mshSegment.getMsh15_AcceptAcknowledgmentType().parse("AL");
MSH msh = adt_a01.getMSH();
msh.getMsh3_SendingApplication().getNamespaceID().parse("KISGruppe6");
msh.getMsh5_ReceivingApplication().getNamespaceID().parse("OPSGruppe3");
msh.getMsh15_AcceptAcknowledgmentType().parse("AL");

//EVN Segment:
EVN evnSegment = adt.getEVN();
evnSegment.getEvn1_EventTypeCode().parse("A01");
evnSegment.getEvn2_RecordedDateTime().getTime().setValue(mshSegment.getDateTimeOfMessage().encode());
evnSegment.getEvn4_EventReasonCode().parse("01");
EVN evn = adt_a01.getEVN();
evn.getEvn1_EventTypeCode().parse("A01");
evn.getEvn2_RecordedDateTime().getTime().setValue(msh.getDateTimeOfMessage().encode());
evn.getEvn4_EventReasonCode().parse("01");

//PID
PID pidSegment = adt.getPID();
pidSegment.getPid2_PatientID().getIDNumber().parse(String.valueOf(patient.getPatID()));
pidSegment.getPid3_PatientIdentifierList(0).getIDNumber().parse(Integer.toString(patient.getPatID()));
pidSegment.getPid5_PatientName(0).getFamilyName().getSurname().parse(patient.getNachname());
pidSegment.getPid5_PatientName(0).getGivenName().parse(patient.getVorname());
pidSegment.getPid7_DateTimeOfBirth().getTime().setValue(Date.from(patient.getGeburtsdatum().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
pidSegment.getPid8_AdministrativeSex().parse(String.valueOf(patient.getGeschlecht().id()));
pidSegment.getPid11_PatientAddress(0).getStreetAddress().getStreetName().parse(patient.getStrasse());
pidSegment.getPid11_PatientAddress(0).getStreetAddress().getDwellingNumber().parse(patient.getHausnummer());
pidSegment.getPid11_PatientAddress(0).getCity().parse(patient.getOrt());
pidSegment.getPid13_PhoneNumberHome(0).getTelephoneNumber().parse(patient.getTelefon());
pidSegment.getPid16_MaritalStatus().getAlternateIdentifier().parse(patient.getFamilienstand().toString());
PID pid = adt_a01.getPID();
pid.getPid1_SetIDPID().parse("1");
pid.getPid2_PatientID().getIDNumber().parse(String.valueOf(patient.getPatID()));
pid.getPid3_PatientIdentifierList(0).getIDNumber().parse(Integer.toString(patient.getPatID()));
pid.getPid5_PatientName(0).getFamilyName().getSurname().parse(patient.getNachname());
pid.getPid5_PatientName(0).getGivenName().parse(patient.getVorname());
pid.getPid7_DateTimeOfBirth().getTime().setValue(Date.from(patient.getGeburtsdatum().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
pid.getPid8_AdministrativeSex().parse(String.valueOf(patient.getGeschlecht().id()));
pid.getPid11_PatientAddress(0).getStreetAddress().getStreetName().parse(patient.getStrasse());
pid.getPid11_PatientAddress(0).getStreetAddress().getDwellingNumber().parse(patient.getHausnummer());
pid.getPid11_PatientAddress(0).getCity().parse(patient.getOrt());
pid.getPid11_PatientAddress(0).getZipOrPostalCode().parse(patient.getPlz());
pid.getPid13_PhoneNumberHome(0).getTelephoneNumber().parse(patient.getTelefon());
pid.getPid16_MaritalStatus().getAlternateIdentifier().parse(patient.getFamilienstand().toString());

//Diagnosen (DG1 Segmente des PV1 Segments
List<Diagnose> diagnosen = DBHandler.getDiagnosenByFall(fall);
PV1 pv1Segment = adt.getPV1();
pv1Segment.getPv12_PatientClass().parse("U");
PV1 pv1 = adt_a01.getPV1();
pv1.getPv11_SetIDPV1().parse("1");
pv1.getPv12_PatientClass().parse("U");
pv1.getPv119_VisitNumber().getIDNumber().parse(String.valueOf(fall.getFallID()));

int i = 1;
for (Diagnose diagnose : diagnosen) {
for (int i = 0; i < diagnosen.size(); i++) {
Diagnose diagnose = diagnosen.get(i);
Mitarbeiter arzt = diagnose.getArzt();
DG1 dg1 = adt.getDG1(i - 1);
dg1.getDg11_SetIDDG1().setValue(String.valueOf(i));
DG1 dg1 = adt_a01.getDG1(i);
dg1.getDg11_SetIDDG1().setValue(String.valueOf(i + 1));
dg1.getDg13_DiagnosisCodeDG1().getIdentifier().parse(diagnose.getIcd10code().getCode());
dg1.getDg13_DiagnosisCodeDG1().getNameOfCodingSystem().parse("I10");
dg1.getDg14_DiagnosisDescription().parse(diagnose.getFreiText());
dg1.getDg16_DiagnosisType().parse(diagnose.getDiagArt().id());
XCN xcn = dg1.getDg116_DiagnosingClinician(0);
xcn.getIDNumber().setValue(arzt.getEinweisenderArzt());
xcn.getGivenName().setValue(arzt.getVorname());
xcn.getFamilyName().getSurname().setValue(arzt.getNachname());
xcn.getPrefixEgDR().setValue(arzt.getTitel());
dg1.getDg14_DiagnosisDescription().parse(diagnose.getFreiText());
dg1.getDg16_DiagnosisType().parse(diagnose.getDiagArt().id());
i++;
}
sendMessage(adt);
sendMessage(adt_a01);
}

/**
* Sending message handler. Calls function to send current message
*
* @param message to send
* @throws HL7Exception
*/
@@ -108,6 +110,7 @@ public class HL7Sender {
* sends an ADT_A01 message and waits ca 5 seconds for an ACK. If no ACK occurs it sends the message ONLY 5 times again
* if after 5 times no ack occurs log message
* write log historie in database
*
* @param message you want to send
* @throws HL7Exception
*/


Loading…
Cancel
Save