Im Rahmen der Veranstaltung "CS3330 - Projektpraktikum MedizinischeInformatik" an der Universität zu Lübeck entstandenes Krankenhausinformationssystem (KIS).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

772 lines
32 KiB

  1. package de.uniluebeck.mi.projmi6.db;
  2. import de.uniluebeck.mi.projmi6.model.*;
  3. import java.sql.*;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. /**
  7. * Handler fuer alle DB Interaktionen.
  8. */
  9. public class DBHandler {
  10. private static final String SELECT_ALL_PATIENTS = "SELECT * FROM `patient`";
  11. private static final String SELECT_PATIENT_BY_ID = "SELECT * FROM `patient` WHERE `id` = ?";
  12. private static final String UPDATE_PATIENT = "UPDATE `patient`" +
  13. "SET `CAVE`=?," +
  14. "`Vorname`=?," +
  15. "`Geburtsname`=?," +
  16. "`Nachname`=?," +
  17. "`Geburtsdatum`=?," +
  18. "`Geschlecht`=?," +
  19. "`Familienstand`=?," +
  20. "`Strasse`=?," +
  21. "`Hausnummer`=?," +
  22. "`PLZ`=?," +
  23. "`Ort`=?," +
  24. "`Telefon`=?," +
  25. "`KassenID`=?," +
  26. "`Versichertennummer`=?," +
  27. "`LetzterBearbeiter`=? " +
  28. "WHERE `ID`=?";
  29. private static final String INSERT_PATIENT = "INSERT INTO `patient`" +
  30. "(`CAVE`," +
  31. "`Vorname`," +
  32. "`Geburtsname`," +
  33. "`Nachname`," +
  34. "`Geburtsdatum`," +
  35. "`Geschlecht`," +
  36. "`Familienstand`," +
  37. "`Strasse`," +
  38. "`Hausnummer`," +
  39. "`PLZ`," +
  40. "`Ort`," +
  41. "`Telefon`," +
  42. "`KassenID`," +
  43. "`Versichertennummer`," +
  44. "`LetzterBearbeiter`," +
  45. "`Ersteller`)" +
  46. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  47. private static final String SELECT_ALL_STATIONEN = "SELECT *,`r`.`abteilung` AS abteilung " +
  48. "FROM `stammstation` s " +
  49. "INNER JOIN `relfachrichtungstation` r ON s.station = r.station";
  50. private static final String SELECT_FAELLE_BY_PATID = "SELECT * FROM `fall` WHERE `patientid` = ?";
  51. private static final String INSERT_FALL = "INSERT INTO `fall`" +
  52. "(`Aufnahmedatum`," +
  53. "`Entlassungsdatum`," +
  54. "`Vorstelldatum`," +
  55. "`EinweisenderArzt`," +
  56. "`Fallart`," +
  57. "`Selbsteinweisung`," +
  58. "`Hauptdiagnose`," +
  59. "`Versichertennummer`," +
  60. "`KassenID`," +
  61. "`storniert`," +
  62. "`LetzterBearbeiter`," +
  63. "`PatientID`," +
  64. "`Ersteller`)" +
  65. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
  66. private static final String UPDATE_FALL = "UPDATE `fall`" +
  67. "SET `Aufnahmedatum`=?," +
  68. "`Entlassungsdatum`=?," +
  69. "`Vorstelldatum`=?," +
  70. "`EinweisenderArzt`=?," +
  71. "Fallart=?," +
  72. "`Selbsteinweisung`=?," +
  73. "Hauptdiagnose=?," +
  74. "`Versichertennummer`=?," +
  75. "KassenID=?," +
  76. "`storniert`=?," +
  77. "LetzterBearbeiter=? " +
  78. "WHERE `FallID`=?";
  79. private static final String SELECT_DIAGNOSE_BY_ID = "SELECT * FROM `diagnose` WHERE `diagid` = ?";
  80. private static final String SELECT_ALL_ICD10CODES = "SELECT * FROM `stammicd10`";
  81. private static final String SELECT_ALL_OPSCODES = "SELECT * FROM `stammops`";
  82. private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = ? AND `version` = ?";
  83. private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = ? AND `version` = ?";
  84. private static final String SELECT_ALL_MITARBEITER = "SELECT * FROM `mitarbeiter`";
  85. private static final String SELECT_UNTERS_BY_FALLID = "SELECT * FROM `untersuchung` WHERE `fallid` = ?";
  86. private static final String INSERT_UNTERSUCHUNG = "INSERT INTO `untersuchung`" +
  87. "(`DurchfuehrenderArzt`," +
  88. "`FallID`," +
  89. "`OPSCode`," +
  90. "`OPSVersion`," +
  91. "`storniert`," +
  92. "`Untersuchungsdatum`," +
  93. "`LetzterBearbeiter`," +
  94. "`Ersteller`)" +
  95. "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
  96. private static final String UPDATE_UNTERSUCHUNG = "UPDATE `untersuchung` " +
  97. "SET `DurchfuehrenderArzt`=?," +
  98. "`FallID`=?," +
  99. "`OPSCode`=?," +
  100. "`OPSVersion`=?," +
  101. "`storniert`=?," +
  102. "`Untersuchundatum`=?" +
  103. "`LetzterBearbeiter` " +
  104. "WHERE `UnterID`=?";
  105. private static final String SELECT_MITARBEITER_BY_ID = "SELECT * FROM `mitarbeiter` WHERE `mitarbid` = ?";
  106. private static final String SELECT_DIAGNOSE_BY_FALLID = "SELECT * FROM `diagnose` WHERE `fallid` = ?";
  107. private static final String SELECT_ALL_KASSEN = "SELECT * FROM `kasse`";
  108. private static final String SELECT_KASSE_BY_KASSENID = "SELECT * FROM `kasse` WHERE `kasse`.`KassenID` = ?";
  109. private static final String SELECT_STATHIST_BY_FALLID = "SELECT * FROM `stationshistorie` WHERE `stationshistorie`.`fallid` = ?";
  110. private static final String SELECT_STATUBERITEMS_BY_STATION = "SELECT p.id AS patid," +
  111. "concat(p.nachname, ', ', p.vorname) AS patname," +
  112. "p.geburtsdatum AS dob," +
  113. "timestampdiff(YEAR, p.geburtsdatum, curdate()) AS patage," +
  114. "f.aufnahmedatum AS aufnahme," +
  115. "f.entlassungsdatum AS entlassung," +
  116. "f.fallid AS fallid " +
  117. "FROM stationshistorie s " +
  118. "INNER JOIN fall f ON s.fallid = f.fallid " +
  119. "INNER JOIN patient p ON f.patientid = p.id " +
  120. "WHERE s.station = ?";
  121. private static final String INSERT_STATHISTENTRY = "INSERT INTO `stationshistorie`" +
  122. "(`Aufnahmedatum`," +
  123. "`Entlassungsdatum`," +
  124. "`FallID`," +
  125. "`LetzterBearbeiter`," +
  126. "`Station`," +
  127. "`Ersteller`)" +
  128. "VALUES (?, ?, ?, ?, ?, ?)";
  129. private static final String UPDATE_STATHISTENTRY = "UPDATE `stationshistorie` " +
  130. "SET `Aufnahmedatum`=?," +
  131. "`Entlassungsdatum`=?," +
  132. "`FallID`=?," +
  133. "`LetzterBearbeiter`=?," +
  134. "`Station`=? " +
  135. "WHERE `StatHistID`=?";
  136. /**
  137. * Gibt alle {@link Patient} aus der DB zurueck.
  138. *
  139. * @return Liste aller {@link Patient}.
  140. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  141. */
  142. public static List<Patient> getAllPatients() throws SQLException {
  143. Statement statement = MySqlConnectionFactory.getConnection().createStatement();
  144. ResultSet rs = statement.executeQuery(SELECT_ALL_PATIENTS);
  145. List<Patient> patients = new ArrayList<>();
  146. while (rs.next()) {
  147. patients.add(getPatient(rs));
  148. }
  149. return patients;
  150. }
  151. /**
  152. * Extrahiert ein Objekt {@link Patient} aus einem gegebenen {@link ResultSet}.
  153. *
  154. * @param rs ResultSet from Database Query.
  155. * @return {@link Patient}
  156. * @throws SQLException
  157. */
  158. private static Patient getPatient(ResultSet rs) throws SQLException {
  159. Patient patient = new Patient();
  160. patient.setPatID(rs.getInt("id"));
  161. patient.setGeburtsname(rs.getString("geburtsname"));
  162. patient.setVorname(rs.getString("vorname"));
  163. patient.setNachname(rs.getString("nachname"));
  164. if (rs.getDate("geburtsdatum") != null) {
  165. patient.setGeburtsdatum(rs.getDate("geburtsdatum").toLocalDate());
  166. }
  167. patient.setCave(rs.getString("cave"));
  168. patient.setStrasse(rs.getString("strasse"));
  169. patient.setHausnummer(rs.getString("hausnummer"));
  170. patient.setPlz(rs.getString("plz"));
  171. patient.setOrt(rs.getString("ort"));
  172. patient.setTelefon(rs.getString("telefon"));
  173. if (rs.getString("familienstand") != null) {
  174. patient.setFamilienstand(Patient.Familienstand.parseChar(rs.getString("familienstand").charAt(0)));
  175. }
  176. if (rs.getString("geschlecht") != null) {
  177. patient.setGeschlecht(Patient.Geschlecht.parseChar(rs.getString("geschlecht").charAt(0)));
  178. }
  179. patient.setVersichertennummer(rs.getString("versichertennummer"));
  180. patient.setKassenID(rs.getInt("kassenid"));
  181. setVersionInformation(patient, rs);
  182. return patient;
  183. }
  184. // TODO: Never used.
  185. public static Patient getPatient(int id) throws SQLException {
  186. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID);
  187. ResultSet rs;
  188. statement.setInt(1, id);
  189. rs = statement.executeQuery();
  190. return getPatient(rs);
  191. }
  192. /**
  193. * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
  194. *
  195. * @param patient zu verarbeitender Datensatz.
  196. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  197. * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
  198. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  199. */
  200. public static void setPatient(Patient patient, int mitarbid, boolean isUpdate) throws SQLException {
  201. PreparedStatement statement;
  202. if (isUpdate) {
  203. statement = MySqlConnectionFactory.getConnection().prepareStatement(UPDATE_PATIENT);
  204. } else {
  205. statement = MySqlConnectionFactory.getConnection().prepareStatement(INSERT_PATIENT);
  206. }
  207. statement.setString(1, patient.getCave()); // CAVE
  208. statement.setString(2, patient.getVorname()); // Vorname
  209. statement.setString(3, patient.getGeburtsname()); // Geburtsname
  210. statement.setString(4, patient.getNachname()); // Nachname
  211. statement.setDate(5, Date.valueOf(patient.getGeburtsdatum())); // Geburtsdatum
  212. if (patient.getGeschlecht() != null) {
  213. statement.setString(6, String.valueOf(patient.getGeschlecht().id())); // Geschlecht
  214. } else {
  215. statement.setString(6, String.valueOf(Patient.Geschlecht.OTHER.id()));
  216. }
  217. if (patient.getFamilienstand() != null) {
  218. statement.setString(7, String.valueOf(patient.getFamilienstand().id()));// Familienstand
  219. } else {
  220. statement.setString(7, String.valueOf(Patient.Familienstand.LEDIG.id()));
  221. }
  222. statement.setString(8, patient.getStrasse()); // Strasse
  223. statement.setString(9, patient.getHausnummer()); // Hausnummer
  224. statement.setString(10, patient.getPlz()); // PLZ
  225. statement.setString(11, patient.getOrt()); // Ort
  226. statement.setString(12, patient.getTelefon()); // Telefon
  227. statement.setInt(13, patient.getKassenID()); // KassenID
  228. statement.setString(14, patient.getVersichertennummer()); // Versichertennummer
  229. statement.setInt(15, mitarbid); // LetzterBearbeiter
  230. if (!isUpdate) {
  231. statement.setInt(16, mitarbid); // Ersteller
  232. } else {
  233. statement.setInt(16, patient.getPatID()); // PatID (WHERE)
  234. }
  235. statement.execute();
  236. }
  237. public static List<Station> getAllStationen() throws SQLException {
  238. Statement statement = MySqlConnectionFactory.getConnection().createStatement();
  239. ResultSet rs = statement.executeQuery(SELECT_ALL_STATIONEN);
  240. List<Station> stationen = new ArrayList<>();
  241. while (rs.next()) {
  242. stationen.add(getStation(rs));
  243. }
  244. return stationen;
  245. }
  246. /**
  247. * Extrahiert ein Objekt {@link Station} aus einem gegebenen {@link ResultSet}.
  248. *
  249. * @param rs ResultSet from Database Query.
  250. * @return {@link Station}
  251. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  252. */
  253. private static Station getStation(ResultSet rs) throws SQLException {
  254. Station station = new Station();
  255. station.setStation(rs.getString("station"));
  256. station.setBezeichnung(rs.getString("bezeichnung"));
  257. station.setBezeichnungLang(rs.getString("bezeichnunglang"));
  258. station.setStationstyp(rs.getInt("stationstyp"));
  259. station.setAbteilung(rs.getString("abteilung"));
  260. return station;
  261. }
  262. public static List<StationsUebersichtsItem> getStationsUebersichtsItems(String station) throws SQLException {
  263. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_STATUBERITEMS_BY_STATION);
  264. statement.setString(1, station);
  265. ResultSet rs = statement.executeQuery();
  266. List<StationsUebersichtsItem> statUeberItems = new ArrayList<>();
  267. while (rs.next()) {
  268. statUeberItems.add(getStatUeberItem(rs));
  269. }
  270. return statUeberItems;
  271. }
  272. private static StationsUebersichtsItem getStatUeberItem(ResultSet rs) throws SQLException {
  273. StationsUebersichtsItem item = new StationsUebersichtsItem();
  274. item.setFallId(rs.getInt("fallid"));
  275. item.setPatId(rs.getInt("patid"));
  276. item.setPatName(rs.getString("patname"));
  277. item.setPatAge(rs.getInt("patage"));
  278. item.setPatBirthdate(rs.getDate("dob").toLocalDate());
  279. if (rs.getDate("aufnahme") != null) {
  280. item.setStationAufnahme(rs.getDate("aufnahme").toLocalDate());
  281. }
  282. if (rs.getDate("entlassung") != null) {
  283. item.setStationEntlassung(rs.getDate("entlassung").toLocalDate());
  284. }
  285. return item;
  286. }
  287. public static List<StationsHistorie> getStationsHistorieByFall(Fall fall) throws SQLException {
  288. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_STATHIST_BY_FALLID);
  289. statement.setInt(1, fall.getFallID());
  290. ResultSet rs = statement.executeQuery();
  291. List<StationsHistorie> historie = new ArrayList<>();
  292. while (rs.next()) {
  293. historie.add(getStationsHistorie(rs));
  294. }
  295. return historie;
  296. }
  297. public static void setStationsHistorie(StationsHistorie hist, boolean isUpdate) throws SQLException {
  298. PreparedStatement statement;
  299. if (isUpdate) {
  300. statement = MySqlConnectionFactory.getConnection().prepareStatement(UPDATE_STATHISTENTRY);
  301. } else {
  302. statement = MySqlConnectionFactory.getConnection().prepareStatement(INSERT_STATHISTENTRY);
  303. }
  304. if (hist.getAufnahmeDatum() != null) {
  305. statement.setTimestamp(1, Timestamp.valueOf(hist.getAufnahmeDatum())); // `Aufnahmedatum`
  306. } else {
  307. statement.setTimestamp(1, null);
  308. }
  309. if (hist.getEntlassungsDatum() != null) {
  310. statement.setTimestamp(2, Timestamp.valueOf(hist.getEntlassungsDatum())); // `Entlassungsdatum`
  311. } else {
  312. statement.setTimestamp(2, null);
  313. }
  314. statement.setInt(3, hist.getFallID()); // `FallID`
  315. statement.setInt(4, hist.getBearbeiter()); // `LetzterBearbeiter`
  316. statement.setString(5, hist.getStationKey()); // `Station`
  317. if (isUpdate) {
  318. statement.setInt(6, hist.getStatHistID()); // `StatHistID`
  319. statement.executeUpdate();
  320. } else {
  321. statement.setInt(6, hist.getErsteller()); // `Ersteller`
  322. statement.execute();
  323. }
  324. }
  325. private static StationsHistorie getStationsHistorie(ResultSet rs) throws SQLException {
  326. StationsHistorie hist = new StationsHistorie();
  327. hist.setStatHistID(rs.getInt("stathistid"));
  328. if (rs.getTimestamp("aufnahmedatum") != null) {
  329. hist.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
  330. }
  331. if (rs.getTimestamp("entlassungsdatum") != null) {
  332. hist.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
  333. }
  334. // TODO: Muss das jeweils das Objekt sein?
  335. // hist.setFall(null);
  336. // hist.setStation(null);
  337. hist.setStationKey(rs.getString("station"));
  338. return hist;
  339. }
  340. public static List<Fall> getFaelleByPatID(int id) throws SQLException {
  341. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_FAELLE_BY_PATID);
  342. statement.setInt(1, id);
  343. ResultSet rs = statement.executeQuery();
  344. List<Fall> faelle = new ArrayList<>();
  345. while (rs.next()) {
  346. faelle.add(getFall(rs));
  347. }
  348. return faelle;
  349. }
  350. /**
  351. * Extrahiert ein Objekt {@link Fall} aus einem gegebenen {@link ResultSet}.
  352. *
  353. * @param rs ResultSet from Database Query.
  354. * @return {@link Fall}
  355. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  356. */
  357. private static Fall getFall(ResultSet rs) throws SQLException {
  358. Fall fall = new Fall();
  359. fall.setFallID(rs.getInt("fallid"));
  360. if (rs.getTimestamp("aufnahmedatum") != null) {
  361. fall.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime());
  362. }
  363. if (rs.getTimestamp("entlassungsdatum") != null) {
  364. fall.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime());
  365. }
  366. if (rs.getInt("hauptdiagnose") != 0) {
  367. fall.setHauptDiagnose(getDiagnose(rs.getInt("hauptdiagnose"), fall));
  368. }
  369. if (rs.getString("versichertennummer") != null) {
  370. fall.setVersichertenNummer(rs.getString("versichertennummer"));
  371. }
  372. if (rs.getInt("kassenid") != 0) {
  373. fall.setKasse(getKasse(rs.getInt("kassenid")));
  374. }
  375. fall.setFallArt(FallArt.parseString(rs.getString("fallart")));
  376. fall.setEinweisenderArzt(rs.getString("einweisenderarzt"));
  377. fall.setStorniert(rs.getBoolean("storniert"));
  378. return fall;
  379. }
  380. /**
  381. * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
  382. *
  383. * @param fall zu verarbeitender Datensatz.
  384. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  385. * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
  386. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  387. */
  388. public static void setFall(Fall fall, int mitarbid, boolean isUpdate) throws SQLException {
  389. PreparedStatement statement;
  390. if (isUpdate) {
  391. statement = MySqlConnectionFactory.getConnection().prepareStatement(UPDATE_FALL);
  392. } else {
  393. statement = MySqlConnectionFactory.getConnection().prepareStatement(INSERT_FALL);
  394. }
  395. if (fall.getAufnahmeDatum() != null) {
  396. statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum
  397. } else {
  398. statement.setTimestamp(1, null);
  399. }
  400. if (fall.getEntlassungsDatum() != null) {
  401. statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum
  402. } else {
  403. statement.setTimestamp(2, null);
  404. }
  405. if (fall.getVorstellDatum() != null) {
  406. statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum
  407. } else {
  408. statement.setTimestamp(3, null);
  409. }
  410. if (fall.getEinweisenderArzt() != null) {
  411. statement.setString(4, fall.getEinweisenderArzt()); // EinweisenderArzt
  412. } else {
  413. statement.setTimestamp(4, null);
  414. }
  415. if (fall.getFallArt() != null) {
  416. statement.setString(5, fall.getFallArt().id()); // Fallart
  417. } else {
  418. statement.setString(5, null);
  419. }
  420. statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung
  421. if (fall.getHauptDiagnose() != null) {
  422. statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose
  423. } else {
  424. statement.setTimestamp(7, null);
  425. }
  426. statement.setString(8, fall.getVersichertenNummer()); // Versichertennummer
  427. if (fall.getKasse() != null) {
  428. statement.setInt(9, fall.getKasse().getKassenID()); // KassenID
  429. } else {
  430. statement.setTimestamp(9, null);
  431. }
  432. statement.setBoolean(10, fall.getStorniert()); // storniert
  433. statement.setInt(11, mitarbid); // Letzter Bearbeiter
  434. if (!isUpdate) {
  435. statement.setInt(12, fall.getPatient().getPatID()); // PatientID
  436. statement.setInt(13, mitarbid); // Ersteller
  437. }
  438. if (isUpdate) {
  439. statement.setInt(12, fall.getFallID());
  440. }
  441. statement.execute();
  442. }
  443. /**
  444. * Fuehrt {@code INSERT} eines neuen Datensatz durch.
  445. *
  446. * @param fall zu verarbeitender Datensatz.
  447. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  448. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  449. */
  450. public static void setFall(Fall fall, int mitarbid) throws SQLException {
  451. setFall(fall, mitarbid, false);
  452. }
  453. private static Diagnose getDiagnose(int diagid, Fall fall) throws SQLException {
  454. Diagnose diagnose = getDiagnose(diagid);
  455. diagnose.setFall(fall);
  456. return diagnose;
  457. }
  458. private static Diagnose getDiagnose(int id) throws SQLException {
  459. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_ID);
  460. statement.setInt(1, id);
  461. ResultSet rs = statement.executeQuery();
  462. rs.next(); // TODO
  463. return getDiagnose(rs);
  464. }
  465. /**
  466. * Extrahiert ein Objekt {@link Diagnose} aus einem gegebenen {@link ResultSet}.
  467. *
  468. * @param rs ResultSet from Database Query.
  469. * @return {@link Diagnose}
  470. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  471. */
  472. private static Diagnose getDiagnose(ResultSet rs) throws SQLException {
  473. Diagnose diagnose = new Diagnose();
  474. diagnose.setFreiText(rs.getString("freitext"));
  475. diagnose.setArzt(new Mitarbeiter(rs.getInt("arzt")));
  476. diagnose.setDiagArt(DiagArt.parseInt(rs.getInt("diagart")));
  477. setVersionInformation(diagnose, rs);
  478. diagnose.setIcd10code(getIcd10Code(rs.getString("icd10code"), rs.getInt("icd10version")));
  479. return diagnose;
  480. }
  481. private static void setVersionInformation(Version version, ResultSet rs) throws SQLException {
  482. version.setErsteller(rs.getInt("ersteller"));
  483. if (rs.getTimestamp("erstelldatum") != null) {
  484. version.setErstellDatumZeit(rs.getTimestamp("erstelldatum").toLocalDateTime());
  485. }
  486. version.setBearbeiter(rs.getInt("letzterbearbeiter"));
  487. if (rs.getTimestamp("letztesbearbeitungsdatum") != null) {
  488. version.setBearbeitetDatumZeit(rs.getTimestamp("letztesbearbeitungsdatum").toLocalDateTime());
  489. }
  490. }
  491. public static List<Icd10Code> getAllIcd10Codes() throws SQLException {
  492. Statement statement = MySqlConnectionFactory.getConnection().createStatement();
  493. ResultSet rs = statement.executeQuery(SELECT_ALL_ICD10CODES);
  494. List<Icd10Code> icd10codes = new ArrayList<>();
  495. while (rs.next()) {
  496. icd10codes.add(getIcd10Code(rs));
  497. }
  498. return icd10codes;
  499. }
  500. private static Icd10Code getIcd10Code(String code, int version) throws SQLException {
  501. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_ICD10CODE_BY_ID);
  502. ResultSet rs;
  503. statement.setString(1, code);
  504. statement.setInt(2, version);
  505. rs = statement.executeQuery();
  506. rs.next(); // TODO
  507. return getIcd10Code(rs);
  508. }
  509. /**
  510. * Extrahiert ein Objekt {@link Icd10Code} aus einem gegebenen {@link ResultSet}.
  511. *
  512. * @param rs ResultSet from Database Query.
  513. * @return {@link Icd10Code}
  514. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  515. */
  516. private static Icd10Code getIcd10Code(ResultSet rs) throws SQLException {
  517. String code = rs.getString("icd10code");
  518. String text = rs.getString("text");
  519. int version = rs.getInt("version");
  520. return new Icd10Code(code, text, version);
  521. }
  522. public static List<OpsCode> getAllOpsCodes() throws SQLException {
  523. Statement statement = MySqlConnectionFactory.getConnection().createStatement();
  524. ResultSet rs = statement.executeQuery(SELECT_ALL_OPSCODES);
  525. List<OpsCode> opscodes = new ArrayList<>();
  526. while (rs.next()) {
  527. opscodes.add(getOpsCode(rs));
  528. }
  529. return opscodes;
  530. }
  531. private static OpsCode getOpsCode(String code, int version) throws SQLException {
  532. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_OPSCODE_BY_ID);
  533. ResultSet rs;
  534. statement.setString(1, code);
  535. statement.setInt(2, version);
  536. rs = statement.executeQuery();
  537. rs.next(); // TODO
  538. return getOpsCode(rs);
  539. }
  540. /**
  541. * Extrahiert ein Objekt {@link OpsCode} aus einem gegebenen {@link ResultSet}.
  542. *
  543. * @param rs ResultSet from Database Query.
  544. * @return {@link OpsCode}
  545. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  546. */
  547. private static OpsCode getOpsCode(ResultSet rs) throws SQLException {
  548. String code = rs.getString("opscode");
  549. String text = rs.getString("text");
  550. int version = rs.getInt("version");
  551. return new OpsCode(code, text, version);
  552. }
  553. public static List<Mitarbeiter> getAllMitarbeiter() throws SQLException {
  554. Statement statement = MySqlConnectionFactory.getConnection().createStatement();
  555. ResultSet rs = statement.executeQuery(SELECT_ALL_MITARBEITER);
  556. List<Mitarbeiter> mitarbeiters = new ArrayList<>();
  557. while (rs.next()) {
  558. mitarbeiters.add(getMitarbeiter(rs));
  559. }
  560. return mitarbeiters;
  561. }
  562. private static Mitarbeiter getMitarbeiter(int id) throws SQLException {
  563. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_MITARBEITER_BY_ID);
  564. ResultSet rs;
  565. statement.setInt(1, id);
  566. rs = statement.executeQuery();
  567. rs.next(); // TODO
  568. return getMitarbeiter(rs);
  569. }
  570. /**
  571. * Extrahiert ein Objekt {@link Mitarbeiter} aus einem gegebenen {@link ResultSet}.
  572. *
  573. * @param rs ResultSet from Database Query.
  574. * @return {@link Mitarbeiter}
  575. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  576. */
  577. private static Mitarbeiter getMitarbeiter(ResultSet rs) throws SQLException {
  578. Mitarbeiter mitarbeiter = new Mitarbeiter(rs.getInt("mitarbid"));
  579. mitarbeiter.setTitel(rs.getString("titel"));
  580. mitarbeiter.setVorname(rs.getString("vorname"));
  581. mitarbeiter.setNachname(rs.getString("nachname"));
  582. mitarbeiter.setEinweisenderArzt(rs.getString("einweisenderarzt"));
  583. return mitarbeiter;
  584. }
  585. /**
  586. * Gibt gibt alle {@link Untersuchung} zu einem {@link Fall} aus.
  587. *
  588. * @param fall Parent {@link Fall}
  589. * @return Liste aller {@link Untersuchung} zu einem {@link Fall}.
  590. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  591. */
  592. public static List<Untersuchung> getUntersuchungByFall(Fall fall) throws SQLException {
  593. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_UNTERS_BY_FALLID);
  594. statement.setInt(1, fall.getFallID());
  595. ResultSet rs = statement.executeQuery();
  596. List<Untersuchung> untersuchungen = new ArrayList<>();
  597. while (rs.next()) {
  598. untersuchungen.add(getUntersuchung(rs, fall));
  599. }
  600. return untersuchungen;
  601. }
  602. private static Untersuchung getUntersuchung(ResultSet rs, Fall fall) throws SQLException {
  603. Untersuchung untersuchung = new Untersuchung();
  604. untersuchung.setUntersID(rs.getInt("untersid"));
  605. untersuchung.setFall(fall);
  606. untersuchung.setDurchfuehrenderArzt(getMitarbeiter(rs.getInt("durchfuehrenderarzt")));
  607. untersuchung.setUntersuchungsdatum(rs.getTimestamp("untersuchungsdatum").toLocalDateTime());
  608. untersuchung.setOpscode(getOpsCode(rs.getString("opscode"), rs.getInt("opsversion")));
  609. setVersionInformation(untersuchung, rs);
  610. return untersuchung;
  611. }
  612. /**
  613. * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus.
  614. *
  615. * @param untersuchung zu verarbeitender Datensatz.
  616. * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters.
  617. * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}.
  618. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  619. */
  620. public static void setUntersuchung(Untersuchung untersuchung, int mitarbid, boolean isUpdate) throws SQLException {
  621. PreparedStatement statement;
  622. if (isUpdate) {
  623. statement = MySqlConnectionFactory.getConnection().prepareStatement(UPDATE_UNTERSUCHUNG);
  624. } else {
  625. statement = MySqlConnectionFactory.getConnection().prepareStatement(INSERT_UNTERSUCHUNG);
  626. }
  627. statement.setInt(1, untersuchung.getDurchfuehrenderArzt().getMitarbID()); // DurchfuehrenderArzt
  628. statement.setInt(2, untersuchung.getFall().getFallID()); // FallID
  629. statement.setString(3, untersuchung.getOpscode().getOpsCode()); // OPSCode
  630. statement.setInt(4, untersuchung.getOpscode().getVersion()); // OPSVersion
  631. statement.setBoolean(5, untersuchung.getStorniert()); // storniert
  632. statement.setTimestamp(6, Timestamp.valueOf(untersuchung.getUntersuchungsdatum())); // Untersuchungsdatum
  633. statement.setInt(7, mitarbid); // Letzter Bearbeiter
  634. if (!isUpdate) {
  635. statement.setInt(8, mitarbid); // Ersteller
  636. }
  637. statement.execute();
  638. }
  639. public static List<Diagnose> getDiagnosenByFall(Fall fall) throws SQLException {
  640. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_FALLID);
  641. statement.setInt(1, fall.getFallID());
  642. ResultSet rs = statement.executeQuery();
  643. List<Diagnose> diagnosen = new ArrayList<>();
  644. while (rs.next()) {
  645. diagnosen.add(getDiagnose(rs.getInt("diagid"), fall));
  646. }
  647. return diagnosen;
  648. }
  649. public static List<Kasse> getAllKassen() throws SQLException {
  650. Statement statement = MySqlConnectionFactory.getConnection().createStatement();
  651. ResultSet rs = statement.executeQuery(SELECT_ALL_KASSEN);
  652. List<Kasse> kassen = new ArrayList<>();
  653. while (rs.next()) {
  654. kassen.add(getKasse(rs));
  655. }
  656. return kassen;
  657. }
  658. private static Kasse getKasse(int kassenid) throws SQLException {
  659. PreparedStatement statement = MySqlConnectionFactory.getConnection().prepareStatement(SELECT_KASSE_BY_KASSENID);
  660. statement.setInt(1, kassenid);
  661. ResultSet rs = statement.executeQuery();
  662. rs.next(); // TODO
  663. return getKasse(rs);
  664. }
  665. /**
  666. * Extrahiert ein Objekt {@link Kasse} aus einem gegebenen {@link ResultSet}.
  667. *
  668. * @param rs ResultSet from Database Query.
  669. * @return {@link Kasse}
  670. * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten.
  671. */
  672. private static Kasse getKasse(ResultSet rs) throws SQLException {
  673. Kasse kasse = new Kasse();
  674. kasse.setKassenID(rs.getInt("kassenid"));
  675. kasse.setName(rs.getString("name"));
  676. kasse.setAdresse(rs.getString("adresse"));
  677. kasse.setPrivat(rs.getBoolean("privat"));
  678. setVersionInformation(kasse, rs);
  679. return kasse;
  680. }
  681. }