194 lines
14 KiB
HTML
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> > <a href="index.source.html" class="el_package">com.workbenchclassic</a> > <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("/updateParts")
|
|
<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("dsTranNJTA");</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("station");</span>
|
|
<span class="nc" id="L36"> JSONArray dataArray = json.getJSONArray("data");</span>
|
|
|
|
// 2) DB-Vendor abfragen
|
|
<span class="nc" id="L39"> String vendor = dbService.getDatabaseProductName();</span>
|
|
<span class="nc" id="L40"> System.out.println("Aktueller DB-Vendor: " + 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("errorCode", "0");</span>
|
|
<span class="nc bnc" id="L47" title="All 2 branches missed."> if (!"0".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:
|
|
// {"errorCode":"0","errorMessage":"Done","data":"[{\"werknummer\":\"ABC\"}]"}
|
|
|
|
<span class="nc" id="L56"> String werkData = extPlantResponse.optString("data", "[]");</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() > 0) {</span>
|
|
<span class="nc" id="L63"> JSONObject row = werkArr.getJSONObject(0);</span>
|
|
<span class="nc" id="L64"> WERK_NR = row.optString("ext_company_nr", null);</span>
|
|
<span class="nc" id="L65"> COMPANY_NO = row.optString("werk_nr", null);</span>
|
|
<span class="nc" id="L66"> CLIENT_NO = row.optString("client_nr", null);</span>
|
|
}
|
|
|
|
<span class="nc" id="L69"> System.out.println("Ermittelte werknummer: " + COMPANY_NO);</span>
|
|
|
|
<span class="nc" id="L71"> boolean isMSSQL = "Microsoft SQL Server".equals(vendor);</span>
|
|
<span class="nc" id="L72"> boolean isOracle = "Oracle".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 = "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)";</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 = "INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES ( tran.seq_tranidocstatus.nextval, sysdate, 1, 0, 9, 0)";</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("DB-Vendor nicht implementiert: " + vendor);</span>
|
|
}
|
|
|
|
// 5) Für JEDES Element in "data" => 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 < 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("status", "ok");</span>
|
|
<span class="nc" id="L106"> response.put("message", "Daten wurden erfolgreich verarbeitet.");</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("status", "error");</span>
|
|
<span class="nc" id="L113"> error.put("message", 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 = "INSERT INTO xtran.tran_material (TRAN_ID, ATTRIB_ID, IDOC_ID, MATERIAL_NO, MATERIAL_DESC, UNIT, PRODUCT, "</span>
|
|
+
|
|
"INFO1, INFO2, INFO3, SOURCE, STATUS, CLIENT_NO, COMPANY_NO, PLANT_NO, MATERIAL_GRP_TYPE, MATERIAL_GRP_NO, APS_TRANSFER) "
|
|
+
|
|
"VALUES (NEXT VALUE FOR xtran.SEQ_TRANMATERIAL, -1, (SELECT MAX(id) FROM xtran.tran_idocstatus), ?,?,?,?,'', '', '', 0, 0, ? ,?,?, ?, ?, 0)";
|
|
<span class="nc bnc" id="L128" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L129"> sql = "INSERT INTO tran.tran_material ("</span>
|
|
+ " TRAN_ID, ATTRIB_ID, IDOC_ID, MATERIAL_NO, MATERIAL_DESC, UNIT, PRODUCT,"
|
|
+ " INFO1, INFO2, INFO3, SOURCE, STATUS, CLIENT_NO, COMPANY_NO, PLANT_NO,"
|
|
+ " MATERIAL_GRP_TYPE, MATERIAL_GRP_NO, APS_TRANSFER"
|
|
+ ") VALUES ("
|
|
+ " tran.SEQ_TRANMATERIAL.nextVal," // TRAN_ID per Sequence
|
|
+ " -1," // ATTRIB_ID fest -1 (wie im MSSQL)
|
|
+ " (SELECT MAX(id) FROM tran.tran_idocstatus)," // IDOC_ID
|
|
+ " ?, ?, ?, ?," // MATERIAL_NO, MATERIAL_DESC, UNIT, PRODUCT
|
|
+ " '', '', ''," // INFO1, INFO2, INFO3
|
|
+ " 0, 0," // SOURCE, STATUS
|
|
+ " ?, ?, ?," // CLIENT_NO, COMPANY_NO, PLANT_NO
|
|
+ " ?, ?," // MATERIAL_GRP_TYPE, MATERIAL_GRP_NO
|
|
+ " 0" // APS_TRANSFER
|
|
+ ")";
|
|
} else {
|
|
<span class="nc" id="L145"> throw new SQLException("DB-Vendor nicht implementiert");</span>
|
|
}
|
|
|
|
<span class="nc" id="L148"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
|
|
<span class="nc" id="L149"> ps.setString(1, obj.getString("MATERIAL_NO"));</span>
|
|
<span class="nc" id="L150"> ps.setString(2, obj.getString("MATERIAL_DESC"));</span>
|
|
|
|
<span class="nc" id="L152"> String unit = obj.getString("UNIT");</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<String, String> unitMapping = new HashMap<>();</span>
|
|
<span class="nc" id="L161"> unitMapping.put("mm", "11000");</span>
|
|
<span class="nc" id="L162"> unitMapping.put("zoll", "11001");</span>
|
|
<span class="nc" id="L163"> unitMapping.put("stk", "11002");</span>
|
|
<span class="nc" id="L164"> unitMapping.put("pcs", "11002");</span>
|
|
<span class="nc" id="L165"> unitMapping.put("qty", "11002");</span>
|
|
<span class="nc" id="L166"> unitMapping.put("cm", "11003");</span>
|
|
<span class="nc" id="L167"> unitMapping.put("m", "11004");</span>
|
|
<span class="nc" id="L168"> unitMapping.put("g", "11005");</span>
|
|
<span class="nc" id="L169"> unitMapping.put("kg", "11006");</span>
|
|
<span class="nc" id="L170"> unitMapping.put("ml", "11007");</span>
|
|
<span class="nc" id="L171"> unitMapping.put("l", "11008");</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("PRODUCT"));</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("MATERIAL_GRP_TYPE"));</span>
|
|
<span class="nc" id="L186"> ps.setString(9, obj.getString("MATERIAL_GRP_NO"));</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> |