diff --git a/pom.xml b/pom.xml
index 29ebc22..aba3cfa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,8 +18,8 @@
com.oracle.database.jdbc
- ojdbc10
- 19.8.0.0
+ ojdbc8
+ 18.3.0.0
@@ -44,7 +44,7 @@
javax.servlet
javax.servlet-api
- 4.0.1
+ 4.0.1
provided
@@ -52,9 +52,39 @@
com.fasterxml.jackson.core
jackson-databind
- 2.13.0
+ 2.13.0
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ 2.13.0
+
+
+ org.glassfish.jersey.media
+ jersey-media-json-jackson
+ 2.13
+
+
+ ch.qos.logback
+ logback-core
+ 1.3.0
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.3.0
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.9
+
diff --git a/src/main/java/com/example/CorsFilters.java b/src/main/java/com/example/CorsFilters.java
index 853eaa7..a8eb9e1 100644
--- a/src/main/java/com/example/CorsFilters.java
+++ b/src/main/java/com/example/CorsFilters.java
@@ -27,6 +27,7 @@ public class CorsFilters implements Filter {
// Autoriser les en-têtes spécifiés dans la requête
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type");
+ httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
// Permettre l'envoi de cookies (si nécessaire)
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
diff --git a/src/main/java/com/example/services/AuthService.java b/src/main/java/com/example/services/AuthService.java
new file mode 100644
index 0000000..40f4ac1
--- /dev/null
+++ b/src/main/java/com/example/services/AuthService.java
@@ -0,0 +1,144 @@
+package com.example.services;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Path("/auth")
+public class AuthService {
+ private static final Logger logger = LoggerFactory.getLogger(AuthService.class);
+
+ public class UserAbilityRules {
+ private List rules;
+
+ public UserAbilityRules() {
+ this.rules = Arrays.asList("admin", "editor");
+ }
+
+ public List getRules() {
+ return rules;
+ }
+ }
+
+ public class UserData {
+ private int id;
+ private String fullName;
+ private String username;
+ private String avatar;
+ private String email;
+ private String role;
+
+ public UserData() {
+ this.id = 1;
+ this.fullName = "Frédérik Benoist";
+ this.username = "fbenoist";
+ this.avatar = "/images/avatars/avatar-1.png";
+ this.email = "admin@demo.com";
+ this.role = "admin";
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getAvatar() {
+ return avatar;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getRole() {
+ return role;
+ }
+ }
+
+ public class AuthResponse {
+ private String accessToken;
+ private UserAbilityRules userAbilityRules;
+ private UserData userData;
+
+ public AuthResponse() {
+ this.accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MX0.fhc3wykrAnRpcKApKhXiahxaOe8PSHatad31NuIZ0Zg";
+ this.userAbilityRules = new UserAbilityRules();
+ this.userData = new UserData();
+ }
+
+ public String getAccessToken() {
+ return accessToken;
+ }
+
+ public UserAbilityRules getUserAbilityRules() {
+ return userAbilityRules;
+ }
+
+ public UserData getUserData() {
+ return userData;
+ }
+ }
+
+ @POST
+ @Path("/login")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public AuthResponse login(Credentials credentials) {
+ logger.info(credentials.getUsername() + " is attempting to login");
+
+ if (!isValidPassword(credentials.getPassword())) {
+ logger.info("User " + credentials.getUsername() + " failed to login");
+ throw new WebApplicationException("Invalid password", Response.Status.UNAUTHORIZED);
+ }
+
+ logger.info("User " + credentials.getUsername() + " successfully logged in");
+
+ return new AuthResponse();
+ }
+
+ private boolean isValidPassword(String password) {
+ return "admin123".equals(password) || "support123".equals(password);
+ }
+
+ public static class Credentials {
+ private String username;
+ private String password;
+
+ // Getter pour username
+ public String getUsername() {
+ return username;
+ }
+
+ // Setter pour username
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ // Getter pour password
+ public String getPassword() {
+ return password;
+ }
+
+ // Setter pour password
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/DatabaseConnectDOTSOFT.java b/src/main/java/com/example/services/DatabaseConnectDOTSOFT.java
new file mode 100644
index 0000000..67eb675
--- /dev/null
+++ b/src/main/java/com/example/services/DatabaseConnectDOTSOFT.java
@@ -0,0 +1,68 @@
+package com.example.services;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DatabaseConnectDOTSOFT implements AutoCloseable {
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectDOTSOFT.class);
+
+ private Connection connection;
+
+ public DatabaseConnectDOTSOFT(String username) throws SQLException {
+ String environment = loadEnvironment();
+
+ try {
+ Properties dbProperties = loadDatabaseProperties();
+
+ String url = dbProperties.getProperty(environment + ".db.url");
+ String userpassword = dbProperties.getProperty(environment + ".db." + username + ".password");
+
+ connection = DriverManager.getConnection(url, username, userpassword);
+
+ logger.info("DOTSOFT Connection OK for user " + username + " on environment " + environment);
+ } catch (SQLException e) {
+ logger.error("Failed to connect to DOTSOFT database for user " + username + " on environment " + environment, e);
+ throw e; // re-throw the exception
+ }
+ }
+
+ public Connection getConnection() {
+ return connection;
+ }
+
+ @Override
+ public void close() throws SQLException {
+ if (connection != null && !connection.isClosed()) {
+ connection.close();
+ logger.info("DOTSOFT Connection closed");
+ }
+ }
+
+ private String loadEnvironment() {
+ Properties envProperties = loadProperties("env.properties");
+ return envProperties.getProperty("environment");
+ }
+
+ private Properties loadDatabaseProperties() {
+ Properties dbProperties = loadProperties("db.properties");
+ return dbProperties;
+ }
+
+ private Properties loadProperties(String fileName) {
+ Properties properties = new Properties();
+ try (InputStream input = getClass().getClassLoader().getResourceAsStream(fileName)) {
+ properties.load(input);
+ } catch (IOException e) {
+ e.printStackTrace();
+ // Handle the exception correctly for your application
+ }
+ return properties;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/DatabaseConnectXADMIN.java b/src/main/java/com/example/services/DatabaseConnectXADMIN.java
new file mode 100644
index 0000000..d7f68b7
--- /dev/null
+++ b/src/main/java/com/example/services/DatabaseConnectXADMIN.java
@@ -0,0 +1,61 @@
+package com.example.services;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DatabaseConnectXADMIN implements AutoCloseable {
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectXADMIN.class);
+
+ private Connection connection;
+
+ public DatabaseConnectXADMIN(String username) throws SQLException {
+ try {
+ Properties dbProperties = loadDatabaseProperties();
+
+ String url = dbProperties.getProperty("xadmin.db.url");
+ String userpassword = dbProperties.getProperty("xadmin.db." + username + ".password");
+
+ connection = DriverManager.getConnection(url, username, userpassword);
+
+ logger.info("XADMIN Connection OK for user " + username);
+ } catch (SQLException e) {
+ logger.error("Failed to connect to XADMIN database for user " + username, e);
+ throw e; // re-throw the exception
+ }
+ }
+
+ public Connection getConnection() {
+ return connection;
+ }
+
+ @Override
+ public void close() throws SQLException {
+ if (connection != null && !connection.isClosed()) {
+ connection.close();
+ logger.info("XADMIN Connection closed");
+ }
+ }
+
+ private Properties loadDatabaseProperties() {
+ Properties dbProperties = loadProperties("db.properties");
+ return dbProperties;
+ }
+
+ private Properties loadProperties(String fileName) {
+ Properties properties = new Properties();
+ try (InputStream input = getClass().getClassLoader().getResourceAsStream(fileName)) {
+ properties.load(input);
+ } catch (IOException e) {
+ e.printStackTrace();
+ // Handle the exception correctly for your application
+ }
+ return properties;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/DatabaseConnectXSTORE.java b/src/main/java/com/example/services/DatabaseConnectXSTORE.java
new file mode 100644
index 0000000..91fa3da
--- /dev/null
+++ b/src/main/java/com/example/services/DatabaseConnectXSTORE.java
@@ -0,0 +1,61 @@
+package com.example.services;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DatabaseConnectXSTORE implements AutoCloseable {
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectXSTORE.class);
+
+ private Connection connection;
+
+ public DatabaseConnectXSTORE(String dbHost, String username) throws SQLException {
+ try {
+ Properties dbProperties = loadDatabaseProperties();
+
+ String url = dbProperties.getProperty("xstore.db.url").replace("HOST", dbHost);
+ String userpassword = dbProperties.getProperty("xstore.db." + username + ".password");
+
+ connection = DriverManager.getConnection(url, username, userpassword);
+
+ logger.info("XSTORE Connection OK for user " + username + " on host " + dbHost);
+ } catch (SQLException e) {
+ logger.error("Failed to connect to XSTORE database for user " + username + " on host " + dbHost, e);
+ throw e; // re-throw the exception
+ }
+ }
+
+ public Connection getConnection() {
+ return connection;
+ }
+
+ @Override
+ public void close() throws SQLException {
+ if (connection != null && !connection.isClosed()) {
+ connection.close();
+ logger.info("XSTORE Connection closed");
+ }
+ }
+
+ private Properties loadDatabaseProperties() {
+ Properties dbProperties = loadProperties("db.properties");
+ return dbProperties;
+ }
+
+ private Properties loadProperties(String fileName) {
+ Properties properties = new Properties();
+ try (InputStream input = getClass().getClassLoader().getResourceAsStream(fileName)) {
+ properties.load(input);
+ } catch (IOException e) {
+ e.printStackTrace();
+ // Handle the exception correctly for your application
+ }
+ return properties;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/DatabaseConnection.java b/src/main/java/com/example/services/DatabaseConnection.java
deleted file mode 100644
index 39fc7c2..0000000
--- a/src/main/java/com/example/services/DatabaseConnection.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.example.services;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-public class DatabaseConnection implements AutoCloseable {
-
- private Connection connection;
-
- public DatabaseConnection(String dbHost, String username, String password) throws SQLException {
- // Initialiser votre connexion à la base de données ici
- connection = DriverManager.getConnection("jdbc:oracle:thin:@" + dbHost + ":1521/XSTORE", username, password);
- }
-
- public Connection getConnection() {
- return connection;
- }
-
- @Override
- public void close() throws SQLException {
- if (connection != null && !connection.isClosed()) {
- connection.close();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/DatabaseConnectionDS.java b/src/main/java/com/example/services/DatabaseConnectionDS.java
deleted file mode 100644
index 6148942..0000000
--- a/src/main/java/com/example/services/DatabaseConnectionDS.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.example.services;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-public class DatabaseConnectionDS implements AutoCloseable {
-
- private Connection connection;
-
- public DatabaseConnectionDS(String username, String password) throws SQLException {
- // Initialiser votre connexion à la base de données ici
- // jdbc:oracle:thin:@v-aspd-b01-ii-d.adic.lan:1521/IASPDI
- // jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI
- connection = DriverManager.getConnection("jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI", username, password);
- }
-
- public Connection getConnection() {
- return connection;
- }
-
- @Override
- public void close() throws SQLException {
- if (connection != null && !connection.isClosed()) {
- connection.close();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/DatabaseService.java b/src/main/java/com/example/services/DatabaseService.java
deleted file mode 100644
index 34803cc..0000000
--- a/src/main/java/com/example/services/DatabaseService.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.example.services;
-
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-@Path("/database")
-public class DatabaseService {
-
- @GET
- @Path("/replication")
- @Produces(MediaType.APPLICATION_JSON)
- public Response getCount(@QueryParam("dbHost") String dbHost) {
-
- if (dbHost == null) {
- return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
- }
-
- DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
-
- try (DatabaseConnection databaseConnection = new DatabaseConnection(dbHost, "repqueue", "repqueue")) {
- String query = "SELECT COUNT(*) FROM CTL_REPLICATION_QUEUE";
-
- try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query);
- ResultSet resultSet = statement.executeQuery()) {
-
- if (resultSet.next()) {
- long count = resultSet.getLong(1);
- // Construction manuelle de la réponse JSON
- String jsonResponse = "{\"count\":" + count + "}";
- return Response.ok(jsonResponse).build();
- }
- }
- } catch (SQLException e) {
- e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
-
- // Construction de la réponse JSON en cas d'erreur
- String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
- }
-
- return null;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/FluxService.java b/src/main/java/com/example/services/FluxService.java
new file mode 100644
index 0000000..5671ce8
--- /dev/null
+++ b/src/main/java/com/example/services/FluxService.java
@@ -0,0 +1,114 @@
+package com.example.services;
+
+import com.example.services.flux.bl.*;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Path("/flux")
+public class FluxService {
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectDOTSOFT.class);
+
+ /**
+ * Retrieves the FluxBlNotSent object from the server.
+ *
+ * @return the FluxBlNotSent object obtained from the server
+ */
+ @GET
+ @Path("/bl/notsent")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getFluxBlNotSent() {
+
+ DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
+
+ try (DatabaseConnectDOTSOFT databaseConnection = new DatabaseConnectDOTSOFT("com02")) {
+ String query = "WITH err_bl AS (" +
+ "SELECT id_bon_livraison FROM omni.aspd_xsto_adrr_bl WHERE job_id = (" +
+ "SELECT MAX(job_id) FROM omni.aspd_xsto_adrr_bl))" +
+ "SELECT DISTINCT s.id_distrib, dis.libelle AS libelle_dis, s.id_structure, TRIM(s.nom) AS nom, s.enseigne, mq.code AS marque, m.code_saison, p.code_reference AS ref_r," +
+ "p.code_reference || '-' || pavc.code_externe AS ref_rc, p.code_reference || '-' || pavc.code_externe || '-' || TRIM(p.troc_axe2) AS ref_rct, p.nom AS nom_produit," +
+ "p.id_produit, bl.code_externe, bl.id_bon_livraison, bl.fdate AS date_bl, bl.id_structure AS id_expediteur, TRIM(st2.nom) AS expediteur, bl.remarques " +
+ "FROM COM02.bon_livraison bl " +
+ "JOIN err_bl ON err_bl.id_bon_livraison = bl.id_bon_livraison " +
+ "JOIN COM02.structure s ON s.id_structure = bl.id_destinataire " +
+ "LEFT OUTER JOIN COM02.STRUCTURE st2 ON st2.id_structure = bl.id_structure " +
+ "JOIN COM02.distributeur dis ON dis.id_distrib = s.id_distrib " +
+ "JOIN COM02.bon_livraison_colis blc ON blc.id_bordereau = bl.id_bon_livraison " +
+ "JOIN COM02.bon_livraison_colis_ligne blcl ON blcl.id_colis = blc.id_colis " +
+ "JOIN COM02.produit p ON p.id_produit = blcl.id_produit " +
+ "JOIN COM02.param_axe_valeur pavc ON pavc.id = p.id_type_axe_valeur1 " +
+ "JOIN COM02.modele m ON m.id_modele = p.code_modele " +
+ "JOIN COM02.marque mq ON mq.id_marque = m.id_marque " +
+ "LEFT OUTER JOIN OMNI.xst_produit xp ON (xp.id_distrib = s.id_distrib AND xp.id_produit = blcl.id_produit) " +
+ "WHERE bl.date_envoi_bl_numerique IS NULL AND blc.id_etat = 4 AND blcl.quantite != 0 AND xp.id_produit IS NULL " +
+ "ORDER BY s.id_distrib, dis.libelle, s.id_structure, TRIM(s.nom), m.code_saison";
+
+ logger.info(query);
+
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ ResultSet resultSet = statement.executeQuery();
+
+ List blNotSentList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ FluxBlNotSent blnotsent = mapResultSetToBlNotSent(resultSet);
+ blNotSentList.add(blnotsent);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse;
+ try {
+ jsonResponse = objectMapper.writeValueAsString(blNotSentList);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ }
+ }
+
+ private FluxBlNotSent mapResultSetToBlNotSent(ResultSet resultSet) throws SQLException {
+ FluxBlNotSent blNotSent = new FluxBlNotSent();
+
+ blNotSent.setIdDistrib(resultSet.getInt("id_distrib"));
+ blNotSent.setLibelleDis(resultSet.getString("libelle_dis"));
+ blNotSent.setIdStructure(resultSet.getInt("id_structure"));
+ blNotSent.setNomStructure(resultSet.getString("nom"));
+ blNotSent.setEnseigne(resultSet.getString("enseigne"));
+ blNotSent.setMarque(resultSet.getString("marque"));
+ blNotSent.setCodeSaison(resultSet.getString("code_saison"));
+ blNotSent.setRefR(resultSet.getString("ref_r"));
+ blNotSent.setRefRc(resultSet.getString("ref_rc"));
+ blNotSent.setRefRct(resultSet.getString("ref_rct"));
+ blNotSent.setNomProduit(resultSet.getString("nom_produit"));
+ blNotSent.setIdProduit(resultSet.getInt("id_produit"));
+ blNotSent.setCodeExterne(resultSet.getString("code_externe"));
+ blNotSent.setIdBonLivraison(resultSet.getInt("id_bon_livraison"));
+ blNotSent.setDateBl(resultSet.getDate("date_bl"));
+ blNotSent.setIdExpediteur(resultSet.getInt("id_expediteur"));
+ blNotSent.setExpediteur(resultSet.getString("expediteur"));
+ blNotSent.setRemarques(resultSet.getString("remarques"));
+
+ return blNotSent;
+ }
+}
diff --git a/src/main/java/com/example/services/HelloWebService.java b/src/main/java/com/example/services/HelloWebService.java
index 4426f82..9875d04 100644
--- a/src/main/java/com/example/services/HelloWebService.java
+++ b/src/main/java/com/example/services/HelloWebService.java
@@ -8,6 +8,6 @@ public class HelloWebService {
@GET
public String sayHello() {
- return "Hello, world!";
+ return "Hello, I'm here to serve you!";
}
}
diff --git a/src/main/java/com/example/services/ItemService.java b/src/main/java/com/example/services/ItemService.java
index 7146348..958184d 100644
--- a/src/main/java/com/example/services/ItemService.java
+++ b/src/main/java/com/example/services/ItemService.java
@@ -1,7 +1,13 @@
package com.example.services;
+import com.example.services.item.Item;
+import com.example.services.item.ItemOption;
+import com.example.services.item.ItemPrice;
+import com.example.services.item.ItemStock;
+
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
@@ -14,35 +20,41 @@ import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
@Path("/items")
public class ItemService {
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectDOTSOFT.class);
@GET
- @Path("/get")
+ @Path("/{itemId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getItemById(
- @QueryParam("dbHost") String dbHost,
- @QueryParam("itemId") String itemId) {
+ @PathParam("itemId") String itemId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if (itemId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
+ } else if (itemId.length() < 6) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
+ }
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
- if (itemId == null) {
- return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
- }
-
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
- try (DatabaseConnection databaseConnection = new DatabaseConnection(dbHost, "dtv", "dtv")) {
- String query = "SELECT * FROM ITM_ITEM WHERE ITEM_ID LIKE ?" ;
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
+ String query = "SELECT * FROM dtv.ITM_ITEM WHERE ORGANIZATION_ID = 1 AND ITEM_ID LIKE ?";
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
- // Concaténer % au paramètre itemId
+ // Concatenate % to parameter itemId
statement.setString(1, itemId + "%");
try (ResultSet resultSet = statement.executeQuery()) {
@@ -53,13 +65,166 @@ public class ItemService {
itemList.add(item);
}
- if (!itemList.isEmpty()) {
- ObjectMapper objectMapper = new ObjectMapper();
- String jsonResponse = objectMapper.writeValueAsString(itemList);
- return Response.ok(jsonResponse).build();
- } else {
- return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No items found\"}").build();
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(itemList);
+
+ return Response.ok(jsonResponse).build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+
+ @GET
+ @Path("/{itemId}/options")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getItemOptionsById(
+ @PathParam("itemId") String itemId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if (itemId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
+ } else if (itemId.length() < 6) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
+ String query = "SELECT item_id,level_code,level_value,item_availability_code,tax_group_id,Vendor,season_code,create_date,create_user_id,update_date,update_user_id " +
+ "FROM dtv.ITM_ITEM_OPTIONS " +
+ "WHERE ORGANIZATION_ID = 1 AND ITEM_ID LIKE ?";
+
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ // Concatenate % to parameter itemId
+ statement.setString(1, itemId + "%");
+
+ try (ResultSet resultSet = statement.executeQuery()) {
+ List itemOptionList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ ItemOption itemOption = mapResultSetToItemOptionDetails(resultSet);
+ itemOptionList.add(itemOption);
}
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(itemOptionList);
+
+ return Response.ok(jsonResponse).build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+
+ @GET
+ @Path("/{itemId}/price")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getItemPricesById(
+ @PathParam("itemId") String itemId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if (itemId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
+ } else if (itemId.length() < 6) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
+ String query = "SELECT item_id, level_code, level_value, itm_price_property_code, effective_date, expiration_date, price, price_qty, external_id, external_system, create_date, create_user_id, update_date, update_user_id " +
+ "FROM dtv.itm_item_prices " +
+ "WHERE organization_id = 1 AND item_id LIKE ?";
+
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ // Concatenate % to parameter itemId
+ statement.setString(1, itemId + "%");
+
+ try (ResultSet resultSet = statement.executeQuery()) {
+ List itemPriceList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ ItemPrice itemPrice = mapResultSetToItemPriceDetails(resultSet);
+ itemPriceList.add(itemPrice);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(itemPriceList);
+
+ return Response.ok(jsonResponse).build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+
+ @GET
+ @Path("/{itemId}/stock")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getItemStocksById(
+ @PathParam("itemId") String itemId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if (itemId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
+ } else if (itemId.length() < 6) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
+ String query = "SELECT organization_id,rtl_loc_id,inv_location_id,bucket_id,item_id, unitcount,inventory_value,create_date, create_user_id,update_date , update_user_id " +
+ "FROM dtv.inv_stock_ledger_acct " +
+ "WHERE organization_id = 1 AND item_id LIKE ?";
+
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ // Concatenate % to parameter itemId
+ statement.setString(1, itemId + "%");
+
+ try (ResultSet resultSet = statement.executeQuery()) {
+ List itemStockList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ ItemStock itemStock = mapResultSetToItemStockDetails(resultSet);
+ itemStockList.add(itemStock);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(itemStockList);
+
+ return Response.ok(jsonResponse).build();
}
}
} catch (SQLException e) {
@@ -99,287 +264,68 @@ public class ItemService {
item.setDimension2(resultSet.getString("DIMENSION2"));
item.setDimension3(resultSet.getString("DIMENSION3"));
item.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM"));
- item.setCreateDate(resultSet.getTimestamp("CREATE_DATE"));
+ item.setCreateDate(resultSet.getDate("CREATE_DATE"));
item.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
- item.setUpdateDate(resultSet.getTimestamp("UPDATE_DATE"));
+ item.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
item.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
- item.setRecordState(resultSet.getString("RECORD_STATE"));
return item;
}
- public class Item {
- private Long organizationId;
- private String itemId;
- private String orgCode;
- private String orgValue;
- private String name;
- private String description;
- private String merchLevel1;
- private String merchLevel2;
- private String merchLevel3;
- private String merchLevel4;
- private Integer listPrice;
- private Integer measureReqFlag;
- private String itemLevelCode;
- private String parentItemId;
- private Integer notInventoriedFlag;
- private Integer serializedItemFlag;
- private String itemTypeCode;
- private String dtvClassName;
- private String dimensionSystem;
- private Integer disallowMatrixDisplayFlag;
- private String itemMatrixColor;
- private String dimension1;
- private String dimension2;
- private String dimension3;
- private String externalSystem;
- private Timestamp createDate;
- private String createUserId;
- private Timestamp updateDate;
- private String updateUserId;
- private String recordState;
+ private ItemOption mapResultSetToItemOptionDetails(ResultSet resultSet) throws SQLException {
+ ItemOption itemOption = new ItemOption();
- // Getters and Setters for all fields
+ itemOption.setItemId(resultSet.getString("ITEM_ID"));
+ itemOption.setLevelCode(resultSet.getString("LEVEL_CODE"));
+ itemOption.setLevelValue(resultSet.getString("LEVEL_VALUE"));
+ itemOption.setItemAvailabilityCode(resultSet.getString("ITEM_AVAILABILITY_CODE"));
+ itemOption.setTaxGroupId(resultSet.getString("TAX_GROUP_ID"));
+ itemOption.setVendor(resultSet.getString("VENDOR"));
+ itemOption.setSeasonCode(resultSet.getString("SEASON_CODE"));
+ itemOption.setCreateDate(resultSet.getDate("CREATE_DATE"));
+ itemOption.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
+ itemOption.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
+ itemOption.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
- public Long getOrganizationId() {
- return organizationId;
- }
-
- public void setOrganizationId(Long organizationId) {
- this.organizationId = organizationId;
- }
-
- public String getItemId() {
- return itemId;
- }
-
- public void setItemId(String itemId) {
- this.itemId = itemId;
- }
-
- public String getOrgCode() {
- return orgCode;
- }
-
- public void setOrgCode(String orgCode) {
- this.orgCode = orgCode;
- }
-
- public String getOrgValue() {
- return orgValue;
- }
-
- public void setOrgValue(String orgValue) {
- this.orgValue = orgValue;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getMerchLevel1() {
- return merchLevel1;
- }
-
- public void setMerchLevel1(String merchLevel1) {
- this.merchLevel1 = merchLevel1;
- }
-
- public String getMerchLevel2() {
- return merchLevel2;
- }
-
- public void setMerchLevel2(String merchLevel2) {
- this.merchLevel2 = merchLevel2;
- }
-
- public String getMerchLevel3() {
- return merchLevel3;
- }
-
- public void setMerchLevel3(String merchLevel3) {
- this.merchLevel3 = merchLevel3;
- }
-
- public String getMerchLevel4() {
- return merchLevel4;
- }
-
- public void setMerchLevel4(String merchLevel4) {
- this.merchLevel4 = merchLevel4;
- }
-
- public Integer getListPrice() {
- return listPrice;
- }
-
- public void setListPrice(Integer listPrice) {
- this.listPrice = listPrice;
- }
-
- public Integer getMeasureReqFlag() {
- return measureReqFlag;
- }
-
- public void setMeasureReqFlag(Integer measureReqFlag) {
- this.measureReqFlag = measureReqFlag;
- }
-
- public String getItemLevelCode() {
- return itemLevelCode;
- }
-
- public void setItemLevelCode(String itemLevelCode) {
- this.itemLevelCode = itemLevelCode;
- }
-
- public String getParentItemId() {
- return parentItemId;
- }
-
- public void setParentItemId(String parentItemId) {
- this.parentItemId = parentItemId;
- }
-
- public Integer getNotInventoriedFlag() {
- return notInventoriedFlag;
- }
-
- public void setNotInventoriedFlag(Integer notInventoriedFlag) {
- this.notInventoriedFlag = notInventoriedFlag;
- }
-
- public Integer getSerializedItemFlag() {
- return serializedItemFlag;
- }
-
- public void setSerializedItemFlag(Integer serializedItemFlag) {
- this.serializedItemFlag = serializedItemFlag;
- }
-
- public String getItemTypeCode() {
- return itemTypeCode;
- }
-
- public void setItemTypeCode(String itemTypeCode) {
- this.itemTypeCode = itemTypeCode;
- }
-
- public String getDtvClassName() {
- return dtvClassName;
- }
-
- public void setDtvClassName(String dtvClassName) {
- this.dtvClassName = dtvClassName;
- }
-
- public String getDimensionSystem() {
- return dimensionSystem;
- }
-
- public void setDimensionSystem(String dimensionSystem) {
- this.dimensionSystem = dimensionSystem;
- }
-
- public Integer getDisallowMatrixDisplayFlag() {
- return disallowMatrixDisplayFlag;
- }
-
- public void setDisallowMatrixDisplayFlag(Integer disallowMatrixDisplayFlag) {
- this.disallowMatrixDisplayFlag = disallowMatrixDisplayFlag;
- }
-
- public String getItemMatrixColor() {
- return itemMatrixColor;
- }
-
- public void setItemMatrixColor(String itemMatrixColor) {
- this.itemMatrixColor = itemMatrixColor;
- }
-
- public String getDimension1() {
- return dimension1;
- }
-
- public void setDimension1(String dimension1) {
- this.dimension1 = dimension1;
- }
-
- public String getDimension2() {
- return dimension2;
- }
-
- public void setDimension2(String dimension2) {
- this.dimension2 = dimension2;
- }
-
- public String getDimension3() {
- return dimension3;
- }
-
- public void setDimension3(String dimension3) {
- this.dimension3 = dimension3;
- }
-
- public String getExternalSystem() {
- return externalSystem;
- }
-
- public void setExternalSystem(String externalSystem) {
- this.externalSystem = externalSystem;
- }
-
- public Timestamp getCreateDate() {
- return createDate;
- }
-
- public void setCreateDate(Timestamp createDate) {
- this.createDate = createDate;
- }
-
- public String getCreateUserId() {
- return createUserId;
- }
-
- public void setCreateUserId(String createUserId) {
- this.createUserId = createUserId;
- }
-
- public Timestamp getUpdateDate() {
- return updateDate;
- }
-
- public void setUpdateDate(Timestamp updateDate) {
- this.updateDate = updateDate;
- }
-
- public String getUpdateUserId() {
- return updateUserId;
- }
-
- public void setUpdateUserId(String updateUserId) {
- this.updateUserId = updateUserId;
- }
-
- public String getRecordState() {
- return recordState;
- }
-
- public void setRecordState(String recordState) {
- this.recordState = recordState;
- }
+ return itemOption;
}
-}
+
+ private ItemPrice mapResultSetToItemPriceDetails(ResultSet resultSet) throws SQLException {
+ ItemPrice itemPrices = new ItemPrice();
+
+ itemPrices.setItemId(resultSet.getString("ITEM_ID"));
+ itemPrices.setLevelCode(resultSet.getString("LEVEL_CODE"));
+ itemPrices.setLevelValue(resultSet.getString("LEVEL_VALUE"));
+ itemPrices.setItmPricePropertyCode(resultSet.getString("ITM_PRICE_PROPERTY_CODE"));
+ itemPrices.setEffectiveDate(resultSet.getDate("EFFECTIVE_DATE"));
+ itemPrices.setExpirationDate(resultSet.getDate("EXPIRATION_DATE"));
+ itemPrices.setPrice(resultSet.getDouble("PRICE"));
+ itemPrices.setPriceQty(resultSet.getDouble("PRICE_QTY"));
+ itemPrices.setExternalId(resultSet.getString("EXTERNAL_ID"));
+ itemPrices.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM"));
+ itemPrices.setCreateDate(resultSet.getDate("CREATE_DATE"));
+ itemPrices.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
+ itemPrices.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
+ itemPrices.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
+
+ return itemPrices;
+ }
+
+ private ItemStock mapResultSetToItemStockDetails(ResultSet resultSet) throws SQLException {
+ ItemStock itemStock = new ItemStock();
+
+ itemStock.setOrganizationId(resultSet.getString("ORGANIZATION_ID"));
+ itemStock.setRtlLocId(resultSet.getString("RTL_LOC_ID"));
+ itemStock.setInvLocationId(resultSet.getString("INV_LOCATION_ID"));
+ itemStock.setBucketId(resultSet.getString("BUCKET_ID"));
+ itemStock.setItemId(resultSet.getString("ITEM_ID"));
+ itemStock.setUnitCount(resultSet.getInt("UNITCOUNT"));
+ itemStock.setInventoryValue(resultSet.getDouble("INVENTORY_VALUE"));
+ itemStock.setCreateDate(resultSet.getDate("CREATE_DATE"));
+ itemStock.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
+ itemStock.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
+ itemStock.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
+
+ return itemStock;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/StoreService.java b/src/main/java/com/example/services/StoreService.java
index 555e9d5..26c888a 100644
--- a/src/main/java/com/example/services/StoreService.java
+++ b/src/main/java/com/example/services/StoreService.java
@@ -1,7 +1,11 @@
package com.example.services;
+import com.example.services.store.*;
+import com.example.services.xadmin.log.XadminLog;
+
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
@@ -10,6 +14,7 @@ import javax.ws.rs.core.Response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -20,35 +25,67 @@ import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
@Path("/stores")
public class StoreService {
- private static List cachedStoreList;
+ private static final Logger logger = LoggerFactory.getLogger(StoreService.class);
+
+ private static List cachedStoreList;
private static final Lock cacheLock = new ReentrantLock();
+ /**
+ * Retrieves a store by its ID.
+ *
+ * @param storeId the ID of the store to retrieve
+ * @return a response containing the store information in JSON format
+ */
@GET
- @Path("/get")
+ @Path("/{storeId}")
@Produces(MediaType.APPLICATION_JSON)
- public Response getStoreById(@QueryParam("storeId") String storeId) {
+ public Response getStoreById(@PathParam("storeId") String storeId) {
if (storeId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
}
- DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
- // IASPDI com02 / B1Xto9pAbtBCOxuecG7W
- // MASPDI com02 /
- try (DatabaseConnectionDS databaseConnection = new DatabaseConnectionDS("com02", "B1Xto9pAbtBCOxuecG7W")) {
- String query = "SELECT id_structure,nom,'10.100.0.18' AS ip, tel1 AS telephone FROM structure WHERE id_structure = ?" ;
+ try (DatabaseConnectDOTSOFT databaseConnection = new DatabaseConnectDOTSOFT("com02")) {
+ String query = "SELECT st.id_structure," +
+ " TRIM(st.nom) as nom," +
+ " st.tel1 as telephone," +
+ " st.enseigne," +
+ " 'https://mp4.ikksgroup.com/photos/' || CASE WHEN metabp.id_photo_principale IS NOT NULL THEN mpprinc.url || TO_CHAR (metabp.id_photo_principale) " + "ELSE '0/0' END || '-small.JPG' as photoLink," +
+ " TRIM(pp.nom) AS pays, " +
+ " (" +
+ " SELECT" +
+ " NVL(STRAGG(hsc2.id_caisse || '|' || hsc2.ip),'0|0.0.0.0')" +
+ " FROM" +
+ " com02.HOTLINE_STRUCTURE_CAISSE hsc2" +
+ " WHERE" +
+ " hsc2.id_structure = st.id_structure" +
+ " AND hsc2.id_caisse BETWEEN 20 AND 39) AS caisses," +
+ " REPLACE(REPLACE(TRIM(st.adresse1), chr(10), ''), chr(13), '') AS adresse," +
+ " axs.date_stock as date_migration" +
+ " FROM COM02.structure st" +
+ " JOIN com02.PARAM_PAYS pp ON pp.id_pays = st.id_pays" +
+ " LEFT OUTER JOIN mobretail.mp_etab_param metabp ON metabp.id_etab = st.id_structure" +
+ " LEFT OUTER JOIN mobretail.mr_photo mpprinc ON mpprinc.id_photo = metabp.id_photo_principale" +
+ " LEFT OUTER JOIN omni.ASPD_XSTO_STRUCTURE axs ON st.ID_STRUCTURE = axs.ID_STRUCTURE " +
+ " WHERE st.id_structure = ?";
+ logger.info(query);
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
statement.setString(1, storeId);
try (ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
- store store = mapResultSetTostore(resultSet);
-
+ Store store = mapResultSetTostore(resultSet);
+
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(store);
+
return Response.ok(jsonResponse).build();
} else {
return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No store found\"}").build();
@@ -60,22 +97,44 @@ public class StoreService {
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
- e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
+ e.printStackTrace(); // Handle exceptions correctly in a production environment
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
+ /**
+ * Sets cachedStoreList to null, forcing a reload of stores from the database on the next call to /stores.
+ *
+ * @return A response indicating success
+ */
+ @GET
+ @Path("/reload")
+ public Response reloadStores() {
+ cacheLock.lock();
+ try {
+ cachedStoreList = null;
+ } finally {
+ cacheLock.unlock();
+ }
+
+ return Response.ok("{\"status\":\"Cache cleared\"}").build();
+ }
+
+ /**
+ * Retrieves all stores from the database and returns them as a JSON response.
+ *
+ * @return A JSON response containing the list of stores
+ */
@GET
- @Path("/getAll")
@Produces(MediaType.APPLICATION_JSON)
public Response getAllStores() {
if (cachedStoreList == null) {
- // Utilisation d'un verrou pour éviter que plusieurs requêtes déclenchent la récupération simultanée
+ // Use of a lock to prevent multiple requests from triggering simultaneous retrieval
cacheLock.lock();
try {
- // Vérification à nouveau après avoir acquis le verrou
+ // Check again after acquiring the lock
if (cachedStoreList == null) {
- // Récupérer depuis la base de données seulement si la liste n'est pas en cache
+ // Retrieve from database only if list is not cached
cachedStoreList = retrieveStoresFromDatabase();
}
} finally {
@@ -83,38 +142,58 @@ public class StoreService {
}
}
- if (!cachedStoreList.isEmpty()) {
- ObjectMapper objectMapper = new ObjectMapper();
- String jsonResponse;
- try {
- jsonResponse = objectMapper.writeValueAsString(cachedStoreList);
- return Response.ok(jsonResponse).build();
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
- }
- } else {
- return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No stores found\"}").build();
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse;
+ try {
+ jsonResponse = objectMapper.writeValueAsString(cachedStoreList);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
- private List retrieveStoresFromDatabase() {
- DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
+ /**
+ * Retrieves stores from the database.
+ *
+ * @return a list of stores retrieved from the database
+ */
+ private List retrieveStoresFromDatabase() {
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
- try (DatabaseConnectionDS databaseConnection = new DatabaseConnectionDS("com02", "B1Xto9pAbtBCOxuecG7W")) {
- String query = "SELECT st.id_structure, TRIM(st.nom) as nom, '10.100.0.18' AS ip, " +
- "st.tel1 AS telephone " +
- "FROM COM02.STRUCTURE st " +
- "LEFT OUTER JOIN omni.ASPD_XSTO_STRUCTURE axs ON st.ID_STRUCTURE = axs.ID_STRUCTURE " +
- "WHERE st.id_structure < 50";
-
+ try (DatabaseConnectDOTSOFT databaseConnection = new DatabaseConnectDOTSOFT("com02")) {
+ String query = "SELECT st.id_structure," +
+ " TRIM(st.nom) as nom," +
+ " st.tel1 as telephone," +
+ " st.enseigne," +
+ " 'https://mp4.ikksgroup.com/photos/' || CASE WHEN metabp.id_photo_principale IS NOT NULL THEN mpprinc.url || TO_CHAR (metabp.id_photo_principale) " + "ELSE '0/0' END || '-small.JPG' as photoLink," +
+ " TRIM(pp.nom) AS pays, " +
+ " (" +
+ " SELECT" +
+ " NVL(STRAGG(hsc2.id_caisse || '|' || hsc2.ip),'0|0.0.0.0')" +
+ " FROM" +
+ " com02.HOTLINE_STRUCTURE_CAISSE hsc2" +
+ " WHERE" +
+ " hsc2.id_structure = st.id_structure" +
+ " AND hsc2.id_caisse BETWEEN 20 AND 39) AS caisses," +
+ " REPLACE(REPLACE(TRIM(st.adresse1), chr(10), ''), chr(13), '') AS adresse," +
+ " axs.date_stock as date_migration" +
+ " FROM COM02.structure st" +
+ " JOIN com02.PARAM_PAYS pp ON pp.id_pays = st.id_pays" +
+ " LEFT OUTER JOIN mobretail.mp_etab_param metabp ON metabp.id_etab = st.id_structure" +
+ " LEFT OUTER JOIN mobretail.mr_photo mpprinc ON mpprinc.id_photo = metabp.id_photo_principale" +
+ " LEFT OUTER JOIN omni.ASPD_XSTO_STRUCTURE axs ON st.ID_STRUCTURE = axs.ID_STRUCTURE" +
+ " WHERE axs.date_stock is not null AND st.ID_NIVEAU=4 AND st.STATUT=2 AND st.id_canal_distribution = 1 and st.magasin_demo = 0" +
+ " ORDER BY st.id_structure";
+
+ logger.info(query);
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query);
ResultSet resultSet = statement.executeQuery()) {
- List storeList = new ArrayList<>();
+ List storeList = new ArrayList<>();
while (resultSet.next()) {
- store store = mapResultSetTostore(resultSet);
+ Store store = mapResultSetTostore(resultSet);
storeList.add(store);
}
@@ -126,54 +205,722 @@ public class StoreService {
}
}
- private store mapResultSetTostore(ResultSet resultSet) throws SQLException {
- store store = new store();
+ @GET
+ @Path("/{storeId}/sequence")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getSequence(
+ @PathParam("storeId") Integer storeId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if(storeId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost,"dtv")) {
+
+ String query = "SELECT ORGANIZATION_ID, RTL_LOC_ID, WKSTN_ID, SEQUENCE_ID, SEQUENCE_MODE, SEQUENCE_NBR, CREATE_DATE, CREATE_USER_ID, UPDATE_DATE, UPDATE_USER_ID, RECORD_STATE "+
+ "FROM DTV.COM_SEQUENCE " +
+ "WHERE organization_id = 1 " +
+ "ORDER BY WKSTN_ID, SEQUENCE_ID";
+
+ logger.info(query);
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ ResultSet resultSet = statement.executeQuery();
+
+ List sequenceList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ StoreSequence sequence = mapResultSetToStoreSequence(resultSet);
+ sequenceList.add(sequence);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse;
+
+ try {
+ jsonResponse = objectMapper.writeValueAsString(sequenceList);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ }
+ }
+
+ @GET
+ @Path("/{storeId}/signature")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getSignature(
+ @PathParam("storeId") Integer storeId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if(storeId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost,"dtv")) {
+ String query = "SELECT ORGANIZATION_ID, RTL_LOC_ID, WKSTN_ID, SIGNATURE_ID, SIGNATURE_MODE, SIGNATURE_STRING, SIGNATURE_SOURCE, CREATE_DATE, CREATE_USER_ID, UPDATE_DATE, UPDATE_USER_ID, RECORD_STATE " +
+ "FROM DTV.COM_SIGNATURE " +
+ "WHERE organization_id = 1 " +
+ "ORDER BY WKSTN_ID";
+
+ logger.info(query);
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ ResultSet resultSet = statement.executeQuery();
+
+ List signatureList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ StoreSignature signature = mapResultSetToStoreSignature(resultSet);
+ signatureList.add(signature);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse;
+
+ try {
+ jsonResponse = objectMapper.writeValueAsString(signatureList);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ }
+ }
+
+ @GET
+ @Path("/{storeId}/version")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getVersion(
+ @PathParam("storeId") Integer storeId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if(storeId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost,"dtv")) {
+
+ String query = "SELECT ORGANIZATION_ID,SEQ,BASE_SCHEMA_VERSION,CUSTOMER_SCHEMA_VERSION,CUSTOMER,BASE_SCHEMA_DATE,CUSTOMER_SCHEMA_DATE, " +
+ "CREATE_DATE,CREATE_USER_ID,UPDATE_DATE,UPDATE_USER_ID " +
+ "FROM dtv.CTL_VERSION_HISTORY " +
+ "WHERE organization_id = 1 AND customer IS NOT NULL " +
+ "ORDER BY seq DESC";
+
+ logger.info(query);
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ ResultSet resultSet = statement.executeQuery();
+
+ List versionList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ StoreVersion version = mapResultSetToStoreVersion(resultSet);
+ versionList.add(version);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse;
+ try {
+ jsonResponse = objectMapper.writeValueAsString(versionList);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ }
+ }
+
+ @GET
+ @Path("/{storeId}/log")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getLog(
+ @PathParam("storeId") Integer storeId,
+ @QueryParam("dbHost") String dbHost,
+ @QueryParam("logDate") String logDate) {
+
+ if(storeId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
+ }
+
+ if (logDate == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"logDate parameter is required\"}").build();
+ }
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost,"dtv")) {
+ String query = "SELECT" +
+ " FROM_TZ(cel.CREATE_DATE, 'UTC') " +
+ " AT TIME ZONE " +
+ " CASE loc.COUNTRY " +
+ " WHEN 'CH' THEN 'Europe/Zurich' " +
+ " WHEN 'NL' THEN 'Europe/Amsterdam' " +
+ " WHEN 'MC' THEN 'Europe/Monaco' " +
+ " WHEN 'LU' THEN 'Europe/Luxembourg' " +
+ " WHEN 'ES' THEN 'Europe/Madrid' " +
+ " WHEN 'FR' THEN 'Europe/Paris' " +
+ " WHEN 'US' THEN 'America/New_York' " +
+ " WHEN 'GB' THEN 'Europe/London' " +
+ " WHEN 'BE' THEN 'Europe/Brussels' " +
+ " ELSE 'UTC' " +
+ " END " +
+ "AS CREATE_DATE, " +
+ "cel.CREATE_USER_ID, " +
+ "cel.BUSINESS_DATE, " +
+ "cel.RTL_LOC_ID, "+
+ "cel.RTL_LOC_ID || ' - ' || loc.STORE_NAME AS STORE_NAME, " +
+ "cel.WKSTN_ID, " +
+ "cel.LOG_LEVEL, " +
+ "cel.THREAD_NAME, " +
+ "cel.LOG_MESSAGE, " +
+ "CASE WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.app.preflight' THEN 'Pre-flight error' " +
+ " WHEN cel.LOGGER_CATEGORY LIKE 'dtv.xstore.dataloader%' THEN 'DataLoader' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.sysadmin.data.failover' THEN 'Data-failover' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.order.download.offline' THEN 'Order error' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.state.app.startup' THEN 'Xstore startup' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.state.app.shutdown' THEN 'Xstore shutdown' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.helpdesk.memory' THEN 'Application core' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.helpdesk' THEN 'Application core' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.sysadmin.data.repqueue.errors' THEN 'Replication errors' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.sysadmin.data.repqueue.nofails' THEN 'Replication errors' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.hardware.init' THEN 'Hardware init' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.sensitive-data.logging' THEN 'Sensitive data logging' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.uncaught' THEN 'Uncaught exception' " +
+ "ELSE cel.LOGGER_CATEGORY END as LOGGER_CATEGORY " +
+ "FROM dtv.CTL_EVENT_LOG cel " +
+ "JOIN dtv.LOC_RTL_LOC loc ON loc.RTL_LOC_ID = cel.RTL_LOC_ID " +
+ "WHERE cel.CREATE_DATE BETWEEN " +
+ "TO_TIMESTAMP(?, 'YYYYMMDD HH24:MI:SS') - INTERVAL '3' HOUR " +
+ "AND " +
+ "TO_TIMESTAMP(?, 'YYYYMMDD HH24:MI:SS') + INTERVAL '3' HOUR " +
+ "AND TO_CHAR(FROM_TZ(cel.CREATE_DATE, 'UTC') AT TIME ZONE " +
+ "CASE loc.COUNTRY " +
+ " WHEN 'CH' THEN 'Europe/Zurich' " +
+ " WHEN 'NL' THEN 'Europe/Amsterdam' " +
+ " WHEN 'MC' THEN 'Europe/Monaco' " +
+ " WHEN 'LU' THEN 'Europe/Luxembourg' " +
+ " WHEN 'ES' THEN 'Europe/Madrid' " +
+ " WHEN 'FR' THEN 'Europe/Paris' " +
+ " WHEN 'US' THEN 'America/New_York' " +
+ " WHEN 'GB' THEN 'Europe/London' " +
+ " WHEN 'BE' THEN 'Europe/Brussels' " +
+ " ELSE 'UTC' " +
+ "END, 'YYYYMMDD HH24:MI:SS') BETWEEN ? AND ? " +
+ "AND cel.ORGANIZATION_ID = 1 " +
+ "AND cel.RTL_LOC_ID = ? " +
+ "AND cel.THREAD_NAME IS NOT NULL " +
+ "ORDER BY cel.CREATE_DATE DESC";
+
+ logger.info(query);
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ statement.setString(1, logDate + " 00:00:00");
+ statement.setString(2, logDate + " 23:59:59");
+ statement.setString(3, logDate + " 00:00:00");
+ statement.setString(4, logDate + " 23:59:59");
+ statement.setInt(5, storeId);
+
+ ResultSet resultSet = statement.executeQuery();
+
+ List storeLogList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ XadminLog storeLog = mapResultSetToStoreLog(resultSet);
+ storeLogList.add(storeLog);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse;
+ try {
+ jsonResponse = objectMapper.writeValueAsString(storeLogList);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ }
+ }
+
+ public XadminLog mapResultSetToStoreLog(ResultSet resultSet) throws SQLException {
+ XadminLog xadminlog = new XadminLog();
+
+ xadminlog.setCreateDate(resultSet.getDate("CREATE_DATE"));
+ xadminlog.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
+ xadminlog.setBusinessDate(resultSet.getDate("BUSINESS_DATE"));
+ xadminlog.setRtlLocId(resultSet.getInt("RTL_LOC_ID"));
+ xadminlog.setStoreName(resultSet.getString("STORE_NAME"));
+ xadminlog.setWkstnId(resultSet.getInt("WKSTN_ID"));
+ xadminlog.setLogLevel(resultSet.getString("LOG_LEVEL"));
+ xadminlog.setThreadName(resultSet.getString("THREAD_NAME"));
+ xadminlog.setLogMessage(resultSet.getString("LOG_MESSAGE"));
+ xadminlog.setLoggerCategory(resultSet.getString("LOGGER_CATEGORY"));
+
+ return xadminlog;
+ }
+
+ /**
+ * Maps a ResultSet to a store object.
+ *
+ * @param resultSet the ResultSet containing the data to be mapped
+ * @return the store object with mapped data
+ * @throws SQLException if there is an error accessing the data from the ResultSet
+ */
+ private Store mapResultSetTostore(ResultSet resultSet) throws SQLException {
+ Store store = new Store();
store.setId_structure(resultSet.getInt("ID_STRUCTURE"));
store.setNom(resultSet.getString("NOM"));
- store.setIp(resultSet.getString("IP"));
store.setTelephone(resultSet.getString("TELEPHONE"));
+ store.setEnseigne(resultSet.getString("ENSEIGNE"));
+ store.setPhotoLink(resultSet.getString("PHOTOLINK"));
+ store.setPays(resultSet.getString("PAYS"));
+ store.setCaisses(resultSet.getString("CAISSES"));
+ store.setAdresse(resultSet.getString("ADRESSE"));
+ store.setDate_migration(resultSet.getDate("DATE_MIGRATION"));
return store;
}
- public class store {
- private Integer id_structure;
- private String nom;
- private String ip;
- private String telephone;
-
- public Integer getId_structure() {
- return id_structure;
+ @GET
+ @Path("/{storeId}/details")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getStoreDetails(
+ @PathParam("storeId") Integer storeId,
+ @QueryParam("dbHost") String dbHost) {
+
+ if (dbHost == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
+ }
+
+ if (storeId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build();
}
-
- public void setId_structure(Integer id_structure) {
- this.id_structure = id_structure;
- }
-
- public String getNom() {
- return nom;
- }
-
- public void setNom(String nom) {
- this.nom = nom;
- }
-
- public String getIp() {
- return ip;
- }
-
- public void setIp(String ip) {
- this.ip = ip;
- }
-
- public String getTelephone() {
- return telephone;
- }
-
- public void setTelephone(String telephone) {
- this.telephone = telephone;
+
+ try {
+ StoreDetails storeDetails = retrieveStoreDetails(dbHost,storeId);
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ String jsonResponse = objectMapper.writeValueAsString(storeDetails);
+ return Response.ok(jsonResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("{\"error\":\"Error converting StoreDetails to JSON\"}")
+ .build();
+ }
+ } catch (RuntimeException e) {
+ // Capture the RuntimeException to manage SQL errors
+ e.printStackTrace();
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"" + e.getMessage() + "\"}").build();
}
}
+
+ /**
+ * Retrieves storeDetails from the database.
+ *
+ * @param dbHost the host of the database
+ * @param storeId the ID of the store
+ * @param workstationId the ID of the workstation
+ * @return storeDetails
+ */
+ private StoreDetails retrieveStoreDetails(String dbHost, Integer storeId) {
+ DriverManager.setLoginTimeout(5);
+ StoreDetails storeDetails = new StoreDetails(); // Declare object outside try blocks
+
+ try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost,"dtv")) {
+ // get Pos list
+ String PosQuery = "SELECT cdr.RTL_LOC_ID, " +
+ "cdr.WKSTN_ID, " +
+ "cdr.IP_ADDRESS, " +
+ "cdr.BUSINESS_DATE, " +
+ "cdr.XSTORE_VERSION, " +
+ "cdr.PRIMARY_REGISTER_FLAG " +
+ "FROM dtv.ctl_device_registration cdr " +
+ "WHERE cdr.ORGANIZATION_ID = 1 " +
+ "ORDER BY cdr.PRIMARY_REGISTER_FLAG desc, cdr.WKSTN_ID";
+
+ logger.info(PosQuery);
+
+ try (PreparedStatement posStatement = databaseConnection.getConnection().prepareStatement(PosQuery)) {
+ try (ResultSet posResultSet = posStatement.executeQuery()) {
+ Integer posRtlLocId = 0;
+ Integer posWkstnId = 0;
+ String posIp = "";
+ String posVersion = "";
+ Date posBusinessDate = null;
+ Integer primaryRegisterFlag = 0;
+
+ while (posResultSet.next()) {
+ posRtlLocId = posResultSet.getInt("RTL_LOC_ID");
+ posWkstnId = posResultSet.getInt("WKSTN_ID");
+ posIp = posResultSet.getString("IP_ADDRESS");
+ posVersion = posResultSet.getString("XSTORE_VERSION");
+ posBusinessDate = posResultSet.getDate("BUSINESS_DATE");
+ primaryRegisterFlag = posResultSet.getInt("PRIMARY_REGISTER_FLAG");
+
+ StorePos pos = new StorePos();
+
+ // add new pos object
+ storeDetails.getPos().add(pos);
+ pos.setWorkstationId(posWkstnId);
+ pos.setIp(posIp);
+ pos.setVersion(posVersion);
+ pos.setBusinessDate(posBusinessDate);
+ pos.setPrimaryRegister(primaryRegisterFlag);
+ pos.setFatalError(1);
+
+ // retrieve all pos details only on database of the master pos
+ retrieveStorePosDetails(databaseConnection, posRtlLocId, posWkstnId, posBusinessDate, pos);
+
+ /* if (posResultSet.getString("IP_ADDRESS").equals(dbHost)) {
+ retrieveStorePosDetails(databaseConnection, posRtlLocId, posWkstnId, posBusinessDate, pos);
+ } else {
+ try (DatabaseConnectXSTORE newDatabaseConnection = new DatabaseConnectXSTORE(posIp,"dtv")) {
+ retrieveStorePosDetails(newDatabaseConnection, posRtlLocId, posWkstnId, posBusinessDate, pos);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ // Handle exceptions correctly in a production environment
+ }
+ } */
+ }
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ // Handle exceptions correctly in a production environment
+ }
+
+ try (DatabaseConnectDOTSOFT databaseConnectionDS = new DatabaseConnectDOTSOFT("com02")) {
+ // Store section
+ String storeQuery = "SELECT st.id_structure," +
+ " TRIM(st.nom) as nom," +
+ " st.tel1 as telephone," +
+ " st.enseigne," +
+ " 'https://mp4.ikksgroup.com/photos/' || CASE WHEN metabp.id_photo_principale IS NOT NULL THEN mpprinc.url || TO_CHAR (metabp.id_photo_principale) " + "ELSE '0/0' END || '-small.JPG' as photoLink," +
+ " TRIM(pp.nom) AS pays, " +
+ " (" +
+ " SELECT" +
+ " NVL(STRAGG(hsc2.id_caisse || '|' || hsc2.ip),'0|0.0.0.0')" +
+ " FROM" +
+ " com02.HOTLINE_STRUCTURE_CAISSE hsc2" +
+ " WHERE" +
+ " hsc2.id_structure = st.id_structure" +
+ " AND hsc2.id_caisse BETWEEN 20 AND 39) AS caisses," +
+ " REPLACE(REPLACE(TRIM(st.adresse1), chr(10), ''), chr(13), '') AS adresse," +
+ " axs.date_stock as date_migration" +
+ " FROM COM02.structure st" +
+ " JOIN com02.PARAM_PAYS pp ON pp.id_pays = st.id_pays" +
+ " LEFT OUTER JOIN mobretail.mp_etab_param metabp ON metabp.id_etab = st.id_structure" +
+ " LEFT OUTER JOIN mobretail.mr_photo mpprinc ON mpprinc.id_photo = metabp.id_photo_principale" +
+ " LEFT OUTER JOIN omni.ASPD_XSTO_STRUCTURE axs ON st.ID_STRUCTURE = axs.ID_STRUCTURE " +
+ " WHERE st.id_structure = ?";
+
+ logger.info(storeQuery);
+ try (PreparedStatement storeStatement = databaseConnectionDS.getConnection().prepareStatement(storeQuery)) {
+ storeStatement.setInt(1, storeId); // Set the value of the parameter
+
+ try (ResultSet storeResultSet = storeStatement.executeQuery()) {
+ if (storeResultSet.next()) {
+ Store store = mapResultSetToStore(storeResultSet);
+ storeDetails.setStore(store);
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ }
+
+ // Transaction section
+ String boTransactionQuery =
+ "SELECT COUNT(*) AS backOfficeTransactions, " +
+ " MIN(cf.fdate_integration) AS minBackOfficeTransactionDate, " +
+ " MAX(cf.fdate_integration) AS maxBackOfficeTransactionDate " +
+ "FROM com02.client_facture cf " +
+ "WHERE cf.id_structure = ? " +
+ " AND cf.id_caisse = ? " +
+ " AND TRUNC(cf.fdate) = ? " +
+ " AND cf.version_info = 'XSTORE'";
+
+ for (StorePos pos : storeDetails.getPos()) {
+ logger.info(boTransactionQuery);
+ try (PreparedStatement boTransactionStatement = databaseConnectionDS.getConnection().prepareStatement(boTransactionQuery)) {
+ boTransactionStatement.setInt(1, storeId);
+ boTransactionStatement.setInt(2, pos.getWorkstationId());
+ boTransactionStatement.setDate(3, pos.getBusinessDate());
+
+ try (ResultSet boTransactionResultSet = boTransactionStatement.executeQuery()) {
+ if (boTransactionResultSet.next()) {
+ BackOfficeTransaction boTransaction = mapResultSetToBoTransaction(boTransactionResultSet);
+ pos.setBoTransaction(boTransaction);
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ } catch (SQLException e) {
+ // Handle exception
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ // Handle exceptions correctly in a production environment
+ }
+
+ // Return the complete StoreDetails object
+ return storeDetails;
+ }
+
+ private void retrieveStorePosDetails(DatabaseConnectXSTORE databaseConnection, Integer storeId, Integer workstationId, Date businessDate, StorePos pos) throws SQLException {
+ // Replication section
+ String replicationQuery = "SELECT COUNT(*) AS pendingReplications, " +
+ "MIN(crq.CREATE_DATE) AS minPendingReplicationDate, " +
+ "MAX(crq.CREATE_DATE) AS maxPendingReplicationDate " +
+ "FROM repqueue.CTL_REPLICATION_QUEUE crq " +
+ "WHERE crq.organization_id = 1 AND crq.RTL_LOC_ID = ? and crq.WKSTN_ID = ?";
+
+ logger.info(replicationQuery);
+ try (PreparedStatement replicationStatement = databaseConnection.getConnection().prepareStatement(replicationQuery)) {
+ replicationStatement.setInt(1, storeId);
+ replicationStatement.setInt(2, workstationId);
+
+ try (ResultSet replicationResultSet = replicationStatement.executeQuery()) {
+ if (replicationResultSet.next()) {
+ PosReplication posReplication = mapResultSetToPosReplication(replicationResultSet);
+ pos.setReplication(posReplication);
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ }
+
+ // opening transation section
+ String openingQuery =
+ "SELECT MIN(lsj.TIME_STAMP) AS minOpeningDate " +
+ "FROM loc_state_journal lsj " +
+ "WHERE lsj.TIME_STAMP BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE + 1) " +
+ "AND lsj.ORGANIZATION_ID = 1 " +
+ "AND lsj.RTL_LOC_ID = ? " +
+ "AND lsj.WKSTN_ID = ? " +
+ "AND lsj.STATUS_TYPCODE = 'WKSTN_STATE' " +
+ "AND lsj.STRING_VALUE = 'OPEN'";
+
+ logger.info(openingQuery);
+ try (PreparedStatement openingStatement = databaseConnection.getConnection().prepareStatement(openingQuery)) {
+ openingStatement.setInt(1, storeId);
+ openingStatement.setInt(2, workstationId);
+
+ try (ResultSet openingResultSet = openingStatement.executeQuery()) {
+ if (openingResultSet.next()) {
+ pos.setOpeningDate(openingResultSet.getTimestamp("minOpeningDate"));
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ }
+
+ // closing transation section
+ String closingQuery =
+ "SELECT MAX(lsj.TIME_STAMP) AS maxClosingDate " +
+ "FROM loc_state_journal lsj " +
+ "WHERE lsj.TIME_STAMP BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE + 1) " +
+ "AND lsj.ORGANIZATION_ID = 1 " +
+ "AND lsj.RTL_LOC_ID = ? " +
+ "AND lsj.WKSTN_ID = ? " +
+ "AND lsj.STATUS_TYPCODE = 'WKSTN_STATE' " +
+ "AND lsj.STRING_VALUE = 'CLOSED'";
+
+ logger.info(closingQuery);
+ try (PreparedStatement closingStatement = databaseConnection.getConnection().prepareStatement(closingQuery)) {
+ closingStatement.setInt(1, storeId);
+ closingStatement.setInt(2, workstationId);
+
+ try (ResultSet closingResultSet = closingStatement.executeQuery()) {
+ if (closingResultSet.next()) {
+ pos.setClosingDate(closingResultSet.getTimestamp("maxClosingDate"));
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ }
+
+ // sale transation section
+ String saleTransactionQuery =
+ "SELECT COUNT(*) AS counter, " +
+ "MIN(tt.END_DATETIME) AS minDate, " +
+ "MAX(tt.END_DATETIME) AS maxDate " +
+ "FROM dtv.trn_trans tt " +
+ "WHERE tt.ORGANIZATION_ID = 1 "+
+ "AND tt.RTL_LOC_ID = ? " +
+ "AND tt.BUSINESS_DATE = ? " +
+ "AND tt.WKSTN_ID = ? " +
+ "AND tt.trans_TYPCODE = 'RETAIL_SALE' " +
+ "AND tt.TRANS_STATCODE = 'COMPLETE'";
+
+ logger.info(saleTransactionQuery);
+ try (PreparedStatement saleTransactionStatement = databaseConnection.getConnection().prepareStatement(saleTransactionQuery)) {
+ saleTransactionStatement.setInt(1, storeId);
+ saleTransactionStatement.setDate(2, pos.getBusinessDate());
+ saleTransactionStatement.setInt(3, workstationId);
+
+ try (ResultSet saleTransactionResultSet = saleTransactionStatement.executeQuery()) {
+ if (saleTransactionResultSet.next()) {
+ XstoreTransaction saleTransaction = mapResultSetToSaleTransaction(saleTransactionResultSet);
+ pos.setSaleTransaction(saleTransaction);
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ }
+
+ // sale transation section
+ String logQuery = "SELECT COUNT(*) as counter " +
+ "FROM dtv.CTL_EVENT_LOG cel " +
+ "WHERE cel.CREATE_DATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE + 1) " +
+ "AND cel.ORGANIZATION_ID = 1 " +
+ "AND cel.RTL_LOC_ID = ? " +
+ "AND cel.WKSTN_ID = ? " +
+ "AND cel.LOG_LEVEL = 'FATAL'";
+
+ logger.info(logQuery);
+ try (PreparedStatement logStatement = databaseConnection.getConnection().prepareStatement(logQuery)) {
+ logStatement.setInt(1, storeId);
+ logStatement.setInt(2, workstationId);
+
+ try (ResultSet logResultSet = logStatement.executeQuery()) {
+ if (logResultSet.next()) {
+ pos.setFatalError(logResultSet.getInt("counter"));
+ } else {
+ // Adjust to the desired behavior if no results are found
+ }
+ }
+ }
+ }
+
+ private Store mapResultSetToStore(ResultSet resultSet) throws SQLException {
+ Integer id_structure = resultSet.getInt("id_structure");
+ String nom = resultSet.getString("nom");
+ String telephone = resultSet.getString("telephone");
+ String photoLink = resultSet.getString("photoLink");
+ String enseigne = resultSet.getString("enseigne");
+ String pays = resultSet.getString("pays");
+ String caisses = resultSet.getString("caisses");
+ String adresse = resultSet.getString("adresse");
+ Date date_migration = resultSet.getDate("date_migration");
+
+ return new Store(id_structure, nom, telephone, photoLink, enseigne, pays, caisses, adresse, date_migration);
+ }
+
+ private PosReplication mapResultSetToPosReplication(ResultSet resultSet) throws SQLException {
+ int pendingReplications = resultSet.getInt("pendingReplications");
+ Date minPendingReplicationDate = resultSet.getDate("minPendingReplicationDate");
+ Date maxPendingReplicationDate = resultSet.getDate("maxPendingReplicationDate");
+
+ return new PosReplication(pendingReplications, minPendingReplicationDate, maxPendingReplicationDate);
+ }
+
+ private XstoreTransaction mapResultSetToSaleTransaction(ResultSet resultSet) throws SQLException {
+ int count = resultSet.getInt("counter");
+ Date minDate = resultSet.getDate("minDate");
+ Date maxDate = resultSet.getDate("maxDate");
+
+ return new XstoreTransaction(count, minDate, maxDate);
+ }
+
+ private BackOfficeTransaction mapResultSetToBoTransaction(ResultSet resultSet) throws SQLException {
+ int backofficeTransactions = resultSet.getInt("backOfficeTransactions");
+ Date minBackofficeTransactionDate = resultSet.getDate("minBackOfficeTransactionDate");
+ Date maxBackofficeTransactionDate = resultSet.getDate("maxBackOfficeTransactionDate");
+
+ return new BackOfficeTransaction(backofficeTransactions, minBackofficeTransactionDate, maxBackofficeTransactionDate);
+ }
+
+ private StoreVersion mapResultSetToStoreVersion(ResultSet resultSet) throws SQLException {
+ long organizationId = resultSet.getLong("ORGANIZATION_ID");
+ long seq = resultSet.getLong("SEQ");
+ String baseSchemaVersion = resultSet.getString("BASE_SCHEMA_VERSION");
+ String customerSchemaVersion = resultSet.getString("CUSTOMER_SCHEMA_VERSION");
+ String customer = resultSet.getString("CUSTOMER");
+ Date baseSchemaDate = resultSet.getDate("BASE_SCHEMA_DATE");
+ Date customerSchemaDate = resultSet.getDate("CUSTOMER_SCHEMA_DATE");
+ Date createDate= (resultSet.getDate("CREATE_DATE"));
+ String createUserId = resultSet.getString("CREATE_USER_ID");
+ Date updateDate = (resultSet.getDate("UPDATE_DATE"));
+ String updateUserId =(resultSet.getString("UPDATE_USER_ID"));
+
+ return new StoreVersion( organizationId, seq, baseSchemaVersion, customerSchemaVersion, customer, baseSchemaDate, customerSchemaDate, createDate, createUserId, updateDate, updateUserId);
+ }
+
+ private StoreSequence mapResultSetToStoreSequence(ResultSet resultSet) throws SQLException {
+ long organizationId = resultSet.getLong("ORGANIZATION_ID");
+ long rtl_loc_id = resultSet.getLong("RTL_LOC_ID");
+ long wkstnId = resultSet.getLong("WKSTN_ID");
+ String sequenceId = resultSet.getString("SEQUENCE_ID");
+ String sequenceMode = resultSet.getString("SEQUENCE_MODE");
+ Long sequenceNbr = resultSet.getLong("SEQUENCE_NBR");
+ Date createDate = resultSet.getDate("CREATE_DATE");
+ String createUserId = resultSet.getString("CREATE_USER_ID");
+ Date updateDate = resultSet.getDate("UPDATE_DATE");
+ String updateUserId = resultSet.getString("UPDATE_USER_ID");
+ String recordState = resultSet.getString("RECORD_STATE");
+
+ return new StoreSequence(organizationId, rtl_loc_id, wkstnId, sequenceId, sequenceMode, sequenceNbr, createDate, createUserId, updateDate, updateUserId, recordState);
+ }
+
+ private StoreSignature mapResultSetToStoreSignature(ResultSet resultSet) throws SQLException {
+ Long organizationId = resultSet.getLong("ORGANIZATION_ID");
+ Long rtlLocId = resultSet.getLong("RTL_LOC_ID");
+ Long wkstnId = resultSet.getLong("WKSTN_ID");
+ String signatureId = resultSet.getString("SIGNATURE_ID");
+ String signatureMode = resultSet.getString("SIGNATURE_MODE");
+ String signatureString = resultSet.getString("SIGNATURE_STRING");
+ String signatureSource = resultSet.getString("SIGNATURE_SOURCE");
+ Date createDate = resultSet.getDate("CREATE_DATE");
+ String createUserId = resultSet.getString("CREATE_USER_ID");
+ Date updateDate = resultSet.getDate("UPDATE_DATE");
+ String updateUserId = resultSet.getString("UPDATE_USER_ID");
+ String recordState = resultSet.getString("RECORD_STATE");
+
+ return new StoreSignature(organizationId, rtlLocId, wkstnId, signatureId, signatureMode, signatureString, signatureSource, createDate, createUserId, updateDate, updateUserId, recordState);
+ }
}
diff --git a/src/main/java/com/example/services/XadminService.java b/src/main/java/com/example/services/XadminService.java
new file mode 100644
index 0000000..049eb98
--- /dev/null
+++ b/src/main/java/com/example/services/XadminService.java
@@ -0,0 +1,170 @@
+package com.example.services;
+
+import com.example.services.xadmin.log.XadminLog;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Path("/xadmin")
+public class XadminService {
+ private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectXADMIN.class);
+
+ @GET
+ @Path("/log")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getLogByStoreId(@QueryParam("storeId") Integer storeId,
+ @QueryParam("wkstnId") Integer wkstnId,
+ @QueryParam("beginDate") String beginDate,
+ @QueryParam("endDate") String endDate,
+ @QueryParam("searchText") String searchText) {
+
+ if (beginDate == null || endDate == null) {
+ return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"BeginDate and EndDate parameters are required\"}").build();
+ }
+
+ DriverManager.setLoginTimeout(5); // Set timeout to 5 seconds
+
+ try (DatabaseConnectXADMIN databaseConnection = new DatabaseConnectXADMIN("dtv")) {
+ String query = "SELECT" +
+ " FROM_TZ(cel.CREATE_DATE, 'UTC') " +
+ " AT TIME ZONE " +
+ " CASE loc.COUNTRY " +
+ " WHEN 'CH' THEN 'Europe/Zurich' " +
+ " WHEN 'NL' THEN 'Europe/Amsterdam' " +
+ " WHEN 'MC' THEN 'Europe/Monaco' " +
+ " WHEN 'LU' THEN 'Europe/Luxembourg' " +
+ " WHEN 'ES' THEN 'Europe/Madrid' " +
+ " WHEN 'FR' THEN 'Europe/Paris' " +
+ " WHEN 'US' THEN 'America/New_York' " +
+ " WHEN 'GB' THEN 'Europe/London' " +
+ " WHEN 'BE' THEN 'Europe/Brussels' " +
+ " ELSE 'UTC' " +
+ " END " +
+ "AS CREATE_DATE, " +
+ "cel.CREATE_USER_ID, " +
+ "cel.BUSINESS_DATE, " +
+ "cel.RTL_LOC_ID, " +
+ "cel.RTL_LOC_ID || ' - ' || loc.STORE_NAME AS STORE_NAME, " +
+ "cel.WKSTN_ID, " +
+ "cel.LOG_LEVEL, " +
+ "cel.THREAD_NAME, " +
+ "cel.LOG_MESSAGE, " +
+ "CASE WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.app.preflight' THEN 'Pre-flight error' " +
+ " WHEN cel.LOGGER_CATEGORY LIKE 'dtv.xstore.dataloader%' THEN 'DataLoader' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.sysadmin.data.failover' THEN 'Data-failover' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.order.download.offline' THEN 'Order error' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.state.app.startup' THEN 'Xstore startup' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.state.app.shutdown' THEN 'Xstore shutdown' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.helpdesk.memory' THEN 'Application core' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.helpdesk' THEN 'Application core' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.sysadmin.data.repqueue.errors' THEN 'Replication errors' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.sysadmin.data.repqueue.nofails' THEN 'Replication errors' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.hardware.init' THEN 'Hardware init' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.sensitive-data.logging' THEN 'Sensitive data logging' " +
+ " WHEN cel.LOGGER_CATEGORY = 'dtv.xstore.uncaught' THEN 'Uncaught exception' " +
+ "ELSE cel.LOGGER_CATEGORY END as LOGGER_CATEGORY " +
+ "FROM dtv.CTL_EVENT_LOG cel " +
+ "JOIN dtv.LOC_RTL_LOC loc ON loc.RTL_LOC_ID = cel.RTL_LOC_ID " +
+ "WHERE cel.CREATE_DATE BETWEEN " +
+ "TO_TIMESTAMP(?, 'YYYYMMDD HH24:MI:SS') - INTERVAL '3' HOUR " +
+ "AND " +
+ "TO_TIMESTAMP(?, 'YYYYMMDD HH24:MI:SS') + INTERVAL '3' HOUR " +
+ "AND TO_CHAR(FROM_TZ(cel.CREATE_DATE, 'UTC') AT TIME ZONE " +
+ "CASE loc.COUNTRY " +
+ " WHEN 'CH' THEN 'Europe/Zurich' " +
+ " WHEN 'NL' THEN 'Europe/Amsterdam' " +
+ " WHEN 'MC' THEN 'Europe/Monaco' " +
+ " WHEN 'LU' THEN 'Europe/Luxembourg' " +
+ " WHEN 'ES' THEN 'Europe/Madrid' " +
+ " WHEN 'FR' THEN 'Europe/Paris' " +
+ " WHEN 'US' THEN 'America/New_York' " +
+ " WHEN 'GB' THEN 'Europe/London' " +
+ " WHEN 'BE' THEN 'Europe/Brussels' " +
+ " ELSE 'UTC' " +
+ "END, 'YYYYMMDD HH24:MI:SS') BETWEEN ? AND ? " +
+ "AND cel.ORGANIZATION_ID = 1 " +
+ (storeId != null ? "AND cel.RTL_LOC_ID = ? " : "") +
+ (wkstnId != null ? "AND cel.WKSTN_ID = ? " : "") +
+ (searchText != null ? "AND LOWER(cel.LOG_MESSAGE) LIKE ? " : "") +
+ "AND cel.THREAD_NAME IS NOT NULL " +
+ "ORDER BY cel.CREATE_DATE DESC";
+
+ logger.info(query);
+ try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
+ statement.setString(1, beginDate);
+ statement.setString(2, endDate + " 23:59:59");
+ statement.setString(3, beginDate);
+ statement.setString(4, endDate + " 23:59:59");
+
+ Integer indexParam = 5;
+
+ if (storeId != null) {
+ statement.setInt( indexParam++, storeId);
+ }
+
+ if (wkstnId != null) {
+ statement.setInt(indexParam++,wkstnId);
+ }
+
+ if(searchText != null) {
+ statement.setString(indexParam++, "%" + searchText.toLowerCase() + "%");
+ }
+
+ try (ResultSet resultSet = statement.executeQuery()) {
+ List xadminLogList = new ArrayList<>();
+
+ while (resultSet.next()) {
+ XadminLog xadminLog = mapResultSetToXadminLog(resultSet);
+ xadminLogList.add(xadminLog);
+ }
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String jsonResponse = objectMapper.writeValueAsString(xadminLogList);
+
+ return Response.ok(jsonResponse).build();
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
+ } catch (JsonProcessingException e) {
+ e.printStackTrace(); // Handle exceptions correctly in a production environment
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
+ }
+ }
+
+ public XadminLog mapResultSetToXadminLog(ResultSet resultSet) throws SQLException {
+ XadminLog xadminlog = new XadminLog();
+
+ xadminlog.setCreateDate(resultSet.getDate("CREATE_DATE"));
+ xadminlog.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
+ xadminlog.setBusinessDate(resultSet.getDate("BUSINESS_DATE"));
+ xadminlog.setRtlLocId(resultSet.getInt("RTL_LOC_ID"));
+ xadminlog.setStoreName(resultSet.getString("STORE_NAME"));
+ xadminlog.setWkstnId(resultSet.getInt("WKSTN_ID"));
+ xadminlog.setLogLevel(resultSet.getString("LOG_LEVEL"));
+ xadminlog.setThreadName(resultSet.getString("THREAD_NAME"));
+ xadminlog.setLogMessage(resultSet.getString("LOG_MESSAGE"));
+ xadminlog.setLoggerCategory(resultSet.getString("LOGGER_CATEGORY"));
+
+ return xadminlog;
+ }
+}
diff --git a/src/main/java/com/example/services/flux/bl/FluxBlNotSent.java b/src/main/java/com/example/services/flux/bl/FluxBlNotSent.java
new file mode 100644
index 0000000..d8f49e0
--- /dev/null
+++ b/src/main/java/com/example/services/flux/bl/FluxBlNotSent.java
@@ -0,0 +1,206 @@
+package com.example.services.flux.bl;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class FluxBlNotSent {
+ private Integer id_distrib;
+ private String libelle_dis;
+ private Integer id_structure;
+ private String nom_structure;
+ private String enseigne;
+ private String marque;
+ private String code_saison;
+ private String ref_r;
+ private String ref_rc;
+ private String ref_rct;
+ private String nom_produit;
+ private Integer id_produit;
+ private String code_externe;
+ private Integer id_bon_livraison;
+ private Date date_bl;
+ private Integer id_expediteur;
+ private String expediteur;
+ private String remarques;
+
+ // Default constructor
+ public FluxBlNotSent() {
+ // Default constructor implementation
+ }
+
+ // Constructor with parameters
+ public FluxBlNotSent(Integer idDistrib, String libelleDis, Integer idStructure, String nomStructure,
+ String enseigne, String marque, String codeSaison, String refR,
+ String refRc, String refRct, String nomProduit, Integer idProduit,
+ String codeExterne, Integer idBonLivraison, Date dateBl,
+ Integer idExpediteur, String expediteur, String remarques) {
+ this.id_distrib = idDistrib;
+ this.libelle_dis = libelleDis;
+ this.id_structure = idStructure;
+ this.nom_structure = nomStructure;
+ this.enseigne = enseigne;
+ this.marque = marque;
+ this.code_saison = codeSaison;
+ this.ref_r = refR;
+ this.ref_rc = refRc;
+ this.ref_rct = refRct;
+ this.nom_produit = nomProduit;
+ this.id_produit = idProduit;
+ this.code_externe = codeExterne;
+ this.id_bon_livraison = idBonLivraison;
+ this.date_bl = dateBl;
+ this.id_expediteur = idExpediteur;
+ this.expediteur = expediteur;
+ this.remarques = remarques;
+ }
+
+ // getters and setters
+ public Integer getIdDistrib() {
+ return id_distrib;
+ }
+
+ public void setIdDistrib(Integer idDistrib) {
+ this.id_distrib = idDistrib;
+ }
+
+ public String getLibelleDis() {
+ return id_distrib + " - " + libelle_dis;
+ }
+
+ public void setLibelleDis(String libelleDis) {
+ this.libelle_dis = libelleDis;
+ }
+
+ public Integer getIdStructure() {
+ return id_structure;
+ }
+
+ public void setIdStructure(Integer idStructure) {
+ this.id_structure = idStructure;
+ }
+
+ public String getNomStructure() {
+ return id_structure + " - " + nom_structure;
+ }
+
+ public void setNomStructure(String nom) {
+ this.nom_structure = nom;
+ }
+
+ public String getEnseigne() {
+ return enseigne;
+ }
+
+ public void setEnseigne(String enseigne) {
+ this.enseigne = enseigne;
+ }
+
+ public String getMarque() {
+ return marque;
+ }
+
+ public void setMarque(String marque) {
+ this.marque = marque;
+ }
+
+ public String getCodeSaison() {
+ return code_saison;
+ }
+
+ public void setCodeSaison(String codeSaison) {
+ this.code_saison = codeSaison;
+ }
+
+ public String getRefR() {
+ return ref_r;
+ }
+
+ public void setRefR(String refR) {
+ this.ref_r = refR;
+ }
+
+ public String getRefRc() {
+ return ref_rc;
+ }
+
+ public void setRefRc(String refRc) {
+ this.ref_rc = refRc;
+ }
+
+ public String getRefRct() {
+ return ref_rct;
+ }
+
+ public void setRefRct(String refRct) {
+ this.ref_rct = refRct;
+ }
+
+ public String getNomProduit() {
+ return nom_produit;
+ }
+
+ public void setNomProduit(String nomProduit) {
+ this.nom_produit = nomProduit;
+ }
+
+ public Integer getIdProduit() {
+ return id_produit;
+ }
+
+ public void setIdProduit(Integer idProduit) {
+ this.id_produit = idProduit;
+ }
+
+ public String getCodeExterne() {
+ return code_externe;
+ }
+
+ public void setCodeExterne(String codeExterne) {
+ this.code_externe = codeExterne;
+ }
+
+ public Integer getIdBonLivraison() {
+ return id_bon_livraison;
+ }
+
+ public void setIdBonLivraison(Integer idBonLivraison) {
+ this.id_bon_livraison = idBonLivraison;
+ }
+
+ public String getDateBl() {
+ if (date_bl != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(date_bl);
+ } else {
+ return "";
+ }
+ }
+
+ public void setDateBl(Date dateBl) {
+ this.date_bl = dateBl;
+ }
+
+ public Integer getIdExpediteur() {
+ return id_expediteur;
+ }
+
+ public void setIdExpediteur(Integer idExpediteur) {
+ this.id_expediteur = idExpediteur;
+ }
+
+ public String getExpediteur() {
+ return id_expediteur + " - " + expediteur;
+ }
+
+ public void setExpediteur(String expediteur) {
+ this.expediteur = expediteur;
+ }
+
+ public String getRemarques() {
+ return remarques;
+ }
+
+ public void setRemarques(String remarques) {
+ this.remarques = remarques;
+ }
+}
diff --git a/src/main/java/com/example/services/item/Item.java b/src/main/java/com/example/services/item/Item.java
new file mode 100644
index 0000000..aa41f64
--- /dev/null
+++ b/src/main/java/com/example/services/item/Item.java
@@ -0,0 +1,291 @@
+package com.example.services.item;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+ public class Item {
+ private Long organizationId;
+ private String itemId;
+ private String orgCode;
+ private String orgValue;
+ private String name;
+ private String description;
+ private String merchLevel1;
+ private String merchLevel2;
+ private String merchLevel3;
+ private String merchLevel4;
+ private Integer listPrice;
+ private Integer measureReqFlag;
+ private String itemLevelCode;
+ private String parentItemId;
+ private Integer notInventoriedFlag;
+ private Integer serializedItemFlag;
+ private String itemTypeCode;
+ private String dtvClassName;
+ private String dimensionSystem;
+ private Integer disallowMatrixDisplayFlag;
+ private String itemMatrixColor;
+ private String dimension1;
+ private String dimension2;
+ private String dimension3;
+ private String externalSystem;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+
+ // Constructeur par défaut
+ public Item() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Getters and Setters for all fields
+
+ public Long getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(Long organizationId) {
+ this.organizationId = organizationId;
+ }
+
+ public String getItemId() {
+ return itemId;
+ }
+
+ public void setItemId(String itemId) {
+ this.itemId = itemId;
+ }
+
+ public String getOrgCode() {
+ return orgCode;
+ }
+
+ public void setOrgCode(String orgCode) {
+ this.orgCode = orgCode;
+ }
+
+ public String getOrgValue() {
+ return orgValue;
+ }
+
+ public void setOrgValue(String orgValue) {
+ this.orgValue = orgValue;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getMerchLevel1() {
+ return merchLevel1;
+ }
+
+ public void setMerchLevel1(String merchLevel1) {
+ this.merchLevel1 = merchLevel1;
+ }
+
+ public String getMerchLevel2() {
+ return merchLevel2;
+ }
+
+ public void setMerchLevel2(String merchLevel2) {
+ this.merchLevel2 = merchLevel2;
+ }
+
+ public String getMerchLevel3() {
+ return merchLevel3;
+ }
+
+ public void setMerchLevel3(String merchLevel3) {
+ this.merchLevel3 = merchLevel3;
+ }
+
+ public String getMerchLevel4() {
+ return merchLevel4;
+ }
+
+ public void setMerchLevel4(String merchLevel4) {
+ this.merchLevel4 = merchLevel4;
+ }
+
+ public Integer getListPrice() {
+ return listPrice;
+ }
+
+ public void setListPrice(Integer listPrice) {
+ this.listPrice = listPrice;
+ }
+
+ public Integer getMeasureReqFlag() {
+ return measureReqFlag;
+ }
+
+ public void setMeasureReqFlag(Integer measureReqFlag) {
+ this.measureReqFlag = measureReqFlag;
+ }
+
+ public String getItemLevelCode() {
+ return itemLevelCode;
+ }
+
+ public void setItemLevelCode(String itemLevelCode) {
+ this.itemLevelCode = itemLevelCode;
+ }
+
+ public String getParentItemId() {
+ return parentItemId;
+ }
+
+ public void setParentItemId(String parentItemId) {
+ this.parentItemId = parentItemId;
+ }
+
+ public Integer getNotInventoriedFlag() {
+ return notInventoriedFlag;
+ }
+
+ public void setNotInventoriedFlag(Integer notInventoriedFlag) {
+ this.notInventoriedFlag = notInventoriedFlag;
+ }
+
+ public Integer getSerializedItemFlag() {
+ return serializedItemFlag;
+ }
+
+ public void setSerializedItemFlag(Integer serializedItemFlag) {
+ this.serializedItemFlag = serializedItemFlag;
+ }
+
+ public String getItemTypeCode() {
+ return itemTypeCode;
+ }
+
+ public void setItemTypeCode(String itemTypeCode) {
+ this.itemTypeCode = itemTypeCode;
+ }
+
+ public String getDtvClassName() {
+ return dtvClassName;
+ }
+
+ public void setDtvClassName(String dtvClassName) {
+ this.dtvClassName = dtvClassName;
+ }
+
+ public String getDimensionSystem() {
+ return dimensionSystem;
+ }
+
+ public void setDimensionSystem(String dimensionSystem) {
+ this.dimensionSystem = dimensionSystem;
+ }
+
+ public Integer getDisallowMatrixDisplayFlag() {
+ return disallowMatrixDisplayFlag;
+ }
+
+ public void setDisallowMatrixDisplayFlag(Integer disallowMatrixDisplayFlag) {
+ this.disallowMatrixDisplayFlag = disallowMatrixDisplayFlag;
+ }
+
+ public String getItemMatrixColor() {
+ return itemMatrixColor;
+ }
+
+ public void setItemMatrixColor(String itemMatrixColor) {
+ this.itemMatrixColor = itemMatrixColor;
+ }
+
+ public String getDimension1() {
+ return dimension1;
+ }
+
+ public void setDimension1(String dimension1) {
+ this.dimension1 = dimension1;
+ }
+
+ public String getDimension2() {
+ return dimension2;
+ }
+
+ public void setDimension2(String dimension2) {
+ this.dimension2 = dimension2;
+ }
+
+ public String getDimension3() {
+ return dimension3;
+ }
+
+ public void setDimension3(String dimension3) {
+ this.dimension3 = dimension3;
+ }
+
+ public String getExternalSystem() {
+ return externalSystem;
+ }
+
+ public void setExternalSystem(String externalSystem) {
+ this.externalSystem = externalSystem;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ if (createUserId == null) {
+ return "";
+ }
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ if (updateUserId == null) {
+ return "";
+ }
+ return updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/item/ItemOption.java b/src/main/java/com/example/services/item/ItemOption.java
new file mode 100644
index 0000000..41a172b
--- /dev/null
+++ b/src/main/java/com/example/services/item/ItemOption.java
@@ -0,0 +1,130 @@
+package com.example.services.item;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class ItemOption {
+ private String itemId;
+ private String levelCode;
+ private String levelValue;
+ private String itemAvailabilityCode;
+ private String taxGroupId;
+ private String vendor;
+ private String seasonCode;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+
+
+ public ItemOption() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Getters and Setters for all fields
+
+ public String getItemId() {
+ return itemId;
+ }
+
+ public void setItemId(String itemId) {
+ this.itemId = itemId;
+ }
+
+ public String getLevelCode() {
+ return levelCode;
+ }
+
+ public void setLevelCode(String levelCode) {
+ this.levelCode = levelCode;
+ }
+
+ public String getLevelValue() {
+ return levelValue;
+ }
+
+ public void setLevelValue(String levelValue) {
+ this.levelValue = levelValue;
+ }
+
+ public String getItemAvailabilityCode() {
+ return itemAvailabilityCode;
+ }
+
+ public void setItemAvailabilityCode(String itemAvailabilityCode) {
+ this.itemAvailabilityCode = itemAvailabilityCode;
+ }
+
+ public String getTaxGroupId() {
+ return taxGroupId;
+ }
+
+ public void setTaxGroupId(String taxGroupId) {
+ this.taxGroupId = taxGroupId;
+ }
+
+ public String getVendor() {
+ return vendor;
+ }
+
+ public void setVendor(String vendor) {
+ this.vendor = vendor;
+ }
+
+ public String getSeasonCode() {
+ return seasonCode;
+ }
+
+ public void setSeasonCode(String seasonCode) {
+ this.seasonCode = seasonCode;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ if (createUserId == null) {
+ return "";
+ }
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ if (updateUserId == null) {
+ return "";
+ }
+ return updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+}
+
diff --git a/src/main/java/com/example/services/item/ItemPrice.java b/src/main/java/com/example/services/item/ItemPrice.java
new file mode 100644
index 0000000..af9fb47
--- /dev/null
+++ b/src/main/java/com/example/services/item/ItemPrice.java
@@ -0,0 +1,165 @@
+package com.example.services.item;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class ItemPrice {
+ private String itemId;
+ private String levelCode;
+ private String levelValue;
+ private String itmPricePropertyCode;
+ private Date effectiveDate;
+ private Date expirationDate;
+ private Double price;
+ private Double priceQty;
+ private String externalId;
+ private String externalSystem;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+
+ public ItemPrice() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Getters and Setters for all fields
+
+ public String getItemId() {
+ return itemId;
+ }
+
+ public void setItemId(String itemId) {
+ this.itemId = itemId;
+ }
+
+ public String getLevelCode() {
+ return levelCode;
+ }
+
+ public void setLevelCode(String levelCode) {
+ this.levelCode = levelCode;
+ }
+
+ public String getLevelValue() {
+ return levelValue;
+ }
+
+ public void setLevelValue(String levelValue) {
+ this.levelValue = levelValue;
+ }
+
+ public String getItmPricePropertyCode() {
+ return itmPricePropertyCode;
+ }
+
+ public void setItmPricePropertyCode(String itmPricePropertyCode) {
+ this.itmPricePropertyCode = itmPricePropertyCode;
+ }
+
+ public String getEffectiveDate() {
+ if (effectiveDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(effectiveDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setEffectiveDate(Date effectiveDate) {
+ this.effectiveDate = effectiveDate;
+ }
+
+ public String getExpirationDate() {
+ if (expirationDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(expirationDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setExpirationDate(Date expirationDate) {
+ this.expirationDate = expirationDate;
+ }
+
+ public Double getPrice() {
+ return price;
+ }
+
+ public void setPrice(Double price) {
+ this.price = price;
+ }
+
+ public Double getPriceQty() {
+ return priceQty;
+ }
+
+ public void setPriceQty(Double priceQty) {
+ this.priceQty = priceQty;
+ }
+
+ public String getExternalId() {
+ return externalId;
+ }
+
+ public void setExternalId(String externalId) {
+ this.externalId = externalId;
+ }
+
+ public String getExternalSystem() {
+ return externalSystem;
+ }
+
+ public void setExternalSystem(String externalSystem) {
+ this.externalSystem = externalSystem;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ if (createUserId == null) {
+ return "";
+ }
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ if (updateUserId == null) {
+ return "";
+ }
+ return updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/item/ItemStock.java b/src/main/java/com/example/services/item/ItemStock.java
new file mode 100644
index 0000000..8f2dbc9
--- /dev/null
+++ b/src/main/java/com/example/services/item/ItemStock.java
@@ -0,0 +1,122 @@
+package com.example.services.item;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class ItemStock {
+ private String organizationId;
+ private String rtlLocId;
+ private String invLocationId;
+ private String bucketId;
+ private String itemId;
+ private int unitCount;
+ private double inventoryValue;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+
+ public String getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(String organizationId) {
+ this.organizationId = organizationId;
+ }
+
+ public String getRtlLocId() {
+ return rtlLocId;
+ }
+
+ public void setRtlLocId(String rtlLocId) {
+ this.rtlLocId = rtlLocId;
+ }
+
+ public String getInvLocationId() {
+ return invLocationId;
+ }
+
+ public void setInvLocationId(String invLocationId) {
+ this.invLocationId = invLocationId;
+ }
+
+ public String getBucketId() {
+ return bucketId;
+ }
+
+ public void setBucketId(String bucketId) {
+ this.bucketId = bucketId;
+ }
+
+ public String getItemId() {
+ return itemId;
+ }
+
+ public void setItemId(String itemId) {
+ this.itemId = itemId;
+ }
+
+ public int getUnitCount() {
+ return unitCount;
+ }
+
+ public void setUnitCount(int unitCount) {
+ this.unitCount = unitCount;
+ }
+
+ public double getInventoryValue() {
+ return inventoryValue;
+ }
+
+ public void setInventoryValue(double inventoryValue) {
+ this.inventoryValue = inventoryValue;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ if (createUserId == null) {
+ return "";
+ }
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ if (updateUserId == null) {
+ return "";
+ }
+ return updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/store/BackOfficeTransaction.java b/src/main/java/com/example/services/store/BackOfficeTransaction.java
new file mode 100644
index 0000000..74682ad
--- /dev/null
+++ b/src/main/java/com/example/services/store/BackOfficeTransaction.java
@@ -0,0 +1,58 @@
+package com.example.services.store;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class BackOfficeTransaction {
+ private int backOfficeTransactions;
+ private Date minBackOfficeTransactionDate;
+ private Date maxBackOfficeTransactionDate;
+
+
+ // Default constructor
+ public BackOfficeTransaction() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Constructor with parameters
+ public BackOfficeTransaction(int backOfficeTransactions, Date minbackOfficeTransactionDate, Date maxbackOfficeTransactionDate) {
+ this.backOfficeTransactions = backOfficeTransactions;
+ this.minBackOfficeTransactionDate = minbackOfficeTransactionDate;
+ this.maxBackOfficeTransactionDate = maxbackOfficeTransactionDate;
+ }
+
+ // Getters et setters
+ public int getBackOfficeTransactions() {
+ return backOfficeTransactions;
+ }
+
+ public void setBackOfficeTransactions(int backOfficeTransactions) {
+ this.backOfficeTransactions = backOfficeTransactions;
+ }
+
+ public String getMinBackOfficeTransactionDate() {
+ if (minBackOfficeTransactionDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(minBackOfficeTransactionDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setMinBackOfficeTransactionDate(Date minBackOfficeTransactionDate) {
+ this.minBackOfficeTransactionDate = minBackOfficeTransactionDate;
+ }
+
+ public String getMaxBackOfficeTransactionDate() {
+ if (maxBackOfficeTransactionDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(maxBackOfficeTransactionDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setMaxBackOfficeTransactionDate(Date maxBackOfficeTransactionDate) {
+ this.maxBackOfficeTransactionDate = maxBackOfficeTransactionDate;
+ }
+}
diff --git a/src/main/java/com/example/services/store/PosReplication.java b/src/main/java/com/example/services/store/PosReplication.java
new file mode 100644
index 0000000..d72d23a
--- /dev/null
+++ b/src/main/java/com/example/services/store/PosReplication.java
@@ -0,0 +1,58 @@
+package com.example.services.store;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class PosReplication {
+ private int pendingReplications;
+ private Date minPendingReplicationDate;
+ private Date maxPendingReplicationDate;
+
+ // Default constructor
+ public PosReplication() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Constructor with parameters
+ public PosReplication(int pendingReplications, Date minPendingReplicationDate, Date maxPendingReplicationDate) {
+ this.pendingReplications = pendingReplications;
+ this.minPendingReplicationDate = minPendingReplicationDate;
+ this.maxPendingReplicationDate = maxPendingReplicationDate;
+ }
+
+ // Getters et setters
+ public int getPendingReplications() {
+ return pendingReplications;
+ }
+
+ public void setPendingReplications(int pendingReplications) {
+ this.pendingReplications = pendingReplications;
+ }
+
+ public String getMinPendingReplicationDate() {
+ if (minPendingReplicationDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(minPendingReplicationDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setMinReplicationDate(Date minPendingReplicationDate) {
+ this.minPendingReplicationDate = minPendingReplicationDate;
+ }
+
+ public String getMaxPendingReplicationDate() {
+ if (maxPendingReplicationDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(maxPendingReplicationDate);
+ } else {
+ return "";
+ }
+ }
+
+
+ public void setMaxReplicationDate(Date maxPendingReplicationDate) {
+ this.maxPendingReplicationDate = maxPendingReplicationDate;
+ }
+}
diff --git a/src/main/java/com/example/services/store/Store.java b/src/main/java/com/example/services/store/Store.java
new file mode 100644
index 0000000..6f5b947
--- /dev/null
+++ b/src/main/java/com/example/services/store/Store.java
@@ -0,0 +1,162 @@
+package com.example.services.store;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+public class Store {
+ private Integer id_structure;
+ private String nom;
+ private String ip_master;
+ private String telephone;
+ private String photoLink;
+ private String enseigne;
+ private String pays;
+ private Integer nbcaisses;
+ private String adresse;
+ private List caisses;
+ private Date date_migration;
+
+ // Default constructor
+ public Store() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Constructor with parameters
+ public Store(Integer id_structure, String nom, String telephone, String photoLink, String enseigne, String pays, String caisses, String adresse, Date date_migration) {
+ this.id_structure = id_structure;
+ this.nom = nom;
+ this.telephone = telephone;
+ this.photoLink = photoLink;
+ this.enseigne = enseigne;
+ this.pays = pays;
+ this.adresse = adresse;
+ this.date_migration = date_migration;
+
+ setCaisses(caisses);
+ }
+
+ public Integer getId_structure() {
+ return id_structure;
+ }
+
+ public void setId_structure(Integer id_structure) {
+ this.id_structure = id_structure;
+ }
+
+ public String getNom() {
+ return nom;
+ }
+
+ public void setNom(String nom) {
+ this.nom = nom;
+ }
+
+ public String getIp_master() {
+ if (!this.caisses.isEmpty()) {
+ return this.caisses.get(0).getIp();
+ }
+
+ return "";
+ }
+
+ public String getTelephone() {
+ return telephone;
+ }
+
+ public void setTelephone(String telephone) {
+ this.telephone = telephone;
+ }
+
+ public String getPhotoLink() {
+ return photoLink;
+ }
+
+ public void setPhotoLink(String photoLink) {
+ this.photoLink = photoLink;
+ }
+
+ public String getEnseigne() {
+ return enseigne;
+ }
+
+ public void setEnseigne(String enseigne) {
+ this.enseigne = enseigne;
+ }
+
+ public String getPays() {
+ return pays;
+ }
+
+ public void setPays(String pays) {
+ this.pays = pays;
+ }
+
+ public Integer getNbcaisses() {
+ return this.caisses.size();
+ }
+
+ public void setAdresse(String adresse) {
+ this.adresse = adresse;
+ }
+
+ public String getAdresse() {
+ return this.adresse;
+ }
+
+ public List getCaisses() {
+ return this.caisses;
+ }
+
+ public void setCaisses(String caisses) {
+ this.caisses = new ArrayList<>();
+ for (String caisse : caisses.split(",")) {
+ String[] parts = caisse.split("\\|");
+ this.caisses.add(new Caisse(Integer.parseInt(parts[0]), parts[1]));
+ }
+
+ Collections.sort(this.caisses, Comparator.comparing(Caisse::getId_caisse));
+ }
+
+ public String getDate_migration() {
+ if (date_migration != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(date_migration);
+ } else {
+ return "";
+ }
+ }
+
+ public void setDate_migration(Date date_migration) {
+ this.date_migration = date_migration;
+ }
+
+ public class Caisse {
+ private Integer id_caisse;
+ private String ip;
+
+ public Caisse(Integer id_caisse, String ip) {
+ this.id_caisse = id_caisse;
+ this.ip = ip;
+ }
+
+ public Integer getId_caisse() {
+ return id_caisse;
+ }
+
+ public void setId_caisse(Integer id_caisse) {
+ this.id_caisse = id_caisse;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+ }
+}
diff --git a/src/main/java/com/example/services/store/StoreDetails.java b/src/main/java/com/example/services/store/StoreDetails.java
new file mode 100644
index 0000000..7229881
--- /dev/null
+++ b/src/main/java/com/example/services/store/StoreDetails.java
@@ -0,0 +1,36 @@
+package com.example.services.store;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StoreDetails {
+ private Store store;
+ private List pos;
+
+ public StoreDetails() {
+ // Constructeur par défaut nécessaire pour la désérialisation JSON
+ this.pos = new ArrayList<>();
+ }
+
+ public StoreDetails(Store store, List pos) {
+ this.store = store;
+ this.pos = pos != null ? pos : new ArrayList<>();
+ }
+
+ public Store getStore() {
+ return store;
+ }
+
+ public void setStore(Store store) {
+ this.store = store;
+ }
+
+ public List getPos() {
+ return pos;
+ }
+
+ public void setPos(List pos) {
+ this.pos = pos;
+ }
+}
+
diff --git a/src/main/java/com/example/services/store/StorePos.java b/src/main/java/com/example/services/store/StorePos.java
new file mode 100644
index 0000000..b10be78
--- /dev/null
+++ b/src/main/java/com/example/services/store/StorePos.java
@@ -0,0 +1,138 @@
+package com.example.services.store;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class StorePos {
+ private int workstationId;
+ private String ip;
+ private String version;
+ private Date businessDate;
+ private String openingDate;
+ private String closingDate;
+ private BackOfficeTransaction boTransaction;
+ private PosReplication replication;
+ private XstoreTransaction saleTransaction;
+ private boolean primaryRegister = false;
+ private boolean fatalError = false;
+
+ // Default constructor
+ public StorePos() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Constructor with parameters
+ public StorePos( int workstationId, String ip, String version, Date businessDate, String openingDate, String closingDate ,BackOfficeTransaction boTransaction, PosReplication replication, XstoreTransaction saleTransaction, boolean primaryRegister, boolean fatalError) {
+ this.workstationId = workstationId;
+ this.ip = ip;
+ this.version = version;
+ this.businessDate = businessDate;
+ this.openingDate = openingDate;
+ this.closingDate = closingDate;
+ this.boTransaction = boTransaction;
+ this.replication = replication;
+ this.saleTransaction = saleTransaction;
+ this.primaryRegister = primaryRegister;
+ this.fatalError = fatalError;
+ }
+ // Getters et setters
+ public int getWorkstationId() {
+ return workstationId;
+ }
+ public void setWorkstationId(int workstationId) {
+ this.workstationId = workstationId;
+ }
+ public String getIp() {
+ return ip;
+ }
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+ public String getVersion() {
+ return version;
+ }
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getBusinessDateS() {
+ if (businessDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+ return dateFormat.format(businessDate);
+ } else {
+ return "";
+ }
+ }
+
+ public Date getBusinessDate() {
+ return businessDate;
+ }
+
+ public void setBusinessDate(Date businessDate) {
+ this.businessDate = businessDate;
+ }
+
+ public String getOpeningDate() {
+ return openingDate;
+ }
+
+ public void setOpeningDate(java.sql.Timestamp openingDate) {
+ if (openingDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ String strOpeningDate = dateFormat.format(openingDate);
+ this.openingDate = strOpeningDate;
+ }
+ }
+
+ public String getClosingDate() {
+ return closingDate;
+ }
+
+ public void setClosingDate(java.sql.Timestamp closingDate) {
+ if (closingDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ String strClosingDate = dateFormat.format(closingDate);
+ this.closingDate = strClosingDate;
+ }
+ }
+
+ public BackOfficeTransaction getBoTransaction() {
+ return boTransaction;
+ }
+
+ public void setBoTransaction(BackOfficeTransaction boTransaction) {
+ this.boTransaction = boTransaction;
+ }
+
+ public PosReplication getReplication() {
+ return replication;
+ }
+
+ public void setReplication(PosReplication replication) {
+ this.replication = replication;
+ }
+
+ public XstoreTransaction getSaleTransaction() {
+ return saleTransaction;
+ }
+
+ public void setSaleTransaction(XstoreTransaction saleTransaction) {
+ this.saleTransaction = saleTransaction;
+ }
+
+ public boolean isPrimaryRegister() {
+ return primaryRegister;
+ }
+
+ public void setPrimaryRegister(int primaryRegister) {
+ this.primaryRegister = (primaryRegister == 1);
+ }
+
+ public boolean isFatalError() {
+ return fatalError;
+ }
+
+ public void setFatalError(int fatalError) {
+ this.fatalError = (fatalError > 0);
+ }
+}
diff --git a/src/main/java/com/example/services/store/StoreSequence.java b/src/main/java/com/example/services/store/StoreSequence.java
new file mode 100644
index 0000000..abd3754
--- /dev/null
+++ b/src/main/java/com/example/services/store/StoreSequence.java
@@ -0,0 +1,137 @@
+package com.example.services.store;
+
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class StoreSequence {
+ private Long organizationId;
+ private Long rtlLocId;
+ private Long wkstnId;
+ private String sequenceId;
+ private String sequenceMode;
+ private Long sequenceNbr;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+ private String recordState;
+
+ // Default constructor
+ public StoreSequence() {
+ // Default constructor required for JSON deserialization
+ }
+
+ public StoreSequence(Long organizationId, Long rtlLocId, Long wkstnId, String sequenceId, String sequenceMode, Long sequenceNbr, Date createDate, String createUserId, Date updateDate, String updateUserId, String recordState) {
+ this.organizationId = organizationId;
+ this.rtlLocId = rtlLocId;
+ this.wkstnId = wkstnId;
+ this.sequenceId = sequenceId;
+ this.sequenceMode = sequenceMode;
+ this.sequenceNbr = sequenceNbr;
+ this.createDate = createDate;
+ this.createUserId = createUserId;
+ this.updateDate = updateDate;
+ this.updateUserId = updateUserId;
+ this.recordState = recordState;
+ }
+
+ // Getters and Setters for all fields
+
+ public Long getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(Long organizationId) {
+ this.organizationId = organizationId;
+ }
+
+ public Long getRtlLocId() {
+ return rtlLocId;
+ }
+
+ public void setRtlLocId(Long rtlLocId) {
+ this.rtlLocId = rtlLocId;
+ }
+
+ public Long getWkstnId() {
+ return wkstnId;
+ }
+
+ public void setWkstnId(Long wkstnId) {
+ this.wkstnId = wkstnId;
+ }
+
+ public String getSequenceId() {
+ return sequenceId;
+ }
+
+ public void setSequenceId(String sequenceId) {
+ this.sequenceId = sequenceId;
+ }
+
+ public String getSequenceMode() {
+ return sequenceMode;
+ }
+
+ public void setSequenceMode(String sequenceMode) {
+ this.sequenceMode = sequenceMode;
+ }
+
+ public Long getSequenceNbr() {
+ return sequenceNbr;
+ }
+
+ public void setSequenceNbr(Long sequenceNbr) {
+ this.sequenceNbr = sequenceNbr;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ return createUserId == null ? "" : createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ return updateUserId == null ? "" : updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+
+ public String getRecordState() {
+ return recordState;
+ }
+
+ public void setRecordState(String recordState) {
+ this.recordState = recordState;
+ }
+}
diff --git a/src/main/java/com/example/services/store/StoreSignature.java b/src/main/java/com/example/services/store/StoreSignature.java
new file mode 100644
index 0000000..3a5106e
--- /dev/null
+++ b/src/main/java/com/example/services/store/StoreSignature.java
@@ -0,0 +1,155 @@
+package com.example.services.store;
+
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class StoreSignature {
+ private Long organizationId;
+ private Long rtlLocId;
+ private Long wkstnId;
+ private String signatureId;
+ private String signatureMode;
+ private String signatureString;
+ private String signatureSource;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+ private String recordState;
+
+ // Default constructor
+ public StoreSignature() {
+ // Default constructor required for JSON deserialization
+ }
+
+ public StoreSignature(Long organizationId, Long rtlLocId, Long wkstnId, String signatureId, String signatureMode, String signatureString, String signatureSource, Date createDate, String createUserId, Date updateDate, String updateUserId, String recordState) {
+ this.organizationId = organizationId;
+ this.rtlLocId = rtlLocId;
+ this.wkstnId = wkstnId;
+ this.signatureId = signatureId;
+ this.signatureMode = signatureMode;
+ this.signatureString = signatureString;
+ this.signatureSource = signatureSource;
+ this.createDate = createDate;
+ this.createUserId = createUserId;
+ this.updateDate = updateDate;
+ this.updateUserId = updateUserId;
+ this.recordState = recordState;
+ }
+
+ // Getters and Setters for all fields
+
+ public Long getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(Long organizationId) {
+ this.organizationId = organizationId;
+ }
+
+ public Long getRtlLocId() {
+ return rtlLocId;
+ }
+
+ public void setRtlLocId(Long rtlLocId) {
+ this.rtlLocId = rtlLocId;
+ }
+
+ public Long getWkstnId() {
+ return wkstnId;
+ }
+
+ public void setWkstnId(Long wkstnId) {
+ this.wkstnId = wkstnId;
+ }
+
+ public String getSignatureId() {
+ return signatureId;
+ }
+
+ public void setSignatureId(String signatureId) {
+ this.signatureId = signatureId;
+ }
+
+ public String getSignatureMode() {
+ return signatureMode;
+ }
+
+ public void setSignatureMode(String signatureMode) {
+ this.signatureMode = signatureMode;
+ }
+
+ public String getSignatureString() {
+ if (signatureString != null) {
+ return signatureString;
+ } else {
+ return "";
+ }
+ }
+
+ public void setSignatureString(String signatureString) {
+ this.signatureString = signatureString;
+ }
+
+ public String getSignatureSource() {
+ if (signatureSource != null) {
+ return signatureSource;
+ } else {
+ return "";
+ }
+ }
+
+ public void setSignatureSource(String signatureSource) {
+ this.signatureSource = signatureSource;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ return updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+
+ public String getRecordState() {
+ return recordState;
+ }
+
+ public void setRecordState(String recordState) {
+ this.recordState = recordState;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/store/StoreVersion.java b/src/main/java/com/example/services/store/StoreVersion.java
new file mode 100644
index 0000000..302f2ae
--- /dev/null
+++ b/src/main/java/com/example/services/store/StoreVersion.java
@@ -0,0 +1,147 @@
+package com.example.services.store;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class StoreVersion {
+ private Long organizationId;
+ private Long seq;
+ private String baseSchemaVersion;
+ private String customerSchemaVersion;
+ private String customer;
+ private Date baseSchemaDate;
+ private Date customerSchemaDate;
+ private Date createDate;
+ private String createUserId;
+ private Date updateDate;
+ private String updateUserId;
+
+ // Default constructor
+ public StoreVersion() {
+ // Default constructor required for JSON deserialization
+ }
+
+ public StoreVersion(Long organisation_id, Long seq, String base_schema_version, String customer_schema_version, String customer, Date base_schema_date, Date customer_schema_date, Date createDate, String create_user_id, Date update_date, String update_user_id) {
+ this.organizationId = organisation_id;
+ this.seq = seq;
+ this.baseSchemaVersion = base_schema_version;
+ this.customerSchemaVersion = customer_schema_version;
+ this.customer = customer;
+ this.baseSchemaDate = base_schema_date;
+ this.customerSchemaDate = customer_schema_date;
+ this.createDate = createDate;
+ this.createUserId = create_user_id;
+ this.updateDate = update_date;
+ this.updateUserId = update_user_id;
+ };
+
+ // Getters and Setters for all fields
+
+ public Long getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(Long organizationId) {
+ this.organizationId = organizationId;
+ }
+
+ public Long getSeq() {
+ return seq;
+ }
+
+ public void setSeq(Long seq) {
+ this.seq = seq;
+ }
+
+ public String getBaseSchemaVersion() {
+ return baseSchemaVersion;
+ }
+
+ public void setBaseSchemaVersion(String baseSchemaVersion) {
+ this.baseSchemaVersion = baseSchemaVersion;
+ }
+
+ public String getCustomerSchemaVersion() {
+ return customerSchemaVersion;
+ }
+
+ public void setCustomerSchemaVersion(String customerSchemaVersion) {
+ this.customerSchemaVersion = customerSchemaVersion;
+ }
+
+ public String getCustomer() {
+ return customer;
+ }
+
+ public void setCustomer(String customer) {
+ this.customer = customer;
+ }
+
+ public String getBaseSchemaDate() {
+ if (baseSchemaDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(baseSchemaDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setBaseSchemaDate(Date baseSchemaDate) {
+ this.baseSchemaDate = baseSchemaDate;
+ }
+
+ public String getCustomerSchemaDate() {
+ if (customerSchemaDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(customerSchemaDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCustomerSchemaDate(Date customerSchemaDate) {
+ this.customerSchemaDate = customerSchemaDate;
+ }
+
+ public String getCreateDate() {
+ if (createDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(createDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public String getUpdateDate() {
+ if (updateDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(updateDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ public String getUpdateUserId() {
+ return updateUserId;
+ }
+
+ public void setUpdateUserId(String updateUserId) {
+ this.updateUserId = updateUserId;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/services/store/XstoreTransaction.java b/src/main/java/com/example/services/store/XstoreTransaction.java
new file mode 100644
index 0000000..830b310
--- /dev/null
+++ b/src/main/java/com/example/services/store/XstoreTransaction.java
@@ -0,0 +1,98 @@
+package com.example.services.store;
+
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+public class XstoreTransaction {
+ private int count;
+ private Date minDate;
+ private Date maxDate;
+ private String minDateT;
+ private String minDateH;
+ private String maxDateT;
+ private String maxDateH;
+
+ // Default constructor
+ public XstoreTransaction() {
+ // Default constructor required for JSON deserialization
+ }
+
+ // Constructor with parameters
+ public XstoreTransaction(int count, Date minDate, Date maxDate) {
+ this.count = count;
+ this.minDate = minDate;
+ this.maxDate = maxDate;
+ }
+
+ // Getters et setters
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+
+ public String getMinDate() {
+ if (minDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(minDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setMinDate(Date minDate) {
+ this.minDate = minDate;
+ }
+
+ public String getMaxDate() {
+ if (maxDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
+ return dateFormat.format(maxDate);
+ } else {
+ return "";
+ }
+ }
+
+ public void setMaxDate(Date maxDate) {
+ this.maxDate = maxDate;
+ }
+
+ public String getMinDateT() {
+ if (minDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+ return dateFormat.format(minDate);
+ } else {
+ return "";
+ }
+ }
+
+ public String getMinDateH() {
+ if (minDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
+ return dateFormat.format(minDate);
+ } else {
+ return "";
+ }
+ }
+
+ public String getMaxDateT() {
+ if (maxDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+ return dateFormat.format(maxDate);
+ } else {
+ return "";
+ }
+ }
+
+ public String getMaxDateH() {
+ if (maxDate != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
+ return dateFormat.format(maxDate);
+ } else {
+ return "";
+ }
+ }
+}
diff --git a/src/main/java/com/example/services/xadmin/log/XadminLog.java b/src/main/java/com/example/services/xadmin/log/XadminLog.java
new file mode 100644
index 0000000..20ba196
--- /dev/null
+++ b/src/main/java/com/example/services/xadmin/log/XadminLog.java
@@ -0,0 +1,96 @@
+package com.example.services.xadmin.log;
+
+import java.util.Date;
+
+public class XadminLog {
+ private Date businessDate;
+ private Date createDate;
+ private String createUserId;
+ private Integer rtlLocId;
+ private Integer wkstnId;
+ private String logLevel;
+ private String threadName;
+ private String logMessage;
+ private String loggerCategory;
+ private String storeName;
+
+ public Date getBusinessDate() {
+ return businessDate;
+ }
+
+ public void setBusinessDate(Date businessDate) {
+ this.businessDate = businessDate;
+ }
+
+ public Date getCreateDate() {
+ return createDate;
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ public String getCreateUserId() {
+ return createUserId;
+ }
+
+ public void setCreateUserId(String createUserId) {
+ this.createUserId = createUserId;
+ }
+
+ public Integer getRtlLocId() {
+ return rtlLocId;
+ }
+
+ public void setRtlLocId(Integer rtlLocId) {
+ this.rtlLocId = rtlLocId;
+ }
+
+ public Integer getWkstnId() {
+ return wkstnId;
+ }
+
+ public void setWkstnId(Integer wkstnId) {
+ this.wkstnId = wkstnId;
+ }
+
+ public String getLogLevel() {
+ return logLevel;
+ }
+
+ public void setLogLevel(String logLevel) {
+ this.logLevel = logLevel;
+ }
+
+ public String getThreadName() {
+ return threadName;
+ }
+
+ public void setThreadName(String threadName) {
+ this.threadName = threadName;
+ }
+
+ public String getLogMessage() {
+ return logMessage;
+ }
+
+ public void setLogMessage(String logMessage) {
+ this.logMessage = logMessage;
+ }
+
+ public String getLoggerCategory() {
+ return loggerCategory;
+ }
+
+ public void setLoggerCategory(String loggerCategory) {
+ this.loggerCategory = loggerCategory;
+ }
+
+ public String getStoreName() {
+ return storeName;
+ }
+
+ public void setStoreName(String storeName) {
+ this.storeName = storeName;
+ }
+}
diff --git a/src/main/resources/db.properties b/src/main/resources/db.properties
new file mode 100644
index 0000000..e9410c6
--- /dev/null
+++ b/src/main/resources/db.properties
@@ -0,0 +1,23 @@
+# Development environment settings (dev)
+dev.db.url=jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI
+dev.db.oai.password=base
+dev.db.com02.password=B1Xto9pAbtBCOxuecG7W
+
+# Pre-production environment settings (preprod)
+preprod.db.url=jdbc:oracle:thin:@v-aspd-b01-ii-d.adic.lan:1521/IASPDI
+preprod.db.oai.password=base
+preprod.db.com02.password=B1Xto9pAbtBCOxuecG7W
+
+# Production environment settings (prod)
+prod.db.url=jdbc:oracle:thin:@v-aspd-b03-ip-d.adic.lan:1521/PASPDI
+prod.db.oai.password=base
+prod.db.com02.password=com20
+
+# XSTORE environment settings
+xstore.db.url=jdbc:oracle:thin:@HOST:1521/XSTORE
+xstore.db.dtv.password=dtv
+xstore.db.repqueue.password=repqueue
+
+# XADMIN environment settings
+xadmin.db.url=jdbc:oracle:thin:@p-ODBG-b01-ipDC.tech.ikks.lan:1522/PXSTOREI
+xadmin.db.dtv.password=oY3poRSprOuqasO
\ No newline at end of file
diff --git a/src/main/resources/env.properties b/src/main/resources/env.properties
new file mode 100644
index 0000000..e30e658
--- /dev/null
+++ b/src/main/resources/env.properties
@@ -0,0 +1,2 @@
+# Indicates the current environment (dev, preprod, prod, etc.).
+environment=prod
\ No newline at end of file
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..c126aed
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 7cc252d..21d9ef3 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -15,6 +15,10 @@
jersey.config.server.provider.packages
com.example.services
+
+ jersey.config.server.provider.classnames
+ org.glassfish.jersey.jackson.JacksonFeature
+
1