245 lines
19 KiB
HTML
245 lines
19 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>UpdateBOM.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">UpdateBOM.java</span></div><h1>UpdateBOM.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.Arrays;
|
|
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("/updateBom")
|
|
<span class="nc" id="L24">public class UpdateBOM {</span>
|
|
<span class="nc" id="L25"> private String[] processedMaterialNos = new String[0];</span>
|
|
/** Our DB service for queries (JNDI, etc.). */
|
|
<span class="nc" id="L27"> 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="L35"> JSONObject json = new JSONObject(jsonBody);</span>
|
|
<span class="nc" id="L36"> String station = json.getString("station");</span>
|
|
<span class="nc" id="L37"> JSONArray dataArray = json.getJSONArray("data");</span>
|
|
|
|
// 2) DB-Vendor abfragen
|
|
<span class="nc" id="L40"> String vendor = dbService.getDatabaseProductName();</span>
|
|
<span class="nc" id="L41"> System.out.println("Aktueller DB-Vendor: " + vendor);</span>
|
|
<span class="nc" id="L42"> Connection conn = dbService.getConnection();</span>
|
|
<span class="nc" id="L43"> GetMetadata metadata = new GetMetadata();</span>
|
|
<span class="nc" id="L44"> String extPlantResponseString = metadata.getExtPlantJson(station);</span>
|
|
<span class="nc" id="L45"> JSONObject extPlantResponse = new JSONObject(extPlantResponseString);</span>
|
|
|
|
<span class="nc" id="L47"> String errorCode = extPlantResponse.optString("errorCode", "0");</span>
|
|
<span class="nc bnc" id="L48" title="All 2 branches missed."> if (!"0".equals(errorCode)) {</span>
|
|
// Return an HTTP 400 or 500 with that JSON
|
|
<span class="nc" id="L50"> 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="L57"> String werkData = extPlantResponse.optString("data", "[]");</span>
|
|
<span class="nc" id="L58"> JSONArray werkArr = new JSONArray(werkData);</span>
|
|
|
|
<span class="nc" id="L60"> String WERK_NR = null;</span>
|
|
<span class="nc" id="L61"> String COMPANY_NO = null;</span>
|
|
<span class="nc" id="L62"> String CLIENT_NO = null;</span>
|
|
<span class="nc bnc" id="L63" title="All 2 branches missed."> if (werkArr.length() > 0) {</span>
|
|
<span class="nc" id="L64"> JSONObject row = werkArr.getJSONObject(0);</span>
|
|
<span class="nc" id="L65"> WERK_NR = row.optString("ext_company_nr", null);</span>
|
|
<span class="nc" id="L66"> COMPANY_NO = row.optString("werk_nr", null);</span>
|
|
<span class="nc" id="L67"> CLIENT_NO = row.optString("client_nr", null);</span>
|
|
}
|
|
|
|
<span class="nc" id="L70"> boolean isMSSQL = "Microsoft SQL Server".equals(vendor);</span>
|
|
<span class="nc" id="L71"> boolean isOracle = "Oracle".equals(vendor);</span>
|
|
|
|
// 4) ZUERST den tran_idocstatus-Eintrag anlegen
|
|
<span class="nc bnc" id="L74" title="All 2 branches missed."> if (isMSSQL) {</span>
|
|
<span class="nc" id="L75"> 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, 1, 0)";</span>
|
|
<span class="nc" id="L76"> dbService.dbConnect(insertIdocstatusMSSQL);</span>
|
|
<span class="nc bnc" id="L77" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L78"> String insertIdocstatusOracle = "INSERT INTO xtran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES ( tran.seq_tranidocstatus.nextval, sysdate, 1, 0, 1, 0)";</span>
|
|
<span class="nc" id="L79"> dbService.dbConnect(insertIdocstatusOracle);</span>
|
|
<span class="nc" id="L80"> } else {</span>
|
|
<span class="nc" id="L81"> System.out.println("DB-Vendor nicht implementiert: " + vendor);</span>
|
|
}
|
|
|
|
// 5) Für JEDES Element in "data" => Insert in material
|
|
|
|
<span class="nc" id="L86"> conn.setAutoCommit(false); // Transaktion starten</span>
|
|
|
|
try {
|
|
<span class="nc bnc" id="L89" title="All 2 branches missed."> for (int i = 0; i < dataArray.length(); i++) {</span>
|
|
<span class="nc" id="L90"> JSONObject obj = dataArray.getJSONObject(i);</span>
|
|
<span class="nc" id="L91"> insertBomHead(conn, obj, COMPANY_NO, WERK_NR, CLIENT_NO, isMSSQL, isOracle);</span>
|
|
<span class="nc" id="L92"> insertBomItem(conn, obj, COMPANY_NO, WERK_NR, CLIENT_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 insertBomHead(Connection conn, JSONObject obj, String werknummer, String WERK_NR, String CLIENT_NO,
|
|
boolean isMSSQL, boolean isOracle)
|
|
throws SQLException {
|
|
String sql;
|
|
|
|
<span class="nc" id="L123"> String materialNo = obj.optString("MATERIAL_NO");</span>
|
|
<span class="nc bnc" id="L124" title="All 2 branches missed."> if (Arrays.asList(processedMaterialNos).contains(materialNo)) {</span>
|
|
<span class="nc" id="L125"> System.out.println("MATERIAL_NO '" + materialNo + "' wurde bereits verarbeitet. Überspringe INSERT.");</span>
|
|
<span class="nc" id="L126"> return; // Überspringen des INSERTs</span>
|
|
}
|
|
<span class="nc bnc" id="L128" title="All 2 branches missed."> if (isMSSQL) {</span>
|
|
|
|
<span class="nc" id="L130"> sql = "INSERT INTO xtran.tran_BOM_head (BOM_ID, MATERIAL_NO, BOM_STATUS, BOM_VERSION_ERP, BOM_INDEX, BOM_INFO, PLANT_NO, CLIENT_NO, COMPANY_NO, BAREBOARD_NO, SOURCE, IDOC_ID) "</span>
|
|
+
|
|
"VALUES (NEXT VALUE FOR xtran.SEQ_TRANBOMHEAD, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT MAX(id) FROM xtran.tran_idocstatus))";
|
|
<span class="nc" id="L133"> System.out.println("Insert: " + sql);</span>
|
|
<span class="nc bnc" id="L134" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L135"> sql = "INSERT INTO xtran.tran_BOM_head (BOM_ID, MATERIAL_NO, BOM_STATUS, BOM_VERSION_ERP, BOM_INDEX, BOM_INFO, PLANT_NO, CLIENT_NO, COMPANY_NO, BAREBOARD_NO, SOURCE, IDOC_ID) "</span>
|
|
+
|
|
"VALUES (xtran.SEQ_TRANBOMHEAD.nextval, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT MAX(id) FROM xtran.tran_idocstatus))";
|
|
} else {
|
|
<span class="nc" id="L139"> throw new SQLException("DB-Vendor nicht implementiert");</span>
|
|
}
|
|
|
|
<span class="nc" id="L142"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
|
|
<span class="nc" id="L143"> String bomVersionErp = obj.optString("BOM_VERSION_ERP", "");</span>
|
|
<span class="nc" id="L144"> String bomIndex = obj.optString("BOM_INDEX", "");</span>
|
|
<span class="nc" id="L145"> String bomInfo = obj.optString("BOM_INFO", "");</span>
|
|
<span class="nc" id="L146"> String clientNo = obj.optString("CLIENT_NO", CLIENT_NO);</span>
|
|
<span class="nc" id="L147"> String companyNo = obj.optString("COMPANY_NO", WERK_NR);</span>
|
|
<span class="nc" id="L148"> String bareboardNo = obj.optString("BAREBOARD_NO", "");</span>
|
|
<span class="nc" id="L149"> String source2 = obj.optString("SOURCE", "" + 0);</span>
|
|
<span class="nc" id="L150"> int source = Integer.parseInt(source2);</span>
|
|
<span class="nc" id="L151"> ps.setString(1, materialNo);</span>
|
|
<span class="nc" id="L152"> ps.setString(2, "S");</span>
|
|
<span class="nc" id="L153"> ps.setString(3, bomVersionErp);</span>
|
|
<span class="nc" id="L154"> ps.setString(4, bomIndex);</span>
|
|
<span class="nc" id="L155"> ps.setString(5, bomInfo);</span>
|
|
<span class="nc" id="L156"> ps.setString(6, werknummer);</span>
|
|
<span class="nc" id="L157"> ps.setString(7, clientNo);</span>
|
|
<span class="nc" id="L158"> ps.setString(8, companyNo);</span>
|
|
<span class="nc" id="L159"> ps.setString(9, bareboardNo);</span>
|
|
<span class="nc" id="L160"> ps.setInt(10, source);</span>
|
|
|
|
<span class="nc" id="L162"> System.out.println("Insert: " + sql);</span>
|
|
<span class="nc" id="L163"> System.out.println("Parameters:");</span>
|
|
<span class="nc" id="L164"> System.out.println(" 1: MATERIAL_NO = " + materialNo);</span>
|
|
<span class="nc" id="L165"> System.out.println(" 2: BOM_STATUS = S");</span>
|
|
<span class="nc" id="L166"> System.out.println(" 3: BOM_VERSION_ERP = " + bomVersionErp);</span>
|
|
<span class="nc" id="L167"> System.out.println(" 4: BOM_INDEX = " + bomIndex);</span>
|
|
<span class="nc" id="L168"> System.out.println(" 5: BOM_INFO = " + bomInfo);</span>
|
|
<span class="nc" id="L169"> System.out.println(" 6: PLANT_NO = " + werknummer);</span>
|
|
<span class="nc" id="L170"> System.out.println(" 7: CLIENT_NO = " + clientNo);</span>
|
|
<span class="nc" id="L171"> System.out.println(" 8: COMPANY_NO = " + companyNo);</span>
|
|
<span class="nc" id="L172"> System.out.println(" 9: BAREBOARD_NO = " + bareboardNo);</span>
|
|
<span class="nc" id="L173"> System.out.println(" 10: SOURCE = " + source);</span>
|
|
<span class="nc" id="L174"> ps.executeUpdate();</span>
|
|
<span class="nc" id="L175"> processedMaterialNos = Arrays.copyOf(processedMaterialNos, processedMaterialNos.length + 1);</span>
|
|
<span class="nc" id="L176"> processedMaterialNos[processedMaterialNos.length - 1] = materialNo;</span>
|
|
}
|
|
<span class="nc" id="L178"> }</span>
|
|
|
|
private void insertBomItem(Connection conn, JSONObject obj, String werknummer, String WERK_NR, String CLIENT_NO,
|
|
boolean isMSSQL, boolean isOracle)
|
|
throws SQLException {
|
|
String sql;
|
|
<span class="nc bnc" id="L184" title="All 2 branches missed."> if (isMSSQL) {</span>
|
|
<span class="nc" id="L185"> sql = "INSERT INTO xtran.tran_BOM_item (BOM_ID, COMPONENT_NO, COMP_NAME, POS_TYPE, ALTERNATIVE, " +</span>
|
|
"ALTERNATIVE_PROPABILITY, WORKSTEP_ERP, PROCESS_GROUP, LAYER, QTY, UNIT, SETUP_FLAG, STATUS, INFO_TXT, PRODUCT, ERP_POS_NO) "
|
|
+
|
|
"VALUES ((SELECT MAX(BOM_ID) FROM xtran.tran_BOM_head), ?, ?, ?, ?, '0', ?, ?, ?, ?, ?, ?, 0, ?, ?, ?)";
|
|
<span class="nc bnc" id="L189" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L190"> sql = "INSERT INTO tran.tran_BOM_item (BOM_ID, COMPONENT_NO, COMP_NAME, POS_TYPE, ALTERNATIVE, " +</span>
|
|
"ALTERNATIVE_PROPABILITY, WORKSTEP_ERP, PROCESS_GROUP, LAYER, QTY, UNIT, SETUP_FLAG, STATUS, INFO_TXT, PRODUCT, ERP_POS_NO) "
|
|
+
|
|
"VALUES ((SELECT MAX(BOM_ID) FROM tran.tran_BOM_head), ?, ?, ?, ?, '0', ?, ?, ?, ?, ?, ?, 0, ?, ?, ?)";
|
|
} else {
|
|
<span class="nc" id="L195"> throw new SQLException("DB-Vendor nicht implementiert");</span>
|
|
}
|
|
|
|
<span class="nc" id="L198"> System.out.println("Insert BOM: " + sql);</span>
|
|
<span class="nc" id="L199"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
|
|
<span class="nc" id="L200"> ps.setString(1, obj.optString("COMPONENT_NO")); // COMPONENT_NO</span>
|
|
<span class="nc" id="L201"> ps.setString(2, obj.optString("COMP_NAME")); // COMP_NAME</span>
|
|
<span class="nc" id="L202"> ps.setInt(3, obj.optInt("POS_TYPE")); // POS_TYPE</span>
|
|
<span class="nc" id="L203"> ps.setString(4, obj.optString("ALTERNATIVE", "")); // ALTERNATIVE</span>
|
|
<span class="nc" id="L204"> ps.setString(5, obj.optString("WS_ERP", "")); // ALTERNATIVE</span>
|
|
<span class="nc" id="L205"> ps.setString(6, obj.optString("PROCESS_GROUP", "")); // PROCESS_GROUP</span>
|
|
<span class="nc" id="L206"> ps.setString(7, obj.optString("LAYER", "")); // LAYER</span>
|
|
<span class="nc" id="L207"> ps.setInt(8, obj.optInt("QTY", 0)); // QTY</span>
|
|
|
|
<span class="nc" id="L209"> String unit = obj.optString("UNIT"); // UNIT</span>
|
|
try {
|
|
<span class="nc" id="L211"> Integer.parseInt(unit);</span>
|
|
<span class="nc" id="L212"> ps.setString(9, unit); // Wenn es ein Integer ist, direkt einfügen</span>
|
|
<span class="nc" id="L213"> } catch (NumberFormatException e) {</span>
|
|
<span class="nc" id="L214"> String unitLower = unit.toLowerCase();</span>
|
|
<span class="nc" id="L215"> HashMap<String, String> unitMapping = new HashMap<>();</span>
|
|
<span class="nc" id="L216"> unitMapping.put("mm", "11000");</span>
|
|
<span class="nc" id="L217"> unitMapping.put("zoll", "11001");</span>
|
|
<span class="nc" id="L218"> unitMapping.put("stk", "11002");</span>
|
|
<span class="nc" id="L219"> unitMapping.put("pcs", "11002");</span>
|
|
<span class="nc" id="L220"> unitMapping.put("qty", "11002");</span>
|
|
<span class="nc" id="L221"> unitMapping.put("cm", "11003");</span>
|
|
<span class="nc" id="L222"> unitMapping.put("m", "11004");</span>
|
|
<span class="nc" id="L223"> unitMapping.put("g", "11005");</span>
|
|
<span class="nc" id="L224"> unitMapping.put("kg", "11006");</span>
|
|
<span class="nc" id="L225"> unitMapping.put("ml", "11007");</span>
|
|
<span class="nc" id="L226"> unitMapping.put("l", "11008");</span>
|
|
|
|
<span class="nc" id="L228"> String mappedUnit = unitMapping.get(unitLower);</span>
|
|
<span class="nc bnc" id="L229" title="All 2 branches missed."> if (mappedUnit != null) {</span>
|
|
<span class="nc" id="L230"> ps.setString(9, mappedUnit); // Mapping-Wert verwenden</span>
|
|
} else {
|
|
<span class="nc" id="L232"> ps.setString(9, unit); // Originalwert verwenden, wenn kein Mapping gefunden wurde</span>
|
|
}
|
|
<span class="nc" id="L234"> }</span>
|
|
|
|
<span class="nc" id="L236"> ps.setString(10, obj.optString("SETUP_FLAG", "")); // SETUP_FLAG</span>
|
|
<span class="nc" id="L237"> ps.setString(11, obj.optString("INFO_TXT", "")); // INFO_TXT (leer)</span>
|
|
<span class="nc" id="L238"> ps.setString(12, obj.optString("PRODUKT")); // PRODUCT</span>
|
|
<span class="nc" id="L239"> ps.setString(13, obj.optString("ERP_POS_NO", "")); // ERP_POS_NO</span>
|
|
|
|
<span class="nc" id="L241"> ps.executeUpdate();</span>
|
|
}
|
|
<span class="nc" id="L243"> }</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> |