VergleichsansichtBaseDbFunctions.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package com.tsystems.diwo.business.queries;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.fasterxml.jackson.databind.SerializationFeature;
  4. import com.tsystems.common.model.db.interfaces.IInwoDBCall;
  5. import java.math.BigDecimal;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Types;
  9. import java.util.ArrayList;
  10. import java.util.LinkedHashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. import oracle.jbo.JboException;
  14. /**
  15. * Gemeinsame Basisklasse für Vergleichsansicht-JSON-DB-Funktionen.
  16. * Enthält alle gemeinsamen Methoden für die Verarbeitung von Stammakten, Vorgängen und grundlegenden DB-Operationen.
  17. */
  18. public class VergleichsansichtBaseDbFunctions {
  19. protected static final ObjectMapper om =
  20. new ObjectMapper().enable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS );
  21. /* ===========================
  22. STAMMAKTE (Root-Daten)
  23. =========================== */
  24. protected static Map<String, Object> fetchStammakte ( IInwoDBCall dbCall, Integer sakId ) throws SQLException {
  25. String q =
  26. "SELECT sak.AZ_ANZEIGE AS aktenzeichen, " + " bew.NAME AS antragstellername, " +
  27. " TO_CHAR(bew.GEB_DAT, 'YYYY-MM-DD') AS antragstellerGeburtsdatum, " +
  28. " sak.A_STRASSE AS adr_strasse, TO_CHAR(sak.A_HAUSNR) AS adr_hausnummer, " +
  29. " sak.A_HAUSNRZUSATZ AS adr_zusatz, sak.A_PLZ_ORT AS adr_plz, sak.A_ORT AS adr_ort " +
  30. "FROM T_STAMMAKTEN sak " + "LEFT JOIN T_BEWOHNER bew ON bew.ID = sak.PE_ID " + "WHERE sak.ID = :sak_id";
  31. dbCall.query( q );
  32. dbCall.in( "sak_id", sakId, Types.INTEGER );
  33. Map<String, Object> stammakte = new LinkedHashMap<>();
  34. ResultSet rs = null;
  35. rs = dbCall.executeQuery( true );
  36. if ( rs.next() ) {
  37. stammakte.put( "aktenzeichen", rs.getString( "aktenzeichen" ) );
  38. stammakte.put( "antragstellername", rs.getString( "antragstellername" ) );
  39. String geb = rs.getString( "antragstellerGeburtsdatum" );
  40. if ( geb != null )
  41. stammakte.put( "antragstellerGeburtsdatum", geb );
  42. Map<String, Object> adr = new LinkedHashMap<>();
  43. adr.put( "strasse", rs.getString( "adr_strasse" ) );
  44. adr.put( "hausnummer", rs.getString( "adr_hausnummer" ) );
  45. // Fix: Handle null values for zusatz - schema expects string, not null
  46. String zusatz = rs.getString( "adr_zusatz" );
  47. adr.put( "zusatz", zusatz != null ? zusatz : "" );
  48. adr.put( "plz", rs.getString( "adr_plz" ) );
  49. adr.put( "ort", rs.getString( "adr_ort" ) );
  50. stammakte.put( "anschrift", adr );
  51. }
  52. return stammakte;
  53. }
  54. /* ===========================
  55. Vorgang / Listen / Felder
  56. =========================== */
  57. /** Holt BEZ und WOGNR aus T_AKTEN für eine gegebene SAK_ID */
  58. protected static Map<String, Integer> fetchBezWognrFromAkten ( IInwoDBCall dbCall,
  59. Integer sakId ) throws SQLException {
  60. if ( sakId == null ) {
  61. throw new JboException( "Fehler: SAK_ID ist null in fetchBezWognrFromAkten" );
  62. }
  63. String q = "SELECT a.BEZ, a.WOGNR FROM T_AKTEN a WHERE a.SAK_ID = :sak_id";
  64. dbCall.query( q );
  65. dbCall.in( "sak_id", sakId, Types.INTEGER );
  66. Map<String, Integer> result = new LinkedHashMap<>();
  67. ResultSet rs = null;
  68. rs = dbCall.executeQuery( true );
  69. if ( rs.next() ) {
  70. Object bezObj = rs.getObject( "BEZ" );
  71. Object wognrObj = rs.getObject( "WOGNR" );
  72. if ( bezObj == null || wognrObj == null ) {
  73. throw new JboException( "Fehler: BEZ oder WOGNR ist null für SAK_ID " + sakId + " - BEZ: " + bezObj +
  74. ", WOGNR: " + wognrObj );
  75. }
  76. result.put( "bez", ( ( BigDecimal ) bezObj ).intValue() );
  77. result.put( "wognr", ( ( BigDecimal ) wognrObj ).intValue() );
  78. } else {
  79. throw new JboException( "Fehler: Keine Daten in T_AKTEN für SAK_ID " + sakId + " gefunden" );
  80. }
  81. return result;
  82. }
  83. protected static Map<String, Object> fetchStammvorgang ( IInwoDBCall dbCall, Integer sakId,
  84. Integer lfdnr ) throws SQLException {
  85. String q =
  86. "SELECT TO_CHAR(sv.LFDNR) AS id, " + " COALESCE(st.BESCHREIBUNG, sv.SVORGANGSTYP) AS vorgangstyp, " +
  87. " COALESCE(sa.BESCHREIBUNG, TO_CHAR(sv.STATUS)) AS vorgangsstatus " + "FROM T_STAMMVORGAENGE sv " +
  88. "LEFT JOIN T_SANTRAGSTYPEN st ON st.WERT = sv.SVORGANGSTYP " +
  89. "LEFT JOIN T_SANTRAGSSTATUS sa ON sa.WERT = sv.STATUS " + "WHERE sv.SAK_ID = :sak_id AND sv.LFDNR = :lfdnr";
  90. dbCall.query( q );
  91. dbCall.in( "sak_id", sakId, Types.INTEGER );
  92. dbCall.in( "lfdnr", lfdnr, Types.INTEGER );
  93. ResultSet rs = null;
  94. Map<String, Object> out = new LinkedHashMap<>();
  95. rs = dbCall.executeQuery( true );
  96. if ( rs.next() ) {
  97. out.put( "id", rs.getString( "id" ) ); // JSON erwartet String
  98. String vt = rs.getString( "vorgangstyp" );
  99. if ( vt != null )
  100. out.put( "vorgangstyp", vt );
  101. String vs = rs.getString( "vorgangsstatus" );
  102. if ( vs != null )
  103. out.put( "vorgangsstatus", vs );
  104. }
  105. return out;
  106. }
  107. protected static List<Integer> fetchAndereLfdnr ( IInwoDBCall dbCall, Integer sakId,
  108. Integer lfdnr ) throws SQLException {
  109. String q = "SELECT LFDNR FROM T_STAMMVORGAENGE WHERE SAK_ID = :sak_id AND LFDNR <> :lfdnr ORDER BY LFDNR";
  110. dbCall.query( q );
  111. dbCall.in( "sak_id", sakId, Types.INTEGER );
  112. dbCall.in( "lfdnr", lfdnr, Types.INTEGER );
  113. ResultSet rs = null;
  114. List<Integer> out = new ArrayList<>();
  115. rs = dbCall.executeQuery( true );
  116. while ( rs.next() )
  117. out.add( ( ( BigDecimal ) rs.getObject( "LFDNR" ) ).intValue() );
  118. return out;
  119. }
  120. /* ===================== Utils ===================== */
  121. protected static void putNum ( Map<String, Object> target, String jsonKey, ResultSet rs,
  122. String col ) throws SQLException {
  123. Object o = rs.getObject( col );
  124. if ( o != null ) {
  125. if ( o instanceof BigDecimal )
  126. target.put( jsonKey, ( BigDecimal ) o );
  127. else if ( o instanceof Number )
  128. target.put( jsonKey, ( ( Number ) o ).doubleValue() );
  129. else
  130. target.put( jsonKey, o );
  131. }
  132. }
  133. protected static void putNumIfNotNull ( Map<String, Object> target, String jsonKey, ResultSet rs,
  134. String col ) throws SQLException {
  135. Object o = rs.getObject( col );
  136. if ( o != null ) {
  137. if ( o instanceof BigDecimal )
  138. target.put( jsonKey, ( BigDecimal ) o );
  139. else if ( o instanceof Number )
  140. target.put( jsonKey, ( ( Number ) o ).doubleValue() );
  141. else
  142. target.put( jsonKey, o );
  143. }
  144. }
  145. protected static void putStringIfNotNull ( Map<String, Object> target, String jsonKey, String value ) {
  146. if ( value != null && !value.trim().isEmpty() ) {
  147. target.put( jsonKey, value.trim() );
  148. }
  149. }
  150. protected static String nullTrim ( String s ) {
  151. return s == null ? null : s.trim();
  152. }
  153. }