194 lines
14 KiB
HTML

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="de"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>UpdatePart.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">backend</a> &gt; <a href="index.source.html" class="el_package">com.workbenchclassic</a> &gt; <span class="el_source">UpdatePart.java</span></div><h1>UpdatePart.java</h1><pre class="source lang-java linenums">package com.workbenchclassic;
import org.json.JSONArray;
import org.json.JSONObject;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
* UpdateStation performs database insert depending on DB vendor (MSSQL or
* Oracle).
*/
@Path(&quot;/updateParts&quot;)
<span class="nc" id="L23">public class UpdatePart {</span>
/** Our DB service for queries (JNDI, etc.). */
<span class="nc" id="L26"> private final DBService dbService = new DBService(&quot;dsTranNJTA&quot;);</span>
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response doUpdate(String jsonBody) {
try {
// 1) JSON parsen
<span class="nc" id="L34"> JSONObject json = new JSONObject(jsonBody);</span>
<span class="nc" id="L35"> String station = json.getString(&quot;station&quot;);</span>
<span class="nc" id="L36"> JSONArray dataArray = json.getJSONArray(&quot;data&quot;);</span>
// 2) DB-Vendor abfragen
<span class="nc" id="L39"> String vendor = dbService.getDatabaseProductName();</span>
<span class="nc" id="L40"> System.out.println(&quot;Aktueller DB-Vendor: &quot; + vendor);</span>
<span class="nc" id="L42"> GetMetadata metadata = new GetMetadata();</span>
<span class="nc" id="L43"> String extPlantResponseString = metadata.getExtPlantJson(station);</span>
<span class="nc" id="L44"> JSONObject extPlantResponse = new JSONObject(extPlantResponseString);</span>
<span class="nc" id="L46"> String errorCode = extPlantResponse.optString(&quot;errorCode&quot;, &quot;0&quot;);</span>
<span class="nc bnc" id="L47" title="All 2 branches missed."> if (!&quot;0&quot;.equals(errorCode)) {</span>
// Return an HTTP 400 or 500 with that JSON
<span class="nc" id="L49"> return Response.status(Response.Status.BAD_REQUEST).entity(extPlantResponse.toString()).build();</span>
}
// 3) werknummer ermitteln
// werkResultJson könnte z.B. so aussehen:
// {&quot;errorCode&quot;:&quot;0&quot;,&quot;errorMessage&quot;:&quot;Done&quot;,&quot;data&quot;:&quot;[{\&quot;werknummer\&quot;:\&quot;ABC\&quot;}]&quot;}
<span class="nc" id="L56"> String werkData = extPlantResponse.optString(&quot;data&quot;, &quot;[]&quot;);</span>
<span class="nc" id="L57"> JSONArray werkArr = new JSONArray(werkData);</span>
<span class="nc" id="L59"> String WERK_NR = null;</span>
<span class="nc" id="L60"> String COMPANY_NO = null;</span>
<span class="nc" id="L61"> String CLIENT_NO = null;</span>
<span class="nc bnc" id="L62" title="All 2 branches missed."> if (werkArr.length() &gt; 0) {</span>
<span class="nc" id="L63"> JSONObject row = werkArr.getJSONObject(0);</span>
<span class="nc" id="L64"> WERK_NR = row.optString(&quot;ext_company_nr&quot;, null);</span>
<span class="nc" id="L65"> COMPANY_NO = row.optString(&quot;werk_nr&quot;, null);</span>
<span class="nc" id="L66"> CLIENT_NO = row.optString(&quot;client_nr&quot;, null);</span>
}
<span class="nc" id="L69"> System.out.println(&quot;Ermittelte werknummer: &quot; + COMPANY_NO);</span>
<span class="nc" id="L71"> boolean isMSSQL = &quot;Microsoft SQL Server&quot;.equals(vendor);</span>
<span class="nc" id="L72"> boolean isOracle = &quot;Oracle&quot;.equals(vendor);</span>
// 4) ZUERST den tran_idocstatus-Eintrag anlegen
<span class="nc bnc" id="L75" title="All 2 branches missed."> if (isMSSQL) {</span>
<span class="nc" id="L76"> String insertIdocstatusMSSQL = &quot;INSERT INTO xtran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES ( (NEXT VALUE FOR xtran.seq_tranidocstatus), getdate(), 1, 0, 9, 0)&quot;;</span>
<span class="nc" id="L77"> dbService.dbConnect(insertIdocstatusMSSQL);</span>
<span class="nc bnc" id="L78" title="All 2 branches missed."> } else if (isOracle) {</span>
<span class="nc" id="L79"> String insertIdocstatusOracle = &quot;INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES ( tran.seq_tranidocstatus.nextval, sysdate, 1, 0, 9, 0)&quot;;</span>
<span class="nc" id="L80"> dbService.dbConnect(insertIdocstatusOracle);</span>
<span class="nc" id="L81"> } else {</span>
<span class="nc" id="L82"> System.out.println(&quot;DB-Vendor nicht implementiert: &quot; + vendor);</span>
}
// 5) Für JEDES Element in &quot;data&quot; =&gt; Insert in material
<span class="nc" id="L86"> Connection conn = dbService.getConnection();</span>
<span class="nc" id="L87"> conn.setAutoCommit(false); // Transaktion starten</span>
try {
<span class="nc bnc" id="L90" title="All 2 branches missed."> for (int i = 0; i &lt; dataArray.length(); i++) {</span>
<span class="nc" id="L91"> JSONObject obj = dataArray.getJSONObject(i);</span>
<span class="nc" id="L92"> insertMaterial(conn, obj, CLIENT_NO, WERK_NR, COMPANY_NO, isMSSQL, isOracle);</span>
}
<span class="nc" id="L94"> conn.commit(); // Transaktion bestätigen</span>
<span class="nc" id="L95"> } catch (SQLException e) {</span>
<span class="nc" id="L96"> conn.rollback(); // Transaktion rückgängig machen</span>
<span class="nc" id="L97"> throw e; // Weiterleitung des Fehlers</span>
} finally {
<span class="nc" id="L99"> conn.setAutoCommit(true); // Auto-Commit wieder aktivieren</span>
<span class="nc" id="L100"> conn.close(); // Verbindung schließen</span>
}
// 6) Erfolgreich fertig
<span class="nc" id="L104"> JSONObject response = new JSONObject();</span>
<span class="nc" id="L105"> response.put(&quot;status&quot;, &quot;ok&quot;);</span>
<span class="nc" id="L106"> response.put(&quot;message&quot;, &quot;Daten wurden erfolgreich verarbeitet.&quot;);</span>
<span class="nc" id="L107"> return Response.ok(response.toString()).build();</span>
<span class="nc" id="L109"> } catch (Exception e) {</span>
<span class="nc" id="L110"> e.printStackTrace();</span>
<span class="nc" id="L111"> JSONObject error = new JSONObject();</span>
<span class="nc" id="L112"> error.put(&quot;status&quot;, &quot;error&quot;);</span>
<span class="nc" id="L113"> error.put(&quot;message&quot;, e.getMessage());</span>
<span class="nc" id="L114"> return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error.toString()).build();</span>
}
}
private void insertMaterial(Connection conn, JSONObject obj, String clientno, String plantno, String werknummer,
boolean isMSSQL, boolean isOracle)
throws SQLException {
String sql;
<span class="nc bnc" id="L122" title="All 2 branches missed."> if (isMSSQL) {</span>
<span class="nc" id="L123"> sql = &quot;INSERT INTO xtran.tran_material (TRAN_ID, ATTRIB_ID, IDOC_ID, MATERIAL_NO, MATERIAL_DESC, UNIT, PRODUCT, &quot;</span>
+
&quot;INFO1, INFO2, INFO3, SOURCE, STATUS, CLIENT_NO, COMPANY_NO, PLANT_NO, MATERIAL_GRP_TYPE, MATERIAL_GRP_NO, APS_TRANSFER) &quot;
+
&quot;VALUES (NEXT VALUE FOR xtran.SEQ_TRANMATERIAL, -1, (SELECT MAX(id) FROM xtran.tran_idocstatus), ?,?,?,?,'', '', '', 0, 0, ? ,?,?, ?, ?, 0)&quot;;
<span class="nc bnc" id="L128" title="All 2 branches missed."> } else if (isOracle) {</span>
<span class="nc" id="L129"> sql = &quot;INSERT INTO tran.tran_material (&quot;</span>
+ &quot; TRAN_ID, ATTRIB_ID, IDOC_ID, MATERIAL_NO, MATERIAL_DESC, UNIT, PRODUCT,&quot;
+ &quot; INFO1, INFO2, INFO3, SOURCE, STATUS, CLIENT_NO, COMPANY_NO, PLANT_NO,&quot;
+ &quot; MATERIAL_GRP_TYPE, MATERIAL_GRP_NO, APS_TRANSFER&quot;
+ &quot;) VALUES (&quot;
+ &quot; tran.SEQ_TRANMATERIAL.nextVal,&quot; // TRAN_ID per Sequence
+ &quot; -1,&quot; // ATTRIB_ID fest -1 (wie im MSSQL)
+ &quot; (SELECT MAX(id) FROM tran.tran_idocstatus),&quot; // IDOC_ID
+ &quot; ?, ?, ?, ?,&quot; // MATERIAL_NO, MATERIAL_DESC, UNIT, PRODUCT
+ &quot; '', '', '',&quot; // INFO1, INFO2, INFO3
+ &quot; 0, 0,&quot; // SOURCE, STATUS
+ &quot; ?, ?, ?,&quot; // CLIENT_NO, COMPANY_NO, PLANT_NO
+ &quot; ?, ?,&quot; // MATERIAL_GRP_TYPE, MATERIAL_GRP_NO
+ &quot; 0&quot; // APS_TRANSFER
+ &quot;)&quot;;
} else {
<span class="nc" id="L145"> throw new SQLException(&quot;DB-Vendor nicht implementiert&quot;);</span>
}
<span class="nc" id="L148"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
<span class="nc" id="L149"> ps.setString(1, obj.getString(&quot;MATERIAL_NO&quot;));</span>
<span class="nc" id="L150"> ps.setString(2, obj.getString(&quot;MATERIAL_DESC&quot;));</span>
<span class="nc" id="L152"> String unit = obj.getString(&quot;UNIT&quot;);</span>
try {
// Versuchen, den UNIT-Wert als Integer zu parsen
<span class="nc" id="L155"> Integer.parseInt(unit);</span>
<span class="nc" id="L156"> ps.setString(3, unit); // Wenn es ein Integer ist, direkt einfügen</span>
<span class="nc" id="L157"> } catch (NumberFormatException e) {</span>
// Wenn es kein Integer ist, das Mapping anwenden
<span class="nc" id="L159"> String unitLower = unit.toLowerCase();</span>
<span class="nc" id="L160"> HashMap&lt;String, String&gt; unitMapping = new HashMap&lt;&gt;();</span>
<span class="nc" id="L161"> unitMapping.put(&quot;mm&quot;, &quot;11000&quot;);</span>
<span class="nc" id="L162"> unitMapping.put(&quot;zoll&quot;, &quot;11001&quot;);</span>
<span class="nc" id="L163"> unitMapping.put(&quot;stk&quot;, &quot;11002&quot;);</span>
<span class="nc" id="L164"> unitMapping.put(&quot;pcs&quot;, &quot;11002&quot;);</span>
<span class="nc" id="L165"> unitMapping.put(&quot;qty&quot;, &quot;11002&quot;);</span>
<span class="nc" id="L166"> unitMapping.put(&quot;cm&quot;, &quot;11003&quot;);</span>
<span class="nc" id="L167"> unitMapping.put(&quot;m&quot;, &quot;11004&quot;);</span>
<span class="nc" id="L168"> unitMapping.put(&quot;g&quot;, &quot;11005&quot;);</span>
<span class="nc" id="L169"> unitMapping.put(&quot;kg&quot;, &quot;11006&quot;);</span>
<span class="nc" id="L170"> unitMapping.put(&quot;ml&quot;, &quot;11007&quot;);</span>
<span class="nc" id="L171"> unitMapping.put(&quot;l&quot;, &quot;11008&quot;);</span>
<span class="nc" id="L173"> String mappedUnit = unitMapping.get(unitLower);</span>
<span class="nc bnc" id="L174" title="All 2 branches missed."> if (mappedUnit != null) {</span>
<span class="nc" id="L175"> ps.setString(3, mappedUnit); // Mapping-Wert verwenden</span>
} else {
<span class="nc" id="L177"> ps.setString(3, unit); // Originalwert verwenden, wenn kein Mapping gefunden wurde</span>
}
<span class="nc" id="L179"> }</span>
<span class="nc" id="L181"> ps.setString(4, obj.getString(&quot;PRODUCT&quot;));</span>
<span class="nc" id="L182"> ps.setString(5, clientno);</span>
<span class="nc" id="L183"> ps.setString(6, plantno);</span>
<span class="nc" id="L184"> ps.setString(7, werknummer);</span>
<span class="nc" id="L185"> ps.setString(8, obj.getString(&quot;MATERIAL_GRP_TYPE&quot;));</span>
<span class="nc" id="L186"> ps.setString(9, obj.getString(&quot;MATERIAL_GRP_NO&quot;));</span>
<span class="nc" id="L187"> ps.executeUpdate();</span>
<span class="nc" id="L188"> } catch (SQLException e) {</span>
// Fehlerbehandlung
<span class="nc" id="L190"> e.printStackTrace();</span>
<span class="nc" id="L191"> }</span>
<span class="nc" id="L192"> }</span>
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.4.201905082037</span></div></body></html>