Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-12-10 11:30:27 +01:00
4 changed files with 199 additions and 127 deletions

View File

@@ -16,8 +16,8 @@ import it.integry.ems.exception.SyncException;
import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems_model.base.ComposedEntityBase;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.exception.EntityException;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityException;
import it.integry.ems_model.utility.UtilityString;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -81,66 +81,16 @@ public class ServiceRestResponse {
this.profileDB = profileDb;
this.errorType = e.getClass().getCanonicalName();
this.errorMessage = e.getMessage();
if (e instanceof SyncException) {
profileDB = ((SyncException) e).getProfileDb();
}
if (e instanceof NullPointerException) {
if(e.getStackTrace().length > 0)
this.errorMessage = "Null value at " + e.getStackTrace()[0].toString();
else this.errorMessage = "Empty stacktrace\n" + e;
} else if (e instanceof BaseSystemException) {
this.errorCode = ((BaseSystemException) e).getCode();
this.errorMessage = ((BaseSystemException) e).getCustomMessage();
} else if (e instanceof EntityException) {
EntityException entityException = (EntityException) e;
boolean isRuntimeException = false;
boolean isRuleException = false;
String message = "";
//Nel caso sia un errore legato alle regole
if (entityException.getInnerException() instanceof RuntimeException) {
message += entityException.getInnerException().getCause().getMessage() + "\n";
isRuntimeException = true;
}
message += "Impossibile salvare l'entity: " + entityException.getEntityTableName();
String startMatch = "it.integry.rules.Rule_";
String endMatch = "Eval";
if (entityException.getInnerException().getMessage().startsWith(startMatch)) {
isRuleException = true;
String innerMessage = entityException.getInnerException().getMessage();
String ruleName = innerMessage.substring(innerMessage.indexOf(startMatch) + startMatch.length(), innerMessage.indexOf(endMatch));
message += "\nRegola: " + ruleName;
}
if (!isRuntimeException) {
message += "\n(" + ((EntityException) e).getInnerException().getMessage() + ")";
}
this.errorMessage = message;
} else if (e instanceof RuntimeException) {
String message = e.getCause() != null && e.getCause().getMessage() != null ? e.getCause().getMessage() : e.toString();
String startMatch = "it.integry.rules.Rule_";
String endMatch = "Eval";
if (e.getMessage() != null && e.getMessage().startsWith(startMatch)) {
String innerMessage = e.getMessage();
String ruleName = innerMessage.substring(innerMessage.indexOf(startMatch) + startMatch.length(), innerMessage.indexOf(endMatch));
message += "\nRegola: " + ruleName;
}
this.errorMessage = message;
if (e instanceof BaseSystemException) {
errorCode = ((BaseSystemException) e).getCode();
}
this.errorMessage = UtilityException.convertExceptionToHumanReadableText(e);
if (!UtilityString.isNullOrEmpty(this.profileDB))
this.errorMessage += " (" + this.profileDB + ")";
}
@@ -332,7 +282,7 @@ public class ServiceRestResponse {
}
@JsonIgnore
public <T>T getDTO(TypeReference<T> type) throws IOException {
public <T> T getDTO(TypeReference<T> type) throws IOException {
ObjectMapper objectMapper = new ResponseJSONObjectMapper();
StringWriter writer = new StringWriter();

View File

@@ -0,0 +1,70 @@
package it.integry.ems_model.utility;
import it.integry.ems.exception.BaseSystemException;
import it.integry.ems_model.exception.EntityException;
public class UtilityException {
public static String convertExceptionToHumanReadableText(Exception e) {
String errorMessage = e.getMessage();;
int errorCode = -1;
if (e instanceof NullPointerException) {
if(e.getStackTrace().length > 0)
errorMessage = "Null value at " + e.getStackTrace()[0].toString();
else errorMessage = "Empty stacktrace\n" + e;
} else if (e instanceof BaseSystemException) {
errorCode = ((BaseSystemException) e).getCode();
errorMessage = ((BaseSystemException) e).getCustomMessage();
} else if (e instanceof EntityException) {
EntityException entityException = (EntityException) e;
boolean isRuntimeException = false;
boolean isRuleException = false;
String message = "";
//Nel caso sia un errore legato alle regole
if (entityException.getInnerException() instanceof RuntimeException) {
message += entityException.getInnerException().getCause().getMessage() + "\n";
isRuntimeException = true;
}
message += "Impossibile salvare l'entity: " + entityException.getEntityTableName();
String startMatch = "it.integry.rules.Rule_";
String endMatch = "Eval";
if (entityException.getInnerException().getMessage().startsWith(startMatch)) {
isRuleException = true;
String innerMessage = entityException.getInnerException().getMessage();
String ruleName = innerMessage.substring(innerMessage.indexOf(startMatch) + startMatch.length(), innerMessage.indexOf(endMatch));
message += "\nRegola: " + ruleName;
}
if (!isRuntimeException) {
message += "\n(" + ((EntityException) e).getInnerException().getMessage() + ")";
}
errorMessage = message;
} else if (e instanceof RuntimeException) {
String message = e.getCause() != null && e.getCause().getMessage() != null ? e.getCause().getMessage() : e.toString();
String startMatch = "it.integry.rules.Rule_";
String endMatch = "Eval";
if (e.getMessage() != null && e.getMessage().startsWith(startMatch)) {
String innerMessage = e.getMessage();
String ruleName = innerMessage.substring(innerMessage.indexOf(startMatch) + startMatch.length(), innerMessage.indexOf(endMatch));
message += "\nRegola: " + ruleName;
}
errorMessage = message;
}
return errorMessage;
}
}

View File

@@ -204,6 +204,18 @@ public class WMSArticoloService {
MtbAart mtbAart = articolo.toMtbAart();
mtbAart.setOperation(OperationType.INSERT_OR_UPDATE);
if(UtilityString.isNullOrEmpty(mtbAart.getPartIvaProd())) {
String selectCodAliq = "SELECT DISTINCT cod_aliq " +
"FROM " + GtbAliq.ENTITY + " " +
"WHERE perc_aliq = 22";
String codAliq = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), selectCodAliq);
if(!UtilityString.isNullOrEmpty(codAliq)) {
mtbAart.setCodAliq(codAliq);
}
}
if (UtilityString.isNullOrEmpty(mtbAart.getCodMart())) {
mtbAart.setCodMart(suggestCodMart(mtbAart, articolo.getPrecode()));
}

View File

@@ -8,9 +8,12 @@ import it.integry.ems.sync.MultiDBTransaction.AdvancedDataSource;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.system.exchange.service.structure.ExchangeImportSchemaManagerService;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.entity.StbExchangeConfig;
import it.integry.ems_model.entity.StbExchangeConfigDetail;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +22,9 @@ import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
@@ -58,6 +64,7 @@ public class ExchangeSystemManagerService {
for (StbExchangeConfig stbExchangeConfig : stbExchangeConfigsToRetrieve) {
registerSchedulation(stbExchangeConfig);
// break;
}
}
@@ -85,100 +92,133 @@ public class ExchangeSystemManagerService {
private void executeExchange(StbExchangeConfig stbExchangeConfig) {
logger.info("Avvio EXCHANGE [" + stbExchangeConfig.getDescription() + "]");
StbExchangeConfigDetail executingStbExchangeConfigDetail = null;
try (MultiDBTransactionManager internalDb = new MultiDBTransactionManager(stbExchangeConfig.getInternalProfileDb());
MultiDBTransactionManager exchangeDb = new MultiDBTransactionManager(stbExchangeConfig.getExternalProfileDb())) {
try (MultiDBTransactionManager internalDb = new MultiDBTransactionManager(stbExchangeConfig.getInternalProfileDb())) {
try (
MultiDBTransactionManager exchangeDb = new MultiDBTransactionManager(stbExchangeConfig.getExternalProfileDb())) {
List<StbExchangeConfigDetail> stbExchangeConfigs = UtilityDB.executeSimpleQueryDTO(internalDb.getPrimaryConnection(),
"SELECT * FROM " + StbExchangeConfigDetail.ENTITY + " " +
" WHERE stb_exchange_config_id = " + stbExchangeConfig.getId() +
" ORDER BY execution_order", StbExchangeConfigDetail.class);
if (stbExchangeConfigs == null) return;
List<StbExchangeConfigDetail> stbExchangeConfigs = UtilityDB.executeSimpleQueryDTO(internalDb.getPrimaryConnection(),
"SELECT * FROM " + StbExchangeConfigDetail.ENTITY + " " +
" WHERE stb_exchange_config_id = " + stbExchangeConfig.getId() +
" ORDER BY execution_order", StbExchangeConfigDetail.class);
if (stbExchangeConfigs == null) return;
RequestDataDTO requestDataDTO = new RequestDataDTO();
requestDataDTO.setUsername("EXCHANGE");
RequestDataDTO requestDataDTO = new RequestDataDTO();
requestDataDTO.setUsername("EXCHANGE");
for (StbExchangeConfigDetail stbExchangeConfigDetail : stbExchangeConfigs) {
final ExchangeImportSchemaManagerService.SchemaType schemaType = ExchangeImportSchemaManagerService.SchemaType.from(stbExchangeConfigDetail.getConfigType());
stbExchangeConfig.setLastExecution(LocalDateTime.now())
.setLastExecutionErrorMessage(EmsRestConstants.NULL)
.setOperation(OperationType.UPDATE);
switch (schemaType) {
case ColliLavorazione:
final ExchangeColliImportService beanColliLavorazione = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeColliImportService.class);
beanColliLavorazione.importLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
stbExchangeConfig.manageWithParentConnection(internalDb.getPrimaryConnection());
case VersamentoGrezzo:
final ExchangeColliImportService beanVersamentoGrezzo = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeColliImportService.class);
beanVersamentoGrezzo.importVersamentoGrezzo(internalDb, exchangeDb, requestDataDTO);
break;
for (StbExchangeConfigDetail stbExchangeConfigDetail : stbExchangeConfigs) {
executingStbExchangeConfigDetail = stbExchangeConfigDetail;
final ExchangeImportSchemaManagerService.SchemaType schemaType = ExchangeImportSchemaManagerService.SchemaType.from(stbExchangeConfigDetail.getConfigType());
case OrdiniLavorazione:
final ExchangeOrdiniImportService beanOrdiniLavorazione = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeOrdiniImportService.class);
beanOrdiniLavorazione.importOrdiniLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
switch (schemaType) {
case ColliLavorazione:
final ExchangeColliImportService beanColliLavorazione = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeColliImportService.class);
beanColliLavorazione.importLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
case DocumentiLavorazione:
final ExchangeDocumentImportService beanDocumentiLavorazione = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDocumentImportService.class);
beanDocumentiLavorazione.importLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
case VersamentoGrezzo:
final ExchangeColliImportService beanVersamentoGrezzo = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeColliImportService.class);
beanVersamentoGrezzo.importVersamentoGrezzo(internalDb, exchangeDb, requestDataDTO);
break;
case DocumentiVendita:
final ExchangeDocumentImportService beanDocumentiVendita = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDocumentImportService.class);
beanDocumentiVendita.importVendita(internalDb, exchangeDb, requestDataDTO);
break;
case OrdiniLavorazione:
final ExchangeOrdiniImportService beanOrdiniLavorazione = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeOrdiniImportService.class);
beanOrdiniLavorazione.importOrdiniLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
case Articoli:
final ExchangeArticoliImportService beanArticoli = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeArticoliImportService.class);
beanArticoli.importArticoli(internalDb, exchangeDb, requestDataDTO);
break;
case DocumentiLavorazione:
final ExchangeDocumentImportService beanDocumentiLavorazione = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDocumentImportService.class);
beanDocumentiLavorazione.importLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
case PartiteMagazzinoLavorazione:
final ExchangePartiteMagazzinoImportService beanPartiteMagazzino = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangePartiteMagazzinoImportService.class);
beanPartiteMagazzino.importPartiteMagazzinoLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
case DocumentiVendita:
final ExchangeDocumentImportService beanDocumentiVendita = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDocumentImportService.class);
beanDocumentiVendita.importVendita(internalDb, exchangeDb, requestDataDTO);
break;
case CampiRaccolta:
final ExchangeOrdiniImportService beanCampiRaccolta = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeOrdiniImportService.class);
beanCampiRaccolta.importCampiDiRaccolta(internalDb, exchangeDb, requestDataDTO);
break;
case Articoli:
final ExchangeArticoliImportService beanArticoli = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeArticoliImportService.class);
beanArticoli.importArticoli(internalDb, exchangeDb, requestDataDTO);
break;
case Banche:
final ExchangeBancheImportService beanBancheAziendali = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeBancheImportService.class);
beanBancheAziendali.importBanche(internalDb, exchangeDb, requestDataDTO);
break;
case PartiteMagazzinoLavorazione:
final ExchangePartiteMagazzinoImportService beanPartiteMagazzino = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangePartiteMagazzinoImportService.class);
beanPartiteMagazzino.importPartiteMagazzinoLavorazione(internalDb, exchangeDb, requestDataDTO);
break;
case Clienti:
final ExchangeClientiImportService beanClienti = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeClientiImportService.class);
beanClienti.importClienti(internalDb, exchangeDb, requestDataDTO);
break;
case CampiRaccolta:
final ExchangeOrdiniImportService beanCampiRaccolta = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeOrdiniImportService.class);
beanCampiRaccolta.importCampiDiRaccolta(internalDb, exchangeDb, requestDataDTO);
break;
case Fornitori:
final ExchangeFornitoriImportService beanFornitori = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeFornitoriImportService.class);
beanFornitori.importFornitori(internalDb, exchangeDb, requestDataDTO);
break;
case Banche:
final ExchangeBancheImportService beanBancheAziendali = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeBancheImportService.class);
beanBancheAziendali.importBanche(internalDb, exchangeDb, requestDataDTO);
break;
case PDCAnag:
final ExchangePDCContiImportService beanPdcConti = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangePDCContiImportService.class);
beanPdcConti.importContiAnag(internalDb, exchangeDb, requestDataDTO);
break;
case Clienti:
final ExchangeClientiImportService beanClienti = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeClientiImportService.class);
beanClienti.importClienti(internalDb, exchangeDb, requestDataDTO);
break;
case Destinatari:
final ExchangeDestinatariImportService beanDestinatari = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDestinatariImportService.class);
beanDestinatari.importDestinatari(internalDb, exchangeDb, requestDataDTO);
break;
case Fornitori:
final ExchangeFornitoriImportService beanFornitori = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeFornitoriImportService.class);
beanFornitori.importFornitori(internalDb, exchangeDb, requestDataDTO);
break;
case PDCAnag:
final ExchangePDCContiImportService beanPdcConti = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangePDCContiImportService.class);
beanPdcConti.importContiAnag(internalDb, exchangeDb, requestDataDTO);
break;
case Destinatari:
final ExchangeDestinatariImportService beanDestinatari = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDestinatariImportService.class);
beanDestinatari.importDestinatari(internalDb, exchangeDb, requestDataDTO);
break;
case DocumentiAcquisto:
final ExchangeDocumentImportService beanDocumentiAcquisto = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDocumentImportService.class);
beanDocumentiAcquisto.importAcquisto(internalDb, exchangeDb, requestDataDTO);
break;
}
case DocumentiAcquisto:
final ExchangeDocumentImportService beanDocumentiAcquisto = ContextLoader.getCurrentWebApplicationContext().getBean(ExchangeDocumentImportService.class);
beanDocumentiAcquisto.importAcquisto(internalDb, exchangeDb, requestDataDTO);
break;
}
} catch (Exception e) {
logger.error("Errore", e);
saveErrorLog(internalDb, stbExchangeConfig, executingStbExchangeConfigDetail, e);
throw new RuntimeException(e);
} finally {
logger.info("Fine EXCHANGE [" + stbExchangeConfig.getDescription() + "]");
}
} catch (Exception e) {
logger.error("Errore", e);
throw new RuntimeException(e);
} finally {
logger.info("Fine EXCHANGE [" + stbExchangeConfig.getDescription() + "]");
}
}
private void saveErrorLog(MultiDBTransactionManager internalDb, @NotNull StbExchangeConfig stbExchangeConfig, @Nullable StbExchangeConfigDetail stbExchangeConfigDetail, @NotNull Exception exceptionToLog) {
String logMessage = "";
if (stbExchangeConfigDetail != null) {
logMessage = String.format("[Importazione %s]\n", ExchangeImportSchemaManagerService.SchemaType.from(stbExchangeConfigDetail.getConfigType()));
}
logMessage += UtilityException.convertExceptionToHumanReadableText(exceptionToLog);
stbExchangeConfig.setLastExecutionErrorMessage(logMessage)
.setOperation(OperationType.UPDATE);
try {
stbExchangeConfig.manageWithParentConnection(internalDb.getPrimaryConnection());
} catch (Exception e) {
logger.error("Errore durante l'aggiornamento dello stato dell'exchange", e);
}
}