208 lines
15 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>UpdateERP.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">UpdateERP.java</span></div><h1>UpdateERP.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.sql.ResultSet;
import java.util.*;
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;
@Path(&quot;/updateERP&quot;)
<span class="nc" id="L20">public class UpdateERP {</span>
<span class="nc" id="L22"> 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 {
<span class="nc" id="L29"> JSONObject json = new JSONObject(jsonBody);</span>
<span class="nc" id="L30"> String station = json.getString(&quot;station&quot;);</span>
<span class="nc" id="L31"> JSONArray dataArray = json.getJSONArray(&quot;data&quot;);</span>
<span class="nc" id="L33"> String vendor = dbService.getDatabaseProductName();</span>
<span class="nc" id="L34"> boolean isMSSQL = &quot;Microsoft SQL Server&quot;.equals(vendor);</span>
<span class="nc" id="L35"> boolean isOracle = &quot;Oracle&quot;.equals(vendor);</span>
<span class="nc" id="L37"> GetMetadata metadata = new GetMetadata();</span>
<span class="nc" id="L38"> JSONObject extPlantResponse = new JSONObject(metadata.getExtPlantJson(station));</span>
<span class="nc bnc" id="L40" title="All 2 branches missed."> if (!&quot;0&quot;.equals(extPlantResponse.optString(&quot;errorCode&quot;, &quot;0&quot;))) {</span>
<span class="nc" id="L41"> return Response.status(Response.Status.BAD_REQUEST).entity(extPlantResponse.toString()).build();</span>
}
<span class="nc" id="L44"> JSONArray werkArr = new JSONArray(extPlantResponse.optString(&quot;data&quot;, &quot;[]&quot;));</span>
<span class="nc" id="L45"> String WERK_NR = null, COMPANY_NO = null, CLIENT_NO = null;</span>
<span class="nc bnc" id="L46" title="All 2 branches missed."> if (werkArr.length() &gt; 0) {</span>
<span class="nc" id="L47"> JSONObject row = werkArr.getJSONObject(0);</span>
<span class="nc" id="L48"> WERK_NR = row.optString(&quot;ext_company_nr&quot;, null);</span>
<span class="nc" id="L49"> COMPANY_NO = row.optString(&quot;werk_nr&quot;, null);</span>
<span class="nc" id="L50"> CLIENT_NO = row.optString(&quot;client_nr&quot;, null);</span>
}
<span class="nc bnc" id="L53" title="All 2 branches missed."> if (isMSSQL) {</span>
<span class="nc" id="L54"> dbService.dbConnect(</span>
&quot;INSERT INTO xtran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES ((NEXT VALUE FOR xtran.seq_tranidocstatus), getdate(), 1, 0, 61, 0)&quot;);
<span class="nc bnc" id="L56" title="All 2 branches missed."> } else if (isOracle) {</span>
<span class="nc" id="L57"> dbService.dbConnect(</span>
&quot;INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (tran.seq_tranidocstatus.nextval, sysdate, 1, 0, 61, 0)&quot;);
}
<span class="nc" id="L61"> Connection conn = dbService.getConnection();</span>
<span class="nc" id="L62"> conn.setAutoCommit(false);</span>
try {
<span class="nc" id="L65"> Map&lt;String, Long&gt; groupIdMap = new HashMap&lt;&gt;();</span>
<span class="nc" id="L66"> Set&lt;String&gt; processedGroups = new HashSet&lt;&gt;();</span>
<span class="nc bnc" id="L68" title="All 2 branches missed."> for (int i = 0; i &lt; dataArray.length(); i++) {</span>
<span class="nc" id="L69"> JSONObject obj = dataArray.getJSONObject(i);</span>
// Tolerantes Auslesen
<span class="nc bnc" id="L72" title="All 2 branches missed."> String groupNumber = obj.has(&quot;ERP_GROUP_NUMBER&quot;)</span>
<span class="nc" id="L73"> ? obj.optString(&quot;ERP_GROUP_NUMBER&quot;, null)</span>
<span class="nc" id="L74"> : obj.optString(&quot;erp_group_number&quot;, null);</span>
// NULL oder leer überspringen
<span class="nc bnc" id="L77" title="All 4 branches missed."> if (groupNumber == null || groupNumber.trim().isEmpty()) {</span>
<span class="nc" id="L78"> continue; // überspringe diesen Datensatz</span>
}
<span class="nc bnc" id="L81" title="All 2 branches missed."> if (!processedGroups.contains(groupNumber.toLowerCase())) {</span>
<span class="nc" id="L82"> long tranId = insertERPGroupOnly(conn, obj, CLIENT_NO, WERK_NR, COMPANY_NO, isMSSQL, isOracle);</span>
<span class="nc" id="L83"> groupIdMap.put(groupNumber.toLowerCase(), tranId); // optional lowercase</span>
<span class="nc" id="L84"> processedGroups.add(groupNumber.toLowerCase());</span>
}
}
<span class="nc bnc" id="L88" title="All 2 branches missed."> for (int i = 0; i &lt; dataArray.length(); i++) {</span>
<span class="nc" id="L89"> JSONObject obj = dataArray.getJSONObject(i);</span>
<span class="nc bnc" id="L90" title="All 2 branches missed."> String groupNumber = obj.has(&quot;ERP_GROUP_NUMBER&quot;)</span>
<span class="nc" id="L91"> ? obj.optString(&quot;ERP_GROUP_NUMBER&quot;, null)</span>
<span class="nc" id="L92"> : obj.optString(&quot;erp_group_number&quot;, null);</span>
// NULL oder leer überspringen
<span class="nc bnc" id="L95" title="All 4 branches missed."> if (groupNumber == null || groupNumber.trim().isEmpty()) {</span>
<span class="nc" id="L96"> continue; // überspringe diesen Datensatz</span>
}
<span class="nc" id="L98"> insertERPGroupStationOnly(conn, obj, CLIENT_NO, WERK_NR, COMPANY_NO, isMSSQL, isOracle);</span>
}
<span class="nc" id="L101"> conn.commit();</span>
<span class="nc" id="L102"> } catch (SQLException e) {</span>
<span class="nc" id="L103"> conn.rollback();</span>
<span class="nc" id="L104"> throw e;</span>
} finally {
<span class="nc" id="L106"> conn.setAutoCommit(true);</span>
<span class="nc" id="L107"> conn.close();</span>
}
<span class="nc" id="L110"> JSONObject response = new JSONObject();</span>
<span class="nc" id="L111"> response.put(&quot;status&quot;, &quot;ok&quot;);</span>
<span class="nc" id="L112"> response.put(&quot;message&quot;, &quot;Daten wurden erfolgreich verarbeitet.&quot;);</span>
<span class="nc" id="L113"> return Response.ok(response.toString()).build();</span>
<span class="nc" id="L115"> } catch (Exception e) {</span>
<span class="nc" id="L116"> e.printStackTrace();</span>
<span class="nc" id="L117"> JSONObject error = new JSONObject();</span>
<span class="nc" id="L118"> error.put(&quot;status&quot;, &quot;error&quot;);</span>
<span class="nc" id="L119"> error.put(&quot;message&quot;, e.getMessage());</span>
<span class="nc" id="L120"> return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error.toString()).build();</span>
}
}
private long insertERPGroupOnly(Connection conn, JSONObject obj, String clientno, String plantno, String werknummer,
boolean isMSSQL, boolean isOracle) throws SQLException {
<span class="nc bnc" id="L126" title="All 2 branches missed."> String timestamp = isMSSQL ? &quot;GETDATE()&quot; : &quot;SYSDATE&quot;;</span>
<span class="nc bnc" id="L127" title="All 2 branches missed."> String schemaPrefix = isOracle ? &quot;tran&quot; : &quot;xtran&quot;;</span>
<span class="nc bnc" id="L129" title="All 2 branches missed."> String seqSql = isOracle ? &quot;SELECT tran.SEQ_TRAN_ERP_GROUP.NEXTVAL FROM DUAL&quot;</span>
<span class="nc" id="L130"> : &quot;SELECT NEXT VALUE FOR xtran.SEQ_TRAN_ERP_GROUP&quot;;</span>
long tranId;
<span class="nc" id="L133"> try (PreparedStatement ps = conn.prepareStatement(seqSql); ResultSet rs = ps.executeQuery()) {</span>
<span class="nc bnc" id="L134" title="All 2 branches missed."> if (rs.next()) {</span>
<span class="nc" id="L135"> tranId = rs.getLong(1);</span>
} else {
<span class="nc" id="L137"> throw new SQLException(&quot;Fehler beim Abrufen der TRAN_ID aus SEQ_TRAN_ERP_GROUP.&quot;);</span>
}
}
<span class="nc" id="L141"> String sql = &quot;INSERT INTO &quot; + schemaPrefix</span>
+ &quot;.tran_erp_group (IDOC_ID, TRAN_ID, SOURCE, STATUS, CREATED, STAMP, COMPANY_NO, CLIENT_NO, PLANT_NO, ERP_GROUP_NUMBER, ERP_GROUP_DESC, SEPARATION_FLAG, SEQUENTIAL) &quot;
+
&quot;VALUES ((SELECT MAX(id) FROM &quot; + schemaPrefix + &quot;.tran_idocstatus), ?, 0, 0, &quot; + timestamp + &quot;, &quot;
+ timestamp + &quot;, ?, ?, ?, ?, ?, 'N', 'J')&quot;;
<span class="nc bnc" id="L147" title="All 2 branches missed."> String groupNumber = obj.has(&quot;ERP_GROUP_NUMBER&quot;) ? obj.optString(&quot;ERP_GROUP_NUMBER&quot;, null)</span>
<span class="nc" id="L148"> : obj.optString(&quot;erp_group_number&quot;, null);</span>
<span class="nc bnc" id="L149" title="All 2 branches missed."> String groupDesc = obj.has(&quot;ERP_GROUP_DESC&quot;) ? obj.optString(&quot;ERP_GROUP_DESC&quot;, null)</span>
<span class="nc" id="L150"> : obj.optString(&quot;erp_group_desc&quot;, null);</span>
<span class="nc" id="L152"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
<span class="nc" id="L153"> ps.setLong(1, tranId);</span>
<span class="nc" id="L154"> ps.setString(2, plantno);</span>
<span class="nc" id="L155"> ps.setString(3, clientno);</span>
<span class="nc" id="L156"> ps.setString(4, werknummer);</span>
<span class="nc" id="L157"> ps.setString(5, groupNumber);</span>
<span class="nc" id="L158"> ps.setString(6, groupDesc);</span>
<span class="nc" id="L159"> ps.executeUpdate();</span>
}
<span class="nc" id="L162"> return tranId;</span>
}
private void insertERPGroupStationOnly(Connection conn, JSONObject obj, String clientno, String plantno,
String werknummer,
boolean isMSSQL, boolean isOracle) throws SQLException {
<span class="nc bnc" id="L168" title="All 2 branches missed."> String timestamp = isMSSQL ? &quot;GETDATE()&quot; : &quot;SYSDATE&quot;;</span>
<span class="nc bnc" id="L169" title="All 2 branches missed."> String schemaPrefix = isOracle ? &quot;tran&quot; : &quot;xtran&quot;;</span>
<span class="nc bnc" id="L171" title="All 2 branches missed."> String seqSql = isOracle ? &quot;SELECT tran.SEQ_TRAN_ERP_GROUP_STATION.NEXTVAL FROM DUAL&quot;</span>
<span class="nc" id="L172"> : &quot;SELECT NEXT VALUE FOR xtran.SEQ_TRAN_ERP_GROUP_STATION&quot;;</span>
long tranId;
<span class="nc" id="L175"> try (PreparedStatement ps = conn.prepareStatement(seqSql); ResultSet rs = ps.executeQuery()) {</span>
<span class="nc bnc" id="L176" title="All 2 branches missed."> if (rs.next()) {</span>
<span class="nc" id="L177"> tranId = rs.getLong(1);</span>
} else {
<span class="nc" id="L179"> throw new SQLException(&quot;Fehler beim Abrufen der TRAN_ID aus SEQ_TRAN_ERP_GROUP_STATION.&quot;);</span>
}
}
<span class="nc" id="L183"> String sql = &quot;INSERT INTO &quot; + schemaPrefix</span>
+ &quot;.tran_erp_group_station (IDOC_ID, TRAN_ID, SOURCE, STATUS, CREATED, STAMP, COMPANY_NO, CLIENT_NO, PLANT_NO, ERP_GROUP_NUMBER, STATION_NUMBER, STATION_TYPE, STATE, WORKORDER_UPDATE) &quot;
+
&quot;VALUES ((SELECT MAX(id) FROM &quot; + schemaPrefix + &quot;.tran_idocstatus), ?, 0, 0, &quot; + timestamp + &quot;, &quot;
+ timestamp + &quot;, ?, ?, ?, ?, ?, ?, 1, 0)&quot;;
<span class="nc bnc" id="L188" title="All 2 branches missed."> String groupNumber = obj.has(&quot;ERP_GROUP_NUMBER&quot;) ? obj.optString(&quot;ERP_GROUP_NUMBER&quot;, null)</span>
<span class="nc" id="L189"> : obj.optString(&quot;erp_group_number&quot;, null);</span>
<span class="nc bnc" id="L190" title="All 2 branches missed."> String kapnr = obj.has(&quot;KAP_NR&quot;) ? obj.optString(&quot;KAP_NR&quot;, null) : obj.optString(&quot;kap_nr&quot;, null);</span>
<span class="nc" id="L191"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
<span class="nc" id="L192"> ps.setLong(1, tranId);</span>
<span class="nc" id="L193"> ps.setString(2, plantno);</span>
<span class="nc" id="L194"> ps.setString(3, clientno);</span>
<span class="nc" id="L195"> ps.setString(4, werknummer);</span>
<span class="nc" id="L196"> ps.setString(5, groupNumber);</span>
<span class="nc" id="L197"> ps.setString(6, kapnr);</span>
<span class="nc" id="L198"> String stationType = obj.optString(&quot;STATION_TYPE&quot;, &quot;T&quot;);</span>
<span class="nc bnc" id="L199" title="All 4 branches missed."> if (stationType == null || stationType.trim().isEmpty()) {</span>
<span class="nc" id="L200"> stationType = &quot;T&quot;;</span>
}
<span class="nc" id="L202"> ps.setString(7, stationType);</span>
<span class="nc" id="L204"> ps.executeUpdate();</span>
}
<span class="nc" id="L206"> }</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>