From 284ae789e04a99df55f9893fd4fa85453a689ec6 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 6 Mar 2025 19:50:25 +0100 Subject: [PATCH 1/5] Migliorie performance Import/Export --- .../ImportDirectoryOperationRunner.java | 5 +- .../ImportScheduledOperationRunner.java | 5 +- .../watching/LocalFolderDirectoryWatcher.java | 110 +++++++++--------- .../ContrattiDiVenditaHandlerService.java | 1 + .../ProductionOrderDataHandlerService.java | 104 ++++++++++------- 5 files changed, 124 insertions(+), 101 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportDirectoryOperationRunner.java b/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportDirectoryOperationRunner.java index 2122ab9199..a646707c96 100644 --- a/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportDirectoryOperationRunner.java +++ b/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportDirectoryOperationRunner.java @@ -1,6 +1,7 @@ package it.integry.ems.schedule.new_cron_job.dto.operations.runners; import it.integry.ems.Import.dto.ImportRequestDTO; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.json.ResponseJSONObjectMapper; import it.integry.ems.response.EsitoType; import it.integry.ems.response.MessageDTO; @@ -47,7 +48,7 @@ public class ImportDirectoryOperationRunner extends BaseDirectoryOperationRunner logger.debug(String.format("Operazione [ID:%s, Name:%s] - Importo %s", this.getDtoInstance().getId(), this.getDtoInstance().getName(), file.getName())); try { - ResponseJSONObjectMapper mapper = new ResponseJSONObjectMapper(); + ResponseJSONObjectMapper objectMapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); String port = UtilityServer.getLocalServerPort(); @@ -66,7 +67,7 @@ public class ImportDirectoryOperationRunner extends BaseDirectoryOperationRunner jsonResponse); String responseJson = jsonResponse.toString(); - ServiceRestResponse serviceRestResponse = mapper.readValue(responseJson, ServiceRestResponse.class); + ServiceRestResponse serviceRestResponse = objectMapper.readValue(responseJson, ServiceRestResponse.class); if (serviceRestResponse.getEsito().equals(EsitoType.KO)) { String errorMessage = serviceRestResponse.getErrorMessage(); diff --git a/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportScheduledOperationRunner.java b/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportScheduledOperationRunner.java index e7012d80a7..56afab4057 100644 --- a/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportScheduledOperationRunner.java +++ b/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ImportScheduledOperationRunner.java @@ -1,6 +1,7 @@ package it.integry.ems.schedule.new_cron_job.dto.operations.runners; import it.integry.ems.Import.dto.ImportRequestDTO; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.json.ResponseJSONObjectMapper; import it.integry.ems.response.EsitoType; import it.integry.ems.response.ServiceRestResponse; @@ -16,7 +17,7 @@ public class ImportScheduledOperationRunner extends BaseScheduledOperationRunner @Override public void run() throws Exception { - ResponseJSONObjectMapper mapper = new ResponseJSONObjectMapper(); + ResponseJSONObjectMapper objectMapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); String port = UtilityServer.getLocalServerPort(); @@ -38,7 +39,7 @@ public class ImportScheduledOperationRunner extends BaseScheduledOperationRunner jsonResponse); String responseJson = jsonResponse.toString(); - ServiceRestResponse serviceRestResponse = mapper.readValue(responseJson, ServiceRestResponse.class); + ServiceRestResponse serviceRestResponse = objectMapper.readValue(responseJson, ServiceRestResponse.class); if (serviceRestResponse.getEsito().equals(EsitoType.KO) && serviceRestResponse.getErrorMessage() !=null ) { logger.error(String.format("Eccezione %s generata dall'operazione %s", serviceRestResponse.getErrorMessage(), this.getDtoInstance().getName())); diff --git a/ems-core/src/main/java/it/integry/ems/watching/LocalFolderDirectoryWatcher.java b/ems-core/src/main/java/it/integry/ems/watching/LocalFolderDirectoryWatcher.java index 97b592371e..4366545bcf 100644 --- a/ems-core/src/main/java/it/integry/ems/watching/LocalFolderDirectoryWatcher.java +++ b/ems-core/src/main/java/it/integry/ems/watching/LocalFolderDirectoryWatcher.java @@ -26,74 +26,74 @@ public class LocalFolderDirectoryWatcher extends DirectoryWatcher { private FileAlterationMonitor monitor; private FileAlterationListener listener = new FileAlterationListener() { - @Override - public void onStart(FileAlterationObserver observer) { + @Override + public void onStart(FileAlterationObserver observer) { - } + } - @Override - public void onDirectoryCreate(File directory) { + @Override + public void onDirectoryCreate(File directory) { - } + } - @Override - public void onDirectoryChange(File directory) { + @Override + public void onDirectoryChange(File directory) { - } + } - @Override - public void onDirectoryDelete(File directory) { + @Override + public void onDirectoryDelete(File directory) { - } + } - @Override - public void onFileCreate(File file) { - if (!isASubDirectory(file)) { - if (getMatcher(fileFilter, file.getName()).matches()) { - executor.execute(() -> { - try { - final boolean importStatus = directoryWatcherEvents.onFileCreate(file); - - if (operationData.isDeleteAfterImport() && importStatus) - file.delete(); - } catch (Exception ex) { - logger.error(ex); - } - }); - } - } - } - - @Override - public void onFileChange(File file) { - if (!isASubDirectory(file)) { - if (getMatcher(fileFilter, file.getName()).matches()) { - executor.execute(() -> { - final boolean importStatus = directoryWatcherEvents.onFileChange(file); + @Override + public void onFileCreate(File file) { + if (!isASubDirectory(file)) { + if (getMatcher(fileFilter, file.getName()).matches()) { + executor.execute(() -> { + try { + final boolean importStatus = directoryWatcherEvents.onFileCreate(file); if (operationData.isDeleteAfterImport() && importStatus) file.delete(); - }); - } + } catch (Exception ex) { + logger.error(ex); + } + }); } } + } - @Override - public void onFileDelete(File file) { - if (!isASubDirectory(file)) { - if (getMatcher(fileFilter, file.getName()).matches()) { - executor.execute(() -> { - directoryWatcherEvents.onFileDelete(file); - }); - } + @Override + public void onFileChange(File file) { + if (!isASubDirectory(file)) { + if (getMatcher(fileFilter, file.getName()).matches()) { + executor.execute(() -> { + final boolean importStatus = directoryWatcherEvents.onFileChange(file); + + if (operationData.isDeleteAfterImport() && importStatus) + file.delete(); + }); } } + } - @Override - public void onStop(FileAlterationObserver observer) { - + @Override + public void onFileDelete(File file) { + if (!isASubDirectory(file)) { + if (getMatcher(fileFilter, file.getName()).matches()) { + executor.execute(() -> { + directoryWatcherEvents.onFileDelete(file); + }); + } } - }; + } + + @Override + public void onStop(FileAlterationObserver observer) { + + } + }; public LocalFolderDirectoryWatcher(ImportDirectoryOperationDTO operationDTO) { super(operationDTO); @@ -111,15 +111,19 @@ public class LocalFolderDirectoryWatcher extends DirectoryWatcher { } protected void start() throws Exception { - observer = new FileAlterationObserver(path); - monitor = new FileAlterationMonitor(10000); + long pollingInterval = 30 * 1000; + + observer = new FileAlterationObserver(path, pathname -> + !pathname.isDirectory() && getMatcher(fileFilter, pathname.getName()).matches()); + monitor = new FileAlterationMonitor(pollingInterval); observer.addListener(listener); monitor.addObserver(observer); logger.debug("Avviato servizio di recupero files nella cartella: " + this.observer.getDirectory().toString()); - File[] files = observer.getDirectory().listFiles(pathname -> getMatcher(fileFilter, pathname.getName()).matches()); + File[] files = observer.getDirectory() + .listFiles(pathname -> getMatcher(fileFilter, pathname.getName()).matches()); List filesList = new ArrayList(); diff --git a/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java b/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java index 6a3a0fc9f1..ca8dedc013 100644 --- a/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java +++ b/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java @@ -74,6 +74,7 @@ public class ContrattiDiVenditaHandlerService { } } + @Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome") private void updateProgContrattoV() throws Exception { if (!canBeExecuted) return; diff --git a/ems-engine/src/main/java/it/integry/ems/production/service/ProductionOrderDataHandlerService.java b/ems-engine/src/main/java/it/integry/ems/production/service/ProductionOrderDataHandlerService.java index 597e4125e0..68ea58ed2c 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/service/ProductionOrderDataHandlerService.java +++ b/ems-engine/src/main/java/it/integry/ems/production/service/ProductionOrderDataHandlerService.java @@ -1,9 +1,7 @@ package it.integry.ems.production.service; import com.annimon.stream.Stream; -import it.integry.annotations.PostContextConstruct; import it.integry.common.var.CommonConstants; -import it.integry.ems.looper.service.LooperService; import it.integry.ems.production.dto.OrdineLavorazioneDTO; import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoGroupMercDTO; import it.integry.ems.settings.Model.AvailableConnectionsModel; @@ -16,11 +14,13 @@ import it.integry.ems_model.utility.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.context.ContextLoader; import java.time.LocalDate; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component @@ -28,9 +28,6 @@ public class ProductionOrderDataHandlerService { private final Logger logger = LogManager.getLogger(); - @Autowired - private LooperService looperService; - @Autowired private SettingsModel settingsModel; @@ -44,34 +41,61 @@ public class ProductionOrderDataHandlerService { private final HashMap>> inevasiOrdersCachedData = new HashMap<>(); - @PostContextConstruct - public void init() { - if (!UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer()) { - looperService.add(() -> this.internalCacheOrdiniLavorazione(true, inevasiOrdersCachedData), 5 * 1000, ProductionOrderDataHandlerService.class.getName()); + private boolean canBeExecuted = false; + private final HashMap executionPermission = new HashMap<>(); + + + @Scheduled(fixedDelay = 1, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome") + private void refreshCronPermission() throws Exception { + canBeExecuted = !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer(); + if (!canBeExecuted) return; + + try { + String sql = + "SELECT CAST(COUNT(*) AS BIT)\n" + + "FROM stb_abil\n" + + "WHERE cod_opz IN ('WG069', 'WG135')\n" + + " AND flag_abil <> 'N'"; + + String historyProfileDb = settingsController.getHistoryProfileDb(); + final List availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb); + + for (AvailableConnectionsModel connectionsModel : availableConnections) { + try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionsModel, false)) { + + boolean isEnabled = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + executionPermission.remove(connectionsModel.getDbName()); + executionPermission.put(connectionsModel.getDbName(), isEnabled); + } + } + } catch (Exception ex) { + logger.error(ProductionOrderDataHandlerService.class.getSimpleName(), ex); + throw ex; } + } - public void internalCacheOrdiniLavorazione(boolean onlyInevasi, HashMap>> orderList) { + @Scheduled(fixedDelay = 5, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome") + public void updateInternalCache() throws Exception { + boolean onlyInevasi = true; + HashMap>> orderList = inevasiOrdersCachedData; - String historyProfileDb = null; - try { - historyProfileDb = settingsController.getHistoryProfileDb(); - } catch (Exception ex) { - logger.error(ex.getMessage(), ex); - } - - String finalHistoryProfileDb = historyProfileDb; - Map> databases = settingsModel.getAvailableConnections(true) - .stream() - .filter(x -> finalHistoryProfileDb != null && !finalHistoryProfileDb.equalsIgnoreCase(x.getProfileName())) - .collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName)); + String historyProfileDb = settingsController.getHistoryProfileDb(); + final List availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb); - for (String dbName : databases.keySet()) { - try { - String profileName = databases.get(dbName).get(0).getProfileName(); - loadOrdiniProfile(onlyInevasi, dbName, profileName, orderList); + for (AvailableConnectionsModel connectionModel : availableConnections) { + try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) { + + boolean isEnabled = executionPermission.getOrDefault(connectionModel.getDbName(), false); + Date startDate = new Date(); + + if (isEnabled) + loadOrdiniProfile(multiDBTransactionManager, onlyInevasi, connectionModel.getDbName(), orderList); + + logger.trace(ProductionOrderDataHandlerService.class.getSimpleName() + ": Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs"); + } catch (Exception ex) { logger.error(ex.getMessage(), ex); } @@ -79,27 +103,19 @@ public class ProductionOrderDataHandlerService { } - private void loadOrdiniProfile(boolean onlyInevasi, String dbName, String profileName, HashMap>> orderList) throws Exception { - try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false)) { - Date startDate = new Date(); - //Verifichiamo se la gestione del MES รจ abilitata - boolean gestioneAbilitata = isMESEnabled(multiDBTransactionManager); + private void loadOrdiniProfile(MultiDBTransactionManager multiDBTransactionManager, boolean onlyInevasi, String dbName, HashMap>> orderList) throws Exception { + List ordiniLav = getOrdiniLavorazione(multiDBTransactionManager, onlyInevasi ? "I" : null, null, null, null, null); - if (gestioneAbilitata) { - List ordiniLav = getOrdiniLavorazione(multiDBTransactionManager, onlyInevasi ? "I" : null, null, null, null, null); - HashMap> section = getSectionByDBName(orderList, dbName); - section.clear(); - if (ordiniLav != null) - Stream.of(ordiniLav).groupBy(OrdineLavorazioneDTO::getCodJfas) - .forEach(x -> { - List listToUpdate = getListByCodJfas(section, x.getKey()); - listToUpdate.addAll(x.getValue()); - }); + HashMap> section = getSectionByDBName(orderList, dbName); + section.clear(); + if (ordiniLav != null) + Stream.of(ordiniLav).groupBy(OrdineLavorazioneDTO::getCodJfas) + .forEach(x -> { + List listToUpdate = getListByCodJfas(section, x.getKey()); + listToUpdate.addAll(x.getValue()); + }); - logger.trace(ProductionOrderDataHandlerService.class.getSimpleName() + ": Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs"); - } - } } From 45a9cb119be194c157b75fcf5a4c17d5b0dfdb33 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 7 Mar 2025 13:23:13 +0100 Subject: [PATCH 2/5] Rimosse inizializzazioni di ResponseJsonObjectMapper --- .../it/integry/ems/export/base/BaseEntityExporter.java | 3 ++- .../java/it/integry/ems/response/ServiceRestResponse.java | 4 ++-- .../runners/ExportScheduledOperationRunner.java | 3 ++- .../it/integry/ems_model/resolver/SqlFieldHolder.java | 3 ++- .../java/it/integry/ems_model/utility/UtilityJSON.java | 4 ++-- .../firebase/service/NotificationSenderComponent.java | 7 ++++--- .../ems/logistic/Export/service/ICONExportService.java | 8 ++++---- .../integry/ems/retail/controller/RetailController.java | 5 ++++- 8 files changed, 22 insertions(+), 15 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/export/base/BaseEntityExporter.java b/ems-core/src/main/java/it/integry/ems/export/base/BaseEntityExporter.java index 71a350ed51..b8ca225a5d 100644 --- a/ems-core/src/main/java/it/integry/ems/export/base/BaseEntityExporter.java +++ b/ems-core/src/main/java/it/integry/ems/export/base/BaseEntityExporter.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.exc.MismatchedInputException; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import it.integry.ems.Import.dto.AnomalieDTO; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.export.enums.EntityExportTipoInvio; import it.integry.ems.file_sharer.IFileSharer; import it.integry.ems.file_sharer.IFileSharerAttachment; @@ -251,7 +252,7 @@ public abstract class BaseEntityExporter implements IEntityExporter { case WEBSERVICES: - ResponseJSONObjectMapper objectMapper = new ResponseJSONObjectMapper(); + ResponseJSONObjectMapper objectMapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); String url = wtbUserInfo.getWsEndpoint(); diff --git a/ems-core/src/main/java/it/integry/ems/response/ServiceRestResponse.java b/ems-core/src/main/java/it/integry/ems/response/ServiceRestResponse.java index 7b38b3753e..4f224706a8 100644 --- a/ems-core/src/main/java/it/integry/ems/response/ServiceRestResponse.java +++ b/ems-core/src/main/java/it/integry/ems/response/ServiceRestResponse.java @@ -4,9 +4,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.adapter.EsitoDeserialize; import it.integry.ems.adapter.ExecDateSerializer; import it.integry.ems.adapter.JsonDateAdapterDeserializer; @@ -283,7 +283,7 @@ public class ServiceRestResponse { @JsonIgnore public T getDTO(TypeReference type) throws IOException { - ObjectMapper objectMapper = new ResponseJSONObjectMapper(); + ResponseJSONObjectMapper objectMapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); StringWriter writer = new StringWriter(); objectMapper.writeValue(writer, getJsonObject()); diff --git a/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ExportScheduledOperationRunner.java b/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ExportScheduledOperationRunner.java index 349d6a8560..64dc24f00d 100644 --- a/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ExportScheduledOperationRunner.java +++ b/ems-core/src/main/java/it/integry/ems/schedule/new_cron_job/dto/operations/runners/ExportScheduledOperationRunner.java @@ -1,5 +1,6 @@ package it.integry.ems.schedule.new_cron_job.dto.operations.runners; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.json.ResponseJSONObjectMapper; import it.integry.ems.response.EsitoType; import it.integry.ems.response.ServiceRestResponse; @@ -20,7 +21,7 @@ public class ExportScheduledOperationRunner extends BaseScheduledOperationRunner String baseUrl = "http://localhost:" + port + "/ems-api"; - ResponseJSONObjectMapper mapper = new ResponseJSONObjectMapper(); + ResponseJSONObjectMapper mapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); int status; StringBuilder jsonResponse = new StringBuilder(); diff --git a/ems-core/src/main/java/it/integry/ems_model/resolver/SqlFieldHolder.java b/ems-core/src/main/java/it/integry/ems_model/resolver/SqlFieldHolder.java index b603daac92..85d2cfbdd2 100644 --- a/ems-core/src/main/java/it/integry/ems_model/resolver/SqlFieldHolder.java +++ b/ems-core/src/main/java/it/integry/ems_model/resolver/SqlFieldHolder.java @@ -9,6 +9,7 @@ import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.PrecisionModel; import com.vividsolutions.jts.io.WKTReader; import it.integry.common.var.CommonConstants; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.expansion.RunnableArgsWithReturn; import it.integry.ems.json.ResponseJSONObjectMapper; import it.integry.ems_model.config.EmsRestConstants; @@ -59,7 +60,7 @@ public class SqlFieldHolder { private static SpelExpressionParser pp; private static StandardEvaluationContext ctx; - private static final ResponseJSONObjectMapper jsonObjectMapper = new ResponseJSONObjectMapper(); + private static final ResponseJSONObjectMapper jsonObjectMapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); private static final TypeReference> STRING_LIST_TYPE_REF = new TypeReference>() { }; diff --git a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityJSON.java b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityJSON.java index 9226ab58d3..02f53a3cfc 100644 --- a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityJSON.java +++ b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityJSON.java @@ -1,6 +1,7 @@ package it.integry.ems_model.utility; import com.fasterxml.jackson.databind.JsonNode; +import it.integry.ems._context.ApplicationContextProvider; import it.integry.ems.json.ResponseJSONObjectMapper; import org.json.JSONArray; import org.json.JSONException; @@ -10,9 +11,8 @@ import java.io.IOException; public class UtilityJSON { - private static final ResponseJSONObjectMapper jsonObjectMapper = new ResponseJSONObjectMapper(); - public static JsonNode stringToJsonNode(String jsonString) throws IOException { + ResponseJSONObjectMapper jsonObjectMapper = ApplicationContextProvider.getApplicationContext().getBean(ResponseJSONObjectMapper.class); return jsonObjectMapper.readTree(jsonString); } diff --git a/ems-core/src/main/java/it/integry/firebase/service/NotificationSenderComponent.java b/ems-core/src/main/java/it/integry/firebase/service/NotificationSenderComponent.java index dec3592478..09cf4d6332 100644 --- a/ems-core/src/main/java/it/integry/firebase/service/NotificationSenderComponent.java +++ b/ems-core/src/main/java/it/integry/firebase/service/NotificationSenderComponent.java @@ -37,6 +37,9 @@ public class NotificationSenderComponent { @Autowired private LooperService looperService; + @Autowired + private ResponseJSONObjectMapper responseJSONObjectMapper; + @PostContextConstruct(priority = 10) private void init() { if (!UtilityDebug.isDebugExecution()) @@ -91,10 +94,8 @@ public class NotificationSenderComponent { ); if (status == 200) { - ResponseJSONObjectMapper mapper = new ResponseJSONObjectMapper(); - String responseJson = jsonResponse.toString(); - ServiceRestResponse serviceRestResponse = mapper.readValue(responseJson, ServiceRestResponse.class); + ServiceRestResponse serviceRestResponse = responseJSONObjectMapper.readValue(responseJson, ServiceRestResponse.class); if (serviceRestResponse.getEsito().equals(EsitoType.KO)) { logger.error(String.format("Eccezione %s generata dall'operazione send", serviceRestResponse.getErrorMessage())); diff --git a/ems-engine/src/main/java/it/integry/ems/logistic/Export/service/ICONExportService.java b/ems-engine/src/main/java/it/integry/ems/logistic/Export/service/ICONExportService.java index f11b6aabe7..7ddedd4e94 100644 --- a/ems-engine/src/main/java/it/integry/ems/logistic/Export/service/ICONExportService.java +++ b/ems-engine/src/main/java/it/integry/ems/logistic/Export/service/ICONExportService.java @@ -7,7 +7,6 @@ import it.integry.ems.json.ResponseJSONObjectMapper; import it.integry.ems.logistic.Export.dto.MagAutoPickingRequestDTO; import it.integry.ems.logistic.Export.dto.MagAutoPickingRowRequestDTO; import it.integry.ems.response.FileItem; -import it.integry.ems.service.EntityProcessor; import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems_model.config.EmsRestConstants; @@ -38,17 +37,19 @@ import static it.integry.ems.rules.completing.QueryRules.getSingleValue; @Service @Scope("request") public class ICONExportService { + @Autowired private SetupGest setupGest; + @Autowired - EntityProcessor entityProcessor; + ResponseJSONObjectMapper jsonObjectMapper; + @Autowired MultiDBTransactionManager multiDBTransactionManager; public EntityExportResponse> invioMissionePicking(String type, String format, JsonNode body) throws Exception { EntityExportResponse> response = new EntityExportResponse<>(); - ResponseJSONObjectMapper jsonObjectMapper = new ResponseJSONObjectMapper(); MagAutoPickingRequestDTO ordT = jsonObjectMapper.readValue(body.toString(), MagAutoPickingRequestDTO.class); // Inizializzazione variabili @@ -212,7 +213,6 @@ public class ICONExportService { public EntityExportResponse invioMissioneAccettazione(String type, String format, JsonNode body) throws Exception { EntityExportResponse> response = new EntityExportResponse<>(); - ResponseJSONObjectMapper jsonObjectMapper = new ResponseJSONObjectMapper(); MtbColt colT = jsonObjectMapper.readValue(body.toString(), MtbColt.class); int index = 0; diff --git a/ems-engine/src/main/java/it/integry/ems/retail/controller/RetailController.java b/ems-engine/src/main/java/it/integry/ems/retail/controller/RetailController.java index a96ffb8a97..f817525691 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/controller/RetailController.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/controller/RetailController.java @@ -52,9 +52,13 @@ public class RetailController { @Autowired private ServiceChecker serviceChecker; + @Autowired private RequestDataDTO requestDataDTO; + @Autowired + private ResponseJSONObjectMapper jsonObjectMapper; + @RequestMapping(value = "/retail/status", method = RequestMethod.GET) public @ResponseBody List status(HttpServletRequest request) { @@ -138,7 +142,6 @@ public class RetailController { variazioniPvDTO.setFileXml(inputXML); variazioniPvDTO.setDataValidita(UtilityDate.RecognizeDate(dataValidita)); variazioniPvDTO.setUserName(requestDataDTO.getUsername()); - ResponseJSONObjectMapper jsonObjectMapper = new ResponseJSONObjectMapper(); JsonNode node = jsonObjectMapper.valueToTree(variazioniPvDTO); EntityExportResponse exportResponse = emsServices.export(EntityExportType.VARIAZIONE_PV.getText(), VariazioniExporter.Format.XML_DIALOGO.getText(), node, true); From 3bf7946fe308dfc1f5c7e83903dd6439ad7e7634 Mon Sep 17 00:00:00 2001 From: CarlaD Date: Fri, 7 Mar 2025 14:46:31 +0100 Subject: [PATCH 3/5] creata setup per rendere bloccante il controllo su cod_dgrp_art della mtb_aart nel caso sia diverso da quello della linea --- .../model/Migration_20250304104653.java | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250304104653.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250304104653.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250304104653.java deleted file mode 100644 index aab7bdfc81..0000000000 --- a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250304104653.java +++ /dev/null @@ -1,34 +0,0 @@ -package it.integry.ems.migration.model; - -import it.integry.ems.migration._base.BaseMigration; -import it.integry.ems.migration._base.IntegryCustomer; -import it.integry.ems.migration._base.MigrationModelInterface; - -public class Migration_20250304104653 extends BaseMigration implements MigrationModelInterface { - - @Override - public void up() throws Exception { - if (isHistoryDB()) - return; - - createSetup("W_VARTVENDTOT_DISP", "DATAWINDOW", "D_VARTVENDTOT_REP", null, - null, false, null, false, false, - false, false, false, null, false, null); - createSetup("W_VARTVENDTOT_DISP", "DATAWINDOW", "D_VARTVENDTOT_GRP_REP", null, - null, false, null, false, false, - false, false, false, null, false, null); - - if(isCustomer(IntegryCustomer.Maggio)) { - updateSetupValue("W_VARTVENDTOT_DISP", "DATAWINDOW", "D_VARTVENDTOT_REP", "D_VARTVENDTOT_MAGGIO_REP"); - updateSetupValue("W_VARTVENDTOT_DISP", "DATAWINDOW", "D_VARTVENDTOT_GRP_REP", "D_VARTVENDTOT_GRP_MAGGIO_REP"); - - } - - } - - @Override - public void down() throws Exception { - - } - -} From 8879c0fdbfe138b680ae68339a356cf58a4f5628 Mon Sep 17 00:00:00 2001 From: LisaS Date: Fri, 7 Mar 2025 16:48:26 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Gestata=20visualizzazione=20termini=20di=20?= =?UTF-8?q?consegna=20in=20fattura=20elettronica=20ed=20eliminata=20la=20s?= =?UTF-8?q?etup=20note=5Fpie=5Fpagina=20perch=C3=A8=20gi=C3=A0=20gestita?= =?UTF-8?q?=20nella=20setup=20testo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/Migration_20250307143631.java | 24 +++++++++++++++++ .../model/Migration_20250307163255.java | 19 +++++++++++++ .../factory/DigitalInvoiceBodyFactory.java | 27 +++++++++++-------- 3 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307143631.java create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307163255.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307143631.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307143631.java new file mode 100644 index 0000000000..8c7a8057ca --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307143631.java @@ -0,0 +1,24 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250307143631 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'"); + createSetup("FATTURA_ELETTRONICA_CUSTOM", "CAUSALE", "TERM_CONS", "N", +"Se S attiva la visualizzazione dei termini di consegna nel tag Causale", false, "SI_NO", false, false, +false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'"); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307163255.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307163255.java new file mode 100644 index 0000000000..80725cd228 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307163255.java @@ -0,0 +1,19 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250307163255 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement("delete from stb_gest_setup where gest_name ='fattura_elettronica_custom' and section ='causale' and key_section ='note_pie_pagina'"); + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-engine/src/main/java/it/integry/ems/document/fatture/factory/DigitalInvoiceBodyFactory.java b/ems-engine/src/main/java/it/integry/ems/document/fatture/factory/DigitalInvoiceBodyFactory.java index 010273d07f..06924c0f38 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/fatture/factory/DigitalInvoiceBodyFactory.java +++ b/ems-engine/src/main/java/it/integry/ems/document/fatture/factory/DigitalInvoiceBodyFactory.java @@ -499,17 +499,31 @@ public class DigitalInvoiceBodyFactory { } } + // se configurato inserisce nel tag CAUSALE i termini di consegna del documento + if (setupCustom.getSetupBoolean("FATTURA_ELETTRONICA_CUSTOM", "CAUSALE", "TERM_CONS")) { + sql = "select dtb_doct.term_cons " + + " from dtb_doct " + + " where dtb_doct.cod_dtip = " + UtilityDB.valueToString(bodyFattura.getCodDtipDocumento()) + " and " + + " dtb_doct.cod_anag = " + UtilityDB.valueToString(bodyFattura.getCodAnagDocumento()) + "and " + + " dtb_doct.data_doc = " + UtilityDB.valueDateToString(bodyFattura.getDataDocumento(), CommonConstants.DATE_FORMAT_YMD) + "and " + + " dtb_doct.ser_doc = " + UtilityDB.valueToString(bodyFattura.getSerieDocumento()) + "and " + + " dtb_doct.num_doc = " + UtilityDB.valueToString(bodyFattura.getNumeroDocumento()); + String termCons = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + if (!UtilityString.isNullOrEmpty(termCons)) { + datiGeneraliDocumento.getCausale().add(termCons); + } + } + // se configurato inserisce nel tag CAUSALE le note del cliente presenti nella gtb_anag_note con flag_stampa_doc ='S' if (setupCustom.getSetupBoolean("FATTURA_ELETTRONICA_CUSTOM", "CAUSALE", "GTB_ANAG_NOTE")) { sql = "SELECT note FROM gtb_anag_note WHERE flag_stampa_doc ='S' and cod_anag = " + UtilityDB.valueToString(request.getCodAnag()) + " ORDER BY riga_note"; - List notes = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - for (String note : notes) { datiGeneraliDocumento.getCausale().add(note); } } + //se configurato inserisce nel tag CAUSALE tutte le partite di magazzino presenti nel docuemnto if (setupCustom.getSetupBoolean("FATTURA_ELETTRONICA_CUSTOM", "COD_ANAG_" + request.getCodAnag(), "CAUSALE_LOTTO")) { final String[] matricole = {""}; @@ -525,15 +539,6 @@ public class DigitalInvoiceBodyFactory { } } - // Elenco note da aggiungere alla fattura (Es. dicitura CONAI ) - String noteDoc = setup.getSetup("FATTURA_ELETTRONICA_CUSTOM", "CAUSALE", "NOTE_PIE_PAGINA"); - if (noteDoc != null && !noteDoc.isEmpty()) { - String[] notes = noteDoc.split("\\|"); - for (int j = 0; j < notes.length; j++) { - datiGeneraliDocumento.getCausale().add(notes[j]); - } - } - return datiGeneraliDocumento; } From e5e7ab0f87523bf71aad64ac29a03f0231120c2b Mon Sep 17 00:00:00 2001 From: LisaS Date: Fri, 7 Mar 2025 17:13:15 +0100 Subject: [PATCH 5/5] Aggiunto campo flag_bio per gestire dicitura bio in stampa documenti --- .../model/Migration_20250307170225.java | 19 +++++++++++++++++++ .../it/integry/ems_model/entity/MtbStip.java | 11 +++++++++++ 2 files changed, 30 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307170225.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307170225.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307170225.java new file mode 100644 index 0000000000..32d1aa9bb1 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250307170225.java @@ -0,0 +1,19 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250307170225 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement("alter table mtb_stip add flag_bio bit not null default 0"); + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/MtbStip.java b/ems-core/src/main/java/it/integry/ems_model/entity/MtbStip.java index 7abd1e5327..58b24946cb 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/MtbStip.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/MtbStip.java @@ -52,6 +52,9 @@ public class MtbStip extends EntityBase { @SqlField(value = "expr_calc_descr_estesa", maxLength = 8000) private String exprCalcDescrEstesa; + @SqlField(value = "flag_bio", nullable = false, defaultObjectValue = "0") + private Boolean flagBio; + @EntityChild private List mtbTipiCarat = new ArrayList<>(); @@ -131,6 +134,14 @@ public class MtbStip extends EntityBase { this.exprCalcDescrEstesa = exprCalcDescrEstesa; } + public Boolean getFlagBio() { + return flagBio; + } + + public void setFlagBio(Boolean flagBio) { + this.flagBio = flagBio; + } + public List getMtbTipiCarat() { return mtbTipiCarat; }