diff --git a/backend/src/main/java/com/workbenchclassic/UpdateContact.java b/backend/src/main/java/com/workbenchclassic/UpdateContact.java index 7d2d93d..a4d1743 100644 --- a/backend/src/main/java/com/workbenchclassic/UpdateContact.java +++ b/backend/src/main/java/com/workbenchclassic/UpdateContact.java @@ -1,188 +1,188 @@ -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.Map; -import java.util.stream.Collectors; - -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("/updateContacts") -public class UpdateContact { - - private final DBService dbService = new DBService("dsTranNJTA"); - - @POST - @Consumes(MediaType.APPLICATION_JSON) - @Produces(MediaType.APPLICATION_JSON) - public Response doUpdate(String jsonBody) { - try { - JSONObject json = new JSONObject(jsonBody); - String station = json.getString("station"); - JSONArray dataArray = json.getJSONArray("data"); - - String vendor = dbService.getDatabaseProductName(); - System.out.println("Aktueller DB-Vendor: " + vendor); - - Connection conn = dbService.getConnection(); - GetMetadata metadata = new GetMetadata(); - String extPlantResponseString = metadata.getExtPlantJson(station); - JSONObject extPlantResponse = new JSONObject(extPlantResponseString); - - String errorCode = extPlantResponse.optString("errorCode", "0"); - if (!"0".equals(errorCode)) { - // Return an HTTP 400 or 500 with that JSON - return Response.status(Response.Status.BAD_REQUEST).entity(extPlantResponse.toString()).build(); - } - // 3) werknummer ermitteln - - // werkResultJson könnte z.B. so aussehen: - // {"errorCode":"0","errorMessage":"Done","data":"[{\"werknummer\":\"ABC\"}]"} - - String werkData = extPlantResponse.optString("data", "[]"); - JSONArray werkArr = new JSONArray(werkData); - - String WERK_NR = null; - String COMPANY_NO = null; - String CLIENT_NO = null; - if (werkArr.length() > 0) { - JSONObject row = werkArr.getJSONObject(0); - WERK_NR = row.optString("ext_company_nr", null); - COMPANY_NO = row.optString("werk_nr", null); - CLIENT_NO = row.optString("client_nr", null); - } - - System.out.println("Ermittelte werknummer: " + COMPANY_NO); - - boolean isMSSQL = "Microsoft SQL Server".equals(vendor); - boolean isOracle = "Oracle".equals(vendor); - - insertIdocStatus(conn, isMSSQL, isOracle); - - conn.setAutoCommit(false); - try { - for (int i = 0; i < dataArray.length(); i++) { - JSONObject obj = dataArray.getJSONObject(i); - Map keyMap = obj.keySet().stream() - .collect(Collectors.toMap(String::toLowerCase, key -> key, - (existing, replacement) -> existing)); - insertContact(conn, obj, COMPANY_NO, WERK_NR, CLIENT_NO, isMSSQL, isOracle, keyMap); - if (obj.has("artikel") && !obj.isNull("artikel") - && !String.valueOf(obj.get("artikel")).trim().isEmpty()) { - insertMaterialContact(conn, obj, COMPANY_NO, WERK_NR, CLIENT_NO, isMSSQL, isOracle, keyMap); - } - - } - conn.commit(); - } catch (SQLException e) { - conn.rollback(); - throw e; - } finally { - conn.setAutoCommit(true); - conn.close(); - } - - JSONObject response = new JSONObject(); - response.put("status", "ok"); - response.put("message", "Daten wurden erfolgreich verarbeitet."); - return Response.ok(response.toString()).build(); - - } catch (Exception e) { - e.printStackTrace(); - JSONObject error = new JSONObject(); - error.put("status", "error"); - error.put("message", e.getMessage()); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error.toString()).build(); - } - } - - private void insertContact(Connection conn, JSONObject obj, String COMPANY_NO, String WERK_NR, String CLIENT_NO, - boolean isMSSQL, boolean isOracle, Map keyMap) throws SQLException { - String sql; - if (isMSSQL) { - sql = "INSERT INTO xtran.tran_contact (TRAN_ID, IDOC_ID, SOURCE, STATUS, CREATED, STAMP, PLANT_NO, CLIENT_NO, COMPANY_NO, CONTACT_CODE, CONTACT_NAME, CONTACT_GROUP, STREET, ZIP_CODE, COUNTRY, CITY, IS_SUPPLIER, IS_CUSTOMER, IS_MANUFACTURER, CONTACT_CODE_ERP, INVENTORY, CONTACT_STATE, LATITUDE, LONGITUDE) " - + "VALUES (NEXT VALUE FOR xtran.SEQ_tran_contact, (SELECT MAX(id) FROM xtran.tran_idocstatus), ?, ?, GETDATE(), GETDATE(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - } else if (isOracle) { - sql = "INSERT INTO tran.tran_contact (TRAN_ID, IDOC_ID, SOURCE, STATUS, CREATED, STAMP, PLANT_NO, CLIENT_NO, COMPANY_NO, CONTACT_CODE, CONTACT_NAME, CONTACT_GROUP, STREET, ZIP_CODE, COUNTRY, CITY, IS_SUPPLIER, IS_CUSTOMER, IS_MANUFACTURER, CONTACT_CODE_ERP, INVENTORY, CONTACT_STATE, LATITUDE, LONGITUDE) " - + "VALUES (tran.SEQ_TRAN_contact.nextVal, (SELECT MAX(id) FROM tran.tran_idocstatus), ?, ?, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - } else { - throw new SQLException("DB-Vendor nicht implementiert"); - } - - try (PreparedStatement ps = conn.prepareStatement(sql)) { - ps.setInt(1, obj.optInt(keyMap.getOrDefault("source", "source"), 0)); - ps.setInt(2, obj.optInt(keyMap.getOrDefault("status", "status"), 0)); - ps.setString(3, WERK_NR); - ps.setString(4, CLIENT_NO); - ps.setString(5, COMPANY_NO); - ps.setString(6, obj.optString(keyMap.getOrDefault("contact_code", "contact_code"), "")); - ps.setString(7, obj.optString(keyMap.getOrDefault("contact_name", "contact_name"), "")); - ps.setString(8, obj.optString(keyMap.getOrDefault("contact_group", "contact_group"), "")); - ps.setString(9, obj.optString(keyMap.getOrDefault("street", "street"), "")); - ps.setString(10, obj.optString(keyMap.getOrDefault("zip_code", "zip_code"), "")); - ps.setString(11, obj.optString(keyMap.getOrDefault("country", "country"), "")); - ps.setString(12, obj.optString(keyMap.getOrDefault("city", "city"), "")); - ps.setInt(13, obj.optInt(keyMap.getOrDefault("is_supplier", "is_supplier"), 0)); - ps.setInt(14, obj.optInt(keyMap.getOrDefault("is_customer", "is_customer"), 0)); - ps.setInt(15, obj.optInt(keyMap.getOrDefault("is_manufacturer", "is_manufacturer"), 0)); - ps.setString(16, obj.optString(keyMap.getOrDefault("contact_code_erp", "contact_code_erp"), "")); - ps.setInt(17, obj.optInt(keyMap.getOrDefault("inventory", "inventory"), 0)); - ps.setInt(18, obj.optInt(keyMap.getOrDefault("contact_state", "contact_state"), 0)); - ps.setDouble(19, obj.optDouble(keyMap.getOrDefault("latitude", "latitude"), 0.0)); - ps.setDouble(20, obj.optDouble(keyMap.getOrDefault("longitude", "longitude"), 0.0)); - ps.executeUpdate(); - } - } - - private void insertIdocStatus(Connection conn, boolean isMSSQL, boolean isOracle) throws SQLException { - String sql; - if (isMSSQL) { - sql = "INSERT INTO xtran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (NEXT VALUE FOR xtran.seq_tranidocstatus, GETDATE(), 1, 0, 57, 0)"; - } else if (isOracle) { - sql = "INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (tran.seq_tranidocstatus.nextval, SYSDATE, 1, 0, 57, 0)"; - } else { - throw new SQLException("DB-Vendor nicht implementiert"); - } - try (PreparedStatement ps = conn.prepareStatement(sql)) { - ps.executeUpdate(); - } - } - - private void insertMaterialContact(Connection conn, JSONObject obj, String COMPANY_NO, String WERK_NR, - String CLIENT_NO, boolean isMSSQL, boolean isOracle, Map keyMap) throws SQLException { - String sql; - if (isMSSQL) { - sql = "INSERT INTO xtran.tran_material_contact (TRAN_ID, SOURCE, STATUS, CREATED, STAMP, CONTACT_CODE, MATERIAL_NO, MATERIAL_NO_EXT, MATERIAL_DESC_EXT, CONTACT_TYPE, DELETE_FLAG, PLANT_NO, COMPANY_NO, CLIENT_NO, IDOC_ID) " - + "VALUES (NEXT VALUE FOR xtran.SEQ_tran_material_contact, ?, ?, GETDATE(), GETDATE(), ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT MAX(id) FROM xtran.tran_idocstatus))"; - } else if (isOracle) { - sql = "INSERT INTO tran.tran_material_contact (TRAN_ID, SOURCE, STATUS, CREATED, STAMP, CONTACT_CODE, MATERIAL_NO, MATERIAL_NO_EXT, MATERIAL_DESC_EXT, CONTACT_TYPE, DELETE_FLAG, PLANT_NO, COMPANY_NO, CLIENT_NO, IDOC_ID) " - + "VALUES (tran.SEQ_TRAN_material_contact.nextVal, ?, ?, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT MAX(id) FROM tran.tran_idocstatus))"; - } else { - throw new SQLException("DB-Vendor nicht implementiert"); - } - - try (PreparedStatement ps = conn.prepareStatement(sql)) { - ps.setInt(1, obj.optInt(keyMap.getOrDefault("source", "source"), 0)); - ps.setInt(2, obj.optInt(keyMap.getOrDefault("status", "status"), 0)); - ps.setString(3, obj.optString(keyMap.getOrDefault("contact_code", "contact_code"), "")); - ps.setString(4, obj.optString(keyMap.getOrDefault("artikel", "artikel"), "")); - ps.setString(5, obj.optString(keyMap.getOrDefault("part_ext", "part_ext"), "")); - ps.setString(6, obj.optString(keyMap.getOrDefault("part_ext", "material_desc_ext"), "")); - ps.setInt(7, obj.optInt(keyMap.getOrDefault("art_bez_ext", "art_bez_ext"), 0)); - ps.setInt(8, obj.optInt(keyMap.getOrDefault("delete_flag", "delete_flag"), 0)); - ps.setString(9, WERK_NR); - ps.setString(10, COMPANY_NO); - ps.setString(11, CLIENT_NO); - ps.executeUpdate(); - } - } -} +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.Map; +import java.util.stream.Collectors; + +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("/updateContacts") +public class UpdateContact { + + private final DBService dbService = new DBService("dsTranNJTA"); + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response doUpdate(String jsonBody) { + try { + JSONObject json = new JSONObject(jsonBody); + String station = json.getString("station"); + JSONArray dataArray = json.getJSONArray("data"); + + String vendor = dbService.getDatabaseProductName(); + System.out.println("Aktueller DB-Vendor: " + vendor); + + Connection conn = dbService.getConnection(); + GetMetadata metadata = new GetMetadata(); + String extPlantResponseString = metadata.getExtPlantJson(station); + JSONObject extPlantResponse = new JSONObject(extPlantResponseString); + + String errorCode = extPlantResponse.optString("errorCode", "0"); + if (!"0".equals(errorCode)) { + // Return an HTTP 400 or 500 with that JSON + return Response.status(Response.Status.BAD_REQUEST).entity(extPlantResponse.toString()).build(); + } + // 3) werknummer ermitteln + + // werkResultJson könnte z.B. so aussehen: + // {"errorCode":"0","errorMessage":"Done","data":"[{\"werknummer\":\"ABC\"}]"} + + String werkData = extPlantResponse.optString("data", "[]"); + JSONArray werkArr = new JSONArray(werkData); + + String WERK_NR = null; + String COMPANY_NO = null; + String CLIENT_NO = null; + if (werkArr.length() > 0) { + JSONObject row = werkArr.getJSONObject(0); + WERK_NR = row.optString("werk_nr", null); + COMPANY_NO = row.optString("ext_company_nr", null); + CLIENT_NO = row.optString("client_nr", null); + } + + System.out.println("Ermittelte werknummer: " + COMPANY_NO); + + boolean isMSSQL = "Microsoft SQL Server".equals(vendor); + boolean isOracle = "Oracle".equals(vendor); + + insertIdocStatus(conn, isMSSQL, isOracle); + + conn.setAutoCommit(false); + try { + for (int i = 0; i < dataArray.length(); i++) { + JSONObject obj = dataArray.getJSONObject(i); + Map keyMap = obj.keySet().stream() + .collect(Collectors.toMap(String::toLowerCase, key -> key, + (existing, replacement) -> existing)); + insertContact(conn, obj, COMPANY_NO, WERK_NR, CLIENT_NO, isMSSQL, isOracle, keyMap); + if (obj.has("artikel") && !obj.isNull("artikel") + && !String.valueOf(obj.get("artikel")).trim().isEmpty()) { + insertMaterialContact(conn, obj, COMPANY_NO, WERK_NR, CLIENT_NO, isMSSQL, isOracle, keyMap); + } + + } + conn.commit(); + } catch (SQLException e) { + conn.rollback(); + throw e; + } finally { + conn.setAutoCommit(true); + conn.close(); + } + + JSONObject response = new JSONObject(); + response.put("status", "ok"); + response.put("message", "Daten wurden erfolgreich verarbeitet."); + return Response.ok(response.toString()).build(); + + } catch (Exception e) { + e.printStackTrace(); + JSONObject error = new JSONObject(); + error.put("status", "error"); + error.put("message", e.getMessage()); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error.toString()).build(); + } + } + + private void insertContact(Connection conn, JSONObject obj, String COMPANY_NO, String WERK_NR, String CLIENT_NO, + boolean isMSSQL, boolean isOracle, Map keyMap) throws SQLException { + String sql; + if (isMSSQL) { + sql = "INSERT INTO xtran.tran_contact (TRAN_ID, IDOC_ID, SOURCE, STATUS, CREATED, STAMP, PLANT_NO, CLIENT_NO, COMPANY_NO, CONTACT_CODE, CONTACT_NAME, CONTACT_GROUP, STREET, ZIP_CODE, COUNTRY, CITY, IS_SUPPLIER, IS_CUSTOMER, IS_MANUFACTURER, CONTACT_CODE_ERP, INVENTORY, CONTACT_STATE, LATITUDE, LONGITUDE) " + + "VALUES (NEXT VALUE FOR xtran.SEQ_tran_contact, (SELECT MAX(id) FROM xtran.tran_idocstatus), ?, ?, GETDATE(), GETDATE(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + } else if (isOracle) { + sql = "INSERT INTO tran.tran_contact (TRAN_ID, IDOC_ID, SOURCE, STATUS, CREATED, STAMP, PLANT_NO, CLIENT_NO, COMPANY_NO, CONTACT_CODE, CONTACT_NAME, CONTACT_GROUP, STREET, ZIP_CODE, COUNTRY, CITY, IS_SUPPLIER, IS_CUSTOMER, IS_MANUFACTURER, CONTACT_CODE_ERP, INVENTORY, CONTACT_STATE, LATITUDE, LONGITUDE) " + + "VALUES (tran.SEQ_TRAN_contact.nextVal, (SELECT MAX(id) FROM tran.tran_idocstatus), ?, ?, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + } else { + throw new SQLException("DB-Vendor nicht implementiert"); + } + + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setInt(1, obj.optInt(keyMap.getOrDefault("source", "source"), 0)); + ps.setInt(2, obj.optInt(keyMap.getOrDefault("status", "status"), 0)); + ps.setString(3, WERK_NR); + ps.setString(4, CLIENT_NO); + ps.setString(5, COMPANY_NO); + ps.setString(6, obj.optString(keyMap.getOrDefault("contact_code", "contact_code"), "")); + ps.setString(7, obj.optString(keyMap.getOrDefault("contact_name", "contact_name"), "")); + ps.setString(8, obj.optString(keyMap.getOrDefault("contact_group", "contact_group"), "")); + ps.setString(9, obj.optString(keyMap.getOrDefault("street", "street"), "")); + ps.setString(10, obj.optString(keyMap.getOrDefault("zip_code", "zip_code"), "")); + ps.setString(11, obj.optString(keyMap.getOrDefault("country", "country"), "")); + ps.setString(12, obj.optString(keyMap.getOrDefault("city", "city"), "")); + ps.setInt(13, obj.optInt(keyMap.getOrDefault("is_supplier", "is_supplier"), 0)); + ps.setInt(14, obj.optInt(keyMap.getOrDefault("is_customer", "is_customer"), 0)); + ps.setInt(15, obj.optInt(keyMap.getOrDefault("is_manufacturer", "is_manufacturer"), 0)); + ps.setString(16, obj.optString(keyMap.getOrDefault("contact_code_erp", "contact_code_erp"), "")); + ps.setInt(17, obj.optInt(keyMap.getOrDefault("inventory", "inventory"), 0)); + ps.setInt(18, obj.optInt(keyMap.getOrDefault("contact_state", "contact_state"), 0)); + ps.setDouble(19, obj.optDouble(keyMap.getOrDefault("latitude", "latitude"), 0.0)); + ps.setDouble(20, obj.optDouble(keyMap.getOrDefault("longitude", "longitude"), 0.0)); + ps.executeUpdate(); + } + } + + private void insertIdocStatus(Connection conn, boolean isMSSQL, boolean isOracle) throws SQLException { + String sql; + if (isMSSQL) { + sql = "INSERT INTO xtran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (NEXT VALUE FOR xtran.seq_tranidocstatus, GETDATE(), 1, 0, 57, 0)"; + } else if (isOracle) { + sql = "INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (tran.seq_tranidocstatus.nextval, SYSDATE, 1, 0, 57, 0)"; + } else { + throw new SQLException("DB-Vendor nicht implementiert"); + } + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.executeUpdate(); + } + } + + private void insertMaterialContact(Connection conn, JSONObject obj, String COMPANY_NO, String WERK_NR, + String CLIENT_NO, boolean isMSSQL, boolean isOracle, Map keyMap) throws SQLException { + String sql; + if (isMSSQL) { + sql = "INSERT INTO xtran.tran_material_contact (TRAN_ID, SOURCE, STATUS, CREATED, STAMP, CONTACT_CODE, MATERIAL_NO, MATERIAL_NO_EXT, MATERIAL_DESC_EXT, CONTACT_TYPE, DELETE_FLAG, PLANT_NO, COMPANY_NO, CLIENT_NO, IDOC_ID) " + + "VALUES (NEXT VALUE FOR xtran.SEQ_tran_material_contact, ?, ?, GETDATE(), GETDATE(), ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT MAX(id) FROM xtran.tran_idocstatus))"; + } else if (isOracle) { + sql = "INSERT INTO tran.tran_material_contact (TRAN_ID, SOURCE, STATUS, CREATED, STAMP, CONTACT_CODE, MATERIAL_NO, MATERIAL_NO_EXT, MATERIAL_DESC_EXT, CONTACT_TYPE, DELETE_FLAG, PLANT_NO, COMPANY_NO, CLIENT_NO, IDOC_ID) " + + "VALUES (tran.SEQ_TRAN_material_contact.nextVal, ?, ?, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT MAX(id) FROM tran.tran_idocstatus))"; + } else { + throw new SQLException("DB-Vendor nicht implementiert"); + } + + try (PreparedStatement ps = conn.prepareStatement(sql)) { + ps.setInt(1, obj.optInt(keyMap.getOrDefault("source", "source"), 0)); + ps.setInt(2, obj.optInt(keyMap.getOrDefault("status", "status"), 0)); + ps.setString(3, obj.optString(keyMap.getOrDefault("contact_code", "contact_code"), "")); + ps.setString(4, obj.optString(keyMap.getOrDefault("artikel", "artikel"), "")); + ps.setString(5, obj.optString(keyMap.getOrDefault("part_ext", "part_ext"), "")); + ps.setString(6, obj.optString(keyMap.getOrDefault("part_ext", "material_desc_ext"), "")); + ps.setInt(7, obj.optInt(keyMap.getOrDefault("art_bez_ext", "art_bez_ext"), 0)); + ps.setInt(8, obj.optInt(keyMap.getOrDefault("delete_flag", "delete_flag"), 0)); + ps.setString(9, WERK_NR); + ps.setString(10, COMPANY_NO); + ps.setString(11, CLIENT_NO); + ps.executeUpdate(); + } + } +}