backend/src/main/java/com/workbenchclassic/UpdateContact.java aktualisiert

This commit is contained in:
chris 2026-03-18 11:24:38 +01:00
parent 4a8a052619
commit 89a652cdfc

View File

@ -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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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();
}
}
}