208 lines
15 KiB
HTML
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> > <a href="index.source.html" class="el_package">com.workbenchclassic</a> > <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("/updateERP")
|
|
<span class="nc" id="L20">public class UpdateERP {</span>
|
|
|
|
<span class="nc" id="L22"> private final DBService dbService = new DBService("dsTranNJTA");</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("station");</span>
|
|
<span class="nc" id="L31"> JSONArray dataArray = json.getJSONArray("data");</span>
|
|
|
|
<span class="nc" id="L33"> String vendor = dbService.getDatabaseProductName();</span>
|
|
<span class="nc" id="L34"> boolean isMSSQL = "Microsoft SQL Server".equals(vendor);</span>
|
|
<span class="nc" id="L35"> boolean isOracle = "Oracle".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 (!"0".equals(extPlantResponse.optString("errorCode", "0"))) {</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("data", "[]"));</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() > 0) {</span>
|
|
<span class="nc" id="L47"> JSONObject row = werkArr.getJSONObject(0);</span>
|
|
<span class="nc" id="L48"> WERK_NR = row.optString("ext_company_nr", null);</span>
|
|
<span class="nc" id="L49"> COMPANY_NO = row.optString("werk_nr", null);</span>
|
|
<span class="nc" id="L50"> CLIENT_NO = row.optString("client_nr", null);</span>
|
|
}
|
|
|
|
<span class="nc bnc" id="L53" title="All 2 branches missed."> if (isMSSQL) {</span>
|
|
<span class="nc" id="L54"> dbService.dbConnect(</span>
|
|
"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)");
|
|
<span class="nc bnc" id="L56" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L57"> dbService.dbConnect(</span>
|
|
"INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (tran.seq_tranidocstatus.nextval, sysdate, 1, 0, 61, 0)");
|
|
}
|
|
|
|
<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<String, Long> groupIdMap = new HashMap<>();</span>
|
|
<span class="nc" id="L66"> Set<String> processedGroups = new HashSet<>();</span>
|
|
|
|
<span class="nc bnc" id="L68" title="All 2 branches missed."> for (int i = 0; i < 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("ERP_GROUP_NUMBER")</span>
|
|
<span class="nc" id="L73"> ? obj.optString("ERP_GROUP_NUMBER", null)</span>
|
|
<span class="nc" id="L74"> : obj.optString("erp_group_number", 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 < 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("ERP_GROUP_NUMBER")</span>
|
|
<span class="nc" id="L91"> ? obj.optString("ERP_GROUP_NUMBER", null)</span>
|
|
<span class="nc" id="L92"> : obj.optString("erp_group_number", 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("status", "ok");</span>
|
|
<span class="nc" id="L112"> response.put("message", "Daten wurden erfolgreich verarbeitet.");</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("status", "error");</span>
|
|
<span class="nc" id="L119"> error.put("message", 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 ? "GETDATE()" : "SYSDATE";</span>
|
|
<span class="nc bnc" id="L127" title="All 2 branches missed."> String schemaPrefix = isOracle ? "tran" : "xtran";</span>
|
|
|
|
<span class="nc bnc" id="L129" title="All 2 branches missed."> String seqSql = isOracle ? "SELECT tran.SEQ_TRAN_ERP_GROUP.NEXTVAL FROM DUAL"</span>
|
|
<span class="nc" id="L130"> : "SELECT NEXT VALUE FOR xtran.SEQ_TRAN_ERP_GROUP";</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("Fehler beim Abrufen der TRAN_ID aus SEQ_TRAN_ERP_GROUP.");</span>
|
|
}
|
|
}
|
|
|
|
<span class="nc" id="L141"> String sql = "INSERT INTO " + schemaPrefix</span>
|
|
+ ".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) "
|
|
+
|
|
"VALUES ((SELECT MAX(id) FROM " + schemaPrefix + ".tran_idocstatus), ?, 0, 0, " + timestamp + ", "
|
|
+ timestamp + ", ?, ?, ?, ?, ?, 'N', 'J')";
|
|
|
|
<span class="nc bnc" id="L147" title="All 2 branches missed."> String groupNumber = obj.has("ERP_GROUP_NUMBER") ? obj.optString("ERP_GROUP_NUMBER", null)</span>
|
|
<span class="nc" id="L148"> : obj.optString("erp_group_number", null);</span>
|
|
<span class="nc bnc" id="L149" title="All 2 branches missed."> String groupDesc = obj.has("ERP_GROUP_DESC") ? obj.optString("ERP_GROUP_DESC", null)</span>
|
|
<span class="nc" id="L150"> : obj.optString("erp_group_desc", 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 ? "GETDATE()" : "SYSDATE";</span>
|
|
<span class="nc bnc" id="L169" title="All 2 branches missed."> String schemaPrefix = isOracle ? "tran" : "xtran";</span>
|
|
|
|
<span class="nc bnc" id="L171" title="All 2 branches missed."> String seqSql = isOracle ? "SELECT tran.SEQ_TRAN_ERP_GROUP_STATION.NEXTVAL FROM DUAL"</span>
|
|
<span class="nc" id="L172"> : "SELECT NEXT VALUE FOR xtran.SEQ_TRAN_ERP_GROUP_STATION";</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("Fehler beim Abrufen der TRAN_ID aus SEQ_TRAN_ERP_GROUP_STATION.");</span>
|
|
}
|
|
}
|
|
|
|
<span class="nc" id="L183"> String sql = "INSERT INTO " + schemaPrefix</span>
|
|
+ ".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) "
|
|
+
|
|
"VALUES ((SELECT MAX(id) FROM " + schemaPrefix + ".tran_idocstatus), ?, 0, 0, " + timestamp + ", "
|
|
+ timestamp + ", ?, ?, ?, ?, ?, ?, 1, 0)";
|
|
<span class="nc bnc" id="L188" title="All 2 branches missed."> String groupNumber = obj.has("ERP_GROUP_NUMBER") ? obj.optString("ERP_GROUP_NUMBER", null)</span>
|
|
<span class="nc" id="L189"> : obj.optString("erp_group_number", null);</span>
|
|
<span class="nc bnc" id="L190" title="All 2 branches missed."> String kapnr = obj.has("KAP_NR") ? obj.optString("KAP_NR", null) : obj.optString("kap_nr", 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("STATION_TYPE", "T");</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 = "T";</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> |