Merge remote-tracking branch 'origin/develop' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit

This commit is contained in:
2025-05-22 09:17:11 +02:00
65 changed files with 1918 additions and 679 deletions

View File

@@ -16,12 +16,30 @@
<log_file alias="Tomcat Localhost Access Log" path="%IDEA_RUN:CATALINA_BASE%/logs/localhost_access_log.*" />
<predefined_log_file enabled="true" id="Tomcat" />
<predefined_log_file enabled="true" id="Tomcat Catalina" />
<RunnerSettings RunnerId="AppServerDebuggerRunner">
<option name="DEBUG_PORT" value="javadebug" />
</RunnerSettings>
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="javadebug" />
</RunnerSettings>
<RunnerSettings RunnerId="JProfiler">
<option name="jreHome" value="$USER_HOME$/.jdks/openjdk-21.0.2" />
</RunnerSettings>
<ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="AppServerDebuggerRunner">
<option name="USE_ENV_VARIABLES" value="true" />
<STARTUP>
<option name="USE_DEFAULT" value="true" />
<option name="SCRIPT" value="" />
<option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="" />
</STARTUP>
<SHUTDOWN>
<option name="USE_DEFAULT" value="true" />
<option name="SCRIPT" value="" />
<option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="" />
</SHUTDOWN>
</ConfigurationWrapper>
<ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Cover">
<option name="USE_ENV_VARIABLES" value="true" />
<STARTUP>

View File

@@ -4,7 +4,7 @@
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" />
<option name="HOST" value="192.168.1.7" />
<option name="HOST" value="localhost" />
<option name="PORT" value="8001" />
<option name="AUTO_RESTART" value="false" />
<RunnerSettings RunnerId="Debug">

View File

@@ -16,12 +16,30 @@
<log_file alias="Tomcat Localhost Access Log" path="%IDEA_RUN:CATALINA_BASE%/logs/localhost_access_log.*" />
<predefined_log_file enabled="true" id="Tomcat" />
<predefined_log_file enabled="true" id="Tomcat Catalina" />
<RunnerSettings RunnerId="AppServerDebuggerRunner">
<option name="DEBUG_PORT" value="javadebug" />
</RunnerSettings>
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="javadebug" />
</RunnerSettings>
<RunnerSettings RunnerId="JProfiler">
<option name="jreHome" value="$PROJECT_DIR$/../../../Program Files/Java/jdk1.8.0_202" />
</RunnerSettings>
<ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="AppServerDebuggerRunner">
<option name="USE_ENV_VARIABLES" value="true" />
<STARTUP>
<option name="USE_DEFAULT" value="true" />
<option name="SCRIPT" value="" />
<option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="" />
</STARTUP>
<SHUTDOWN>
<option name="USE_DEFAULT" value="true" />
<option name="SCRIPT" value="" />
<option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="" />
</SHUTDOWN>
</ConfigurationWrapper>
<ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Cover">
<option name="USE_ENV_VARIABLES" value="true" />
<STARTUP>

View File

@@ -63,7 +63,7 @@
<plugin>
<groupId>cz.habarta.typescript-generator</groupId>
<artifactId>typescript-generator-maven-plugin</artifactId>
<version>2.37.1128</version>
<version>3.2.1263</version>
<executions>
<execution>
<id>generate</id>

View File

@@ -21,7 +21,7 @@ public class ExecutorServiceConfig {
return new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
60L,
5,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(queueSize),
new ThreadFactoryBuilder()

View File

@@ -69,10 +69,9 @@ import java.lang.reflect.ParameterizedType;
import java.math.BigDecimal;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.*;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

View File

@@ -1,6 +1,5 @@
package it.integry.ems.download;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.download.dto.CachedFileDto;
import it.integry.ems.download.dto.DownloadFileDto;
import it.integry.ems.looper.service.LooperService;
@@ -9,6 +8,7 @@ import it.integry.ems.utility.UtilityFile;
import it.integry.ems_model.entity.StbFilesAttached;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.io.File;
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@Service
public class DownloadFileHandlerService {
@@ -25,13 +26,12 @@ public class DownloadFileHandlerService {
private final HashMap<String, CachedFileDto> mFileMap = new HashMap<>();
@PostContextConstruct
public void init() {
looperService.add(() -> {
UtilityFile.cleanDirectory(getTempPath(), 1, "");
}, 60 * 60 * 1000, DownloadFileHandlerService.class.getName());
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
public void clean() {
UtilityFile.cleanDirectory(getTempPath(), 1, "");
}
public DownloadFileDto generateDownloadItem(File file) throws IOException {
return generateDownloadItem(file.getName(), FileUtils.readFileToByteArray(file), false);
}

View File

@@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils;
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.sql.PreparedStatement;
@@ -26,6 +27,7 @@ import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
public class EntityLoggerComponent {
@@ -44,10 +46,8 @@ public class EntityLoggerComponent {
@PostContextConstruct(priority = 10)
private void init() {
try {
if (!UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer()) {
if (!UtilityDebug.isDebugExecution()) {
this.syncDBScheme();
looperService.add(this::deleteOldlogs, 12 * 60 * 60 * 1000, EntityLoggerComponent.class.getName()); //Ogni 12 ore
}
} catch (Exception ex) {
logger.error(getClass().getName(), ex);
@@ -204,65 +204,53 @@ public class EntityLoggerComponent {
destDBSchema.close();
}
@Scheduled(fixedDelay = 12, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
private void deleteOldlogs() {
MultiDBTransactionManager sourceMultiDB = null, historyMultiDB = null;
if (UtilityDebug.isDebugExecution())
return;
try {
List<AvailableConnectionsModel> connectionsModels = settingsModel.getAvailableConnections();
connectionsModels = Stream.of(connectionsModels)
.filter(AvailableConnectionsModel::getInternalDb)
.toList();
List<AvailableConnectionsModel> connectionsModels = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
String historyProfileDB = settingsController.getHistoryProfileDb();
historyMultiDB = new MultiDBTransactionManager(historyProfileDB);
for (AvailableConnectionsModel sourceConnectionModel : connectionsModels) {
String sql = "SELECT * FROM stb_log_entity_setup" +
" WHERE entity_name <> " + UtilityDB.valueToString(StbLogEntitySetup.ENTITY);
try (MultiDBTransactionManager historyMultiDB = new MultiDBTransactionManager(historyProfileDB)) {
sourceMultiDB = new MultiDBTransactionManager(sourceConnectionModel.getProfileName());
List<HashMap<String, Object>> result = UtilityDB.executeSimpleQuery(sourceMultiDB.getPrimaryConnection(), sql);
sourceMultiDB.closeAll();
for (AvailableConnectionsModel sourceConnectionModel : connectionsModels) {
String sql = "SELECT * FROM stb_log_entity_setup" +
" WHERE entity_name <> " + UtilityDB.valueToString(StbLogEntitySetup.ENTITY);
for (HashMap<String, Object> stbLogEntitySetup : result) {
String tableName = UtilityHashMap.getValueIfExists(stbLogEntitySetup, "entity_name");
int logDays = UtilityHashMap.getValueIfExists(stbLogEntitySetup, "log_days");
List<HashMap<String, Object>> result = null;
int i = 0;
try {
do {
String checkSql = String.format("DELETE TOP ( 1000 ) FROM %s WHERE log_created_at < DATEADD(DAY, %d, GETDATE()) AND log_created_profile = %s",
tableName, -1 * logDays, UtilityDB.valueToString(sourceConnectionModel.getProfileName()));
try (MultiDBTransactionManager sourceMultiDB = new MultiDBTransactionManager(sourceConnectionModel.getProfileName())) {
result = UtilityDB.executeSimpleQuery(sourceMultiDB.getPrimaryConnection(), sql);
}
PreparedStatement ps = historyMultiDB.prepareStatement(checkSql);
i = ps.executeUpdate();
ps.close();
historyMultiDB.commitAll();
} while (i > 0);
for (HashMap<String, Object> stbLogEntitySetup : result) {
String tableName = UtilityHashMap.getValueIfExists(stbLogEntitySetup, "entity_name");
int logDays = UtilityHashMap.getValueIfExists(stbLogEntitySetup, "log_days");
} catch (Exception ex) {
logger.error("EntityLogDeleter", "Errore durante la cancellazione dei vecchi record da " + tableName);
logger.error("EntityLogDeleter", ex);
int i = 0;
try {
do {
String checkSql = String.format("DELETE TOP ( 1000 ) FROM %s WHERE log_created_at < DATEADD(DAY, %d, GETDATE()) AND log_created_profile = %s",
tableName, -1 * logDays, UtilityDB.valueToString(sourceConnectionModel.getProfileName()));
PreparedStatement ps = historyMultiDB.prepareStatement(checkSql);
i = ps.executeUpdate();
ps.close();
historyMultiDB.commitAll();
} while (i > 0);
} catch (Exception ex) {
logger.error("EntityLogDeleter", "Errore durante la cancellazione dei vecchi record da " + tableName);
logger.error("EntityLogDeleter", ex);
}
}
}
}
historyMultiDB.closeAll();
} catch (Exception ex) {
logger.error("EntityLoggerComponent.deleteOldlogs", ex);
try {
if (sourceMultiDB != null) sourceMultiDB.closeAll();
if (historyMultiDB != null) historyMultiDB.closeAll();
} catch (Exception e) {
logger.error("EntityLoggerComponent.deleteOldlogs", e);
}
}
}

View File

@@ -15,6 +15,8 @@ public class TaskModel implements Runnable {
private final Logger logger = LogManager.getLogger();
private boolean mInterrupted = false;
public TaskModel(Runnable runnable, long delayTimeInMillis, String tagName) {
mRunnable = runnable;
mDelayTime = delayTimeInMillis;
@@ -28,14 +30,14 @@ public class TaskModel implements Runnable {
public void run() {
Date lastExecution = new Date(0L);
while (!mThread.isInterrupted()) {
while (!mInterrupted) {
try {
if (new Date().getTime() - lastExecution.getTime() > mDelayTime) {
mRunnable.run();
lastExecution = new Date();
}
Thread.sleep(10);
if(!mInterrupted) Thread.sleep(10);
} catch (InterruptedException iex) {
//Do nothing
} catch (Exception ex) {
@@ -46,7 +48,7 @@ public class TaskModel implements Runnable {
}
public void interrupt() {
this.mThread.interrupt();
mInterrupted = true;
}
public String getTagName() {

View File

@@ -1,10 +1,9 @@
package it.integry.ems.looper.service;
import com.annimon.stream.Stream;
import it.integry.ems.looper.dto.LoopDTO;
import it.integry.ems.looper.dto.TaskModel;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
@@ -12,18 +11,12 @@ import java.util.ArrayList;
import java.util.Random;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class LooperService {
public class LooperService {
private final ArrayList<LoopDTO> mLoopsHandler = new ArrayList<>();
private final ArrayList<TaskModel> mLoopsTask = new ArrayList<>();
private final Logger logger = LogManager.getLogger();
@PreDestroy
public void preDestroy() {
for (TaskModel taskModel : mLoopsTask) {
taskModel.interrupt();
}
}
public int add(Runnable runnable, int delayTimeInMillis, String tagName) {
int newId = -1;
@@ -32,7 +25,8 @@ public class LooperService {
do {
newId = new Random().nextInt(10240);
int finalNewId = newId;
exists = Stream.of(mLoopsHandler).anyMatch(x -> x.getId() == finalNewId);
exists = mLoopsHandler.stream()
.anyMatch(x -> x.getId() == finalNewId);
} while (exists);
this.mLoopsHandler.add(new LoopDTO()
@@ -47,5 +41,16 @@ public class LooperService {
return newId;
}
@PreDestroy
public void destroy() {
logger.info("Shutting down LooperService (" + mLoopsHandler.size() + " threads)");
for (int i = 0; i < mLoopsTask.size(); i++) {
TaskModel taskModel = mLoopsTask.get(i);
taskModel.interrupt();
logger.trace("Destroyed " + (i + 1) + " loop (" + taskModel.getTagName() + ")");
}
}
}

View File

@@ -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_20250519094505 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE vtb_vett ADD archiviazione_elettronica BIT NOT NULL DEFAULT 0");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,21 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250519153211 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS()) return;
updateSetupValue("DATI_AZIENDA","MENU_GENERALE","LOAD_MENU_FROM_DB", "S");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,607 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250519153809 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction(
"MES_GetWorkOrders",
"CREATE FUNCTION [dbo].[MES_GetWorkOrders](@codJfas VARCHAR(50), @dateStart DATE, @dateEnd DATE, @flagEvaso VARCHAR(1),\n" +
" @codAnag VARCHAR(5))\n" +
" RETURNS TABLE\n" +
" AS RETURN\n" +
" -- DECLARE @codJfas VARCHAR(5) = 'L1'\n" +
" -- DECLARE @dateStart DATE = DATEADD(MONTH, -1, GETDATE())\n" +
" -- DECLARE @dateEnd DATE = DATEADD(MONTH, 1, GETDATE())\n" +
" -- DECLARE @flagEvaso VARCHAR(1) = 'I'\n" +
" -- DECLARE @codAnag VARCHAR(5) = null;\n" +
"\n" +
"--Funzione per calcolare la sequenza di ordini su una linea e il RunTimeEND\n" +
" WITH setup AS (SELECT ISNULL(@dateStart, DATEADD(DAY, -14, GETDATE())) AS date_start,\n" +
" ISNULL(@dateEnd, GETDATE()) AS date_end,\n" +
" ISNULL(@flagEvaso, 'I') AS flag_evaso,\n" +
" @codJfas AS cod_jfas,\n" +
" @codAnag AS cod_anag),\n" +
"\n" +
" setup_depo AS (SELECT cod_mdep, value AS flag_carico_scarico_immediato\n" +
" FROM stb_gest_setup_depo\n" +
" WHERE gest_name = 'CARICO_SCARICO_PF'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'GENERA_CARICO_SCARICO_IMMEDIATO'),\n" +
"\n" +
" setup_run_time AS (SELECT value AS flag_restart\n" +
" FROM stb_gest_setup\n" +
" WHERE gest_name = 'PVM'\n" +
" AND section = 'MONITORAGGIO_LINEE_V2'\n" +
" AND key_section = 'RESTART_RUN_TIME_END'),\n" +
"\n" +
" mtb_colr_sum_filtered_rows AS (SELECT gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" ser_collo,\n" +
" cod_mart,\n" +
" data_ord,\n" +
" num_ord,\n" +
" qta_col,\n" +
" num_cnf\n" +
" FROM mtb_colr\n" +
" WHERE gestione_rif IS NULL\n" +
" AND data_collo_rif IS NULL\n" +
" AND ser_collo_rif IS NULL\n" +
" AND num_collo_rif IS NULL),\n" +
"\n" +
" mtb_colr_sum_valid_colli AS (SELECT DISTINCT gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo\n" +
" FROM mtb_colt\n" +
" CROSS APPLY setup\n" +
" WHERE segno = 1\n" +
" AND data_ord BETWEEN setup.date_start AND setup.date_end),\n" +
"\n" +
" mtb_colr_sum AS (SELECT colr.gestione,\n" +
" colr.data_collo,\n" +
" colr.num_collo,\n" +
" colr.ser_collo,\n" +
" colr.cod_mart,\n" +
" colr.data_ord,\n" +
" colr.num_ord,\n" +
" SUM(colr.qta_col) AS qta_col,\n" +
" SUM(colr.num_cnf) AS num_cnf\n" +
" FROM mtb_colr_sum_valid_colli colt\n" +
" INNER JOIN mtb_colr_sum_filtered_rows colr\n" +
" ON colr.gestione = colt.gestione\n" +
" AND colr.data_collo = colt.data_collo\n" +
" AND colr.num_collo = colt.num_collo\n" +
" AND colr.ser_collo = colt.ser_collo\n" +
" GROUP BY colr.gestione,\n" +
" colr.data_collo,\n" +
" colr.num_collo,\n" +
" colr.ser_collo,\n" +
" colr.cod_mart,\n" +
" colr.data_ord,\n" +
" colr.num_ord),\n" +
"\n" +
" machine_last_event AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" cod_cmac,\n" +
" MAX(data_mov) AS max_data_mov\n" +
" FROM dtb_ord_macc\n" +
" GROUP BY gestione, data_ord, num_ord, cod_cmac),\n" +
"\n" +
" machine_event_values AS (SELECT evento,\n" +
" IIF(tipologia = 'ENTRATA', 1, -1) AS value\n" +
" FROM dtb_ord_macc_eventi),\n" +
"\n" +
" in_production_machines AS (SELECT dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord,\n" +
" LAST_VALUE(dtb.data_mov) OVER (ORDER BY dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord) AS max_data_mov,\n" +
" LAST_VALUE(ev.value) OVER (ORDER BY dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord) AS final_value\n" +
" FROM dtb_ord_macc dtb\n" +
" INNER JOIN machine_last_event le\n" +
" ON dtb.data_ord = le.data_ord\n" +
" AND dtb.num_ord = le.num_ord\n" +
" AND dtb.gestione = le.gestione\n" +
" AND dtb.cod_cmac = le.cod_cmac\n" +
" AND dtb.data_mov = le.max_data_mov\n" +
" INNER JOIN machine_event_values ev\n" +
" ON dtb.evento = ev.evento\n" +
" CROSS APPLY setup\n" +
" WHERE dtb.data_ord BETWEEN setup.date_start AND setup.date_end),\n" +
"\n" +
" dtb_ord_with_max_step AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" id_step AS id_step,\n" +
" MAX(id_step) OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ord_steps.num_fase) AS max_id_step,\n" +
" num_fase,\n" +
" MAX(num_fase) OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord) AS max_fase,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ord_steps.flag_step_attivo,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ord_steps.qta_lav,\n" +
" dtb_ord_steps.qta_prod,\n" +
" dtb_ord_steps.hr_num,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" SUM(CAST(DATEDIFF(S, data_iniz, ISNULL(data_fine, GETDATE())) AS BIGINT))\n" +
" OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" num_fase,\n" +
" dtb_ord_steps.cod_jfas) AS elapsed_time\n" +
" FROM dtb_ord_steps\n" +
" CROSS APPLY setup\n" +
" WHERE data_ord BETWEEN setup.date_start AND setup.date_end\n" +
" AND gestione = 'L'),\n" +
"\n" +
" dtb_ord_max_step AS (SELECT DISTINCT IIF(in_production_machines.max_data_mov IS NOT NULL AND\n" +
" (dtb_ord_with_max_step.id_step = 0 OR\n" +
" (dtb_ord_with_max_step.id_step > 0 AND\n" +
" dtb_ord_with_max_step.data_fine IS NOT NULL AND\n" +
" DATEDIFF(MINUTE,\n" +
" dtb_ord_with_max_step.data_fine,\n" +
" in_production_machines.max_data_mov) >\n" +
" 5)), 1, 0) AS starting_machines,\n" +
" dtb_ord_with_max_step.*\n" +
" FROM dtb_ord_with_max_step\n" +
" LEFT OUTER JOIN in_production_machines\n" +
" ON dtb_ord_with_max_step.data_ord =\n" +
" in_production_machines.data_ord\n" +
" AND\n" +
" dtb_ord_with_max_step.num_ord =\n" +
" in_production_machines.num_ord\n" +
" AND\n" +
" dtb_ord_with_max_step.gestione =\n" +
" in_production_machines.gestione\n" +
" AND in_production_machines.final_value = 1\n" +
"\n" +
" WHERE max_id_step = id_step),\n" +
"\n" +
" riga_ord_prod_w_materia_prima AS (SELECT dtb_ordr.data_ord AS data_ord_prod,\n" +
" dtb_ordr.num_ord AS num_ord_prod,\n" +
" dtb_ordr.riga_ord AS riga_ord_prod,\n" +
" dtb_ordr.gestione AS gestione_ord_prod,\n" +
" IIF(CONVERT(DATE, dtb_ordr.data_ord) >= CONVERT(DATE, GETDATE()),\n" +
" 'S',\n" +
" 'N') AS flag_avviabile,\n" +
" mtb_aart_prod.flag_tracciabilita,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.rap_conv,\n" +
" dtb_ordr.unt_ord2,\n" +
" CAST(ROUND(dtb_ordr.qta_ord2 /\n" +
" ISNULL(NULLIF(dtb_ordr.qta_ord, 0), 1),\n" +
" 5) AS NUMERIC(20, 5)) AS rap_conv2,\n" +
" dtb_ordr.unt_ord3,\n" +
" CAST(ROUND(dtb_ordr.qta_ord3 /\n" +
" ISNULL(NULLIF(dtb_ordr.qta_ord, 0), 1),\n" +
" 5) AS NUMERIC(20, 5)) AS rap_conv3,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_ord2,\n" +
" dtb_ordr.qta_ord3,\n" +
" dtb_ordr.num_cnf,\n" +
" IIF(mtb_aart_prod.unt_mis IN ('PZ', 'NR'), mtb_aart_prod.qta_cnf,\n" +
" IIF(mtb_aart_prod.unt_mis2 IN ('PZ', 'NR'),\n" +
" mtb_aart_prod.qta_cnf /\n" +
" ISNULL(NULLIF(mtb_aart_prod.rap_conv2, 0), 1),\n" +
" mtb_aart_prod.qta_cnf)) AS cal_qta_cnf,\n" +
" IIF(dtb_ordr.colli_pedana = 0 OR dtb_ordr.colli_pedana = 1,\n" +
" IIF(mtb_aart_prod.colli_pedana = 0, 1, mtb_aart_prod.colli_pedana),\n" +
" dtb_ordr.colli_pedana)\n" +
" AS colli_pedana,\n" +
" dtb_ordr.pos_riga,\n" +
" dtb_ordr.cod_mdep,\n" +
"\n" +
" IIF(mtb_aart_prod.unt_mis IN ('PZ', 'NR'), 1,\n" +
" IIF(mtb_aart_prod.unt_mis2 IN ('PZ', 'NR') AND\n" +
" NULLIF(mtb_aart_prod.rap_conv2, 0) IS NOT NULL,\n" +
" mtb_aart_prod.rap_conv2,\n" +
" 1)) AS calc_rap_conv,\n" +
" mtb_aart_prod.gg_scad_partita,\n" +
" mtb_aart_prod.qta_cnf\n" +
" FROM dtb_ordr\n" +
" INNER JOIN mtb_aart mtb_aart_prod ON mtb_aart_prod.cod_mart = dtb_ordr.cod_mart\n" +
" WHERE dtb_ordr.gestione = 'A'),\n" +
"\n" +
" ord_lav AS (SELECT dtb_ordt.cod_jcom,\n" +
" riga_ord_prod_w_materia_prima.data_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.flag_avviabile,\n" +
" riga_ord_prod_w_materia_prima.flag_tracciabilita,\n" +
" riga_ord_prod_w_materia_prima.unt_ord,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv,\n" +
" riga_ord_prod_w_materia_prima.unt_ord2,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv2\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv2\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv2,\n" +
" riga_ord_prod_w_materia_prima.unt_ord3,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv3\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv3\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv3,\n" +
" ISNULL(dtb_ordt.descr_estesa_prod, dtb_ordt.descrizione_prod) AS descrizione_prod,\n" +
" riga_ord_prod_w_materia_prima.num_cnf *\n" +
" riga_ord_prod_w_materia_prima.cal_qta_cnf AS num_pezzi,\n" +
" riga_ord_prod_w_materia_prima.num_cnf,\n" +
" riga_ord_prod_w_materia_prima.gg_scad_partita,\n" +
" riga_ord_prod_w_materia_prima.qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.colli_pedana,\n" +
" riga_ord_prod_w_materia_prima.num_cnf /\n" +
" riga_ord_prod_w_materia_prima.colli_pedana AS num_pedane,\n" +
" riga_ord_prod_w_materia_prima.pos_riga,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.flag_evaso_forzato,\n" +
" CASE\n" +
" WHEN (dtb_ordt.flag_evaso_prod = 'I' OR\n" +
" (setupCaricoImmediato.flag_carico_scarico_immediato = 'S' AND\n" +
" flag_evaso_prod = 'E'))\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" THEN 'I'\n" +
" WHEN flag_evaso_prod <> 'I' AND dtb_ordt.flag_evaso_forzato = 'S'\n" +
" THEN flag_evaso_prod\n" +
" END AS flag_ordine_evaso,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.cod_tcol_UL,\n" +
" mtb_tcol.descrizione AS descrizione_tcol,\n" +
" dtb_ordt.cod_anag,\n" +
" gtb_anag.rag_soc AS rag_soc_anag,\n" +
" gtb_anag.part_iva,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" dtb_ordt.cod_mdep,\n" +
" ISNULL(riga_ord_prod_w_materia_prima.cod_mdep, dtb_ordt.cod_mdep) AS cod_mdep_prod,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ordt.cod_jfas AS cod_jfas_lav,\n" +
" mtb_partita_mag.partita_mag,\n" +
" ISNULL(mtb_partita_mag.partita_mag_prod,\n" +
" mtb_partita_mag.partita_mag) AS partita_mag_prod,\n" +
" dtb_ordt.note AS note_lav,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" jtb_comt.descrizione AS descrizione_commessa,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.max_fase,\n" +
" dtb_ord_steps.num_fase,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1), 'Colli',\n" +
" jtb_cicl.unt_mis_prod)\n" +
" AS unt_mis_prod,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1),\n" +
" riga_ord_prod_w_materia_prima.colli_pedana, jtb_cicl.qta_prod)\n" +
" AS qta_batch_prod,\n" +
" IIF(mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1,\n" +
" mtb_aart.qta_cnf,\n" +
" jtb_cicl.rap_conv_prod) AS rap_conv_prod,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ord_steps.qta_lav AS qta_lav,\n" +
" IIF(dtb_ord_steps.qta_prod <> 0, dtb_ord_steps.qta_prod,\n" +
" dtb_ordt.qta_prod) AS qta_prod,\n" +
" dtb_ord_steps.hr_num,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" 3600 / (ISNULL(NULLIF(jtb_dist_clav_dir.duration, 0), 1) /\n" +
" ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) AS prod_std,\n" +
" dtb_ord_steps.elapsed_time,\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0)) AS qta_trasferite,\n" +
" COUNT(mtb_colr_carico.num_collo) AS udc_trasferiti,\n" +
" COUNT(colli_lotto.num_collo) AS uds_scaricati,\n" +
" CASE\n" +
" WHEN dtb_ord_steps.id_step = 0\n" +
" THEN IIF(dtb_ord_steps.starting_machines = 1, 'IN AVVIO', 'PROGRAMMATO')\n" +
" WHEN dtb_ord_steps.data_fine IS NULL\n" +
" THEN 'IN CORSO'\n" +
" ELSE 'IN PAUSA'\n" +
" END AS stato,\n" +
" CONVERT(INT, SUM(ISNULL(\n" +
" mtb_colr_carico.qta_col / riga_ord_prod_w_materia_prima.calc_rap_conv,\n" +
" 0))) AS pz_trasferiti,\n" +
" CASE\n" +
" WHEN (jtb_dist_clav_dir.duration / ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) *\n" +
" (dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod -\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0))) > 0\n" +
" THEN\n" +
" (jtb_dist_clav_dir.duration /\n" +
" ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) *\n" +
" (dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod -\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0)))\n" +
" ELSE 0 END AS run_time_sec,\n" +
" jl.id_lotto,\n" +
" jlt.data_lotto,\n" +
" mtb_aart.peso_kg,\n" +
" dtb_ordt.data_cons_prod_max\n" +
" FROM dtb_ord_max_step dtb_ord_steps\n" +
" INNER JOIN dtb_ordt ON dtb_ord_steps.data_ord = dtb_ordt.data_ord\n" +
" AND dtb_ord_steps.num_ord = dtb_ordt.num_ord\n" +
" AND dtb_ord_steps.gestione = dtb_ordt.gestione\n" +
" LEFT OUTER JOIN setup_depo setupCaricoImmediato\n" +
" ON dtb_ordt.cod_mdep = setupCaricoImmediato.cod_mdep\n" +
" LEFT OUTER JOIN jtb_dist_clav_dir\n" +
" ON dtb_ordt.cod_prod = jtb_dist_clav_dir.cod_prod AND\n" +
" dtb_ordt.cod_jfas = jtb_dist_clav_dir.cod_jfas\n" +
" LEFT OUTER JOIN mtb_partita_mag\n" +
" ON dtb_ordt.partita_mag = mtb_partita_mag.partita_mag AND\n" +
" dtb_ordt.cod_prod = mtb_partita_mag.cod_mart AND\n" +
" mtb_partita_mag.flag_stato = 'A'\n" +
" LEFT OUTER JOIN mtb_colr_sum mtb_colr_carico\n" +
" ON dtb_ordt.data_ord = mtb_colr_carico.data_ord AND\n" +
" dtb_ordt.gestione = mtb_colr_carico.gestione AND\n" +
" dtb_ordt.num_ord = mtb_colr_carico.num_ord AND\n" +
" dtb_ordt.cod_prod = mtb_colr_carico.cod_mart\n" +
" LEFT OUTER JOIN jtb_comt ON dtb_ordt.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN riga_ord_prod_w_materia_prima\n" +
" ON riga_ord_prod_w_materia_prima.gestione_ord_prod =\n" +
" dtb_ordt.gestione_rif AND\n" +
" riga_ord_prod_w_materia_prima.data_ord_prod =\n" +
" dtb_ordt.data_ord_rif AND\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod =\n" +
" dtb_ordt.num_ord_rif AND\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod = dtb_ordt.riga_ord_rif\n" +
" LEFT OUTER JOIN jtb_cicl ON jtb_cicl.cod_prod = dtb_ordt.cod_prod\n" +
" LEFT OUTER JOIN mtb_aart ON mtb_aart.cod_mart = dtb_ordt.cod_prod\n" +
" LEFT OUTER JOIN gtb_anag ON dtb_ordt.cod_anag = gtb_anag.cod_anag\n" +
" LEFT OUTER JOIN mtb_tcol ON dtb_ordt.cod_tcol_UL = mtb_tcol.cod_tcol\n" +
" LEFT OUTER JOIN jtb_lotr jl\n" +
" ON dtb_ord_steps.cod_jfas = jl.cod_jfas AND\n" +
" dtb_ordt.gestione = jl.gestione AND\n" +
" dtb_ordt.data_ord = jl.data_ord AND\n" +
" dtb_ordt.num_ord = jl.num_ord\n" +
" LEFT OUTER JOIN jtb_lott jlt\n" +
" ON jl.cod_jfas = jlt.cod_jfas AND jl.id_lotto = jlt.id_lotto\n" +
" LEFT OUTER JOIN mtb_colt colli_lotto ON jlt.id_lotto = colli_lotto.id_lotto\n" +
"\n" +
" CROSS APPLY setup\n" +
" WHERE dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ord_steps.data_ord BETWEEN setup.date_start AND setup.date_end\n" +
" AND (setup.flag_evaso IS NULL\n" +
" OR (\n" +
" (setup.flag_evaso = 'I'\n" +
" AND\n" +
" dtb_ord_steps.flag_step_attivo = 'S'\n" +
" AND (flag_evaso_prod = 'I'\n" +
" OR\n" +
" (setupCaricoImmediato.flag_carico_scarico_immediato = 'S'\n" +
" AND\n" +
" flag_evaso_prod = 'E'))\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" )\n" +
" OR (setup.flag_evaso = 'E'\n" +
" AND (flag_evaso_prod = 'E' OR jlt.data_chiusura IS NOT NULL)\n" +
" AND dtb_ordt.flag_evaso_forzato = 'S')\n" +
" )\n" +
" )\n" +
" AND (setup.cod_jfas IS NULL\n" +
" OR dtb_ord_steps.cod_jfas = setup.cod_jfas)\n" +
" AND (setup.cod_anag IS NULL\n" +
" OR dtb_ordt.cod_anag = setup.cod_anag)\n" +
" GROUP BY riga_ord_prod_w_materia_prima.data_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.flag_avviabile,\n" +
" riga_ord_prod_w_materia_prima.flag_tracciabilita,\n" +
" riga_ord_prod_w_materia_prima.unt_ord,\n" +
" mtb_partita_mag.rap_conv2,\n" +
" mtb_partita_mag.rap_conv3,\n" +
" dtb_ordt.note,\n" +
" riga_ord_prod_w_materia_prima.rap_conv,\n" +
" dtb_ordt.descrizione_prod,\n" +
" dtb_ordt.descr_estesa_prod,\n" +
" riga_ord_prod_w_materia_prima.num_cnf,\n" +
" mtb_aart.qta_cnf,\n" +
" mtb_aart.gg_scad_partita,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" riga_ord_prod_w_materia_prima.pos_riga,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.flag_evaso_forzato,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ordt.cod_jfas,\n" +
" dtb_ordt.cod_jcom,\n" +
" mtb_partita_mag.partita_mag,\n" +
" mtb_partita_mag.partita_mag_prod,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ordt.cod_tcol_UL,\n" +
" dtb_ordt.cod_anag,\n" +
" gtb_anag.rag_soc,\n" +
" gtb_anag.part_iva,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" dtb_ordt.cod_mdep,\n" +
" riga_ord_prod_w_materia_prima.cod_mdep,\n" +
" mtb_aart.colli_pedana,\n" +
" dtb_ord_steps.qta_prod,\n" +
" dtb_ordt.qta_prod,\n" +
" jtb_dist_clav_dir.duration,\n" +
" jtb_comt.descrizione,\n" +
" dtb_ord_steps.elapsed_time,\n" +
" riga_ord_prod_w_materia_prima.colli_pedana,\n" +
" dtb_ord_steps.hr_num,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.unt_mis2,\n" +
" mtb_aart.rap_conv2,\n" +
" mtb_aart.unt_mis3,\n" +
" mtb_aart.rap_conv3,\n" +
" riga_ord_prod_w_materia_prima.unt_ord2,\n" +
" riga_ord_prod_w_materia_prima.unt_ord3,\n" +
" riga_ord_prod_w_materia_prima.qta_ord,\n" +
" riga_ord_prod_w_materia_prima.qta_ord2,\n" +
" riga_ord_prod_w_materia_prima.qta_ord3,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3,\n" +
" riga_ord_prod_w_materia_prima.qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.cal_qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.gg_scad_partita,\n" +
" jtb_cicl.qta_prod,\n" +
" jtb_cicl.rap_conv_prod,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" jtb_cicl.unt_mis_prod,\n" +
" mtb_tcol.descrizione,\n" +
" dtb_ordt.qta_prod,\n" +
" dtb_ordt.rap_conv_prod,\n" +
" setupCaricoImmediato.flag_carico_scarico_immediato,\n" +
" dtb_ord_steps.num_fase, dtb_ord_steps.qta_lav,\n" +
" jl.id_lotto, jlt.data_lotto, mtb_aart.peso_kg, dtb_ordt.data_cons_prod_max,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.max_fase,\n" +
" dtb_ord_steps.starting_machines)\n" +
" SELECT ROW_NUMBER() OVER (ORDER BY data_ord, num_ord_prod, pos_riga, num_ord) AS sort,\n" +
" cod_jcom,\n" +
" data_ord_prod,\n" +
" num_ord_prod,\n" +
" riga_ord_prod,\n" +
" flag_avviabile,\n" +
" flag_tracciabilita,\n" +
" unt_ord,\n" +
" rap_conv,\n" +
" unt_ord2,\n" +
" rap_conv2,\n" +
" unt_ord3,\n" +
" rap_conv3,\n" +
" descrizione_prod,\n" +
" num_pezzi,\n" +
" num_cnf,\n" +
" gg_scad_partita,\n" +
" qta_cnf,\n" +
" colli_pedana,\n" +
" num_pedane,\n" +
" pos_riga,\n" +
" flag_evaso_prod,\n" +
" flag_evaso_forzato,\n" +
" flag_ordine_evaso,\n" +
" gestione,\n" +
" data_ord,\n" +
" cod_tcol_UL,\n" +
" descrizione_tcol,\n" +
" cod_anag,\n" +
" rag_soc_anag,\n" +
" part_iva,\n" +
" rif_ord,\n" +
" cod_vdes,\n" +
" cod_mdep,\n" +
" cod_mdep_prod,\n" +
" num_ord,\n" +
" cod_jfas,\n" +
" cod_jfas_lav,\n" +
" partita_mag,\n" +
" partita_mag_prod,\n" +
" note_lav,\n" +
" data_scad,\n" +
" cod_prod,\n" +
" descrizione_commessa,\n" +
" data_iniz_prod,\n" +
" id_step,\n" +
" unt_mis_prod,\n" +
" qta_batch_prod,\n" +
" rap_conv_prod,\n" +
" data_iniz,\n" +
" data_fine,\n" +
" qta_prod,\n" +
" qta_lav,\n" +
" max_fase,\n" +
" num_fase,\n" +
" hr_num,\n" +
" descrizione_attivita,\n" +
" prod_std,\n" +
" elapsed_time,\n" +
" qta_trasferite,\n" +
" udc_trasferiti,\n" +
" uds_scaricati,\n" +
" stato,\n" +
" pz_trasferiti,\n" +
" run_time_sec,\n" +
" SUM(run_time_sec) OVER (PARTITION BY cod_jfas, data_ord_prod) AS cumulative_run_time_sec,\n" +
" CONVERT(INT, run_time_sec / 3600) AS run_time_hour,\n" +
" ROUND((run_time_sec / 3600 - CONVERT(INT, run_time_sec / 3600)) * 60, 0) AS run_time_min,\n" +
" CASE\n" +
" WHEN setup_run_time.flag_restart = 'S' THEN\n" +
" DATEADD(SECOND, SUM(run_time_sec)\n" +
" OVER (PARTITION BY cod_jfas, data_ord_prod ORDER BY stato, cod_jfas, data_ord_prod, pos_riga ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n" +
" CASE\n" +
" WHEN (data_ord_prod > GETDATE() AND (data_iniz IS NULL OR data_fine IS NOT NULL))\n" +
" THEN DATEADD(HH, 7, data_ord_prod)\n" +
" ELSE GETDATE() END)\n" +
" ELSE\n" +
" DATEADD(SECOND, SUM(run_time_sec)\n" +
" OVER (PARTITION BY cod_jfas ORDER BY stato, cod_jfas, data_ord_prod, num_ord_prod, pos_riga ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n" +
" GETDATE())\n" +
" END AS run_time_end,\n" +
" id_lotto,\n" +
" data_lotto,\n" +
" peso_kg,\n" +
" data_cons_prod_max\n" +
" FROM ord_lav\n" +
" CROSS APPLY setup_run_time");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,77 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250520102717 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("getCmovrAcconti", "CREATE FUNCTION [dbo].[getCmovrAcconti] (@codAnag varchar(5))\n" +
"RETURNS Table\n" +
"as\n" +
"Return\n" +
"/* Estrazione movimenti di acconto dai documenti e dai saldi contabili*/\n" +
" \n" +
" select *,SUM(importo) OVER(PARTITION BY cod_anag ORDER BY data_cmov, num_cmov ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS saldo\n" +
" from\n" +
" (\n" +
" /*Movimenti non agganciate a partita contabilie: appaiono tutti in ordine di data */\n" +
" select '2' as GruppoConti, @CodAnag as cod_anag, 0 as num_cmov, '1900-01-01' as data_cmov, \n" +
" null as descrizione_caus, null as conto, null as annoPart, null as ser_doc, \n" +
" null as num_doc, 0 as Importo,null as perc_aliq, null as cod_jcom, null as data_ord, null as num_ord\n" +
" union all\n" +
" select '2' as GruppoConti, ctb_movr.cod_anag, ctb_movt.num_cmov, ctb_movt.data_cmov, ctb_movt.descrizione_caus, \n" +
" ctb_cont.descrizione as conto,\n" +
" isNull(ctb_movr.anno_part, year(data_doc)) as annoPart, \n" +
" isNull(ctb_movr.ser_Doc,ctb_movt.ser_doc) as ser_doc, \n" +
" isNull(ctb_movr.num_doc, ctb_movt.num_doc) as num_doc,\n" +
" ctb_movr.imp_dare-ctb_movr.imp_avere as importo,\n" +
" null as perc_aliq, null as cod_jcom, null as data_ord, null as num_ord\n" +
" from ctb_movt, ctb_movr, ctb_cont, ctb_tipo_riep\n" +
" where \n" +
" ctb_cont.tipo_riep = ctb_tipo_riep.tipo_riep and\n" +
" ctb_tipo_riep.consid_partita = 'N' and\n" +
" ctb_movr.cod_ccon <> isNull((select value from stb_gest_setup where gest_name = 'W_VDIST_INCA_RC' and section = 'REGISTRAZIONE_CONTABILE'\n" +
" and key_section = 'COD_CCON_ACCONTO'),'') and \n" +
" ctb_movr.cod_ccon = ctb_cont.cod_ccon and\n" +
" ctb_movt.num_cmov = ctb_movr.num_cmov and\n" +
" (ctb_movr.anno_part is null or ctb_movr.ser_doc is null or ctb_movr.num_doc is null) and\n" +
" ctb_movr.num_cmov not in (select num_cmov from dtb_doct where cod_anag = @CodAnag and num_cmov is not null) and\n" +
" ctb_movr.cod_anag = @CodAnag\n" +
" union all\n" +
" Select '2' as GruppoConti, dtb_doct.cod_anag, dtb_doct.num_cmov, dtb_doct.data_reg, \n" +
" dtb_tipi.descrizione as descrizione_caus,\n" +
" ctb_cont.descrizione,\n" +
" year(dtb_doct.data_doc), dtb_doct.ser_doc, dtb_doct.num_doc,\n" +
" -round((dtb_Docr.qta_doc * dtb_docr.val_unt) * (1 + gtb_aliq.perc_aliq/100),2)*segno_val_scar as importo,\n" +
" gtb_aliq.perc_aliq, dtb_docr.cod_jcom, dtb_doct.data_ord as data_ord, dtb_doct.num_ord as num_ord\n" +
" from dtb_tipi, dtb_doct, dtb_docr, mtb_aart, ctb_cont, ctb_tipo_riep, gtb_aliq\n" +
" where dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" 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 and\n" +
" dtb_docr.cod_aliq = gtb_aliq.cod_aliq and\n" +
" dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" mtb_aart.cod_ccon_ricavi = ctb_cont.cod_ccon and\n" +
" ctb_cont.tipo_riep = ctb_tipo_riep.tipo_riep and\n" +
" ctb_cont.cod_ccon <> isNull((select value from stb_gest_setup where gest_name = 'W_VDIST_INCA_RC' and section = 'REGISTRAZIONE_CONTABILE'\n" +
" and key_section = 'COD_CCON_ACCONTO'),'') and \n" +
" ctb_tipo_riep.consid_partita = 'N' and\n" +
" dtb_tipi.tipo_emissione = 'DIRETTA' and\n" +
" dtb_doct.cod_anag = @CodAnag\n" +
" )q");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,100 @@
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;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.StbEditLimit;
import it.integry.ems_model.entity.StbUser;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityList;
import java.util.*;
import java.util.stream.Collectors;
public class Migration_20250520110003 extends BaseMigration implements MigrationModelInterface {
private static final List<String> permessiMES = Collections.singletonList(
"btnPauseProd"
);
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.RossoGargano)
|| isCustomer(IntegryCustomer.Biolevante)) {
return;
}
HashMap<String, List<String>> permissionsHashMap = new HashMap<>();
String sql = (
"SELECT DISTINCT stb_abil.user_name\n" +
"FROM stb_abil\n" +
" INNER JOIN stb_user su ON stb_abil.user_name = su.user_name\n" +
" AND su.key_group <> 1\n" +
"WHERE cod_opz = 'WG069'\n" +
" AND flag_abil = 'S'"
);
List<String> stbAbilMES = UtilityDB.executeSimpleQueryOnlyFirstColumn(advancedDataSource.getConnection(), sql);
if (!UtilityList.isNullOrEmpty(stbAbilMES)) {
for (String userName : stbAbilMES) {
permissionsHashMap.put(userName, permessiMES);
}
}
if (permissionsHashMap.isEmpty()) {
return;
}
List<EntityBase> entitiesToSave = new ArrayList<>();
for (Map.Entry<String, List<String>> userPermissions : permissionsHashMap.entrySet()) {
List<StbEditLimit> stbEditLimits = userPermissions.getValue().stream()
.distinct()
.map(permission -> {
StbEditLimit stbEditLimit = new StbEditLimit()
.setUserName(userPermissions.getKey())
.setGestName("PVM")
.setDwName("monitoraggio_linee_v2")
.setDwColname(permission)
.setEnabled("S")
.setVisible("S");
stbEditLimit.setOperation(OperationType.INSERT_OR_UPDATE);
return stbEditLimit;
})
.collect(Collectors.toList());
StbUser stbUser = entitiesToSave.stream()
.map(entityBase -> (StbUser) entityBase)
.filter(stbUser1 -> stbUser1.getUserName().equalsIgnoreCase(userPermissions.getKey()))
.findFirst()
.orElseGet(() -> {
StbUser newStbUser = new StbUser()
.setUserName(userPermissions.getKey());
newStbUser.setOperation(OperationType.NO_OP);
entitiesToSave.add(newStbUser);
return newStbUser;
});
stbUser.setStbEditLimit(stbEditLimits);
}
for (EntityBase entity : entitiesToSave) {
entity.manageWithParentConnection(advancedDataSource.getConnection());
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -11,6 +11,7 @@ import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
import it.integry.ems.object_storage.interfaces.IObjectStorageService;
import it.integry.ems.settings.Model.MinIOSettingsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -19,14 +20,12 @@ import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import javax.annotation.Nonnull;
import javax.annotation.PreDestroy;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@@ -119,8 +118,24 @@ public class MinIOService implements IObjectStorageService {
}
}
@PreDestroy
public void destroy() {
logger.info("Destroying MinIO connection");
this.disconnect();
logger.info("MinIO connection destroyed");
}
@Override
public void disconnect() {
if(mMinioClient != null) {
try {
mMinioClient.close();
} catch (Exception e) {
logger.error(e);
}
}
this.mMinioClient = null;
}

View File

@@ -519,6 +519,26 @@ public class AccountingRules extends QueryRules {
desAgg = desAgg.substring(0, 39);
}
List<CtbParr> elencoPartite = new ArrayList<>();
String sql =
Query.format(
"SELECT * " +
" FROM ctb_parr " +
" WHERE num_cmov = %S AND " +
"anno_part = %S AND " +
"ser_doc = %S AND " +
"num_doc = %S AND " +
"id_riga = %S AND " +
"cod_anag <> %S ",
ctbMovr.getNumCmov(), ctbMovr.getAnnoPart(), ctbMovr.getSerDoc(), ctbMovr.getNumDoc(), ctbMovr.getIdRiga(),
ctbMovr.getCodAnag());
List<CtbParr> ctbParrDelete = UtilityDB.executeSimpleQueryDTO(conn, sql, CtbParr.class);
if (ctbParrDelete != null && !ctbParrDelete.isEmpty()) {
ctbParrDelete.stream().forEach(x -> x.setOperation(OperationType.DELETE));
elencoPartite.addAll(ctbParrDelete);
}
if (ctbMovr.getCtbScad() != null && !ctbMovr.getCtbScad().isEmpty()) {
List<CtbScad> elencoScadenzeNew = new ArrayList<>();
String finalDesAgg = desAgg;
@@ -551,7 +571,7 @@ public class AccountingRules extends QueryRules {
BigDecimal cambioScad = BigDecimal.ONE;
Integer tipoPartita = ctbMovr.getTipoPartita();
String sql =
sql =
"SELECT Cast(tipo_partita as integer) as tipo_partita, cambio " +
" FROM ctb_part " +
" WHERE cod_anag = " + UtilityDB.valueToString(ctbScad.getCodAnag()) + " AND " +
@@ -624,7 +644,7 @@ public class AccountingRules extends QueryRules {
.setNumCmov(ctbMovr.getNumCmov());
String where = crlScadParr.getEntityHolder().getWhereCondFields(crlScadParr);
String sql = "SELECT id FROM " + crlScadParr.getTableName();
sql = "SELECT id FROM " + crlScadParr.getTableName();
sql = UtilityDB.addwhereCond(sql, where, true);
Long id = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
@@ -642,7 +662,7 @@ public class AccountingRules extends QueryRules {
}
ctbMovr.setCtbScad(elencoScadenzeNew);
} else {
String sql =
sql =
Query.format(
"SELECT cast(case when count(*) > 1 THEN 1 ELSE 0 eND as bit) " +
" FROM ctb_parr " +

View File

@@ -1,11 +1,7 @@
package it.integry.ems.service;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.entity_logger.service.EntityLoggerComponent;
import it.integry.ems.looper.service.LooperService;
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.UtilityDirs;
@@ -16,13 +12,13 @@ import it.integry.ems_model.utility.UtilityHashMap;
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.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit;
@Component
public class CleanDirectoryComponent {
@@ -34,74 +30,56 @@ public class CleanDirectoryComponent {
@Autowired
private SetupGest setupGest;
@Autowired
private LooperService looperService;
@Autowired
private SettingsController settingsController;
@PostContextConstruct(priority = 10)
private void init() {
try {
looperService.add(this::cleanDirectory, 24 * 60 * 60 * 1000, EntityLoggerComponent.class.getName()); //Ogni 24 ore
} catch (Exception ex) {
logger.error(getClass().getName(), ex);
}
}
@Scheduled(fixedDelay = 12, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
private void cleanDirectory() {
try {
if (!UtilityDebug.isDebugExecution()) {
String historyProfileDb = settingsController.getHistoryProfileDb();
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
List<AvailableConnectionsModel> databases = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
for (AvailableConnectionsModel connectionModel : databases) {
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
//Mi leggo tutte le configurazioni che hanno i GG_CANC_FILE abilitati
String query = "SELECT gest_name, section " +
"FROM stb_gest_setup " +
"WHERE key_section = 'GG_CANC_FILE' AND value IS NOT NULL";
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
List<HashMap<String, Object>> enabledConfigList = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query);
//Mi leggo tutte le configurazioni che hanno i GG_CANC_FILE abilitati
String query = "SELECT gest_name, section " +
"FROM stb_gest_setup " +
"WHERE key_section = 'GG_CANC_FILE' AND value IS NOT NULL";
if (!enabledConfigList.isEmpty()) {
List<HashMap<String, Object>> enabledConfigList = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query);
for (HashMap<String, Object> enabledConfig : enabledConfigList) {
if (!enabledConfigList.isEmpty()) {
String gestName = UtilityHashMap.getValueIfExists(enabledConfig, "gest_name");
String section = UtilityHashMap.getValueIfExists(enabledConfig, "section");
for (HashMap<String, Object> enabledConfig : enabledConfigList) {
HashMap<String, String> currentConfigs = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), gestName, section);
String gestName = UtilityHashMap.getValueIfExists(enabledConfig, "gest_name");
String section = UtilityHashMap.getValueIfExists(enabledConfig, "section");
String ggCancFileStr = UtilityHashMap.getValueIfExists(currentConfigs, "GG_CANC_FILE");
Integer ggCancFile = ggCancFileStr != null ? Integer.parseInt(ggCancFileStr) : null;
HashMap<String, String> currentConfigs = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), gestName, section);
String ggCancFileStr = UtilityHashMap.getValueIfExists(currentConfigs, "GG_CANC_FILE");
Integer ggCancFile = ggCancFileStr != null ? Integer.parseInt(ggCancFileStr) : null;
String path;
if (gestName.startsWith("IMPORT")) {
path = UtilityHashMap.getValueIfExists(currentConfigs, "PATH_FILE_IMPORTED");
} else {
path = UtilityHashMap.getValueIfExists(currentConfigs, "PATH_FILE");
}
if (path == null) {
//COMMENTATO DA MINA, LA DIRECTORY NON è OBBLIGATORIA, SE LO LASCIAMO RIEMPIAMO IL LOG DI INFO INUTILI
//logger.error("Impossibile cancellare i file per la procedura " + gestName + ". Non è presente la PATH nella configurazione");
continue;
}
if (ggCancFile == null || ggCancFile == 0)
ggCancFile = 30;
UtilityFile.cleanDirectory(path, ggCancFile, "");
String path;
if (gestName.startsWith("IMPORT")) {
path = UtilityHashMap.getValueIfExists(currentConfigs, "PATH_FILE_IMPORTED");
} else {
path = UtilityHashMap.getValueIfExists(currentConfigs, "PATH_FILE");
}
if (path == null) {
//COMMENTATO DA MINA, LA DIRECTORY NON è OBBLIGATORIA, SE LO LASCIAMO RIEMPIAMO IL LOG DI INFO INUTILI
//logger.error("Impossibile cancellare i file per la procedura " + gestName + ". Non è presente la PATH nella configurazione");
continue;
}
if (ggCancFile == null || ggCancFile == 0)
ggCancFile = 30;
UtilityFile.cleanDirectory(path, ggCancFile, "");
}
}
}

View File

@@ -23,12 +23,14 @@ import org.apache.commons.lang3.StringUtils;
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.Service;
import java.lang.reflect.Field;
import java.sql.PreparedStatement;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
@@ -59,20 +61,13 @@ public class EntityLoggerNewService {
return;
initSetup();
looperService.add(() -> {
try {
consumeQueue();
} catch (Exception e) {
logger.error("EntityLoggerNewService", e);
}
}, 10 * 1000, "LOG_" + EntityLoggerNewService.class.getName());
}
private void initSetup() {
List<String> dbNames = settingsModel.getAvailableConnections(true).stream()
List<String> dbNames = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true)
.stream()
.map(AvailableConnectionsModel::getDbName)
.distinct()
.collect(Collectors.toList());
.collect(Collectors.toList());;
dynamicCacheService.addEntity(DynamicCacheService.Keys.ENTITY_LOGGER_SETUP, 5, StbLogEntitySetup.class, dbNames);
}
@@ -106,7 +101,11 @@ public class EntityLoggerNewService {
return logEntitySetup.stream().anyMatch(x -> x.getEntityName().equalsIgnoreCase(entity.getTableName()));
}
@Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS, zone = "Europe/Rome")
private synchronized void consumeQueue() throws Exception {
if (UtilityDebug.isDebugExecution())
return;
synchronized (queue) {
if (!queue.isEmpty()) {
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(settingsController.getHistoryProfileDb());

View File

@@ -1,6 +1,6 @@
package it.integry.ems.service.dto.production;
import java.util.Date;
import java.time.LocalDate;
public class InsertPartitaMagRequestDTO {
private String codMart;
@@ -9,7 +9,7 @@ public class InsertPartitaMagRequestDTO {
private String partitaMagProd;
private Date dataScad;
private LocalDate dataScad;
private String codJfas;
@@ -17,7 +17,7 @@ public class InsertPartitaMagRequestDTO {
private String gestione;
private Date dataOrd;
private LocalDate dataOrd;
private Integer numOrd;
@@ -48,11 +48,11 @@ public class InsertPartitaMagRequestDTO {
return this;
}
public Date getDataScad() {
public LocalDate getDataScad() {
return dataScad;
}
public InsertPartitaMagRequestDTO setDataScad(Date dataScad) {
public InsertPartitaMagRequestDTO setDataScad(LocalDate dataScad) {
this.dataScad = dataScad;
return this;
}
@@ -84,11 +84,11 @@ public class InsertPartitaMagRequestDTO {
return this;
}
public Date getDataOrd() {
public LocalDate getDataOrd() {
return dataOrd;
}
public InsertPartitaMagRequestDTO setDataOrd(Date dataOrd) {
public InsertPartitaMagRequestDTO setDataOrd(LocalDate dataOrd) {
this.dataOrd = dataOrd;
return this;
}

View File

@@ -2,20 +2,18 @@ package it.integry.ems.service.dto.production;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import it.integry.ems.adapter.JsonDateAdapterSerializer;
import it.integry.ems_model.annotation.SqlField;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.List;
public class OrdineLavorazioneDTO {
@SqlField(value = "data_ord_prod")
@JsonProperty("dataOrdProd")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataOrdProd;
private LocalDate dataOrdProd;
@SqlField(value = "num_ord_prod")
@JsonProperty("numOrdProd")
@@ -104,13 +102,11 @@ public class OrdineLavorazioneDTO {
@SqlField(value = "data_ord")
@JsonProperty("dataOrd")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataOrd;
private LocalDate dataOrd;
@SqlField(value = "data_cons_commessa")
@JsonProperty("dataConsCommessa")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataConsCommessa;
private LocalDate dataConsCommessa;
@SqlField(value = "flag_evaso_prod")
@JsonProperty("flagEvasoProd")
@@ -159,8 +155,7 @@ public class OrdineLavorazioneDTO {
@SqlField(value = "data_scad")
@JsonProperty("dataScad")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataScad;
private LocalDate dataScad;
@SqlField(value = "partita_mag_suggested")
@JsonProperty("partitaMagSuggested")
@@ -169,8 +164,7 @@ public class OrdineLavorazioneDTO {
@SqlField(value = "data_scad_suggested")
@JsonProperty("dataScadSuggested")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataScadSuggested;
private LocalDate dataScadSuggested;
@SqlField(value = "cod_prod")
@JsonProperty("codProd")
@@ -183,18 +177,15 @@ public class OrdineLavorazioneDTO {
@SqlField(value = "data_iniz_prod")
@JsonProperty("dataInizProd")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataInizProd;
private LocalDate dataInizProd;
@SqlField(value = "data_iniz")
@JsonProperty("dataIniz")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataIniz;
private LocalDateTime dataIniz;
@SqlField(value = "data_fine")
@JsonProperty("dataFine")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
private Date dataFine;
private LocalDateTime dataFine;
@SqlField(value = "qta_prod")
@JsonProperty("qtaProd")
@@ -368,12 +359,12 @@ public class OrdineLavorazioneDTO {
@SqlField(value = "run_time_end")
@JsonProperty("runTimeEnd")
@JsonSerialize
private Date runTimeEnd;
private LocalDateTime runTimeEnd;
@SqlField("data_cons_prod_max")
@JsonProperty("dataConsProdMax")
@JsonSerialize
private Date dataConsProdMax;
private LocalDateTime dataConsProdMax;
@SqlField("id_lotto")
@JsonProperty("idLotto")
@@ -392,11 +383,12 @@ public class OrdineLavorazioneDTO {
private List<AvailableClassMercDTO> availableClassMerc;
public Date getDataOrdProd() {
public LocalDate getDataOrdProd() {
return dataOrdProd;
}
public OrdineLavorazioneDTO setDataOrdProd(Date dataOrdProd) {
public OrdineLavorazioneDTO setDataOrdProd(LocalDate dataOrdProd) {
this.dataOrdProd = dataOrdProd;
return this;
}
@@ -554,20 +546,20 @@ public class OrdineLavorazioneDTO {
return this;
}
public Date getDataOrd() {
public LocalDate getDataOrd() {
return dataOrd;
}
public OrdineLavorazioneDTO setDataOrd(Date dataOrd) {
public OrdineLavorazioneDTO setDataOrd(LocalDate dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public Date getDataConsCommessa() {
public LocalDate getDataConsCommessa() {
return dataConsCommessa;
}
public OrdineLavorazioneDTO setDataConsCommessa(Date dataConsCommessa) {
public OrdineLavorazioneDTO setDataConsCommessa(LocalDate dataConsCommessa) {
this.dataConsCommessa = dataConsCommessa;
return this;
}
@@ -653,11 +645,11 @@ public class OrdineLavorazioneDTO {
return this;
}
public Date getDataScad() {
public LocalDate getDataScad() {
return dataScad;
}
public OrdineLavorazioneDTO setDataScad(Date dataScad) {
public OrdineLavorazioneDTO setDataScad(LocalDate dataScad) {
this.dataScad = dataScad;
return this;
}
@@ -671,11 +663,11 @@ public class OrdineLavorazioneDTO {
return this;
}
public Date getDataScadSuggested() {
public LocalDate getDataScadSuggested() {
return dataScadSuggested;
}
public OrdineLavorazioneDTO setDataScadSuggested(Date dataScadSuggested) {
public OrdineLavorazioneDTO setDataScadSuggested(LocalDate dataScadSuggested) {
this.dataScadSuggested = dataScadSuggested;
return this;
}
@@ -698,29 +690,29 @@ public class OrdineLavorazioneDTO {
return this;
}
public Date getDataInizProd() {
public LocalDate getDataInizProd() {
return dataInizProd;
}
public OrdineLavorazioneDTO setDataInizProd(Date dataInizProd) {
public OrdineLavorazioneDTO setDataInizProd(LocalDate dataInizProd) {
this.dataInizProd = dataInizProd;
return this;
}
public Date getDataIniz() {
public LocalDateTime getDataIniz() {
return dataIniz;
}
public OrdineLavorazioneDTO setDataIniz(Date dataIniz) {
public OrdineLavorazioneDTO setDataIniz(LocalDateTime dataIniz) {
this.dataIniz = dataIniz;
return this;
}
public Date getDataFine() {
public LocalDateTime getDataFine() {
return dataFine;
}
public OrdineLavorazioneDTO setDataFine(Date dataFine) {
public OrdineLavorazioneDTO setDataFine(LocalDateTime dataFine) {
this.dataFine = dataFine;
return this;
}
@@ -1031,20 +1023,20 @@ public class OrdineLavorazioneDTO {
return this;
}
public Date getRunTimeEnd() {
public LocalDateTime getRunTimeEnd() {
return runTimeEnd;
}
public OrdineLavorazioneDTO setRunTimeEnd(Date runTimeEnd) {
public OrdineLavorazioneDTO setRunTimeEnd(LocalDateTime runTimeEnd) {
this.runTimeEnd = runTimeEnd;
return this;
}
public Date getDataConsProdMax() {
public LocalDateTime getDataConsProdMax() {
return dataConsProdMax;
}
public OrdineLavorazioneDTO setDataConsProdMax(Date dataConsProdMax) {
public OrdineLavorazioneDTO setDataConsProdMax(LocalDateTime dataConsProdMax) {
this.dataConsProdMax = dataConsProdMax;
return this;
}

View File

@@ -63,7 +63,7 @@ public class MrpSetupHandlerService {
}
}
} catch (Exception ex) {
logger.error(MrpSetupHandlerService.class.getSimpleName(), ex);
logger.error(getClass().getSimpleName(), ex);
throw ex;
}
}
@@ -75,7 +75,7 @@ public class MrpSetupHandlerService {
@Scheduled(fixedDelay = 30, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome")
private void updateData() throws Exception {
private void updateData() {
if (!canBeExecuted) return;
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
@@ -85,7 +85,7 @@ public class MrpSetupHandlerService {
if (!isEnabled) continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
int timingId = UtilityTiming.startNewTiming(MrpSetupHandlerService.class.getSimpleName() + " (" + connectionModel.getProfileName() + ")");
int timingId = UtilityTiming.startNewTiming(getClass().getSimpleName() + " (" + connectionModel.getProfileName() + ")");
internalSottogruppoSetupCache(multiDBTransactionManager);
internalGruppoSetupCache(multiDBTransactionManager);

View File

@@ -1,7 +1,6 @@
package it.integry.ems.service.production;
import com.annimon.stream.Stream;
import it.integry.common.var.CommonConstants;
import it.integry.ems.service.dto.production.OrdineInevasoGroupMercDTO;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
@@ -212,7 +211,7 @@ public class ProductionOrderDataHandlerService {
"WHERE mtb_colr.num_etich = 1 AND " +
" mtb_colr.qta_col = 0 AND " +
" mtb_colr.num_ord = " + UtilityDB.valueToString(ordineDTO.getNumOrd()) + " AND " +
" mtb_colr.data_ord = " + UtilityDB.valueDateToString(ordineDTO.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" mtb_colr.data_ord = " + UtilityDB.valueToString(ordineDTO.getDataOrd()) + " AND " +
" mtb_colr.gestione = " + UtilityDB.valueToString(ordineDTO.getGestione()) + " AND " +
" mtb_colr.cod_mart = " + UtilityDB.valueToString(ordineDTO.getCodProd()) + " AND " +
" mtb_colr.partita_mag = " + UtilityDB.valueToString(ordineDTO.getPartitaMag());
@@ -318,8 +317,8 @@ public class ProductionOrderDataHandlerService {
return ordersListToReturn.stream()
.filter(x -> (UtilityString.isNullOrEmpty(flagEvaso) || UtilityString.isNull(x.getFlagOrdineEvaso(), "I").equalsIgnoreCase(flagEvaso)) &&
(startDate == null || UtilityLocalDate.localDateFromDate(x.getDataOrd()).isAfter(startDate)) &&
(endDate == null || UtilityLocalDate.localDateFromDate(x.getDataOrd()).isBefore(endDate)) &&
(startDate == null || x.getDataOrd().isAfter(startDate)) &&
(endDate == null || x.getDataOrd().isBefore(endDate)) &&
(UtilityString.isNullOrEmpty(codAnag) || x.getCodAnag().equalsIgnoreCase(codAnag)))
.collect(Collectors.toList());
}
@@ -332,7 +331,7 @@ public class ProductionOrderDataHandlerService {
}
return ordini.stream()
.filter((order) ->
UtilityLocalDate.localDateFromDate(order.getDataOrd()).isEqual(dataOrd) &&
order.getDataOrd().isEqual(dataOrd) &&
order.getGestione().equalsIgnoreCase(gestione) && order.getNumOrd() == numOrd)
.findFirst()
.orElse(null);

View File

@@ -2,7 +2,6 @@ package it.integry.ems.sync;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.datasource.DataSource;
import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems.looper.service.LooperService;
@@ -24,6 +23,7 @@ import it.integry.ems_model.utility.UtilityLocalDate;
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.lang.reflect.Field;
@@ -33,6 +33,7 @@ import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@@ -56,13 +57,6 @@ public class AsyncHistoryManager {
//Implement check list like distribuzione
private final AtomicReference<List<ExportHistoryGroupDTO>> currentlyInExecutionG = new AtomicReference<>(new ArrayList<>());
@PostContextConstruct(priority = 20)
public void init() {
this.looperService.add(this::consumeRetrieveQueue, 10 * 1000, "async-history-read");
this.looperService.add(this::consumeProcessedQueue, 2 * 1000, "async-history-save");
}
public void addToExportQueue(DataSource dataSource, long groupId, PublicationDTO publication) throws Exception {
tryAddInExecutionList(groupId, dataSource, new ExportHistoryItemDTO()
@@ -95,7 +89,7 @@ public class AsyncHistoryManager {
list.add(exportHistoryItemDTO);
}
@Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS, zone = "Europe/Rome", initialDelay = 60)
private void consumeRetrieveQueue() {
for (ExportHistoryGroupDTO currentGroup : currentlyInExecutionG.get()) {
@@ -193,7 +187,7 @@ public class AsyncHistoryManager {
});
}
@Scheduled(fixedDelay = 2, timeUnit = TimeUnit.SECONDS, zone = "Europe/Rome", initialDelay = 60)
private void consumeProcessedQueue() {
List<ExportHistoryGroupDTO> list = currentlyInExecutionG.get();
for (int i = 0; i < list.size(); i++) {

View File

@@ -1,7 +1,6 @@
package it.integry.ems.sync;
import com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
@@ -24,11 +23,13 @@ import org.apache.logging.log4j.Logger;
import org.josql.Query;
import org.josql.QueryResults;
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.util.*;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
@@ -49,15 +50,11 @@ public class AsyncManager {
private final static ConcurrentLinkedQueue<Map.Entry<String, StbTransactionLog>> toBeSavedQueue = new ConcurrentLinkedQueue<>();
@PostContextConstruct
public void init() {
if ((!UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer())) {
looperService.add(this::internalCachePublicationsSetup, 5 * 60 * 1000, "sync-setup-cache");
looperService.add(this::consumeToBeSavedQueue, 20 * 1000, "sync-flush-data");
}
}
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.MINUTES, zone = "Europe/Rome")
private void internalCachePublicationsSetup() {
if(UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer())
return;
String historyProfileDb = null;
try {
historyProfileDb = settingsController.getHistoryProfileDb();
@@ -66,31 +63,26 @@ public class AsyncManager {
}
String finalHistoryProfileDb = historyProfileDb;
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> finalHistoryProfileDb != null && !finalHistoryProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
List<AvailableConnectionsModel> databases = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
cachedSetup.clear();
for (String dbName : databases.keySet()) {
for (AvailableConnectionsModel connectionModel : databases) {
try {
String profileName = databases.get(dbName).get(0).getProfileName();
cacheSetup(dbName, profileName);
cacheSetup(connectionModel);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
private void cacheSetup(String dbName, String profileName) throws Exception {
private void cacheSetup(AvailableConnectionsModel connectionsModel) throws Exception {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false)) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionsModel, false)) {
String sql = "SELECT * FROM " + StbPublicationsDetail.ENTITY + " WHERE active = 1";
List<StbPublicationsDetail> publications = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, StbPublicationsDetail.class);
cachedSetup.putIfAbsent(dbName, publications);
cachedSetup.putIfAbsent(connectionsModel.getDbName(), publications);
}
}
@@ -166,8 +158,11 @@ public class AsyncManager {
return stbPublication.getLastGroupId();
}
@Scheduled(fixedDelay = 20, timeUnit = TimeUnit.SECONDS, zone = "Europe/Rome")
private void consumeToBeSavedQueue() {
if(UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer())
return;
if (cachedSetup.entrySet().stream().anyMatch(x -> x.getValue() != null && x.getValue().stream().anyMatch(y -> !y.isReadyToTransmit())))
return;

View File

@@ -10,9 +10,13 @@ import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
import java.io.IOException;
import java.sql.SQLException;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
@@ -43,6 +47,14 @@ public class BasicConnectionPool {
}
}
@PreDestroy
public void destroy() {
logger.info("Shutting down connection pool");
closeAllConnections();
logger.info("Connection pool shut down successfully");
}
private void closeAllConnections() {
poolLock.lock();
try {

View File

@@ -3,14 +3,14 @@ package it.integry.ems.task;
import com.itextpdf.text.log.Logger;
import com.itextpdf.text.log.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
@Service
@Component
public class TaskExecutorService {
@Autowired
@@ -73,7 +73,7 @@ public class TaskExecutorService {
}
@PreDestroy
public void shutdown() {
public void destroy() {
try {
logger.info("Initiating shutdown of ExecutorService");
executorService.shutdown();

View File

@@ -1896,7 +1896,7 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
.filter(x -> x.isImportFromParent() &&
(x.getImportFromParent().parentEntity() == EntityBase.class ||
x.getImportFromParent().parentEntity().equals(this.getClass())))
.collect(Collectors.toMap(x -> x.getImportFromParent().value(), x -> x.getSqlField().value()));
.collect(Collectors.toMap(x -> UtilityString.isNull(x.getImportFromParent().value(), x.getSqlField().value()), x -> x.getSqlField().value()));
}
List<EntityHierarchy.Field> currentEntityFields = getEntityHolder().getEntityFields(this.getClass(), null);

View File

@@ -44,6 +44,7 @@ public class CtbPart extends EntityBase {
@SqlField(value = "num_doc", nullable = false)
private Integer numDoc;
@ImportFromParent (value = "data_doc")
@SqlField(value = "data_doc")
private Date dataDoc;

View File

@@ -53,11 +53,11 @@ public class CtbScad extends EntityBase {
@SqlField(value = "id_titolo")
private Integer idTitolo;
@ImportFromParent
@ImportFromParent( value = "cod_paga")
@SqlField(value = "cod_paga", maxLength = 5)
private String codPaga;
@ImportFromParent
@ImportFromParent( value = "data_doc")
@SqlField(value = "data_doc", nullable = false, format = CommonConstants.SYSDATE)
private Date dataDoc;
@@ -106,7 +106,7 @@ public class CtbScad extends EntityBase {
@MapToTable(value = "tipo_partita")
private Integer tipoPartita;
@ImportFromParent
@ImportFromParent(value = "num_cmov")
private Integer numCmov;
@JsonProperty(value = "id_riga_mov")

View File

@@ -3,12 +3,13 @@ package it.integry.ems_model.entity;
import com.fasterxml.jackson.annotation.JsonTypeName;
import it.integry.ems_model.annotation.*;
import it.integry.ems_model.base.EntityBase;
import org.kie.api.definition.type.PropertyReactive;
import java.math.BigDecimal;
import java.util.List;
import java.util.ArrayList;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.kie.api.definition.type.PropertyReactive;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Master
@PropertyReactive
@@ -77,6 +78,9 @@ public class VtbVett extends EntityBase {
@SqlField(value = "num_autoriz", maxLength = 40)
private String numAutoriz;
@SqlField(value = "archiviazione_elettronica", nullable = false, defaultObjectValue = "0")
private Boolean archiviazioneElettronica;
@EntityChild
private List<VtbVetr> vtbVetr = new ArrayList<>();
@@ -259,6 +263,15 @@ public class VtbVett extends EntityBase {
this.vtbVettTarghe = vtbVettTarghe;
}
public Boolean getArchiviazioneElettronica() {
return archiviazioneElettronica;
}
public VtbVett setArchiviazioneElettronica(Boolean archiviazioneElettronica) {
this.archiviazioneElettronica = archiviazioneElettronica;
return this;
}
@Override
protected void deleteChilds() throws Exception {
VtbVetr vtbVetr = new VtbVetr();

View File

@@ -1,17 +1,14 @@
package it.integry.firebase.service;
import com.annimon.stream.Stream;
import it.integry.annotations.PostContextConstruct;
import it.integry.common.var.CommonConstants;
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.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems_model.entity.WtbNotification;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityDate;
@@ -20,12 +17,14 @@ import it.integry.ems_model.utility.UtilityServer;
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.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
public class NotificationSenderComponent {
@@ -34,18 +33,11 @@ public class NotificationSenderComponent {
@Autowired
private SettingsModel settingsModel;
@Autowired
private LooperService looperService;
@Autowired
private ResponseJSONObjectMapper responseJSONObjectMapper;
@PostContextConstruct(priority = 11)
private void init() {
if (!UtilityDebug.isDebugExecution())
looperService.add(this::sendNotifications, 15 * 60 * 1000, NotificationSenderComponent.class.getName());
}
@Scheduled(fixedDelay = 15, timeUnit = TimeUnit.MINUTES, zone = "Europe/Rome", initialDelay = 1)
private void sendNotifications() {
MultiDBTransactionManager multiDBTransactionManager = null;

View File

@@ -264,7 +264,6 @@ then
modify ( $entity ) { setAnnoPart(annoPart)}
end
rule "insertNewPartita"
no-loop
when

View File

@@ -213,7 +213,7 @@ rule "completeImportoCtbMovt"
no-loop
when
eval(postRulesEnabled)
$ctbMovt:CtbMovt(( importo == null || importo == 0 ) && operation != OperationType.DELETE)
$ctbMovt:CtbMovt( importo == null && operation != OperationType.DELETE)
then
CommonRules.reloadRow(conn, $ctbMovt);
BigDecimal importo = AccountingRules.completeImportoCtbMovt(conn, $ctbMovt);

View File

@@ -42,7 +42,7 @@
<plugin>
<groupId>cz.habarta.typescript-generator</groupId>
<artifactId>typescript-generator-maven-plugin</artifactId>
<version>2.37.1128</version>
<version>3.2.1263</version>
<executions>
<execution>
<id>generate</id>

View File

@@ -39,7 +39,8 @@ public class LogController {
ServiceRestResponse deleteLogs(HttpServletRequest request,
@RequestParam(defaultValue = "30") Integer days) {
try {
return ServiceRestResponse.createPositiveResponse(logService.deleteLogs(days));
logService.deleteLogs(days);
return ServiceRestResponse.createPositiveResponse();
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
return ServiceRestResponse.createNegativeResponse(e);

View File

@@ -4,28 +4,27 @@ import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.google.common.base.CaseFormat;
import com.google.common.collect.ImmutableList;
import it.integry.annotations.PostContextConstruct;
import it.integry.core.log.dto.*;
import it.integry.core.log.enums.FilterMatchMode;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.utility.UtilityDirs;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
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.Service;
import java.io.File;
import java.math.BigDecimal;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import java.sql.PreparedStatement;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Service
public class LogService {
@@ -40,24 +39,6 @@ public class LogService {
private final ImmutableList<String> globalFilterFields = ImmutableList.of("logger", "message", "exception");
@PostContextConstruct
public void init() {
looperService.add(() -> {
try {
deleteLogs(settingsModel.getLoggerConfiguration().getDbDeleteDays());
} catch (Exception exception) {
logger.error(exception);
}
}, 24 * 60 * 60 * 1000, LogService.class.getName());
looperService.add(() -> {
try {
checkLogSize(settingsModel.getLoggerConfiguration().getDbMaxSize());
} catch (Exception exception) {
logger.error(exception);
}
}, 5 * 60 * 1000, LogService.class.getName());
}
public List<LogDTO> retrieveLogs(Integer page, Integer pageSize, LogDataDTO logData) throws Exception {
if (pageSize == null) {
pageSize = 100;
@@ -251,7 +232,13 @@ public class LogService {
}
}
public int deleteLogs(Integer days) throws Exception {
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.DAYS, zone = "Europe/Rome")
public void deleteLogs() throws Exception {
Integer days = settingsModel.getLoggerConfiguration().getDbDeleteDays();
deleteLogs(days);
}
public void deleteLogs(Integer days) throws Exception {
String sql = String.format("DELETE\n" +
"FROM app_logs\n" +
"WHERE entry_date < UNIXEPOCH(DATETIME('now', '%s day')) * 1000", -1 * days);
@@ -260,11 +247,12 @@ public class LogService {
PreparedStatement ps = connection.prepareStatement(sql)) {
int deletedRows = ps.executeUpdate();
logger.trace(String.format("Rimossi %d record dal log_db per obsolescenza", deletedRows));
return deletedRows;
}
}
public void checkLogSize(String maxSize) throws Exception {
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.MINUTES, zone = "Europe/Rome")
public void checkLogSize() throws Exception {
String maxSize = settingsModel.getLoggerConfiguration().getDbMaxSize();
BigDecimal numericValue = BigDecimal.ONE;
String um = "G";
if (!UtilityString.isNullOrEmpty(maxSize)) {

View File

@@ -0,0 +1,29 @@
package it.integry.ems.contabil.controller;
import it.integry.common.var.CommonConstants;
import it.integry.ems.contabil.service.MovimentiContabiliServices;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems_model.entity.CtbMovt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@Scope("request")
@RequestMapping("movimenti-contabili")
public class MovimentiContabiliController {
@Autowired
private MovimentiContabiliServices movimentiContabiliServices;
@PostMapping(value = "save")
public @ResponseBody
ServiceRestResponse save(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody CtbMovt ctbMovt) throws Exception {
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.save(ctbMovt));
}
}

View File

@@ -0,0 +1,81 @@
package it.integry.ems.contabil.service;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.service.EntityProcessor;
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.base.EntityInterface;
import it.integry.ems_model.entity.CtbMovt;
import it.integry.ems_model.entity.CtbParr;
import it.integry.ems_model.entity.CtbPart;
import it.integry.ems_model.entity.DtbDoct;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityBigDecimal;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
@Service
@Scope("request")
public class MovimentiContabiliServices {
@Autowired
private EntityProcessor entityProcessor;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
public CtbMovt save(CtbMovt ctbMovt) throws Exception {
List<EntityBase> entitiesToSave = new ArrayList<>();
if (ctbMovt.getNumCmov() != null && ctbMovt.getOperation() != OperationType.DELETE) {
String sql =
Query.format( "SELECT cod_anag FROM ctb_movt WHERE num_cmov = %s", ctbMovt.getNumCmov() );
String codAnagOld = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (codAnagOld != null && !codAnagOld.equalsIgnoreCase(ctbMovt.getCodAnag())) {
sql = Query.format(
"SELECT DISTINCT ctb_part.*\n" +
"FROM ctb_part\n" +
" INNER JOIN ctb_parr ON ctb_part.tipo_anag = ctb_parr.tipo_anag AND ctb_part.cod_anag = ctb_parr.cod_anag AND\n" +
" ctb_part.anno_part = ctb_parr.anno_part AND ctb_part.ser_doc = ctb_parr.ser_doc AND\n" +
" ctb_part.num_doc = ctb_parr.num_doc\n" +
" INNER JOIN ctb_caus ON ctb_parr.cod_ccau = ctb_caus.cod_ccau\n" +
"WHERE ctb_parr.num_cmov = %s",
ctbMovt.getNumCmov());
CtbPart ctbPart = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, CtbPart.class);
if ( ctbPart != null) {
if ( ctbPart.getTipoPartita() == 1 && !UtilityBigDecimal.isNullOrZero(ctbPart.getAverePart())) {
throw new Exception("Impossibile modificare il movimento! Documento già incassato");
} else if (ctbPart.getTipoPartita() == 0 && !UtilityBigDecimal.isNullOrZero(ctbPart.getDarePart())) {
throw new Exception("Impossibile modificare il movimento! Documento già incassato");
}
ctbPart.setOperation(OperationType.DELETE);
entitiesToSave.add(ctbPart);
}
}
entitiesToSave.add(ctbMovt);
} else {
entitiesToSave = Collections.singletonList(ctbMovt);
}
List<EntityBase> entityRet = entityProcessor.processEntityList(entitiesToSave, true);
UtilityEntity.throwEntitiesException(entityRet);
CtbMovt ctbMovtRet = entityRet.stream().filter(x->x instanceof CtbMovt).map(x->(CtbMovt)x).findFirst().orElse(null);
return ctbMovtRet;
}
}

View File

@@ -50,7 +50,7 @@ public class ToscaProductionService {
if (openedSteps != null) {
for (DtbOrdSteps dtbOrdStep : openedSteps) {
mesProductionServiceV2.closeStep(dtbOrdStep.getDataOrd(), dtbOrdStep.getNumOrd(), dtbOrdStep.getGestione(), codJfas, dtbOrdStep.getIdStep(), dtbOrdStep.getIdRiga());
mesProductionServiceV2.closeStep(UtilityLocalDate.localDateFromDate(dtbOrdStep.getDataOrd()), dtbOrdStep.getNumOrd(), dtbOrdStep.getGestione(), codJfas, dtbOrdStep.getIdStep(), dtbOrdStep.getIdRiga());
}
}
@@ -132,7 +132,7 @@ public class ToscaProductionService {
if (openedSteps != null) {
for (DtbOrdSteps dtbOrdStep : openedSteps) {
mesProductionServiceV2.closeStep(dtbOrdStep.getDataOrd(), dtbOrdStep.getNumOrd(), dtbOrdStep.getGestione(), codJfas, dtbOrdStep.getIdStep(), dtbOrdStep.getIdRiga());
mesProductionServiceV2.closeStep(UtilityLocalDate.localDateFromDate(dtbOrdStep.getDataOrd()), dtbOrdStep.getNumOrd(), dtbOrdStep.getGestione(), codJfas, dtbOrdStep.getIdStep(), dtbOrdStep.getIdRiga());
}
}
}

View File

@@ -26,6 +26,15 @@ public class DocumentiDifferitiController {
return ServiceRestResponse.createPositiveResponse(documentiDifferitiService.insert(dtbDoct));
}
@RequestMapping(value = "update", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse update(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody DtbDoct dtbDoct) throws Exception{
return ServiceRestResponse.createPositiveResponse(documentiDifferitiService.update(dtbDoct));
}
@RequestMapping(value = "delete", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse delete(HttpServletRequest request,

View File

@@ -46,10 +46,13 @@ public class DocumentiDifferitiService {
x
.setIdRigaBolla(x.getIdRiga())
.setIdRiga(count.incrementAndGet());
if (UtilityString.isNullOrEmpty(x.getCodDtip()) && previous.get() != null) x.setCodDtip(previous.get().getCodDtip());
if (UtilityString.isNullOrEmpty(x.getCodAnag()) && previous.get() != null) x.setCodAnag(previous.get().getCodAnag());
if (x.getDataDoc() == null && previous.get() != null) x.setDataDoc(previous.get().getDataDoc());
if ((UtilityString.isNullOrEmpty(x.getSerDoc()) || x.getSerDoc().equalsIgnoreCase("/")) &&
if (UtilityString.isNullOrEmpty(x.getCodDtip()) && previous.get() != null)
x.setCodDtip(previous.get().getCodDtip());
if (UtilityString.isNullOrEmpty(x.getCodAnag()) && previous.get() != null)
x.setCodAnag(previous.get().getCodAnag());
if (x.getDataDoc() == null && previous.get() != null)
x.setDataDoc(previous.get().getDataDoc());
if ((UtilityString.isNullOrEmpty(x.getSerDoc()) || (x.getSerDoc().equalsIgnoreCase("/") && x.getDataDoc() == null ) ) &&
previous.get() != null) x.setSerDoc(previous.get().getSerDoc());
if (x.getNumDoc() == null && previous.get() != null) x.setNumDoc(previous.get().getNumDoc());
previous.set(x);
@@ -68,6 +71,7 @@ public class DocumentiDifferitiService {
for (Map.Entry<DtbDoct, List<DtbDocr>> entry : elencoBolle.entrySet()) {
DtbDoct bolla = entry.getKey();
bolla.setOperation(OperationType.DELETE_THEN_INSERT);
bolla.setDtbDocr(entry.getValue().stream().filter(x->x.getIdRigaBolla() == null || x.getIdRigaBolla() > 0).collect(Collectors.toList()));
setDatiBolla(bolla, dtbDoct.getCodDtip());
dtbDoct.addDtbDoctBolla(bolla);
@@ -75,8 +79,11 @@ public class DocumentiDifferitiService {
completeDatiFattura(dtbDoct);
return entityProcessor.processEntity(dtbDoct, multiDBTransactionManager);
DtbDoct ret = entityProcessor.processEntity(dtbDoct, multiDBTransactionManager);
UtilityEntity.throwEntityException(ret);
return ret;
}
private void setDatiBolla(DtbDoct bolla, String codDtipFatt) throws Exception {
@@ -88,7 +95,7 @@ public class DocumentiDifferitiService {
sql = "SELECT segno_val_car - ( 0 - segno_val_scar) FROM dtb_tipi WHERE cod_dtip = " + UtilityDB.valueToString(codDtipFatt);
ret = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
BigDecimal segnoDoc = new BigDecimal(ret);
if (segnoDoc.compareTo(segnoDoc) != 0 ) {
if (segnoDoc.compareTo(segnoBolla) != 0 ) {
riga.setCodDtip(codDtipBolla);
riga.setQtaDoc(riga.getQtaDoc().multiply(segnoBolla).multiply(segnoDoc));
if (riga.getQtaDoc2() != null) {
@@ -104,12 +111,11 @@ public class DocumentiDifferitiService {
}
riga.setOperation(OperationType.INSERT_OR_UPDATE);
if (riga.getIdRigaBolla() != null && !riga.getIdRiga().equals(riga.getIdRigaBolla())) {
riga.setOperation(OperationType.DELETE_THEN_INSERT);
HashMap<String, Object> oldPK = new HashMap<>();
oldPK.put("idRiga", riga.getIdRigaBolla());
riga.setOldPk(oldPK);
}
// if (riga.getIdRigaBolla() != null && !riga.getIdRiga().equals(riga.getIdRigaBolla())) {
// HashMap<String, Object> oldPK = new HashMap<>();
// oldPK.put("idRiga", riga.getIdRigaBolla());
// riga.setOldPk(oldPK);
// }
}
}
@@ -210,44 +216,6 @@ public class DocumentiDifferitiService {
}
public DtbDoct update(DtbDoct dtbDoct) throws Exception {
AtomicReference<DtbDocr> previous = new AtomicReference<>(new DtbDocr());
dtbDoct.getDtbDocr().stream()
.forEach(x-> {
/* x
.setIdRigaBolla(x.getIdRiga())
.setIdRiga(count.incrementAndGet());*/
if (UtilityString.isNullOrEmpty(x.getCodDtip()) && previous.get() != null) x.setCodDtip(previous.get().getCodDtip());
if (UtilityString.isNullOrEmpty(x.getCodAnag()) && previous.get() != null) x.setCodAnag(previous.get().getCodAnag());
if (x.getDataDoc() == null && previous.get() != null) x.setDataDoc(previous.get().getDataDoc());
if ((UtilityString.isNullOrEmpty(x.getSerDoc()) || x.getSerDoc().equalsIgnoreCase("/")) &&
previous.get() != null) x.setSerDoc(previous.get().getSerDoc());
if (x.getNumDoc() == null && previous.get() != null) x.setNumDoc(previous.get().getNumDoc());
previous.set(x);
});
Map<DtbDoct, List<DtbDocr>> elencoBolle =
dtbDoct.getDtbDocr()
.stream()
.collect(groupingBy(x ->
new DtbDoct()
.setCodAnag(x.getCodAnag())
.setCodDtip(x.getCodDtip())
.setDataDoc(x.getDataDoc())
.setSerDoc(x.getSerDoc())
.setNumDoc(x.getNumDoc())));
for (Map.Entry<DtbDoct, List<DtbDocr>> entry : elencoBolle.entrySet()) {
DtbDoct bolla = entry.getKey();
bolla.setDtbDocr(entry.getValue().stream().filter(x->x.getIdRigaBolla() == null || x.getIdRigaBolla() > 0).collect(Collectors.toList()));
setDatiBolla(bolla, dtbDoct.getCodDtip());
dtbDoct.addDtbDoctBolla(bolla);
}
completeDatiFattura(dtbDoct);
return entityProcessor.processEntity(dtbDoct, multiDBTransactionManager);
return insert(dtbDoct);
}
}

View File

@@ -412,7 +412,16 @@ public class DocumentiDirettiService {
boolean fatturaPedaneCliente = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
boolean fatturaVettore = false;
if (!UtilityString.isNullOrEmpty(dtbDoct.getIncoterms())) {
boolean vettoreObbligatorio = false;
if (!UtilityString.isNullOrEmpty(dtbDoct.getMezzo())) {
sql =
Query.format(
"SELECT vettore_obbligatorio FROM gtb_mezzo WHERE mezzo = %s",
dtbDoct.getMezzo());
vettoreObbligatorio = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
}
if (!UtilityString.isNullOrEmpty(dtbDoct.getIncoterms()) && vettoreObbligatorio) {
sql =
Query.format(
"SELECT CAST(IIF(costo=2,1,0) as bit) FROM gtb_porto WHERE porto = %s",

View File

@@ -8,15 +8,16 @@ import it.integry.ems.production.dto.*;
import it.integry.ems.production.service.MesProductionServiceV2;
import it.integry.ems.production.service.ProductionLineService;
import it.integry.ems.production.service.ProductionOrdersLifecycleService;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.service.production.ProductionOrderDataHandlerService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.response.StatusResponse;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.service.production.ProductionOrderDataHandlerService;
import it.integry.ems.status.ServiceChecker;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDate;
import it.integry.ems_model.utility.UtilityString;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +30,6 @@ import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@RestController
@@ -178,16 +178,13 @@ public class MesProductionControllerV2 {
ServiceRestResponse openOrderSteps(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestParam(required = false, defaultValue = "") String codJfas,
@RequestParam String dataOrd,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate dataOrd,
@RequestParam Integer numOrd,
@RequestParam String gestioneOrd,
@RequestParam(required = false, defaultValue = "0") int hrNum,
@RequestParam(required = false) String descrizioneAttivita) throws Exception {
ServiceRestResponse response = new ServiceRestResponse(EsitoType.OK);
Date dataOrdD = UtilityDate.RecognizeDate(dataOrd);
mesProductionService.openStep(dataOrdD, numOrd, gestioneOrd, UtilityString.emptyStr2Null(codJfas), hrNum, null, descrizioneAttivita);
return response;
mesProductionService.openStep(dataOrd, numOrd, gestioneOrd, UtilityString.emptyStr2Null(codJfas), hrNum, null, descrizioneAttivita);
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = EmsRestConstants.PATH_MES_CLOSE_ORDER_STEPS_V2, method = RequestMethod.GET)
@@ -195,16 +192,14 @@ public class MesProductionControllerV2 {
ServiceRestResponse closeOrderSteps(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestParam(required = false, defaultValue = "") String codJfas,
@RequestParam String dataOrd,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate dataOrd,
@RequestParam Integer numOrd,
@RequestParam String gestioneOrd,
@RequestParam(required = false) Integer idStep,
@RequestParam(required = false) Integer idRiga) throws Exception {
ServiceRestResponse response = new ServiceRestResponse(EsitoType.OK);
Date dataOrdD = UtilityDate.RecognizeDate(dataOrd);
mesProductionService.closeStep(dataOrdD, numOrd, gestioneOrd, UtilityString.emptyStr2Null(codJfas), idStep, idRiga);
return response;
mesProductionService.closeStep(dataOrd, numOrd, gestioneOrd, UtilityString.emptyStr2Null(codJfas), idStep, idRiga);
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = EmsRestConstants.PATH_MES_UPDATE_QTA_IMMESSA_ORDER_STEPS_V2, method = RequestMethod.POST)
@@ -260,16 +255,16 @@ public class MesProductionControllerV2 {
@RequestMapping(value = EmsRestConstants.PATH_MES_CREATE_UL_LAVORAZIONE_V2, method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse createULLavorazione(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody MtbColt mtbColt) throws Exception {
ServiceRestResponse createULLavorazione(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody CreateUDCProduzioneRequestDTO requestDto) throws Exception {
ServiceRestResponse response = ServiceRestResponse.createPositiveResponse();
response.setEntity(mesProductionService.createULLavorazione(mtbColt));
return response;
final MtbColt ulLavorazione = mesProductionService.createULLavorazione(requestDto);
ulLavorazione.setOperation(OperationType.SELECT_OBJECT);
ulLavorazione.getMtbColr().forEach(x -> x.setOperation(OperationType.SELECT_OBJECT));
return ServiceRestResponse.createPositiveResponse(ulLavorazione);
}
@RequestMapping(value = EmsRestConstants.PATH_MES_SEND_COMMAND_V2, method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse sendCommand(HttpServletRequest request,
@@ -309,13 +304,13 @@ public class MesProductionControllerV2 {
public @ResponseBody
ServiceRestResponse createFakeMtbColtToConfirm(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestParam() String dataOrd,
@RequestParam() Integer numOrd,
@RequestParam() String gestione,
@RequestParam() String codJfas) throws Exception {
ServiceRestResponse response
= ServiceRestResponse.createPositiveResponse(mesProductionService.createFakeMtbColtToConfirm(dataOrd, numOrd, gestione, codJfas));
return response;
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dataOrd,
@RequestParam Integer numOrd,
@RequestParam String gestione,
@RequestParam String codJfas,
@RequestParam String codMdep,
@RequestParam String codAnag) throws Exception {
return ServiceRestResponse.createPositiveResponse(mesProductionService.createFakeMtbColtToConfirm(dataOrd, numOrd, gestione, codJfas, codMdep, codAnag));
}
@@ -462,12 +457,12 @@ public class MesProductionControllerV2 {
@RequestMapping(value = "ordine/stop", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse stopOrdineLav(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody() ChiusuraLavorazioneDTO dto) throws Exception {
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody() ChiusuraLavorazioneDTO dto) throws Exception {
try{
try {
productionOrdersLifecycleService.stopOrdineLav(dto);
}catch (Exception e){
} catch (Exception e) {
multiDBTransactionManager.rollbackAll();
throw e;
}

View File

@@ -0,0 +1,141 @@
package it.integry.ems.production.dto;
import java.math.BigDecimal;
import java.time.LocalDate;
public class CreateUDCProduzioneRequestDTO {
private String codMdep;
private String codJfas;
private String codAnag;
private String posizione;
private LocalDate dataOrd;
private Integer numOrd;
private String codJcom;
private String codMart;
private BigDecimal qta;
private BigDecimal qtaCnf;
private BigDecimal numCnf;
private String partitaMag;
private int numEtich = 0;
public String getCodMdep() {
return codMdep;
}
public CreateUDCProduzioneRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodJfas() {
return codJfas;
}
public CreateUDCProduzioneRequestDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getCodAnag() {
return codAnag;
}
public CreateUDCProduzioneRequestDTO setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getPosizione() {
return posizione;
}
public CreateUDCProduzioneRequestDTO setPosizione(String posizione) {
this.posizione = posizione;
return this;
}
public LocalDate getDataOrd() {
return dataOrd;
}
public CreateUDCProduzioneRequestDTO setDataOrd(LocalDate dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public CreateUDCProduzioneRequestDTO setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
public String getCodJcom() {
return codJcom;
}
public CreateUDCProduzioneRequestDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public String getCodMart() {
return codMart;
}
public CreateUDCProduzioneRequestDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public BigDecimal getQta() {
return qta;
}
public CreateUDCProduzioneRequestDTO setQta(BigDecimal qta) {
this.qta = qta;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public CreateUDCProduzioneRequestDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public CreateUDCProduzioneRequestDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public CreateUDCProduzioneRequestDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public int getNumEtich() {
return numEtich;
}
public CreateUDCProduzioneRequestDTO setNumEtich(int numEtich) {
this.numEtich = numEtich;
return this;
}
}

View File

@@ -18,9 +18,8 @@ import it.integry.ems.production.dto.*;
import it.integry.ems.report.dto.JasperDTO;
import it.integry.ems.report.dto.PairsDTO;
import it.integry.ems.retail.pvmRetail.service.PvmService;
import it.integry.ems.retail.wms.dto.CreateUDSRequestDTO;
import it.integry.ems.retail.wms.dto.CreateUDSRequestOrderDTO;
import it.integry.ems.retail.wms.dto.InsertUDSRowRequestDTO;
import it.integry.ems.retail.wms.accettazione.service.WMSAccettazioneService;
import it.integry.ems.retail.wms.dto.*;
import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO;
import it.integry.ems.retail.wms.generic.dto.SpostaUlRequestDTO;
import it.integry.ems.retail.wms.generic.service.WMSGenericService;
@@ -106,9 +105,13 @@ public class MesProductionServiceV2 {
@Autowired
private MailTemplateService mailTemplateService;
@Autowired
private PvmService pvmService;
@Autowired
private WMSAccettazioneService wmsAccettazioneService;
@Autowired
private WMSLavorazioneService wmsLavorazioneService;
@@ -252,19 +255,19 @@ public class MesProductionServiceV2 {
return UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
}
public void openStep(Date dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum) throws Exception {
public void openStep(LocalDate dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum) throws Exception {
openStep(dataOrd, numOrd, gestioneOrd, codJfas, hrNum, null);
}
public void openStep(Date dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum, Date dataInizLav) throws Exception {
public void openStep(LocalDate dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum, Date dataInizLav) throws Exception {
openStep(dataOrd, numOrd, gestioneOrd, codJfas, hrNum, dataInizLav, null, null, false);
}
public void openStep(Date dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum, Date dataInizLav, String descrizioneAttivita) throws Exception {
public void openStep(LocalDate dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum, Date dataInizLav, String descrizioneAttivita) throws Exception {
openStep(dataOrd, numOrd, gestioneOrd, codJfas, hrNum, dataInizLav, descrizioneAttivita, null, false);
}
public void openStep(Date dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum, Date dataInizLav, String descrizioneAttivita, String note, boolean skipCommit) throws Exception {
public void openStep(LocalDate dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum, Date dataInizLav, String descrizioneAttivita, String note, boolean skipCommit) throws Exception {
String whereCondCodJfas = "";
@@ -312,14 +315,14 @@ public class MesProductionServiceV2 {
" FROM dtb_ord_steps " +
" WHERE num_ord = " + UtilityDB.valueToString(numOrd) +
" AND gestione = " + UtilityDB.valueToString(gestioneOrd) +
" AND data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) +
" AND data_ord = " + UtilityDB.valueToString(dataOrd) +
whereCondCodJfas +
" UNION ALL " +
" SELECT * " +
" FROM dtb_ord_steps " +
" WHERE num_ord = " + UtilityDB.valueToString(numOrd) +
" AND gestione = " + UtilityDB.valueToString(gestioneOrd) +
" AND data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) +
" AND data_ord = " + UtilityDB.valueToString(dataOrd) +
" ) tmp " +
" ) tmp";
@@ -336,7 +339,7 @@ public class MesProductionServiceV2 {
throw new Exception(String.format(
"Errore nella lettura della step. Gestione %s, data ord. %s, num ord. %d",
gestioneOrd,
UtilityDate.formatDate(dataOrd, CommonConstants.DATE_FORMAT_DMY),
CommonConstants.DATE_DMY_SLASHED_FORMATTER.format(dataOrd),
numOrd
));
}
@@ -356,7 +359,7 @@ public class MesProductionServiceV2 {
if (!UtilityString.isNullOrEmpty(note)) lastStep.setNote(note);
DtbOrdt order = new DtbOrdt()
.setDataOrd(dataOrd)
.setDataOrd(UtilityLocalDate.localDateToDate(dataOrd))
.setNumOrd(numOrd)
.setGestione(gestioneOrd);
// order.setDataInizProd(new Date());
@@ -462,15 +465,15 @@ public class MesProductionServiceV2 {
}
public void closeStep(Date dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga) throws Exception {
public void closeStep(LocalDate dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga) throws Exception {
closeStep(dataOrd, numOrd, gestioneOrd, codJfas, idStep, idRiga, new Date());
}
public void closeStep(Date dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga, Date closeDate) throws Exception {
public void closeStep(LocalDate dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga, Date closeDate) throws Exception {
closeStep(dataOrd, numOrd, gestioneOrd, codJfas, idStep, idRiga, closeDate, false);
}
public void closeStep(Date dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga, Date closeDate, Boolean skipCommit) throws Exception {
public void closeStep(LocalDate dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga, Date closeDate, Boolean skipCommit) throws Exception {
String whereCondCodJfas = "";
String whereCondIdStep = "";
@@ -487,7 +490,7 @@ public class MesProductionServiceV2 {
" FROM dtb_ord_steps " +
" WHERE num_ord = " + UtilityDB.valueToString(numOrd) +
" AND gestione = " + UtilityDB.valueToString(gestioneOrd) +
" AND data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) +
" AND data_ord = " + UtilityDB.valueToString(dataOrd) +
whereCondCodJfas +
whereCondIdStep +
" AND data_fine IS NULL " +
@@ -519,7 +522,7 @@ public class MesProductionServiceV2 {
UtilityEntity.throwEntitiesException(UtilityEntity.toEntityBaseList(dtbOrdtList));
}
public void cambioFase(Date dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga, String newCodJfas) throws Exception {
public void cambioFase(LocalDate dataOrd, Integer numOrd, String gestioneOrd, String codJfas, Integer idStep, Integer idRiga, String newCodJfas) throws Exception {
String whereCondCodJfas = "";
String whereCondIdStep = "";
@@ -536,7 +539,7 @@ public class MesProductionServiceV2 {
" FROM dtb_ord_steps " +
" WHERE num_ord = " + UtilityDB.valueToString(numOrd) +
" AND gestione = " + UtilityDB.valueToString(gestioneOrd) +
" AND data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) +
" AND data_ord = " + UtilityDB.valueToString(dataOrd) +
whereCondCodJfas +
whereCondIdStep +
" AND data_fine IS NULL " +
@@ -568,12 +571,12 @@ public class MesProductionServiceV2 {
UtilityEntity.throwEntitiesException(UtilityEntity.toEntityBaseList(dtbOrdtList));
}
public void cancellaFase(Date dataOrd, Integer numOrd, String gestioneOrd, String codJfas) throws Exception {
public void cancellaFase(LocalDate dataOrd, Integer numOrd, String gestioneOrd, String codJfas) throws Exception {
String sql = "SELECT * " +
" FROM dtb_ord_steps " +
" WHERE num_ord = " + UtilityDB.valueToString(numOrd) +
" AND gestione = " + UtilityDB.valueToString(gestioneOrd) +
" AND data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) +
" AND data_ord = " + UtilityDB.valueToString(dataOrd) +
" AND cod_jfas = " + UtilityDB.valueToString(codJfas);
List<DtbOrdSteps> stepsToDelete = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
@@ -629,7 +632,7 @@ public class MesProductionServiceV2 {
DtbOrdt dtbOrdt = new DtbOrdt()
.setNumOrd(ordineLavorazione.getNumOrd())
.setGestione(ordineLavorazione.getGestione())
.setDataOrd(ordineLavorazione.getDataOrd());
.setDataOrd(UtilityLocalDate.localDateToDate(ordineLavorazione.getDataOrd()));
dtbOrdt.setDtbOrdSteps(new ArrayList<>());
dtbOrdt.getDtbOrdSteps().add(dtbOrdSteps);
@@ -703,21 +706,58 @@ public class MesProductionServiceV2 {
}
public MtbColt createULLavorazione(MtbColt mtbColt) throws Exception {
entityProcessor.processEntity(mtbColt, multiDBTransactionManager);
public MtbColt createULLavorazione(CreateUDCProduzioneRequestDTO request) throws Exception {
ArrayList<CreateUDCRequestOrderDTO> orders = new ArrayList<CreateUDCRequestOrderDTO>() {{
add(new CreateUDCRequestOrderDTO()
.setGestione("L")
.setDataOrd(request.getDataOrd())
.setNumOrd(request.getNumOrd()));
}};
MtbColt createdUdc = wmsLavorazioneService.createUDC(new CreateUDCRequestDTO()
.setCodMdep(request.getCodMdep())
.setCodJfas(request.getCodJfas())
.setCodAnag(request.getCodAnag())
.setPosizione(request.getPosizione())
.setOrders(orders));
final InsertUDCRowResponseDTO insertUDCRowResponse = wmsAccettazioneService.insertUDCRow(new InsertUDCRowRequestDTO()
.setTargetMtbColt(createdUdc)
.setCodMart(request.getCodMart())
.setPartitaMag(request.getPartitaMag())
.setDataOrd(request.getDataOrd())
.setNumOrd(request.getNumOrd())
.setRigaOrd(0)
.setCodJcom(request.getCodJcom())
.setQtaTot(request.getQta())
.setQtaCnf(request.getQtaCnf())
.setNumCnf(request.getNumCnf()));
if (request.getNumEtich() > 0 && insertUDCRowResponse.getSavedMtbColr() != null) {
MtbColr savedMtbColr = insertUDCRowResponse.getSavedMtbColr()
.setNumEtich(request.getNumEtich());
savedMtbColr.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(savedMtbColr, multiDBTransactionManager);
}
CloseUDCLavorazioneRequestDTO closeRequest = new CloseUDCLavorazioneRequestDTO();
closeRequest.setMtbColt(createdUdc);
wmsLavorazioneService.closeUDC(closeRequest);
String syncNewULLavorazione = String.format("EXEC MES_SyncNuovaULLavorazione %d, %s, %s, %d, %s;",
mtbColt.getNumCollo(),
UtilityDB.valueToString(mtbColt.getDataCollo()),
UtilityDB.valueToString(mtbColt.getGestione()),
mtbColt.getSegno(),
UtilityDB.valueToString(mtbColt.getSerCollo())
createdUdc.getNumCollo(),
UtilityDB.valueToString(createdUdc.getDataCollo()),
UtilityDB.valueToString(createdUdc.getGestione()),
createdUdc.getSegno(),
UtilityDB.valueToString(createdUdc.getSerCollo())
);
Statement storedProcedure = multiDBTransactionManager.getPrimaryConnection().createStatement();
storedProcedure.execute(syncNewULLavorazione);
return mtbColt;
return createdUdc;
}
@@ -868,46 +908,33 @@ public class MesProductionServiceV2 {
}
public MtbColt createFakeMtbColtToConfirm(String dataOrd, Integer numOrd, String gestione, String codJfas) throws
Exception {
DtbOrdt dtbOrdt = new DtbOrdt();
public MtbColt createFakeMtbColtToConfirm(LocalDate dataOrd,
Integer numOrd,
String gestione,
String codJfas,
String codMdep,
String codAnag) throws Exception {
DtbOrdt dtbOrdt = new DtbOrdt()
.setGestione(gestione)
.setNumOrd(numOrd)
.setCodJfas(codJfas)
.setDataOrd(UtilityLocalDate.localDateToDate(dataOrd));
dtbOrdt.setOperation(OperationType.SELECT_OBJECT);
dtbOrdt.setGestione(gestione);
dtbOrdt.setNumOrd(numOrd);
dtbOrdt.setCodJfas(codJfas);
dtbOrdt.setDataOrd(UtilityDate.RecognizeDate(dataOrd));
dtbOrdt = entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager);
entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager);
MtbColt mtbColt = new MtbColt();
mtbColt.setOperation(OperationType.INSERT);
mtbColt.setGestione("L");
mtbColt.setCodMdep(dtbOrdt.getCodMdep());
// mtbColt.setCodAnag(dtbOrdt.getCodAnag());
mtbColt.setSerCollo("/");
mtbColt.setCodJfas(codJfas);
mtbColt.setPosizione(codJfas);
mtbColt.setDataOrd(UtilityLocalDate.localDateFromDate(dtbOrdt.getDataOrd()));
mtbColt.setNumOrd(dtbOrdt.getNumOrd());
MtbColr mtbColr = new MtbColr();
mtbColr.setOperation(OperationType.INSERT);
mtbColr.setNumOrd(dtbOrdt.getNumOrd());
mtbColr.setDataOrd(UtilityLocalDate.localDateFromDate(dtbOrdt.getDataOrd()));
mtbColr.setRigaOrd(0);
mtbColr.setCodMart(dtbOrdt.getCodProd());
mtbColr.setQtaCol(BigDecimal.ZERO);
mtbColr.setNumCnf(BigDecimal.ZERO);
mtbColr.setPartitaMag(dtbOrdt.getPartitaMag());
mtbColr.setNumEtich(1);
mtbColt.setMtbColr(new ArrayList<MtbColr>());
mtbColt.getMtbColr().add(mtbColr);
entityProcessor.processEntity(mtbColt, multiDBTransactionManager);
return mtbColt;
return createULLavorazione(new CreateUDCProduzioneRequestDTO()
.setDataOrd(dataOrd)
.setNumOrd(numOrd)
.setCodMdep(codMdep)
.setCodAnag(codAnag)
.setCodJfas(codJfas)
.setPosizione(codJfas)
.setCodMart(dtbOrdt.getCodProd())
.setPartitaMag(dtbOrdt.getPartitaMag())
.setNumEtich(1)
.setQta(BigDecimal.ZERO)
.setNumCnf(BigDecimal.ZERO));
}
private RegisterSupervisorDTO getSupervisorPanelData(String codJfas) throws Exception {
@@ -1530,7 +1557,7 @@ public class MesProductionServiceV2 {
ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager);
if(dto.isTransferRequired()){
if (dto.isTransferRequired()) {
SpostaUlRequestDTO trasferimentoRequest = new SpostaUlRequestDTO();
trasferimentoRequest
.setCodMdep(dto.getOrdine().getCodMdep())
@@ -1701,7 +1728,7 @@ public class MesProductionServiceV2 {
}
if (dto.isStartOrdine() || dto.isCloneOrdine()) {
openStep(ordine.getDataOrd(), ordine.getNumOrd(), ordine.getGestione(), dto.getCodJfas(), 0, null, null, null, true);
openStep(UtilityLocalDate.localDateFromDate(ordine.getDataOrd()), ordine.getNumOrd(), ordine.getGestione(), dto.getCodJfas(), 0, null, null, null, true);
}
multiDBTransactionManager.commitAll();
@@ -1783,7 +1810,7 @@ public class MesProductionServiceV2 {
JtbLotr jtbLotr = new JtbLotr()
.setGestione(ordine.getGestione())
.setDataOrd(ordine.getDataOrd())
.setDataOrd(UtilityLocalDate.localDateToDate(ordine.getDataOrd()))
.setNumOrd(ordine.getNumOrd())
.setIdRiga(0);
@@ -1897,7 +1924,7 @@ public class MesProductionServiceV2 {
} else {
DtbOrdt ordLav = new DtbOrdt()
.setGestione(ordine.getGestione())
.setDataOrd(ordine.getDataOrd())
.setDataOrd(UtilityLocalDate.localDateToDate(ordine.getDataOrd()))
.setNumOrd(ordine.getNumOrd());
productionService.terminaLavorazioneLinea(ordLav, groupStepDTO.getCodJfas());
@@ -2040,7 +2067,7 @@ public class MesProductionServiceV2 {
DtbOrdt dtbOrdt = new DtbOrdt()
.setGestione(ordineLav.getGestione())
.setDataOrd(ordineLav.getDataOrd())
.setDataOrd(UtilityLocalDate.localDateToDate(ordineLav.getDataOrd()))
.setNumOrd(ordineLav.getNumOrd());
DtbOrdSteps stepAttivo = getOrderOpenStepOnFase(dtbOrdt, ordineLav.getCodJfas());
@@ -2058,7 +2085,7 @@ public class MesProductionServiceV2 {
if (!UtilityBigDecimal.isNullOrZero(ordineLav.getQtaProd())) {
MtbColr mtbColrToInsert = new MtbColr()
.setCodJcom(ordineLav.getCodJcom())
.setDataOrd(UtilityLocalDate.localDateFromDate(ordineLav.getDataOrd()))
.setDataOrd(ordineLav.getDataOrd())
.setNumOrd(ordineLav.getNumOrd())
.setCodMart(ordineLav.getCodProd())
.setPartitaMag(ordineLav.getPartitaMag())
@@ -2328,7 +2355,7 @@ public class MesProductionServiceV2 {
if (dtbOrdStepsToOpen != null && !dtbOrdStepsToOpen.isEmpty()) {
for (DtbOrdSteps dtbOrdSteps : dtbOrdStepsToOpen) {
this.openStep(dtbOrdSteps.getDataOrd(), dtbOrdSteps.getNumOrd(), dtbOrdSteps.getGestione(), dtbOrdSteps.getCodJfas(), dtbOrdSteps.getHrNum(), null, null, null, true);
this.openStep(UtilityLocalDate.localDateFromDate(dtbOrdSteps.getDataOrd()), dtbOrdSteps.getNumOrd(), dtbOrdSteps.getGestione(), dtbOrdSteps.getCodJfas(), dtbOrdSteps.getHrNum(), null, null, null, true);
}
}
}

View File

@@ -1,9 +1,9 @@
package it.integry.ems.production.service;
import com.annimon.stream.Stream;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.production.dto.ProdLineStatusDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.service.production.ProductionOrderDataHandlerService;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.entity.DtbOrdSteps;
@@ -11,6 +11,7 @@ import it.integry.ems_model.entity.JtbFasiAtt;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityDate;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -132,7 +133,7 @@ public class ProductionLineService {
List<DtbOrdSteps> openOrders = getOpenOrdersOnLine(codJfas);
if (openOrders != null && !openOrders.isEmpty()) {
for (DtbOrdSteps order : openOrders) {
mesProductionService.closeStep(order.getDataOrd(), order.getNumOrd(), order.getGestione(), codJfas, order.getIdStep(), order.getIdRiga(), closeDate);
mesProductionService.closeStep(UtilityLocalDate.localDateFromDate(order.getDataOrd()), order.getNumOrd(), order.getGestione(), codJfas, order.getIdStep(), order.getIdRiga(), closeDate);
}
}

View File

@@ -33,7 +33,6 @@ import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
@@ -1637,7 +1636,7 @@ public class ProductionService {
String codMart = dto.getCodMart();
String partitaMag = dto.getPartitaMag();
String partitaMagProd = UtilityString.isNull(dto.getPartitaMagProd(), partitaMag);
Date dataScad = dto.getDataScad();
LocalDate dataScad = dto.getDataScad();
StbGestSetupDet configControlloScadenzaMultipla = this.getConfigControlloScadenzaMultipla(dto.getCodJfas());
@@ -1689,7 +1688,7 @@ public class ProductionService {
.setPartitaMag(partitaMag)
.setPartitaMagProd(partitaMagProd)
.setCodMart(codMart)
.setDataScad(dataScad);
.setDataScad(UtilityLocalDate.localDateToDate(dataScad));
boolean setDescrizione = setupGest.getSetupBoolean("MTB_PARTITA_MAG", "SETUP", "SET_DESCRIZIONE_FROM_NOTE_ORDINE");
@@ -1707,7 +1706,7 @@ public class ProductionService {
DtbOrdt dtbOrdt = new DtbOrdt()
.setGestione(dto.getGestione())
.setDataOrd(dto.getDataOrd())
.setDataOrd(UtilityLocalDate.localDateToDate(dto.getDataOrd()))
.setNumOrd(dto.getNumOrd())
.setCodJfas(dto.getCodJfas())
.setPartitaMag(partitaMag);

View File

@@ -1,68 +1,81 @@
package it.integry.ems.retail.service;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.common.var.CommonConstants;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.retail.dto.GrigliaAcquistoDTO;
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_model.service.SetupGest;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityDate;
import it.integry.ems_model.utility.UtilityTiming;
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.util.*;
import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
public class GrigliaAcquistoHandlerService {
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@Autowired
private SettingsController settingsController;
@Autowired
public SetupGest setupGest;
private static final int SIX_HOURS_DELAY = 21600000;
private static final int DAYS = 3;
private final Logger logger = LogManager.getLogger();
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> executionPermission = new HashMap<>();
private static final int DAYS = 3;
private final HashMap<String, List<GrigliaAcquistoDTO>> grigliaAcquistoCachedData = new HashMap<>();
@PostWebServerConstruct
public void init() {
if (saveCache()) {
looperService.add(() -> this.internalCache(grigliaAcquistoCachedData), SIX_HOURS_DELAY, GrigliaAcquistoHandlerService.class.getName());
@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 ('AG018', 'AG019')\n" +
" AND flag_abil <> 'N'";
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
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(getClass().getSimpleName(), ex);
throw ex;
}
}
private boolean saveCache() {
return !UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer() && settingsModel.isPrimaryInstance();
public boolean isGestioneAbilitata(String dbName) {
if (!canBeExecuted) return false;
return executionPermission.getOrDefault(dbName, false);
}
private static boolean isGestioneAbilitata(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz IN ('AG018', 'AG019') \n" +
" AND flag_abil <> 'N'";
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
}
private HashMap<String, Object> checkDbDistributore(MultiDBTransactionManager multiDBTransactionManager) throws Exception{
private HashMap<String, Object> checkDbDistributore(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
HashMap<String, Object> returnHashMap = new HashMap<>();
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
@@ -70,7 +83,7 @@ public class GrigliaAcquistoHandlerService {
String dbDistributore = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
returnHashMap.put("dbDistributore", dbDistributore);
if (dbDistributore == null){
if (dbDistributore == null) {
returnHashMap.put("existSync", false);
return returnHashMap;
}
@@ -86,42 +99,40 @@ public class GrigliaAcquistoHandlerService {
return returnHashMap;
}
public void internalCache(HashMap<String, List<GrigliaAcquistoDTO>> grigliaAcquistoCachedData) {
try {
String historyProfileDb = settingsController.getHistoryProfileDb();
@Scheduled(fixedDelay = 6 * 60, timeUnit = TimeUnit.MINUTES, initialDelay = 1, zone = "Europe/Rome")
public void internalCache() {
if (!canBeExecuted) return;
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = isGestioneAbilitata(connectionModel.getDbName());
if (!isEnabled) continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
if (isGestioneAbilitata(connectionModel.getDbName())) {
if (isGestioneAbilitata(multiDBTransactionManager)){
HashMap<String, Object> checkDbDistributore = checkDbDistributore(multiDBTransactionManager);
boolean existSync = (boolean) checkDbDistributore.get("existSync");
if (!existSync){
Date startDate = new Date();
if (!existSync) {
int timingId = UtilityTiming.startNewTiming(getClass().getSimpleName() + " (" + connectionModel.getProfileName() + ")");
List<GrigliaAcquistoDTO> grigliaAcquistoDTO = getGrigliaAcquisto(multiDBTransactionManager);
if(!grigliaAcquistoDTO.isEmpty())
grigliaAcquistoCachedData.put(dbName.toUpperCase(), grigliaAcquistoDTO);
if (!grigliaAcquistoDTO.isEmpty())
grigliaAcquistoCachedData.put(connectionModel.getDbName().toUpperCase(), grigliaAcquistoDTO);
logger.trace(profileName + " - Griglia acquisto: Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
UtilityTiming.endTiming(timingId, true);
}
}
multiDBTransactionManager.closeAll();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
private List<GrigliaAcquistoDTO> getGrigliaAcquisto(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
@@ -154,23 +165,21 @@ public class GrigliaAcquistoHandlerService {
public List<GrigliaAcquistoDTO> getGrigliaAcquisto() throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
if (!saveCache()) {
if (!isGestioneAbilitata(multiDBTransactionManager.getPrimaryDatasource().getDbName())) {
return getGrigliaAcquisto(multiDBTransactionManager);
} else {
List<GrigliaAcquistoDTO> setupList;
HashMap<String, Object> checkDbDistributore = checkDbDistributore(multiDBTransactionManager);
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
boolean existSync = (boolean) checkDbDistributore.get("existSync");
String dbDistributore = (String) checkDbDistributore.get("dbDistributore");
if (existSync){
if (existSync) {
setupList = grigliaAcquistoCachedData.get(dbDistributore.toUpperCase());
}else{
} else {
setupList = grigliaAcquistoCachedData.get(dbName.toUpperCase());
}
// if (setupList == null)
// return getGrigliaAcquisto(multiDBTransactionManager);
return setupList;
}
}

View File

@@ -1,101 +1,98 @@
package it.integry.ems.retail.service;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.retail.dto.ListiniOrdiniAcquistoDTO;
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_model.service.SetupGest;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityTiming;
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.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit;
@Component
public class ListiniAcquistoHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@Autowired
private SettingsController settingsController;
@Autowired
public SetupGest setupGest;
private final HashMap<String, List<ListiniOrdiniAcquistoDTO>> ListiniCachedData = new HashMap<>();
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> executionPermission = new HashMap<>();
private static final int SIX_HOURS_DELAY = 21600000;
private final HashMap<String, List<ListiniOrdiniAcquistoDTO>> listiniCachedData = new HashMap<>();
@PostWebServerConstruct
public void init() {
if ( saveCache() ) {
looperService.add(() -> this.internalCache(ListiniCachedData), SIX_HOURS_DELAY, ListiniAcquistoHandlerService.class.getName());
}
}
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
private void refreshCronPermission() throws Exception {
canBeExecuted = !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer();
if (!canBeExecuted) return;
private boolean saveCache(){
return !UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer() && settingsModel.isPrimaryInstance();
}
private static boolean isGestioneAbilitata(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz IN ('WG008') \n" +
" AND flag_abil <> 'N'";
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
}
public void internalCache(HashMap<String, List<ListiniOrdiniAcquistoDTO>> listiniCachedData) {
try {
String historyProfileDb = settingsController.getHistoryProfileDb();
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz = 'WG008'\n" +
" AND flag_abil <> 'N'";
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
for (AvailableConnectionsModel connectionsModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionsModel, false)) {
Date startDate = new Date();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
boolean gestioneAbilitata = isGestioneAbilitata(multiDBTransactionManager);
if ( gestioneAbilitata ) {
List<ListiniOrdiniAcquistoDTO> Listini = getListini(multiDBTransactionManager);
listiniCachedData.put(dbName, Listini);
boolean isEnabled = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
executionPermission.remove(connectionsModel.getDbName());
executionPermission.put(connectionsModel.getDbName(), isEnabled);
}
logger.trace(ListiniAcquistoHandlerService.class.getSimpleName() + " - Listini: Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
multiDBTransactionManager.closeAll();
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
logger.error(getClass().getSimpleName(), ex);
throw ex;
}
}
private boolean isGestioneAbilitata(String dbName) {
if (!canBeExecuted) return false;
return executionPermission.getOrDefault(dbName, false);
}
@Scheduled(fixedDelay = 6 * 60, timeUnit = TimeUnit.MINUTES, initialDelay = 1, zone = "Europe/Rome")
public void updateData() {
if (!canBeExecuted) return;
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = isGestioneAbilitata(connectionModel.getDbName());
if (!isEnabled) continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
int timingId = UtilityTiming.startNewTiming(getClass().getSimpleName() + " (" + connectionModel.getProfileName() + ")");
List<ListiniOrdiniAcquistoDTO> listini = getListini(multiDBTransactionManager);
listiniCachedData.put(connectionModel.getDbName(), listini);
UtilityTiming.endTiming(timingId, true);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
private List<ListiniOrdiniAcquistoDTO> getListini(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql = "SELECT cod_alis,\n" +
" descrizione,\n" +
@@ -115,14 +112,13 @@ public class ListiniAcquistoHandlerService {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
HashMap<String, List<ListiniOrdiniAcquistoDTO>> inputMap = ListiniCachedData;
HashMap<String, List<ListiniOrdiniAcquistoDTO>> inputMap = listiniCachedData;
List<ListiniOrdiniAcquistoDTO> listini = inputMap.get(dbName);
if (listini == null) {
listini = getListini(multiDBTransactionManager);
ListiniCachedData.put(dbName, listini);
listiniCachedData.put(dbName, listini);
}
return listini;
}
}

View File

@@ -3,7 +3,7 @@ package it.integry.ems.retail.wms.accettazione.dto;
import it.integry.ems_model.annotation.SqlField;
import it.integry.ems_model.entity.MtbColt;
public class AlreadyRegisteredUDCDTO {
public class AlreadyRegisteredUlDTO {
@SqlField
private MtbColt mtbColt;
@@ -15,7 +15,7 @@ public class AlreadyRegisteredUDCDTO {
return mtbColt;
}
public AlreadyRegisteredUDCDTO setMtbColt(MtbColt mtbColt) {
public AlreadyRegisteredUlDTO setMtbColt(MtbColt mtbColt) {
this.mtbColt = mtbColt;
return this;
}
@@ -24,7 +24,7 @@ public class AlreadyRegisteredUDCDTO {
return canBeRecovered;
}
public AlreadyRegisteredUDCDTO setCanBeRecovered(boolean canBeRecovered) {
public AlreadyRegisteredUlDTO setCanBeRecovered(boolean canBeRecovered) {
this.canBeRecovered = canBeRecovered;
return this;
}

View File

@@ -4,13 +4,13 @@ import java.util.List;
public class RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO {
private List<AlreadyRegisteredUDCDTO> udcList;
private List<AlreadyRegisteredUlDTO> udcList;
public List<AlreadyRegisteredUDCDTO> getUdcList() {
public List<AlreadyRegisteredUlDTO> getUdcList() {
return udcList;
}
public RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO setUdcList(List<AlreadyRegisteredUDCDTO> udcList) {
public RetrieveAlreadyRegisteredULAccettazioneBollaResponseDTO setUdcList(List<AlreadyRegisteredUlDTO> udcList) {
this.udcList = udcList;
return this;
}

View File

@@ -4,13 +4,13 @@ import java.util.List;
public class RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO {
private List<AlreadyRegisteredUDCDTO> udcList;
private List<AlreadyRegisteredUlDTO> udcList;
public List<AlreadyRegisteredUDCDTO> getUdcList() {
public List<AlreadyRegisteredUlDTO> getUdcList() {
return udcList;
}
public RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO setUdcList(List<AlreadyRegisteredUDCDTO> udcList) {
public RetrieveAlreadyRegisteredULAccettazioneOrdineResponseDTO setUdcList(List<AlreadyRegisteredUlDTO> udcList) {
this.udcList = udcList;
return this;
}

View File

@@ -3,7 +3,7 @@ package it.integry.ems.retail.wms.accettazione.service;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.product.importaz.service.ProductServices;
import it.integry.ems.retail.wms.Utility.WMSUtility;
import it.integry.ems.retail.wms.accettazione.dto.AlreadyRegisteredUDCDTO;
import it.integry.ems.retail.wms.accettazione.dto.AlreadyRegisteredUlDTO;
import it.integry.ems.retail.wms.accettazione.dto.BollaAccettazioneDTO;
import it.integry.ems.retail.wms.accettazione.dto.SitBollaAccettazioneDTO;
import it.integry.ems.service.EntityProcessor;
@@ -182,7 +182,7 @@ public class WMSAccettazioneBollaService {
return sitBollaAccettazioneDTOS;
}
public List<AlreadyRegisteredUDCDTO> retrieveAlreadyRegisteredUDC(List<BollaAccettazioneDTO> bolle) throws Exception {
public List<AlreadyRegisteredUlDTO> retrieveAlreadyRegisteredUDC(List<BollaAccettazioneDTO> bolle) throws Exception {
final List<HashMap<String, Object>> whereCondMap = bolle.stream()
.map(x -> {
HashMap<String, Object> data = new HashMap<>();
@@ -275,7 +275,7 @@ public class WMSAccettazioneBollaService {
" data_vers,\n" +
" mtb_colt.peso_netto_kg";
final List<AlreadyRegisteredUDCDTO> alreadyRegisteredUdcList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AlreadyRegisteredUDCDTO.class);
final List<AlreadyRegisteredUlDTO> alreadyRegisteredUdcList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AlreadyRegisteredUlDTO.class);
return alreadyRegisteredUdcList;

View File

@@ -5,7 +5,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.product.importaz.service.ProductServices;
import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoDTO;
import it.integry.ems.retail.wms.Utility.WMSUtility;
import it.integry.ems.retail.wms.accettazione.dto.AlreadyRegisteredUDCDTO;
import it.integry.ems.retail.wms.accettazione.dto.AlreadyRegisteredUlDTO;
import it.integry.ems.retail.wms.dto.*;
import it.integry.ems.retail.wms.exceptions.InvalidArticoloException;
import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO;
@@ -414,7 +414,7 @@ public class WMSAccettazioneService {
}
public List<AlreadyRegisteredUDCDTO> retrieveAlreadyRegisteredUDC(List<OrdineInevasoDTO> bolle) throws Exception {
public List<AlreadyRegisteredUlDTO> retrieveAlreadyRegisteredUDC(List<OrdineInevasoDTO> bolle) throws Exception {
final List<HashMap<String, Object>> whereCondMap = bolle.stream()
.map(x -> {
HashMap<String, Object> data = new HashMap<>();
@@ -508,7 +508,7 @@ public class WMSAccettazioneService {
" data_vers,\n" +
" mtb_colt.peso_netto_kg";
final List<AlreadyRegisteredUDCDTO> alreadyRegisteredUdcList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AlreadyRegisteredUDCDTO.class);
final List<AlreadyRegisteredUlDTO> alreadyRegisteredUdcList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AlreadyRegisteredUlDTO.class);
return alreadyRegisteredUdcList;

View File

@@ -11,6 +11,7 @@ public class CreateUDCRequestDTO {
private String serCollo;
private String codAnag;
private String codTcol;
private String codJfas;
private String codVdes;
private String posizione;
@@ -67,6 +68,15 @@ public class CreateUDCRequestDTO {
return this;
}
public String getCodJfas() {
return codJfas;
}
public CreateUDCRequestDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getAnnotazioni() {
return annotazioni;
}

View File

@@ -29,14 +29,12 @@ import it.integry.ems_model.entity._enum.GestioneEnum;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.*;
import net.sf.jasperreports.engine.export.oasis.Utility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@@ -179,7 +177,7 @@ public class WMSLavorazioneService {
if (foundInCorsoOrders.size() == 1) {
OrdineLavorazioneDTO ordineLavorazioneDTO = ordiniLavorazioneInCorso.get(0);
udsMtbColt
.setDataOrd(UtilityLocalDate.localDateFromDate(ordineLavorazioneDTO.getDataOrd()))
.setDataOrd(ordineLavorazioneDTO.getDataOrd())
.setNumOrd(ordineLavorazioneDTO.getNumOrd());
}
}
@@ -608,6 +606,7 @@ public class WMSLavorazioneService {
.setPreparatoDa(requestDataDTO.getUsername())
.setPosizione(UtilityString.isNull(createUDCRequestDTO.getPosizione(), defaultPosizioneColliAccettazione))
.setCodTcol(createUDCRequestDTO.getCodTcol())
.setCodJfas(createUDCRequestDTO.getCodJfas())
.setAnnotazioni(createUDCRequestDTO.getAnnotazioni())
.setBarcodeUl(createUDCRequestDTO.getBarcodeUl())
.setSegno(1);

View File

@@ -1,7 +1,5 @@
package it.integry.ems.retail.wms.ordini_acquisto.service;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.retail.wms.ordini_acquisto.dto.BarcodeOrdiniAcquistoDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
@@ -13,75 +11,88 @@ import it.integry.ems_model.utility.UtilityTiming;
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.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
public class WMSBarcodeOrdiniAcquistoHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@Autowired
public SetupGest setupGest;
private final HashMap<String, List<BarcodeOrdiniAcquistoDTO>> BarcodeCachedData = new HashMap<>();
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> executionPermission = new HashMap<>();
private static final int SIX_HOURS_DELAY = 21600000;
private final HashMap<String, List<BarcodeOrdiniAcquistoDTO>> barcodeCachedData = new HashMap<>();
@PostWebServerConstruct
public void init() {
if ( saveCache() ) {
looperService.add(() -> this.internalCache(BarcodeCachedData), SIX_HOURS_DELAY, WMSBarcodeOrdiniAcquistoHandlerService.class.getName());
@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 = 'WG008'\n" +
" AND flag_abil <> 'N'";
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
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(getClass().getSimpleName(), ex);
throw ex;
}
}
private boolean saveCache(){
return !UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer() && settingsModel.isPrimaryInstance();
public boolean isGestioneAbilitata(String dbName) {
if (!canBeExecuted) return false;
return executionPermission.getOrDefault(dbName, false);
}
private static boolean isGestioneAbilitata(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz IN ('WG008') \n" +
" AND flag_abil <> 'N'";
@Scheduled(fixedDelay = 6 * 60, timeUnit = TimeUnit.MINUTES, initialDelay = 1, zone = "Europe/Rome")
public void internalCache() {
if (!canBeExecuted) return;
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
}
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
public void internalCache(HashMap<String, List<BarcodeOrdiniAcquistoDTO>> barcodeCachedData) {
try {
List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
for (AvailableConnectionsModel availableConnection : availableConnections) {
String profileName = availableConnection.getProfileName();
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = isGestioneAbilitata(connectionModel.getDbName());
if (!isEnabled) continue;
final int timingId = UtilityTiming.startNewTiming(WMSBarcodeOrdiniAcquistoHandlerService.class.getSimpleName() + " - Barcode (" + profileName + ")");
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
boolean gestioneAbilitata = isGestioneAbilitata(multiDBTransactionManager);
final int timingId = UtilityTiming.startNewTiming(getClass().getSimpleName() + " - Barcode (" + connectionModel.getDbName() + ")");
List<BarcodeOrdiniAcquistoDTO> Barcode = getBarcode(multiDBTransactionManager);
barcodeCachedData.put(connectionModel.getDbName(), Barcode);
if ( gestioneAbilitata ) {
List<BarcodeOrdiniAcquistoDTO> Barcode = getBarcode(multiDBTransactionManager);
barcodeCachedData.put(availableConnection.getDbName(), Barcode);
}
UtilityTiming.endTiming(timingId, true);
multiDBTransactionManager.closeAll();
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
private List<BarcodeOrdiniAcquistoDTO> getBarcode(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
@@ -109,12 +120,12 @@ public class WMSBarcodeOrdiniAcquistoHandlerService {
public List<BarcodeOrdiniAcquistoDTO> getBarcode() throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
HashMap<String, List<BarcodeOrdiniAcquistoDTO>> inputMap = BarcodeCachedData;
HashMap<String, List<BarcodeOrdiniAcquistoDTO>> inputMap = barcodeCachedData;
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
List<BarcodeOrdiniAcquistoDTO> listaBarcode = inputMap.get(dbName);
if (listaBarcode == null){
if (listaBarcode == null) {
listaBarcode = getBarcode(multiDBTransactionManager);
BarcodeCachedData.put(dbName, listaBarcode);
barcodeCachedData.put(dbName, listaBarcode);
}
return listaBarcode;

View File

@@ -1,92 +1,90 @@
package it.integry.ems.retail.wms.ordini_acquisto.service;
import com.annimon.stream.Stream;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.retail.wms.ordini_acquisto.dto.MerceOrdiniAcquistoDTO;
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_model.service.SetupGest;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.ems_model.utility.UtilityTiming;
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.util.*;
import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit;
@Component
public class WMSMerceOrdiniAcquistoHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@Autowired
private SettingsController settingsController;
@Autowired
public SetupGest setupGest;
private final HashMap<String, List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>>> MerceCachedData = new HashMap<>();
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> executionPermission = new HashMap<>();
private static final int ONE_HOUR_DELAY = 3600000;
private final HashMap<String, List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>>> merceCachedData = new HashMap<>();
@PostWebServerConstruct
public void init() {
if (saveCache()) {
looperService.add(() -> this.internalCache(MerceCachedData), ONE_HOUR_DELAY, WMSMerceOrdiniAcquistoHandlerService.class.getName());
@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 {
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
for (AvailableConnectionsModel connectionsModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionsModel, false)) {
HashMap<String, String> setupSection = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), "PVM", "ORDINI_A");
boolean isEnabled = UtilityHashMap.getValueIfExists(setupSection, "VIEW_MERCE_DA_RIC", "N").equalsIgnoreCase("S");
executionPermission.remove(connectionsModel.getDbName());
executionPermission.put(connectionsModel.getDbName(), isEnabled);
}
}
} catch (Exception ex) {
logger.error(getClass().getSimpleName(), ex);
throw ex;
}
}
private boolean saveCache() {
return !UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer() && settingsModel.isPrimaryInstance();
public boolean isGestioneAbilitata(String dbName) {
if (!canBeExecuted) return false;
return executionPermission.getOrDefault(dbName, false);
}
private boolean isGestioneAbilitata(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
HashMap<String, String> setupSection = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), "PVM", "ORDINI_A");
return UtilityHashMap.getValueIfExists(setupSection, "VIEW_MERCE_DA_RIC", "N").equalsIgnoreCase("S");
}
@Scheduled(fixedDelay = 60, timeUnit = TimeUnit.MINUTES, initialDelay = 1, zone = "Europe/Rome")
public void internalCache() {
if (!canBeExecuted) return;
public void internalCache(HashMap<String, List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>>> MerceCachedData) {
try {
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = isGestioneAbilitata(connectionModel.getDbName());
if (!isEnabled) continue;
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
Date startDate = new Date();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
int timingId = UtilityTiming.startNewTiming(getClass().getSimpleName() + " (" + connectionModel.getProfileName() + ")");
boolean gestioneAbilitata = isGestioneAbilitata(multiDBTransactionManager);
List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>> merce = getMerce(multiDBTransactionManager);
merceCachedData.put(connectionModel.getDbName(), merce);
if (gestioneAbilitata) {
List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>> Merce = getMerce(multiDBTransactionManager);
MerceCachedData.put(dbName, Merce);
}
logger.trace(WMSMerceOrdiniAcquistoHandlerService.class.getSimpleName() + " - Merce: Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
multiDBTransactionManager.closeAll();
UtilityTiming.endTiming(timingId, true);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
@@ -108,16 +106,16 @@ public class WMSMerceOrdiniAcquistoHandlerService {
List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>> list;
if (!saveCache()) {
if (!isGestioneAbilitata(multiDBTransactionManager.getPrimaryDatasource().getDbName())) {
list = getMerce(multiDBTransactionManager);
} else {
HashMap<String, List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>>> inputMap = MerceCachedData;
HashMap<String, List<Map.Entry<String, List<MerceOrdiniAcquistoDTO>>>> inputMap = merceCachedData;
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
list = inputMap.get(dbName);
if (list == null) {
list = getMerce(multiDBTransactionManager);
MerceCachedData.put(dbName, list);
merceCachedData.put(dbName, list);
}
}

View File

@@ -4,6 +4,8 @@ import it.integry.common.var.CommonConstants;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.wms.Utility.WMSUtility;
import it.integry.ems.retail.wms.dto.*;
import it.integry.ems.retail.wms.vendita.dto.RetrieveAlreadyRegisteredUdsRequestDTO;
import it.integry.ems.retail.wms.vendita.dto.RetrieveAlreadyRegisteredUdsResponseDTO;
import it.integry.ems.retail.wms.vendita.service.WMSSpedizioneService;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import org.apache.logging.log4j.LogManager;
@@ -96,4 +98,16 @@ public class WMSSpedizioneController {
return ServiceRestResponse.createPositiveResponse(wmsSpedizioneService.duplicateUDS(duplicateUDSRequestDTO));
}
@RequestMapping(value = "retrieveAlreadyRegisteredUDS", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse retrieveAlreadyRegisteredUDC(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody RetrieveAlreadyRegisteredUdsRequestDTO body) throws Exception {
return ServiceRestResponse.createPositiveResponse(
new RetrieveAlreadyRegisteredUdsResponseDTO()
.setUdsList(wmsSpedizioneService.retrieveAlreadyRegisteredUDS(body.getOrdini(), body.getSegno())));
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.ems.retail.wms.vendita.dto;
import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoDTO;
import java.util.List;
public class RetrieveAlreadyRegisteredUdsRequestDTO {
private List<OrdineInevasoDTO> ordini;
private int segno;
public List<OrdineInevasoDTO> getOrdini() {
return ordini;
}
public RetrieveAlreadyRegisteredUdsRequestDTO setOrdini(List<OrdineInevasoDTO> ordini) {
this.ordini = ordini;
return this;
}
public int getSegno() {
return segno;
}
public RetrieveAlreadyRegisteredUdsRequestDTO setSegno(int segno) {
this.segno = segno;
return this;
}
}

View File

@@ -0,0 +1,20 @@
package it.integry.ems.retail.wms.vendita.dto;
import it.integry.ems.retail.wms.accettazione.dto.AlreadyRegisteredUlDTO;
import java.util.List;
public class RetrieveAlreadyRegisteredUdsResponseDTO {
private List<AlreadyRegisteredUlDTO> udsList;
public List<AlreadyRegisteredUlDTO> getUdsList() {
return udsList;
}
public RetrieveAlreadyRegisteredUdsResponseDTO setUdsList(List<AlreadyRegisteredUlDTO> udsList) {
this.udsList = udsList;
return this;
}
}

View File

@@ -3,9 +3,11 @@ package it.integry.ems.retail.wms.vendita.service;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
import it.integry.ems.product.importaz.service.ProductServices;
import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoDTO;
import it.integry.ems.retail.pvmRetail.dto.save.DocFromPickingDTO;
import it.integry.ems.retail.pvmRetail.service.PvmServiceSave;
import it.integry.ems.retail.wms.Utility.WMSUtility;
import it.integry.ems.retail.wms.accettazione.dto.AlreadyRegisteredUlDTO;
import it.integry.ems.retail.wms.colli.service.WMSColliService;
import it.integry.ems.retail.wms.dto.*;
import it.integry.ems.retail.wms.exceptions.InvalidArticoloException;
@@ -25,10 +27,7 @@ import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.entity._enum.GestioneEnum;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.MtbColtUtils;
import it.integry.ems_model.utility.UtilityBigDecimal;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -37,6 +36,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -244,7 +244,7 @@ public class WMSSpedizioneService {
entityProcessor.processEntity(targetMtbColt, multiDBTransactionManager);
MtbAart mtbAart = WMSUtility.getArticoloByCodMart(insertUDSRowRequestDTO.getCodMart(),multiDBTransactionManager.getPrimaryConnection());
MtbAart mtbAart = WMSUtility.getArticoloByCodMart(insertUDSRowRequestDTO.getCodMart(), multiDBTransactionManager.getPrimaryConnection());
if (mtbAart == null)
throw new InvalidArticoloException(insertUDSRowRequestDTO.getCodMart());
@@ -490,4 +490,46 @@ public class WMSSpedizioneService {
return new DuplicateUDSResponseDTO().setMtbColtList(mtbColtListToReturn);
}
public List<AlreadyRegisteredUlDTO> retrieveAlreadyRegisteredUDS(List<OrdineInevasoDTO> ordini, int segno) throws Exception {
String whereCondGestione = "";
List<String> foundGestioni = ordini.stream().map(OrdineInevasoDTO::getGestione)
.distinct()
.collect(Collectors.toList());
if (foundGestioni.size() == 1) {
whereCondGestione = "mtb_colt.gestione = " + UtilityDB.valueToString(foundGestioni.get(0)) + " ";
} else {
whereCondGestione = "(mtb_colt.gestione = 'V' OR mtb_colt.gestione = 'L') ";
}
String baseSql = "SELECT DISTINCT mtb_colt.* " +
"FROM mtb_colt " +
" INNER JOIN mtb_colr ON " +
" mtb_colt.gestione = mtb_colr.gestione " +
" AND mtb_colt.ser_collo = mtb_colr.ser_collo " +
" AND mtb_colt.data_collo = mtb_colr.data_collo " +
" AND mtb_colt.num_collo = mtb_colr.num_collo " +
" WHERE " + whereCondGestione +
" AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " +
" AND ";
List<HashMap<String, Object>> whereCondMapList = new ArrayList<>();
for (OrdineInevasoDTO ordineInevaso : ordini) {
HashMap<String, Object> whereCondMap = new HashMap<String, Object>() {{
put("mtb_colr.data_ord", ordineInevaso.getDataOrd());
put("mtb_colr.num_ord", ordineInevaso.getNumOrd());
put("mtb_colr.gestione", ordineInevaso.getGestione());
}};
whereCondMapList.add(whereCondMap);
}
baseSql += "(" + UtilityQuery.concatFieldListInWhereCond(whereCondMapList) + ")";
final List<AlreadyRegisteredUlDTO> alreadyRegisteredUlDTOS = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), baseSql, AlreadyRegisteredUlDTO.class);
return alreadyRegisteredUlDTOS;
}
}

View File

@@ -49,7 +49,7 @@
<!-- NB: DICHIARAZIONE DELLO SCHEDULER PER IL CARICAMENTO DINAMICO DEI MODULI ABILITATI -->
<bean id="quartzScheduler"
class="it.integry.ems.scheduler.CustomSchedulerFactoryBean">
class="it.integry.ems.scheduler.CustomSchedulerFactoryBean" destroy-method="destroy">
<property name="configLocation" value="classpath:quartz/config.properties"/>
<property name="autoStartup" value="true"/>

View File

@@ -79,7 +79,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<version>3.2.0</version>
<executions>
<execution>
<goals>