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

This commit is contained in:
2025-06-30 16:18:16 +02:00
2 changed files with 192 additions and 111 deletions

View File

@@ -173,6 +173,12 @@ public class MtbLisaData extends EntityBase {
@MapToTable(value = "rag_soc_prod")
private String ragSocProd;
@MapToTable(value = "data_iniz_sell_out")
private LocalDate dataInizSellOut;
@MapToTable(value = "data_fine_sell_out")
private LocalDate dataFineSellOut;
private BigDecimal percPromo1;
private BigDecimal percPromo2;
@@ -680,6 +686,24 @@ public class MtbLisaData extends EntityBase {
return this;
}
public LocalDate getDataInizSellOut() {
return dataInizSellOut;
}
public MtbLisaData setDataInizSellOut(LocalDate dataInizSellOut) {
this.dataInizSellOut = dataInizSellOut;
return this;
}
public LocalDate getDataFineSellOut() {
return dataFineSellOut;
}
public MtbLisaData setDataFineSellOut(LocalDate dataFineSellOut) {
this.dataFineSellOut = dataFineSellOut;
return this;
}
public MtbLisaPromo getMtbLisaPromo() {
return mtbLisaPromo;
}

View File

@@ -6,6 +6,7 @@ import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.Import.dto.ImportRequestDTO;
import it.integry.ems.file_formatter.csv.CsvMapper;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.base.EntityBase;
@@ -13,9 +14,13 @@ import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.AtbListData;
import it.integry.ems_model.entity.MtbLisaData;
import it.integry.ems_model.entity.MtbLisvData;
import it.integry.ems_model.entity.VtbListData;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@@ -26,6 +31,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Scope("request")
@@ -34,10 +40,11 @@ public class ImportApuliaPromoService {
private SetupGest setupGest = new SetupGest();
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private EntityProcessor entityProcessor;
private final Logger logger = LogManager.getLogger();
public List<EntityBase> importPromo(ImportRequestDTO request, String type, String format, List<AnomalieDTO> anomalie) throws Exception {
if (request == null || request.getRawContent() == null) {
throw new Exception("Nessun csv da importare.");
@@ -59,126 +66,136 @@ public class ImportApuliaPromoService {
promozioni = Stream.of(promozioni).filterNot(x -> listiniDaEscludere.contains(x.getPartIva())).toList();
}
String codAlis = null;
if ( !UtilityString.isNullOrEmpty(request.getWhereCond())) {
codAlis = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(
String codAlisFiltro = null;
if (!UtilityString.isNullOrEmpty(request.getWhereCond())) {
codAlisFiltro = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(
connection,
UtilityDB.addwhereCond("select cod_alis from atb_list", request.getWhereCond(), true, false));
if (codAlisFiltro == null) {
anomalie.add(AnomalieDTO.warning("Codice Listino non trovato "));
}
}
List<EntityBase> entityList = new ArrayList<>();
List<MtbLisaData> mtbLisaDataList = new ArrayList<>();
for (PromoDto promozione : promozioni) {
try {
Map<String, List<PromoDto>> promoPerLisa = promozioni.stream().collect(Collectors.groupingBy(PromoDto::getPartIva));
for (String partitaIva : promoPerLisa.keySet()) {
String codAlis;
if (UtilityString.isNullOrEmpty(codAlisFiltro)) {
partitaIva = UtilityString.FillString(partitaIva, '0', 11, "L");
String sql =
Query.format("select cod_alis from atb_list where part_iva_forn = %s", partitaIva);
codAlis = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
String partitaIva = promozione.getPartIva();
if (UtilityString.isNullOrEmpty(codAlis)) {
partitaIva = UtilityString.FillString(partitaIva, '0', 11, "L");
String sql =
Query.format("select cod_alis from atb_list where part_iva_forn = %s", partitaIva);
codAlis = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
if (codAlis == null) {
codAlis = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection,
String.format("select cod_alis from gtb_anag inner join atb_forn on gtb_anag.cod_anag = atb_forn.cod_anag where atb_forn.flag_stato = 'A' AND gtb_anag.part_iva = '%s'", partitaIva)
);
}
if (codAlis == null) {
codAlis = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection,
String.format("select cod_alis from gtb_anag inner join atb_forn on gtb_anag.cod_anag = atb_forn.cod_anag where atb_forn.flag_stato = 'A' AND gtb_anag.part_iva = '%s'", partitaIva)
);
}
if (codAlis == null) {
anomalie.add(AnomalieDTO.warning("Nessun listino trovato per partita iva " + partitaIva));
continue;
}
String sql =
"SELECT art.cod_mart, art.cod_art_for\n" +
"FROM mtb_lisa\n" +
" INNER JOIN mtb_lisa art ON mtb_lisa.cod_mart = art.cod_mart AND mtb_lisa.cod_alis = art.cod_alis\n" +
"WHERE mtb_lisa.cod_art_for = " + UtilityDB.valueToString(promozione.getCodArtForn()) + "\n" +
" AND mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + "\n" +
"UNION " +
"SELECT art.cod_mart, art.cod_art_for\n" +
"FROM mtb_lisa\n" +
" INNER JOIN mtb_lisa art ON mtb_lisa.cod_barre = art.cod_barre AND mtb_lisa.cod_alis = art.cod_alis\n" +
"WHERE mtb_lisa.cod_art_for = " + UtilityDB.valueToString(promozione.getCodArtForn()) + "\n" +
" AND mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + "\n" +
" AND mtb_lisa.cod_barre is not null \n" +
"SELECT art.cod_mart, art.cod_art_for\n" +
"FROM mtb_lisa\n" +
" INNER JOIN mtb_lisa art ON mtb_lisa.descr_art_forn = art.descr_art_forn AND mtb_lisa.cod_alis = art.cod_alis\n" +
"WHERE mtb_lisa.cod_art_for = " + UtilityDB.valueToString(promozione.getCodArtForn()) + "\n" +
" AND mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + "\n" +
" AND mtb_lisa.descr_art_forn is not null \n";
List<MtbLisaData> mtbLisaData = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, MtbLisaData.class, OperationType.INSERT_OR_UPDATE);
if (mtbLisaData == null || mtbLisaData.isEmpty()) {
mtbLisaData = new ArrayList<>();
MtbLisaData lisa = new MtbLisaData()
.setCodArtFor(promozione.getCodArtForn());
lisa.setOperation(OperationType.INSERT_OR_UPDATE);
mtbLisaData.add(lisa);
}
LocalDate dataIniz = promozione.getDataIniz();
LocalDate dataFine = promozione.getDataFine();
for (MtbLisaData lisa : mtbLisaData) {
//Verifichiamo se esiste una promozione contemporanea nel file
LocalDate finalDataIniz = dataIniz;
String finalCodAlis = codAlis;
Optional<MtbLisaData> first = mtbLisaDataList.stream()
.filter(x ->
x.getCodArtFor().equalsIgnoreCase(lisa.getCodArtFor()) &&
x.getCodAlis().equalsIgnoreCase(finalCodAlis) &&
x.getDataIniz().isBefore(finalDataIniz) &&
x.getDataFine().isAfter(finalDataIniz))
.findFirst();
if (first.isPresent()) {
dataIniz = first.get().getDataFine();
dataIniz = dataIniz.plusDays(1);
} else {
sql =
Query.format(
"SELECT atb_list_data.data_fine\n" +
"FROM atb_list_data\n" +
" INNER JOIN mtb_lisa_data ON atb_list_data.cod_alis = mtb_lisa_data.cod_alis AND\n" +
" atb_list_data.versione = mtb_lisa_data.versione\n" +
"WHERE atb_list_data.cod_alis = %s \n" +
" AND atb_list_data.data_fine IS NOT NULL\n" +
" AND mtb_lisa_data.cod_art_for = %s\n" +
" AND %s BETWEEN atb_list_data.data_iniz AND atb_list_data.data_fine",
codAlis,
lisa.getCodArtFor(),
dataIniz);
LocalDate dataFinePromo = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (dataFinePromo != null && dataFinePromo.equals(dataFine)) {
dataIniz = dataFinePromo;
dataIniz = dataIniz.plusDays( 1);
}
}
lisa
.setNote(EmsRestConstants.NULL)
.setPercPromo1(promozione.getSconto1())
.setPercPromo2(promozione.getSconto2())
.setPercPromo3(promozione.getSconto3())
.setDataIniz(dataIniz)
.setDataFine(dataFine)
.setCodAlis(codAlis);
}
mtbLisaDataList.addAll(mtbLisaData);
} catch (Exception e) {
anomalie.add(AnomalieDTO.error(e));
} else {
codAlis = codAlisFiltro;
}
for (PromoDto promozione : promoPerLisa.get(partitaIva)) {
try {
String sql =
"SELECT art.cod_mart, art.cod_art_for\n" +
"FROM mtb_lisa\n" +
" INNER JOIN mtb_lisa art ON mtb_lisa.cod_mart = art.cod_mart AND mtb_lisa.cod_alis = art.cod_alis\n" +
"WHERE mtb_lisa.cod_art_for = " + UtilityDB.valueToString(promozione.getCodArtForn()) + "\n" +
" AND mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + "\n" +
"UNION " +
"SELECT art.cod_mart, art.cod_art_for\n" +
"FROM mtb_lisa\n" +
" INNER JOIN mtb_lisa art ON mtb_lisa.cod_barre = art.cod_barre AND mtb_lisa.cod_alis = art.cod_alis\n" +
"WHERE mtb_lisa.cod_art_for = " + UtilityDB.valueToString(promozione.getCodArtForn()) + "\n" +
" AND mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + "\n" +
" AND mtb_lisa.cod_barre is not null \n" +
"SELECT art.cod_mart, art.cod_art_for\n" +
"FROM mtb_lisa\n" +
" INNER JOIN mtb_lisa art ON mtb_lisa.descr_art_forn = art.descr_art_forn AND mtb_lisa.cod_alis = art.cod_alis\n" +
"WHERE mtb_lisa.cod_art_for = " + UtilityDB.valueToString(promozione.getCodArtForn()) + "\n" +
" AND mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + "\n" +
" AND mtb_lisa.descr_art_forn is not null \n";
List<MtbLisaData> mtbLisaData = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, MtbLisaData.class, OperationType.INSERT_OR_UPDATE);
if (mtbLisaData == null || mtbLisaData.isEmpty()) {
mtbLisaData = new ArrayList<>();
MtbLisaData lisa = new MtbLisaData()
.setCodArtFor(promozione.getCodArtForn());
lisa.setOperation(OperationType.INSERT_OR_UPDATE);
mtbLisaData.add(lisa);
}
LocalDate dataIniz = UtilityString.parseLocalDate(promozione.getDataIniz());
LocalDate dataFine = UtilityString.parseLocalDate(promozione.getDataFine());
for (MtbLisaData lisa : mtbLisaData) {
//Verifichiamo se esiste una promozione contemporanea nel file
LocalDate finalDataIniz = dataIniz;
String finalCodAlis = codAlis;
Optional<MtbLisaData> first = mtbLisaDataList.stream()
.filter(x ->
x.getCodArtFor().equalsIgnoreCase(lisa.getCodArtFor()) &&
x.getCodAlis().equalsIgnoreCase(finalCodAlis) &&
x.getDataIniz().isBefore(finalDataIniz) &&
x.getDataFine().isAfter(finalDataIniz))
.findFirst();
if (first.isPresent()) {
dataIniz = first.get().getDataFine();
dataIniz = dataIniz.plusDays(1);
} else {
sql =
Query.format(
"SELECT atb_list_data.data_fine \n" +
"FROM atb_list_data\n" +
" INNER JOIN mtb_lisa_data ON atb_list_data.cod_alis = mtb_lisa_data.cod_alis AND\n" +
" atb_list_data.versione = mtb_lisa_data.versione\n" +
"WHERE atb_list_data.cod_alis = %s \n" +
" AND atb_list_data.data_fine IS NOT NULL\n" +
" AND mtb_lisa_data.cod_art_for = %s\n" +
" AND %s BETWEEN atb_list_data.data_iniz AND atb_list_data.data_fine",
codAlis,
lisa.getCodArtFor(),
dataIniz);
LocalDate dataFinePromo = UtilityLocalDate.localDateFromDate(UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql));
if (dataFinePromo != null && dataFinePromo.equals(dataFine)) {
dataIniz = dataFinePromo;
dataIniz = dataIniz.plusDays(1);
}
}
lisa
.setNote(EmsRestConstants.NULL)
.setPercPromo1(promozione.getSconto1())
.setPercPromo2(promozione.getSconto2())
.setPercPromo3(promozione.getSconto3())
.setDataInizSellOut(promozione.getDataInizSellOut() != null ? UtilityString.parseLocalDate(promozione.getDataInizSellOut()) : null)
.setDataFineSellOut(promozione.getDataFineSellOut() != null ? UtilityString.parseLocalDate(promozione.getDataFineSellOut()) : null)
.setDataIniz(dataIniz)
.setDataFine(dataFine)
.setCodAlis(codAlis);
}
mtbLisaDataList.addAll(mtbLisaData);
} catch (Exception e) {
anomalie.add(AnomalieDTO.error(e));
logger.error(e);
}
}
}
if (!mtbLisaDataList.isEmpty()) {
@@ -188,6 +205,8 @@ public class ImportApuliaPromoService {
.setCodAlis(x.getCodAlis())
.setDataIniz(x.getDataIniz())
.setDataFine(x.getDataFine())
.setDataInizSellOut(x.getDataInizSellOut())
.setDataFineSellOut(x.getDataFineSellOut())
.setFlagTipoPromo("E")
.setNote("INTERNA");
atbListData.setOperation(OperationType.INSERT_OR_UPDATE);
@@ -246,6 +265,12 @@ public class ImportApuliaPromoService {
@JsonProperty("NOTE")
private String note;
@JsonProperty("DT INIZIO SELL OUT")
private String dataInizSellOut;
@JsonProperty("DT FINE SELL OUT")
private String dataFineSellOut;
public String getNumOffCedi() {
return numOffCedi;
}
@@ -258,20 +283,22 @@ public class ImportApuliaPromoService {
return partIva;
}
public String getDataInizString() {
public String getDataIniz() {
return dataIniz;
}
public LocalDate getDataIniz() throws Exception {
return UtilityString.parseLocalDate(dataIniz);
public PromoDto setDataIniz(String dataIniz) {
this.dataIniz = dataIniz;
return this;
}
public String getDataFineString() {
public String getDataFine() {
return dataFine;
}
public LocalDate getDataFine() throws Exception {
return UtilityString.parseLocalDate(dataFine);
public PromoDto setDataFine(String dataFine) {
this.dataFine = dataFine;
return this;
}
public String getCodArtCedi() {
@@ -301,5 +328,35 @@ public class ImportApuliaPromoService {
public String getNote() {
return note;
}
public String getDataFineSellOut() {
return dataFineSellOut;
}
public PromoDto setDataFineSellOut(String dataFineSellOut) {
this.dataFineSellOut = dataFineSellOut;
return this;
}
public String getDataInizSellOut() {
return dataInizSellOut;
}
public PromoDto setDataInizSellOut(String dataInizSellOut) {
this.dataInizSellOut = dataInizSellOut;
return this;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof PromoDto)) return false;
PromoDto promoDto = (PromoDto) o;
return Objects.equals(getNumOffCedi(), promoDto.getNumOffCedi()) && Objects.equals(getCodFornCedi(), promoDto.getCodFornCedi()) && Objects.equals(getPartIva(), promoDto.getPartIva()) && Objects.equals(getDataIniz(), promoDto.getDataIniz()) && Objects.equals(getDataFine(), promoDto.getDataFine()) && Objects.equals(getCodArtCedi(), promoDto.getCodArtCedi()) && Objects.equals(getCodArtForn(), promoDto.getCodArtForn()) && Objects.equals(getSconto1(), promoDto.getSconto1()) && Objects.equals(getSconto2(), promoDto.getSconto2()) && Objects.equals(getSconto3(), promoDto.getSconto3()) && Objects.equals(getScontoVal(), promoDto.getScontoVal()) && Objects.equals(getNote(), promoDto.getNote()) && Objects.equals(getDataInizSellOut(), promoDto.getDataInizSellOut()) && Objects.equals(getDataFineSellOut(), promoDto.getDataFineSellOut());
}
@Override
public int hashCode() {
return Objects.hash(getNumOffCedi(), getCodFornCedi(), getPartIva(), getDataIniz(), getDataFine(), getCodArtCedi(), getCodArtForn(), getSconto1(), getSconto2(), getSconto3(), getScontoVal(), getNote(), getDataInizSellOut(), getDataFineSellOut());
}
}
}