Fix su distribuzione e lettura dati utenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-01-29 13:14:03 +01:00
parent 5d8f2f1e82
commit 20b64b56df
3 changed files with 36 additions and 33 deletions

View File

@@ -1,13 +1,16 @@
package it.integry.ems.user;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.dto.EntityPermissionsDTO;
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.user.dto.UserDTO;
import it.integry.ems.user.exception.InvalidUserException;
import it.integry.ems.user.service.UserCacheService;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.MtbDepo;
import it.integry.ems_model.entity.StbUser;
import it.integry.ems_model.entity.WtbDepo;
import it.integry.ems_model.exception.DataConverterNotFoundException;
import it.integry.ems_model.utility.UtilityDB;
@@ -17,9 +20,6 @@ import org.apache.logging.log4j.Logger;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import java.io.IOException;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -52,21 +52,12 @@ public class UtilityUser {
public static UserDTO getCurrentUser(MultiDBTransactionManager multiDBTransactionManager, String username) {
if (UtilityString.isNullOrEmpty(username)) return null;
String sql =
"SELECT User_name, " +
" e_mail AS email, " +
" Full_name, " +
" key_group, " +
" CAST(CASE WHEN flag_attivo = 'S' THEN 1 ELSE 0 END AS bit) AS attivo, " +
" 'internal' AS type " +
"FROM " + StbUser.ENTITY + " " +
"WHERE user_name = " + UtilityDB.valueToString(username);
final UserCacheService userCacheService = ApplicationContextProvider.getApplicationContext().getBean(UserCacheService.class);
final RequestDataDTO requestData = ApplicationContextProvider.getApplicationContext().getBean(RequestDataDTO.class);
try {
List<UserDTO> result = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, UserDTO.class);
if (result == null || result.isEmpty()) return null;
return result.get(0);
final UserDTO userDTO = userCacheService.retrieveUserData(multiDBTransactionManager.getPrimaryDatasource().getProfile(), username, requestData.getApplication());
return userDTO;
} catch (Exception exception) {
logger.error("User validation", exception);
return null;

View File

@@ -109,6 +109,9 @@ public class UserCacheService {
if (users == null || users.isEmpty())
return null;
if (password == null || password.isEmpty())
return null;
String finalPasswordHex = UtilityHash.generateHash(password.toUpperCase());
final Optional<UserDTO> foundUser = users.stream()
.filter(x -> x.getUsername().equalsIgnoreCase(username) &&
@@ -123,6 +126,26 @@ public class UserCacheService {
return foundUser.orElse(null);
}
public @Nullable UserDTO retrieveUserData(String profileDb, String username, IntegryApplicationEnum application) {
String dbName = settingsModel.getDbNameFromProfileDb(profileDb);
List<UserDTO> users = cachedUsers.getOrDefault(dbName, null);
if (users == null || users.isEmpty())
return null;
final Optional<UserDTO> foundUser = users.stream()
.filter(x -> x.getUsername().equalsIgnoreCase(username) &&
(application == null ||
(application == IntegryApplicationEnum.PVM && x.isWeb()) ||
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
.findFirst();
return foundUser.orElse(null);
}
public void discoverAllUsers(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
cacheLock.lock();

View File

@@ -11,7 +11,6 @@ import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.base.EntityNotFound;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
@@ -107,25 +106,15 @@ public class DistribuzioneColliService {
String sqlSelectMtbColrs = "SELECT mtb_colr.*, mtb_aart.flag_qta_cnf_fissa as flagQtaCnfFissa " +
"FROM mtb_colr, mtb_aart WHERE mtb_colr.cod_mart = mtb_aart.cod_mart AND " + UtilityQuery.concatFieldListInWhereCond(mtbColtData);
PreparedStatement psMtbColr = multiDBTransactionManager.prepareStatement(sqlSelectMtbColrs);
psMtbColr.setQueryTimeout(30);
ResultSet rsMtbColr = psMtbColr.executeQuery();
ResultSetMapper rsMapperMtbColr = new ResultSetMapper();
List<MtbColr> sourceMtbColrs = rsMapperMtbColr.mapResultSetToList(rsMtbColr, MtbColr.class, OperationType.SELECT_OBJECT);
rsMtbColr.close();
psMtbColr.close();
List<MtbColr> sourceMtbColrs = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sqlSelectMtbColrs, MtbColr.class);
if (sourceMtbColrs == null) return null;
//Carico tutte le informazioni riguardanti gli articoli
List<String> codMarts = Stream.of(sourceMtbColrs)
.withoutNulls()
List<String> codMarts = sourceMtbColrs.stream()
.filter(mtbColr -> mtbColr != null && !UtilityString.isNullOrEmpty(mtbColr.getCodMart()))
.map(MtbColr::getCodMart)
.toList();
.collect(Collectors.toList());
List<MtbAart> mtbAarts = productServices.getArticoliByCodMarts(codMarts);
@@ -800,7 +789,7 @@ public class DistribuzioneColliService {
private List<MtbColt> splitMtbColrsByCodJfas(MtbColt inputMtbColt, List<DtbOrdt> inputOrders, List<MtbColr> inputMtbColrs) {
final Map<Object, List<HashMap<String, Object>>> ordersByCodJfas = inputOrders.stream()
.map(x -> new HashMap<String, Object>() {{
put("data_ord", x.getDataOrd());
put("data_ord", UtilityLocalDate.localDateFromDate(x.getDataOrd()));
put("num_ord", x.getNumOrd());
put("gestione", x.getGestione());
put("cod_jfas", x.getCodJfas());