Merge branch 'develop' into feature/JDK11
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
jenkins
2025-02-05 11:57:23 +01:00
11 changed files with 294 additions and 295 deletions

View File

@@ -95,6 +95,13 @@ public class RequestDataDTO {
}
}
public static RequestDataDTO systemMockupData() {
return new RequestDataDTO()
.setUsername("dba")
.setPassword("sql");
}
public boolean isValidProfileDB() {
return !UtilityString.isNullOrEmpty(profileDB);
}
@@ -133,16 +140,18 @@ public class RequestDataDTO {
return username;
}
public void setUsername(String username) {
public RequestDataDTO setUsername(String username) {
this.username = username;
return this;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
public RequestDataDTO setPassword(String password) {
this.password = password;
return this;
}
public boolean shouldIncludeNulls() {

View File

@@ -3,6 +3,7 @@ package it.integry.ems.service;
import it.integry.ems.properties.EmsProperties;
import it.integry.ems.report.dto.ReportTypeDTO;
import it.integry.ems.service.exception.EmptyReportException;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems_model.entity.WtbJreptSetup;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.UtilityString;
@@ -32,8 +33,6 @@ import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import it.integry.ems.sync.MultiDBTransaction.Connection;
@Service
@Scope("request")
public class PrinterService {
@@ -239,10 +238,11 @@ public class PrinterService {
return reportProcessor.getReportForReportType(reportTypeDTO);
}
public String printReportType(ReportTypeDTO reportTypeDTO) throws Exception {
public void printReportType(ReportTypeDTO reportTypeDTO) throws Exception {
WtbJreptSetup impostazioniStampa = reportProcessor.getReportForReportType(reportTypeDTO);
if (impostazioniStampa == null) {
throw new Exception("Nessuna configurazione trovata per il tipo report " + reportTypeDTO.getReportType().toString());
logger.warn("Nessuna configurazione trovata per il tipo report " + reportTypeDTO.getReportType().toString());
return;
}
String printerName = impostazioniStampa.getPrinterName();
Integer numberOfCopies = impostazioniStampa.getPrintQuantity();
@@ -256,16 +256,15 @@ public class PrinterService {
switch (impostazioniStampa.getOrientation()) {
case PORTRAIT:
orientation = Orientation.PORTRAIT;
break;
case LANDSCAPE:
orientation = Orientation.LANDSCAPE;
break;
default:
case AUTO:
orientation = Orientation.AUTO;
case AUTO:
default:
orientation = Orientation.AUTO;
break;
}
numberOfCopies = numberOfCopies == null ? 1 : numberOfCopies;
@@ -273,8 +272,6 @@ public class PrinterService {
print(printerName, new ByteArrayInputStream(bytes), "application/pdf", orientation);
}
return printerName;
} else {
throw new EmptyReportException();
}

View File

@@ -59,6 +59,10 @@ public class MultiDBTransactionManager implements AutoCloseable {
this(connectionsModel.getProfileName(), true);
}
public MultiDBTransactionManager(AvailableConnectionsModel connectionsModel, boolean enableLog) throws Exception {
this(connectionsModel.getProfileName(), enableLog);
}
public MultiDBTransactionManager(String profileDb) throws Exception {
this(profileDb, true);
}

View File

@@ -120,7 +120,8 @@ public class EmsEngineController {
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody ReportTypeDTO reportTypeDTO) {
try {
return ServiceRestResponse.createPositiveResponse(printerService.printReportType(reportTypeDTO));
printerService.printReportType(reportTypeDTO);
return ServiceRestResponse.createPositiveResponse();
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
return ServiceRestResponse.createNegativeResponse(configuration, e);

View File

@@ -10,6 +10,7 @@ import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.db.ResultSetMapper;
@@ -296,10 +297,15 @@ public class AutofatturaService {
}
public void chkAutofattura() throws Exception {
for (AvailableConnectionsModel model : settingsModel.getAvailableConnections()) {
if (!model.getInternalDb())
continue;
List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnections(true);
if (UtilityDebug.isIntegryServer()) {
availableConnections = availableConnections.stream().filter(x ->
x.getDbName().equalsIgnoreCase("STUDIOML"))
.collect(java.util.stream.Collectors.toList());
}
for (AvailableConnectionsModel model : availableConnections) {
DataSource ds = new DataSource();
ds.initialize(model.getProfileName());
Connection conn = ds.getConnection();

View File

@@ -1,114 +1,172 @@
package it.integry.ems.product.service;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.service.HttpRestWrapper;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.AtbOffr;
import it.integry.ems_model.entity.AtbOfft;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityServer;
import org.apache.http.entity.ContentType;
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 java.net.InetAddress;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class ContrattiDiAcquistoHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@Autowired
private SettingsController settingsController;
@Autowired
private ResponseJSONObjectMapper jsonObjectMapper;
private EntityProcessor entityProcessor;
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> 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;
@PostWebServerConstruct
public void init() {
if (executeUpdate()) {
looperService.add(() -> this.updateProgContrattoA(), 10 * 1000, ContrattiDiAcquistoHandlerService.class.getName());
}
}
private boolean executeUpdate(){
return !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer();
}
public void updateProgContrattoA() {
try {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz = 'WG098'\n" +
" AND flag_abil <> 'N'";
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections(true)
.stream()
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
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(ContrattiDiAcquistoHandlerService.class.getSimpleName(), ex);
throw ex;
}
}
@Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome")
private void updateProgContrattoA() throws Exception {
if (!canBeExecuted) return;
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
//Verifichiamo se la gestione dei contratti di acquisto è abilitata
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz = 'WG098'\n" +
" AND flag_abil <> 'N'";
boolean gestioneAbilitata = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
multiDBTransactionManager.closeAll();
for (AvailableConnectionsModel connectionModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
boolean isEnabled = executionPermission.getOrDefault(connectionModel.getDbName(), false);
Date startDate = new Date();
if (gestioneAbilitata) {
HashMap<String, String> param = new HashMap<>();
param.put("profileDb", profileName);
StringBuilder jsonResponse = new StringBuilder();
if (isEnabled)
updateProgressivi(multiDBTransactionManager);
final String servicename = "contratti-acquisto/updateProgressivi";
String url = String.format(
"http://%s:%s/ems-api/%s",
InetAddress.getLocalHost().getHostAddress(),
UtilityServer.getLocalServerPort(),
servicename
);
int requestStatusCode = HttpRestWrapper.callGeneric(url, "", "", "", ContentType.TEXT_PLAIN, jsonResponse, param);
if (requestStatusCode != 200) {
throw new Exception(String.format("Non è stato possibile chiamare il servizio di %s (Status: %s)", servicename, requestStatusCode));
} else {
ServiceRestResponse responseObject = jsonObjectMapper.readValue(jsonResponse.toString(), ServiceRestResponse.class);
if (responseObject.getEsito() == EsitoType.KO) {
throw new Exception(responseObject.getErrorMessage());
}
}
}
logger.trace(ContrattiDiAcquistoHandlerService.class.getSimpleName() + ": Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
public List<EntityBase> updateProgressivi(MultiDBTransactionManager mdb) throws Exception {
String sql =
"WITH ord AS\n" +
" (SELECT dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart,\n" +
" SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) / dtb_ordr.rap_conv) AS qta_ord\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" WHERE dtb_ordt.gestione = 'A'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart)\n" +
" , doc AS (SELECT dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart,\n" +
" SUM(dtb_docr.qta_doc / dtb_docr.rap_conv) AS qta_doc\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" WHERE dtb_doct.gestione = 'A'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_docr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart)\n" +
"SELECT atb_offr.id_contratto,\n" +
" atb_offr.riga_off,\n" +
" atb_offr.cod_mart,\n" +
" ISNULL(ord.qta_ord / atb_offr.rap_conv, 0) AS qta_ord,\n" +
" ISNULL(doc.qta_doc / atb_offr.rap_conv, 0) AS qta_doc\n" +
"FROM atb_offr\n" +
" LEFT OUTER JOIN ord ON atb_offr.id_contratto = ord.id_contratto AND atb_offr.cod_mart = ord.cod_mart\n" +
" LEFT OUTER JOIN doc ON atb_offr.id_contratto = doc.id_contratto AND atb_offr.cod_mart = doc.cod_mart\n" +
"WHERE (atb_offr.qta_ord <> ISNULL(ord.qta_ord / atb_offr.rap_conv, 0) OR\n" +
" atb_offr.qta_doc <> ISNULL(doc.qta_doc / atb_offr.rap_conv, 0))\n" ;
List<AtbOffr> atbOffrs = new ResultSetMapper().mapQuerySetToList(mdb.getPrimaryConnection(), sql, AtbOffr.class, OperationType.UPDATE);
List<AtbOfft> atbOfftsToSave = new ArrayList<>();
atbOffrs.stream()
.collect(Collectors.groupingBy(AtbOffr::getIdContratto))
.forEach((key, value) -> {
atbOfftsToSave.add(new AtbOfft()
.setIdContratto(key)
.setAtbOffr(value));
});
List<EntityBase> ret = entityProcessor.processEntityList(atbOfftsToSave, null, true, false, false, mdb, true, false, RequestDataDTO.systemMockupData());
UtilityEntity.throwEntitiesException(ret);
/*
mailService.sendSystemErrorLog("[" + multiDBTransactionManager.getPrimaryDatasource().getDbName() + " - " + azienda.getNomeDitta() + "][" + UtilityServer.getHostName() + "] Verifica autofatture ",
"Verifica autofatture",
"Sull'azienda " + azienda.getNomeDitta() + " non è presente nessuna email con flag default contabilità, non sarà possibile inviare la mail di verifica.",
(String) null, new Date());
*/
return ret;
}
}

View File

@@ -1,13 +1,13 @@
package it.integry.ems.product.service;
import com.annimon.stream.Stream;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.entity.AtbForn;
import it.integry.ems_model.entity.AtbList;
import it.integry.ems_model.entity.AtbOfft;
import it.integry.ems_model.entity.GtbAnag;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
@@ -30,7 +30,7 @@ public class ContrattiDiAcquistoService {
MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private MailService mailService;
private ContrattiDiAcquistoHandlerService contrattiDiAcquistoHandlerService;
public List<EntityBase> save(AtbOfft atbOfft) throws Exception {
@@ -114,70 +114,6 @@ public class ContrattiDiAcquistoService {
}
public List<EntityBase> updateProgressivi() throws Exception {
String sql =
"WITH ord AS\n" +
" (SELECT dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart,\n" +
" SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) / dtb_ordr.rap_conv) AS qta_ord\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" WHERE dtb_ordt.gestione = 'A'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart)\n" +
" , doc AS (SELECT dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart,\n" +
" SUM(dtb_docr.qta_doc / dtb_docr.rap_conv) AS qta_doc\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" WHERE dtb_doct.gestione = 'A'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_docr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart)\n" +
"SELECT atb_offr.id_contratto,\n" +
" atb_offr.riga_off,\n" +
" atb_offr.cod_mart,\n" +
" ISNULL(ord.qta_ord / atb_offr.rap_conv, 0) AS qta_ord,\n" +
" ISNULL(doc.qta_doc / atb_offr.rap_conv, 0) AS qta_doc\n" +
"FROM atb_offr\n" +
" LEFT OUTER JOIN ord ON atb_offr.id_contratto = ord.id_contratto AND atb_offr.cod_mart = ord.cod_mart\n" +
" LEFT OUTER JOIN doc ON atb_offr.id_contratto = doc.id_contratto AND atb_offr.cod_mart = doc.cod_mart\n" +
"WHERE (atb_offr.qta_ord <> ISNULL(ord.qta_ord / atb_offr.rap_conv, 0) OR\n" +
" atb_offr.qta_doc <> ISNULL(doc.qta_doc / atb_offr.rap_conv, 0))\n" ;
List<AtbOffr> atbOffrs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, AtbOffr.class, OperationType.UPDATE);
List<AtbOfft> atbOfftsToSave = new ArrayList<>();
Stream.of(atbOffrs)
.groupBy(AtbOffr::getIdContratto)
.forEach(x -> {
atbOfftsToSave.add(new AtbOfft()
.setIdContratto(x.getKey())
.setAtbOffr(x.getValue()));
});
List<EntityBase> ret = entityProcessor.processEntityList(atbOfftsToSave, multiDBTransactionManager, false);
UtilityEntity.throwEntitiesException(ret);
/*
mailService.sendSystemErrorLog("[" + multiDBTransactionManager.getPrimaryDatasource().getDbName() + " - " + azienda.getNomeDitta() + "][" + UtilityServer.getHostName() + "] Verifica autofatture ",
"Verifica autofatture",
"Sull'azienda " + azienda.getNomeDitta() + " non è presente nessuna email con flag default contabilità, non sarà possibile inviare la mail di verifica.",
(String) null, new Date());
*/
return ret;
return contrattiDiAcquistoHandlerService.updateProgressivi(multiDBTransactionManager);
}
}

View File

@@ -1,116 +1,165 @@
package it.integry.ems.product.service;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.service.HttpRestWrapper;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.VtbOffr;
import it.integry.ems_model.entity.VtbOfft;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityServer;
import org.apache.http.entity.ContentType;
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 java.net.InetAddress;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class ContrattiDiVenditaHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@Autowired
private SettingsController settingsController;
@Autowired
private ResponseJSONObjectMapper jsonObjectMapper;
private EntityProcessor entityProcessor;
@PostWebServerConstruct
public void init() {
if (executeUpdate()) {
looperService.add(this::updateProgContrattoV, 10 * 1000, ContrattiDiVenditaHandlerService.class.getName());
}
}
private boolean canBeExecuted = false;
private boolean executeUpdate(){
return !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer();
}
private final HashMap<String, Boolean> 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;
public void updateProgContrattoV() {
try {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz = 'WG097'\n" +
" AND flag_abil <> 'N'";
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections(true)
.stream()
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
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(ContrattiDiAcquistoHandlerService.class.getSimpleName(), ex);
throw ex;
}
}
@Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome")
private void updateProgContrattoV() throws Exception {
if (!canBeExecuted) return;
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
//Verifichiamo se la gestione dei contratti di acquisto è abilitata
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz = 'WG097'\n" +
" AND flag_abil <> 'N'";
boolean gestioneAbilitata = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
multiDBTransactionManager.closeAll();
for (AvailableConnectionsModel connectionModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
boolean isEnabled = executionPermission.getOrDefault(connectionModel.getDbName(), false);
Date startDate = new Date();
if (gestioneAbilitata) {
HashMap<String, String> param = new HashMap<>();
param.put("profileDb", profileName);
StringBuilder jsonResponse = new StringBuilder();
final String servicename = "contratti-vendita/updateProgressivi";
String url = String.format(
"http://%s:%s/ems-api/%s",
InetAddress.getLocalHost().getHostAddress(),
UtilityServer.getLocalServerPort(),
servicename
);
int requestStatusCode = HttpRestWrapper.callGeneric(url, "", "", "", ContentType.TEXT_PLAIN, jsonResponse, param);
if (requestStatusCode != 200) {
throw new Exception(String.format("Non è stato possibile chiamare il servizio di %s (Status: %s)", servicename, requestStatusCode));
} else {
ServiceRestResponse responseObject = jsonObjectMapper.readValue(jsonResponse.toString(), ServiceRestResponse.class);
if (responseObject.getEsito() == EsitoType.KO) {
throw new Exception(responseObject.getErrorMessage());
}
}
}
logger.trace(ContrattiDiVenditaHandlerService.class.getSimpleName() + ": Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
if (isEnabled)
updateProgressivi(multiDBTransactionManager);
logger.trace(ContrattiDiAcquistoHandlerService.class.getSimpleName() + ": Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
public List<EntityBase> updateProgressivi(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"WITH ord AS\n" +
" (SELECT dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart,\n" +
" SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv) AS qta_ord\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" WHERE dtb_ordt.gestione = 'V'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart)\n" +
" , doc AS (SELECT dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart,\n" +
" SUM(dtb_tipi.segno_qta_scar * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_doc,\n" +
" SUM(IIF(dtb_doct.num_cmov is not null,1, 0) * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_fatt\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" WHERE dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_docr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart)\n" +
"SELECT vtb_offr.id_offerta,\n" +
" vtb_offr.cod_mart,\n" +
" ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) AS qta_ord,\n" +
" ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) AS qta_doc,\n" +
" ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0) AS qta_fatt\n" +
"FROM vtb_offr\n" +
" INNER JOIN vtb_offt ON vtb_offr.id_offerta = vtb_offt.id_offerta\n"+
" LEFT OUTER JOIN ord ON vtb_offr.id_offerta = ord.id_contratto AND vtb_offr.cod_mart = ord.cod_mart\n" +
" LEFT OUTER JOIN doc ON vtb_offr.id_offerta = doc.id_contratto AND vtb_offr.cod_mart = doc.cod_mart\n" +
"WHERE (vtb_offr.qta_ord <> ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_doc <> ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_fatt <> ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0)) AND\n" +
" vtb_offt.stato_offerta = 3";
List<VtbOffr> vtbOffrs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, VtbOffr.class, OperationType.UPDATE);
List<VtbOfft> vtbOfftsToSave = new ArrayList<>();
vtbOffrs.stream()
.collect(Collectors.groupingBy(VtbOffr::getIdOfferta))
.forEach((key, value) -> {
vtbOfftsToSave.add(new VtbOfft()
.setIdOfferta(key)
.setVtbOffr(value));
});
List<EntityBase> ret = entityProcessor.processEntityList(vtbOfftsToSave, multiDBTransactionManager, false);
UtilityEntity.throwEntitiesException(ret);
return ret;
}
}

View File

@@ -1,14 +1,14 @@
package it.integry.ems.product.service;
import com.annimon.stream.Stream;
import it.integry.ems.product.dto.FatturaContoDepositoDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.entity.DtbDocr;
import it.integry.ems_model.entity.DtbDoct;
import it.integry.ems_model.entity.MtbAart;
import it.integry.ems_model.entity.VtbOfft;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityBigDecimal;
@@ -17,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -33,7 +32,8 @@ public class ContrattiDiVenditaService {
MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private MailService mailService;
private ContrattiDiVenditaHandlerService contrattiDiVenditaHandlerService;
@Autowired
private SetupGest setupGest;
@@ -47,68 +47,7 @@ public class ContrattiDiVenditaService {
}
public List<EntityBase> updateProgressivi() throws Exception {
String sql =
"WITH ord AS\n" +
" (SELECT dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart,\n" +
" SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv) AS qta_ord\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" WHERE dtb_ordt.gestione = 'V'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_ordr.id_contratto,\n" +
" dtb_ordr.cod_mart)\n" +
" , doc AS (SELECT dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart,\n" +
" SUM(dtb_tipi.segno_qta_scar * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_doc,\n" +
" SUM(IIF(dtb_doct.num_cmov is not null,1, 0) * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_fatt\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" WHERE dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_docr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_docr.id_contratto,\n" +
" dtb_docr.cod_mart)\n" +
"SELECT vtb_offr.id_offerta,\n" +
" vtb_offr.cod_mart,\n" +
" ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) AS qta_ord,\n" +
" ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) AS qta_doc,\n" +
" ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0) AS qta_fatt\n" +
"FROM vtb_offr\n" +
" INNER JOIN vtb_offt ON vtb_offr.id_offerta = vtb_offt.id_offerta\n"+
" LEFT OUTER JOIN ord ON vtb_offr.id_offerta = ord.id_contratto AND vtb_offr.cod_mart = ord.cod_mart\n" +
" LEFT OUTER JOIN doc ON vtb_offr.id_offerta = doc.id_contratto AND vtb_offr.cod_mart = doc.cod_mart\n" +
"WHERE (vtb_offr.qta_ord <> ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_doc <> ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_fatt <> ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0)) AND\n" +
" vtb_offt.stato_offerta = 3";
List<VtbOffr> vtbOffrs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, VtbOffr.class, OperationType.UPDATE);
List<VtbOfft> vtbOfftsToSave = new ArrayList<>();
Stream.of(vtbOffrs)
.groupBy(VtbOffr::getIdOfferta)
.forEach(x -> {
vtbOfftsToSave.add(new VtbOfft()
.setIdOfferta(x.getKey())
.setVtbOffr(x.getValue()));
});
List<EntityBase> ret = entityProcessor.processEntityList(vtbOfftsToSave, multiDBTransactionManager, false);
UtilityEntity.throwEntitiesException(ret);
return ret;
return contrattiDiVenditaHandlerService.updateProgressivi(multiDBTransactionManager);
}
public DtbDoct fatturaContoDeposito(FatturaContoDepositoDTO dto) throws Exception {

View File

@@ -151,7 +151,7 @@ public class GiacenzaService {
List<CarelliGiacenzaProg> carelliGiacenzaProgs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, CarelliGiacenzaProg.class, OperationType.INSERT);
List<EntityBase> entityRet = entityProcessor.processEntityList(carelliGiacenzaProgs, null, false, true, false, multiDBTransactionManager, false, false,
new RequestDataDTO());
RequestDataDTO.systemMockupData());
UtilityEntity.throwEntitiesException(entityRet);
}
@@ -166,7 +166,7 @@ public class GiacenzaService {
List<CarelliGiacenzaProg> carelliGiacenzaProgs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, CarelliGiacenzaProg.class, OperationType.DELETE);
List<EntityBase> entityRet = entityProcessor.processEntityList(carelliGiacenzaProgs, null, false, true, false, multiDBTransactionManager, false, false,
new RequestDataDTO());
RequestDataDTO.systemMockupData());
UtilityEntity.throwEntitiesException(entityRet);
}
@@ -429,7 +429,7 @@ public class GiacenzaService {
.setDataDoc(UtilityLocalDate.localDateToDate(collo.getDataCollo()))
.setDataDistribuzione(new Date());
collo.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(collo, false, false, "", multiDBTransactionManager, new RequestDataDTO(),false, false);
entityProcessor.processEntity(collo, false, false, "", multiDBTransactionManager, RequestDataDTO.systemMockupData(),false, false);
UtilityEntity.throwEntityException(collo);
}
}
@@ -448,7 +448,7 @@ public class GiacenzaService {
calls.add(() -> {
try {
for (EntityBase entityBase : entityList) {
entityProcessor.processEntity(entityBase, false, true, "", multiDBTransactionManager, new RequestDataDTO(), false, false);
entityProcessor.processEntity(entityBase, false, true, "", multiDBTransactionManager, RequestDataDTO.systemMockupData(), false, false);
}
} catch (Exception ex) {

View File

@@ -309,7 +309,7 @@ public class ExchangeOrdiniImportService {
.setDataInizProd(field.getDataInizProd())
.setCodVzon(field.getCodVzon())
.setDataOrd(field.getDataInizProd());
agribookFieldService.createField(multiDb, dto, EXCHANGE_USER, new RequestDataDTO());
agribookFieldService.createField(multiDb, dto, EXCHANGE_USER, RequestDataDTO.systemMockupData());
break;
case UPDATE: