Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-03-26 20:17:34 +01:00
2 changed files with 103 additions and 134 deletions

View File

@@ -1,35 +1,33 @@
package it.integry.ems.service.production;
import com.annimon.stream.Stream;
import it.integry.annotations.PostWebServerConstruct;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.service.dto.production.MRPDailyConsumiDTO;
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.*;
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 org.springframework.web.context.ContextLoader;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Component
public class MrpConsumiHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@@ -39,69 +37,43 @@ public class MrpConsumiHandlerService {
@Autowired
public SetupGest setupGest;
@Autowired
private MrpSetupHandlerService mrpSetupHandlerService;
private final HashMap<String, HashMap<String, Map<String, List<MRPDailyConsumiDTO>>>> consumiCachedData = new HashMap<>();
@PostWebServerConstruct
public void init() {
if ( saveCache() ) {
looperService.add(() -> this.internalCacheConsumi(consumiCachedData), (UtilityDebug.isDebugExecution()?5:1) * 60 * 1000, MrpConsumiHandlerService.class.getName());
}
}
private boolean saveCache(){
return !UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer() && settingsModel.isPrimaryInstance();
}
public void internalCacheConsumi(HashMap<String, HashMap<String, Map<String, List<MRPDailyConsumiDTO>>>> consumiList) {
try {
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.MINUTES, initialDelay = 60, zone = "Europe/Rome")
private void updateData() throws Exception {
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));
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
loadConsumi(dbName,profileName,consumiList);
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = mrpSetupHandlerService.isGestioneAbilitata(connectionModel.getDbName());
if(!isEnabled) continue;
}
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
int timingId = UtilityTiming.startNewTiming(MrpConsumiHandlerService.class.getSimpleName() + " (" + connectionModel.getProfileName() + ")");
internalCacheConsumi(multiDBTransactionManager);
UtilityTiming.endTiming(timingId, true);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
private void loadConsumi(String dbName, String profileName, HashMap<String, HashMap<String, Map<String, List<MRPDailyConsumiDTO>>>> consumiList) throws Exception {
Date startDate = new Date();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
boolean gestioneAbilitata = isGestioneAbilitata(multiDBTransactionManager);
private void internalCacheConsumi(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
if ( gestioneAbilitata ) {
Map<String, List<MRPDailyConsumiDTO>> consumi = getConsumi(multiDBTransactionManager);
HashMap<String, Map<String, List<MRPDailyConsumiDTO>>> section = getSectionConsumiByDBName(consumiList, dbName);
HashMap<String, Map<String, List<MRPDailyConsumiDTO>>> section = getSectionConsumiByDBName(consumiCachedData, dbName);
section.clear();
section.put(dbName, consumi);
}
logger.trace(MrpConsumiHandlerService.class.getSimpleName() + " - Consumi: Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
multiDBTransactionManager.closeAll();
}
private static boolean isGestioneAbilitata(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz IN ('WG125') \n" +
" AND flag_abil <> 'N'";
boolean gestioneAbilitata = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
return gestioneAbilitata;
}
private HashMap<String, Map<String, List<MRPDailyConsumiDTO>>> getSectionConsumiByDBName(HashMap<String, HashMap<String, Map<String, List<MRPDailyConsumiDTO>>>> inputData, String profileDb) {
@@ -237,13 +209,14 @@ public class MrpConsumiHandlerService {
return whereCond;
}
public Map<String, List<MRPDailyConsumiDTO>> getConsumi() throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
if (!saveCache()) {
if (!mrpSetupHandlerService.isGestioneAbilitata(dbName)) {
return getConsumi(multiDBTransactionManager);
} else {
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
Map<String, List<MRPDailyConsumiDTO>> consumiList = getSectionConsumiByDBName(consumiCachedData, dbName).get(dbName);
if (consumiList == null)
return getConsumi(multiDBTransactionManager);

View File

@@ -7,6 +7,7 @@ import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.Connection;
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.Query;
import it.integry.ems_model.utility.UtilityDB;
@@ -37,18 +38,15 @@ public class MrpSetupHandlerService {
@Autowired
public SetupGest setupGest;
private final HashMap<String, HashMap<String, List<MRPDailySetupSottogruppiDTO>>> setupSottogruppiCachedData = new HashMap<>();
private final HashMap<String, HashMap<String, List<MRPDailySetupGruppiDTO>>> setupGruppiCachedData = new HashMap<>();
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> executionPermission = new HashMap<>();
private final HashMap<String, HashMap<String, List<MRPDailySetupSottogruppiDTO>>> setupSottogruppiCachedData = new HashMap<>();
private final HashMap<String, HashMap<String, List<MRPDailySetupGruppiDTO>>> setupGruppiCachedData = new HashMap<>();
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
private void refreshCronPermission() throws Exception {
canBeExecuted = true;
// canBeExecuted = !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer();
canBeExecuted = !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer();
if (!canBeExecuted) return;
try {
@@ -90,16 +88,14 @@ public class MrpSetupHandlerService {
for (AvailableConnectionsModel connectionModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
boolean isEnabled = isGestioneAbilitata(connectionModel.getDbName());
if (!isEnabled) continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
int timingId = UtilityTiming.startNewTiming(MrpSetupHandlerService.class.getSimpleName() + " (" + connectionModel.getProfileName() + ")");
if (isEnabled) {
internalSottogruppoSetupCache(multiDBTransactionManager);
internalGruppoSetupCache(multiDBTransactionManager);
}
UtilityTiming.endTiming(timingId, true);