[WMS] Implementati documenti scarico in CloseUDS lavorazione

This commit is contained in:
2024-09-13 09:22:17 +02:00
parent af1e06d765
commit 7c1c68f7d2
19 changed files with 307 additions and 127 deletions

View File

@@ -58,8 +58,8 @@ public class LoadColliService {
for (MtbColt mtbColt : loadColli.getColli()) {
mtbColt.setOperation(OperationType.SELECT_OBJECT);
Stream.of(mtbColt.getMtbColr()).forEach(mtbColr -> mtbColr.setOperation(OperationType.SELECT_OBJECT));
Stream.of(mtbColt.getMtbCols()).forEach(mtbCols -> mtbCols.setOperation(OperationType.SELECT_OBJECT));
mtbColt.getMtbColr().forEach(mtbColr -> mtbColr.setOperation(OperationType.SELECT_OBJECT));
mtbColt.getMtbCols().forEach(mtbCols -> mtbCols.setOperation(OperationType.SELECT_OBJECT));
}
if (UtilityString.isNullOrEmpty(loadColli.getGestione()) && !UtilityString.isNullOrEmpty(loadColli.getCodDtip())) {
@@ -179,11 +179,6 @@ public class LoadColliService {
" gtb_divi.cod_divi = dtb_ordt.cod_divi ";
dtbDoct = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), query, DtbDoct.class);
// PreparedStatement ps = multiDBTransactionManager.prepareStatement(query);
// ResultSet rs = ps.executeQuery();
// dtbDoct = new ResultSetMapper().mapResultSetToList(rs, DtbDoct.class).get(0);
// rs.close();
// ps.close();
} else {
if (UtilityString.isNullOrEmpty(loadColli.getCodMdep())) {
throw new Exception("Codice Deposito obbligatorio");
@@ -198,12 +193,6 @@ public class LoadColliService {
" mtb_colr.ser_collo = mtb_colt.ser_collo AND " +
" mtb_colr.num_collo = mtb_colt.num_collo ";
query = UtilityDB.addwhereCond(query, whereCond, false);
//
// PreparedStatement ps = multiDBTransactionManager.prepareStatement(query);
// ResultSet rs = ps.executeQuery();
// dtbDoct = new ResultSetMapper().mapResultSetToList(rs, DtbDoct.class).get(0);
// rs.close();
// ps.close();
dtbDoct = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), query, DtbDoct.class);
} else {
dtbDoct = new DtbDoct();
@@ -273,7 +262,8 @@ public class LoadColliService {
}
}
Stream.of(loadColli.getColli()).forEach(x -> x.setUpdateColliFromDoc(true));
loadColli.getColli()
.forEach(x -> x.setUpdateColliFromDoc(true));
//AGGIUNGERE CAMPI CHE PASSIAMO DA FUORI
dtbDoct.setGestione(loadColli.getGestione())
@@ -312,12 +302,12 @@ public class LoadColliService {
List<DtbDocr> dtbDocr = loadRigheCollo(whereCond, loadColli);
if (!dtbDocr.isEmpty()) {
com.annimon.stream.Optional<DtbDocr> firstRow = Stream.of(dtbDocr).filter(x -> x.getDataOrd() != null && x.getNumOrd() != null).findFirst();
if (firstRow.isPresent()) {
dtbDoct
.setDataOrd(firstRow.get().getDataOrd())
.setNumOrd(firstRow.get().getNumOrd());
}
dtbDocr.stream()
.filter(x -> x.getDataOrd() != null && x.getNumOrd() != null)
.findFirst()
.ifPresent(docr -> dtbDoct
.setDataOrd(docr.getDataOrd())
.setNumOrd(docr.getNumOrd()));
}
if (!loadColli.isSaveDoc()) {

View File

@@ -64,18 +64,10 @@ public class EntityProcessor {
private SettingsModel settingsModel;
public <T> T processEntity(EntityInterface entity, MultiDBTransactionManager multiDBTransactionManager) throws Exception {
final RequestDataDTO requestDataDTO = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class);
String username = "";
if (requestDataDTO != null && requestDataDTO.isValidUsername()) {
username = requestDataDTO.getUsername();
}
return (T) processEntity(entity, true, false, username, multiDBTransactionManager, requestDataDTO, true, false);
return processEntity(entity, false, multiDBTransactionManager);
}
public EntityBase processEntity(EntityInterface entity, boolean skipCommit, MultiDBTransactionManager multiDBTransactionManager) throws Exception {
public <T> T processEntity(EntityInterface entity, boolean skipCommit, MultiDBTransactionManager multiDBTransactionManager) throws Exception {
final RequestDataDTO requestDataDTO = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class);
String username = "";
@@ -84,7 +76,7 @@ public class EntityProcessor {
username = requestDataDTO.getUsername();
}
return (EntityBase) processEntity(entity, true, skipCommit, username, multiDBTransactionManager, requestDataDTO, true, false);
return (T) processEntity(entity, true, skipCommit, username, multiDBTransactionManager, requestDataDTO, true, false);
}
public EntityBase processEntity(EntityInterface entity, Boolean isSync,
@@ -507,8 +499,6 @@ public class EntityProcessor {
}
}
multiDBTransactionManager.commitAll();
return entityList;
}

View File

@@ -366,7 +366,7 @@ public class ICONImportService {
filtro.setSerCollo(collo.getSerCollo());
filtro.setNumCollo(collo.getNumCollo());
filtro.setCriterioDistribuzione("U");
colTDistr = distrCollo.distribuzioneRigheColloNew(filtro);
colTDistr = distrCollo.distribuzioneRigheColloNew(filtro, true);
colTDistributed.addAll(colTDistr);
entityProcessor.processEntityList(colTDistr, multiDBTransactionManager, true);

View File

@@ -541,7 +541,7 @@ public class MetalSistemImportService {
filtro.setSerCollo(colT.getSerCollo());
filtro.setNumCollo(colT.getNumCollo());
filtro.setCriterioDistribuzione("U");
List<MtbColt> colTDistr = distrCollo.distribuzioneRigheColloNew(filtro);
List<MtbColt> colTDistr = distrCollo.distribuzioneRigheColloNew(filtro, true);
index = 0;
colliCommessa = new ArrayList<>();

View File

@@ -7,6 +7,7 @@ import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.config.EmsRestConstants;
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;
@@ -15,7 +16,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
@@ -63,15 +63,9 @@ public class PackageImportController {
public @ResponseBody
ServiceRestResponse importColloDaProduzioneJson(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody ImportColliDaProduzioneDTO colloToImport) {
@RequestBody ImportColliDaProduzioneDTO colloToImport) throws Exception {
try {
Date dataVers = new Date();
return ServiceRestResponse.createPositiveResponse(packagesImportService.importColloDaProduzione(colloToImport, dataVers));
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
return ServiceRestResponse.createNegativeResponse(configuration, e);
}
return ServiceRestResponse.createPositiveResponse(packagesImportService.importColloDaProduzione(colloToImport, UtilityLocalDate.getNowTime()));
}

View File

@@ -1,6 +1,7 @@
package it.integry.ems.logistic.dto;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
public class ImportColliDaProduzioneDTO {
@@ -15,7 +16,7 @@ public class ImportColliDaProduzioneDTO {
private int colliBancale;
private BigDecimal qtaCnf;
private Date dataCollo;
private LocalDate dataCollo;
private String preparatoDa;
private Date dataOrd;
@@ -108,11 +109,11 @@ public class ImportColliDaProduzioneDTO {
return this;
}
public Date getDataCollo() {
public LocalDate getDataCollo() {
return dataCollo;
}
public ImportColliDaProduzioneDTO setDataCollo(Date dataCollo) {
public ImportColliDaProduzioneDTO setDataCollo(LocalDate dataCollo) {
this.dataCollo = dataCollo;
return this;
}

View File

@@ -67,9 +67,10 @@ public class FiltroDistribuzioneColloDTO {
U("U"), //AGGIORNA IL COLLO ESISTENTE
O("O"), //DIVIDE IL COLLO INIZIALE PER ORDINE
G("G"), //DIVIDE IL COLLO INIZIALE PER IL GRUPPO BOLLA DEGLI ARTICOLI
UP("UP"); //SI TRATTA DI UN COLLO DI LAVORAZIONE CHE HA SULLE RIGHE I RIFERIMENTI DELL'ORDINE DI PRODUZIONE (GESTIONE_RIF = 'A')
UP("UP"), //SI TRATTA DI UN COLLO DI LAVORAZIONE CHE HA SULLE RIGHE I RIFERIMENTI DELL'ORDINE DI PRODUZIONE (GESTIONE_RIF = 'A')
//E VIENE LANCIATA LA NORMALE DISTRIBUZIONE MA NELL'AGGIORNARE IL COLLO VENGONO LETTI I RIFERIMENTI DELL'ORDINE DI LAVORAZIOKNE
// A CUI LA CHIAVE DATA,NUMERO E RIGA ORDINE FANNO RIFERIMENTO
FASE("FASE");
private String text;

View File

@@ -24,6 +24,9 @@ import java.math.RoundingMode;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.groupingBy;
@Component
public class DistribuzioneColliService {
@@ -32,7 +35,7 @@ public class DistribuzioneColliService {
private final List<MtbColt> mCurrentlyDistributingMtbColt = new ArrayList<>();
public List<MtbColt> distribuzioneRigheColloNew(final FiltroDistribuzioneColloDTO filtroDistribuzioneColloDTO) throws Exception {
public List<MtbColt> distribuzioneRigheColloNew(final FiltroDistribuzioneColloDTO filtroDistribuzioneColloDTO, boolean skipCommit) throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
EntityProcessor entityProcessor = ContextLoader.getCurrentWebApplicationContext().getBean(EntityProcessor.class);
@@ -81,7 +84,7 @@ public class DistribuzioneColliService {
psRemoveOrdRifsFromMtbColrs.executeUpdate();
psRemoveOrdRifsFromMtbColrs.close();
List<EntityBase> result = entityProcessor.processEntity(sourceMtbColt, multiDBTransactionManager);
List<EntityBase> result = entityProcessor.processEntity(sourceMtbColt, skipCommit, multiDBTransactionManager);
if (result == null || result.isEmpty())
throw new EntityNotFoundException(String.format("Il collo numero %d del %s non esiste",
@@ -130,7 +133,7 @@ public class DistribuzioneColliService {
String filtroOrdini = sourceMtbColt.getFiltroOrdini();
String whereCondOrd = null;
if (UtilityString.isNullOrEmpty(filtroOrdini)){
if (UtilityString.isNullOrEmpty(filtroOrdini)) {
return Collections.singletonList(sourceMtbColt.setMtbColr(sourceMtbColrs));
}
@@ -154,7 +157,7 @@ public class DistribuzioneColliService {
whereCondOrd = UtilityXML.XML2WhereCond(xmlFilter.toString());
}
if (UtilityString.isNullOrEmpty(whereCondOrd)){
if (UtilityString.isNullOrEmpty(whereCondOrd)) {
return Collections.singletonList(sourceMtbColt.setMtbColr(sourceMtbColrs));
}
@@ -230,15 +233,21 @@ public class DistribuzioneColliService {
" cod_kit, " +
" num_cnf_evasa, " +
" id_viaggio, " +
" data_cons_anag " +
" data_cons_anag," +
" dtb_ordt.cod_jfas AS cod_jfas " +
" FROM ovw_ordini_inevasi dtb_ordr " +
" INNER JOIN dtb_ordt ON dtb_ordr.gestione = dtb_ordt.gestione AND " +
" dtb_ordr.data_ord = dtb_ordt.data_ord AND " +
" dtb_ordr.num_ord = dtb_ordt.num_ord " +
" WHERE " + whereCondOrd;
List<DtbOrdt> orderTestate = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), dtbOrdrSql, DtbOrdt.class, 30);
List<DtbOrdr> orderRows = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), dtbOrdrSql, DtbOrdr.class, 30);
if(orderRows == null) orderRows = new ArrayList<>();
if (orderRows == null) orderRows = new ArrayList<>();
orderTestate = Stream.of(orderTestate)
.distinct()
.toList();
List<MtbColr> mtbColrsToSave = new ArrayList<>();
@@ -251,13 +260,13 @@ public class DistribuzioneColliService {
List<MtbColr> found;
Predicate<MtbColr> qtaCnfPredicate;
if (sourceMtbColr.getFlagQtaCnfFissa().equalsIgnoreCase("N") && flagRaggXQtaCnf.equalsIgnoreCase("S")){
if (sourceMtbColr.getFlagQtaCnfFissa().equalsIgnoreCase("N") && flagRaggXQtaCnf.equalsIgnoreCase("S")) {
qtaCnfPredicate = mtbColr -> Objects.equals(mtbColr.getQtaCnf().setScale(5, RoundingMode.HALF_UP), sourceMtbColr.getQtaCnf().setScale(5, RoundingMode.HALF_UP));
} else {
qtaCnfPredicate = mtbColr -> true;
}
found = Stream.of(groupedMtbColrs)
found = groupedMtbColrs.stream()
.filter(mtbColr -> Objects.equals(mtbColr.getPartitaMag(), sourceMtbColr.getPartitaMag()) &&
Objects.equals(mtbColr.getCodMart(), sourceMtbColr.getCodMart()) &&
Objects.equals(mtbColr.getCodTagl(), sourceMtbColr.getCodTagl()) &&
@@ -269,9 +278,9 @@ public class DistribuzioneColliService {
Objects.equals(mtbColr.getSerColloRif(), sourceMtbColr.getSerColloRif()) &&
qtaCnfPredicate.test(mtbColr)
)
.toList();
.collect(Collectors.toList());
if (found != null && found.size() > 0) {
if (found != null && !found.isEmpty()) {
found.get(0).setQtaCol(found.get(0).getQtaCol().add(sourceMtbColr.getQtaCol()));
found.get(0).setNumCnf(found.get(0).getNumCnf().add(sourceMtbColr.getNumCnf()));
} else {
@@ -312,7 +321,7 @@ public class DistribuzioneColliService {
sourceMtbColr.setQtaCnf(currentMtbAart.getQtaCnf());
} else {
if (sourceMtbColr.getQtaCol().compareTo(BigDecimal.ZERO) > 0 && sourceMtbColr.getNumCnf().compareTo(BigDecimal.ZERO) > 0) {
if (flagRaggXQtaCnf.equalsIgnoreCase("N")){
if (flagRaggXQtaCnf.equalsIgnoreCase("N")) {
sourceMtbColr.setQtaCnf(sourceMtbColr.getQtaCol().divide(sourceMtbColr.getNumCnf(), RoundingMode.HALF_UP));
} else {
//Se la qta_cnf + variabile ed il DISTRIBUISCI_X_QTA_CNF = S allora la qta_cnf deve essere quella presente nel collo
@@ -325,7 +334,7 @@ public class DistribuzioneColliService {
//Prendo tutte le righe d'ordine con quest'articolo / partita
//solo se la partita non è NULL sull'ordine ed è uguale su collo e ordine
List<DtbOrdr> artOrderRowsWithPart = null;
if (flagRaggXQtaCnf.equalsIgnoreCase("S") && "N".equalsIgnoreCase(currentMtbAart.getFlagQtaCnfFissa())){
if (flagRaggXQtaCnf.equalsIgnoreCase("S") && "N".equalsIgnoreCase(currentMtbAart.getFlagQtaCnfFissa())) {
artOrderRowsWithPart = Stream.of(orderRows)
.filter(dtbOrdr -> UtilityString.equalsIgnoreCase(dtbOrdr.getCodMart(), finalSourceMtbColr.getCodMart()) &&
UtilityString.equalsIgnoreCase(dtbOrdr.getPartitaMag(), finalSourceMtbColr.getPartitaMag()) &&
@@ -333,7 +342,7 @@ public class DistribuzioneColliService {
UtilityString.equalsIgnoreCase(dtbOrdr.getCodCol(), finalSourceMtbColr.getCodCol()) &&
Objects.equals(dtbOrdr.getQtaCnf().setScale(5, RoundingMode.HALF_UP), finalSourceMtbColr.getQtaCnf().setScale(5, RoundingMode.HALF_UP)))
.toList();
}else {
} else {
artOrderRowsWithPart = Stream.of(orderRows)
.filter(dtbOrdr -> UtilityString.equalsIgnoreCase(dtbOrdr.getCodMart(), finalSourceMtbColr.getCodMart()) &&
UtilityString.equalsIgnoreCase(dtbOrdr.getPartitaMag(), finalSourceMtbColr.getPartitaMag()) &&
@@ -392,12 +401,12 @@ public class DistribuzioneColliService {
//Prendo tutte le righe d'ordine con quest'articolo / partita
//solo se la partita è NULL sull'ordine
List<DtbOrdr> artOrderRowsNoPart = null;
if (flagRaggXQtaCnf.equalsIgnoreCase("S") && "N".equalsIgnoreCase(currentMtbAart.getFlagQtaCnfFissa())){
if (flagRaggXQtaCnf.equalsIgnoreCase("S") && "N".equalsIgnoreCase(currentMtbAart.getFlagQtaCnfFissa())) {
artOrderRowsNoPart = Stream.of(orderRows)
.filter(dtbOrdr -> UtilityString.equalsIgnoreCase(dtbOrdr.getCodMart(), finalSourceMtbColr.getCodMart()) &&
(dtbOrdr.getPartitaMag() == null) &&
UtilityString.equalsIgnoreCase(dtbOrdr.getCodTagl(), finalSourceMtbColr.getCodTagl()) &&
UtilityString.equalsIgnoreCase(dtbOrdr.getCodCol(), finalSourceMtbColr.getCodCol()) &&
UtilityString.equalsIgnoreCase(dtbOrdr.getCodCol(), finalSourceMtbColr.getCodCol()) &&
Objects.equals(dtbOrdr.getQtaCnf().setScale(5, RoundingMode.HALF_UP), finalSourceMtbColr.getQtaCnf().setScale(5, RoundingMode.HALF_UP)))
.toList();
} else {
@@ -459,7 +468,8 @@ public class DistribuzioneColliService {
}
if (criterioDistribuzione == FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.U) {
if (criterioDistribuzione == FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.U ||
criterioDistribuzione == FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.FASE) {
// Aggiornamento riga ordine: viene impostata la parola chiave USED per indicare che la riga è stata processata
// da un disponsitivo esterno e quindi verrà scaricata successivamente con la chiusura della produzione
@@ -467,7 +477,7 @@ public class DistribuzioneColliService {
//Leggo tutte le righe d'orine interessate e ne modifico il campo SYSTEM_NOTE
final List<DtbOrdr> dtbOrdrToUpdate = Stream.of(mtbColrsToSave)
final List<DtbOrdr> dtbOrdrToUpdate = mtbColrsToSave.stream()
.map(mtbColr -> {
DtbOrdr dtbOrdr = new DtbOrdr();
dtbOrdr.setGestione(filtroDistribuzioneColloDTO.getGestione());
@@ -479,10 +489,10 @@ public class DistribuzioneColliService {
return dtbOrdr;
})
.distinct()
.toList();
.collect(Collectors.toList());
if (dtbOrdrToUpdate != null && dtbOrdrToUpdate.size() > 0) {
if (dtbOrdrToUpdate != null && !dtbOrdrToUpdate.isEmpty()) {
//Creo le testate per ogni ordine trovato nelle righe
List<DtbOrdt> dtbOrdtToUpdate = Stream.of(dtbOrdrToUpdate)
@@ -499,18 +509,19 @@ public class DistribuzioneColliService {
.toList();
if (dtbOrdtToUpdate != null && dtbOrdtToUpdate.size() > 0) {
if (dtbOrdtToUpdate != null && !dtbOrdtToUpdate.isEmpty()) {
//Associo le righe alla testata
Stream.of(dtbOrdtToUpdate)
dtbOrdtToUpdate
.forEach(dtbOrdt -> {
List<DtbOrdr> dtbOrdrs = Stream.of(dtbOrdrToUpdate)
List<DtbOrdr> dtbOrdrs = dtbOrdrToUpdate.stream()
.filter(dtbOrdr -> dtbOrdr.getGestione().equals(dtbOrdt.getGestione()) &&
dtbOrdr.getNumOrd().equals(dtbOrdt.getNumOrd()) &&
dtbOrdr.getDataOrd().equals(dtbOrdt.getDataOrd())).toList();
dtbOrdr.getDataOrd().equals(dtbOrdt.getDataOrd()))
.collect(Collectors.toList());
if (dtbOrdrs != null && dtbOrdrs.size() > 0)
if (dtbOrdrs != null && !dtbOrdrs.isEmpty())
dtbOrdt.getDtbOrdr().addAll(dtbOrdrs);
@@ -564,16 +575,27 @@ public class DistribuzioneColliService {
MtbColt finalSourceMtbColt = sourceMtbColt;
List<DtbOrdr> finalOrderRows = orderRows;
Stream.of(mtbColtByOrders)
List<DtbOrdt> finalOrderTestate = orderTestate;
mtbColtByOrders
.forEach(mtbColt -> {
DtbOrdr dtbOrdr = Stream.of(finalOrderRows)
DtbOrdt dtbOrdt = finalOrderTestate.stream()
.filter(dtbOrdt1 -> dtbOrdt1.getNumOrd().equals(mtbColt.getNumOrd()) &&
dtbOrdt1.getDataOrd().equals(mtbColt.getDataOrd()) &&
dtbOrdt1.getGestione().equals(mtbColt.getGestione()))
.findFirst()
.get();
DtbOrdr dtbOrdr = finalOrderRows.stream()
.filter(dtbOrdr1 -> dtbOrdr1.getNumOrd().equals(mtbColt.getNumOrd()) &&
dtbOrdr1.getDataOrd().equals(mtbColt.getDataOrd()) &&
dtbOrdr1.getGestione().equals(mtbColt.getGestione()))
.findFirst()
.get();
mtbColt.setCodJfas(dtbOrdt.getCodJfas());
mtbColt.setCodMdep(dtbOrdr.getCodMdep());
mtbColt.setCodAnag(dtbOrdr.getCodAnag());
mtbColt.setRifOrd(finalSourceMtbColt.getRifOrd());
@@ -605,6 +627,13 @@ public class DistribuzioneColliService {
entityToSave.addAll(mtbColtByOrders);
break;
case FASE:
List<MtbColt> mtbColtByCodJfas = splitMtbColrsByCodJfas(sourceMtbColt, orderTestate, mtbColrsToSave);
mtbColrsToSave.clear();
entityToSave.addAll(mtbColtByCodJfas);
break;
case U:
case G:
case UP:
@@ -670,10 +699,10 @@ public class DistribuzioneColliService {
entityToSave.add(sourceMtbColt);
List<EntityBase> saveResponse = entityProcessor.processEntityList(entityToSave, true);
List<EntityBase> saveResponse = entityProcessor.processEntityList(entityToSave, skipCommit);
if (saveResponse != null && saveResponse.size() > 0) {
if (saveResponse != null && !saveResponse.isEmpty()) {
for (EntityBase responseEntity : saveResponse) {
if (responseEntity.getException() != null) throw responseEntity.getException();
@@ -734,20 +763,20 @@ public class DistribuzioneColliService {
if (mtbColtSplitted == null) return null;
if (mtbColtSplitted.size() > 0) {
if (!mtbColtSplitted.isEmpty()) {
for (final MtbColt mtbColt : mtbColtSplitted) {
mtbColt.setMtbColr(new ArrayList<>());
List<MtbColr> mtbColrsToAdd = Stream.of(inputMtbColrs)
List<MtbColr> mtbColrsToAdd = inputMtbColrs.stream()
.filter(mtbColr -> mtbColt.getDataOrd().equals(mtbColr.getDataOrd()) &&
mtbColt.getNumOrd().equals(mtbColr.getNumOrd()) &&
mtbColr.getQtaCol().compareTo(BigDecimal.ZERO) > 0)
.toList();
.collect(Collectors.toList());
if (mtbColrsToAdd != null && mtbColrsToAdd.size() > 0) {
Stream.of(mtbColrsToAdd)
if (mtbColrsToAdd != null && !mtbColrsToAdd.isEmpty()) {
mtbColrsToAdd
.forEach(mtbColr -> {
mtbColr.setOperation(OperationType.INSERT_OR_UPDATE);
mtbColt.getMtbColr().add(mtbColr);
@@ -756,8 +785,95 @@ public class DistribuzioneColliService {
}
}
return Stream.of(mtbColtSplitted)
.filter(mtbColt -> mtbColt.getMtbColr().size() > 0).toList();
return mtbColtSplitted.stream()
.filter(mtbColt -> !mtbColt.getMtbColr().isEmpty())
.collect(Collectors.toList());
}
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("num_ord", x.getNumOrd());
put("gestione", x.getGestione());
put("cod_jfas", x.getCodJfas());
}})
.distinct()
.collect(groupingBy(x -> x.get("cod_jfas")));
List<MtbColt> mtbColts = new ArrayList<>();
for (List<HashMap<String, Object>> orders : ordersByCodJfas.values()) {
final List<MtbColr> collect = orders.stream()
.map(x -> inputMtbColrs.stream()
.filter(y -> y.getGestione().equalsIgnoreCase((String) x.get("gestione")) &&
y.getNumOrd().equals(x.get("num_ord")) &&
y.getDataOrd().equals(x.get("data_ord")))
.collect(Collectors.toList()))
.flatMap(Collection::stream)
.peek(x -> x.setNumCollo(null))
.collect(Collectors.toList());
if (!collect.isEmpty()) {
MtbColt clonedMtbColt = (MtbColt) inputMtbColt.clone();
clonedMtbColt.setNumCollo(null);
clonedMtbColt.setMtbColr(collect);
clonedMtbColt.setCodJfas((String) orders.get(0).get("cod_jfas"));
clonedMtbColt.setOperation(OperationType.INSERT_OR_UPDATE);
mtbColts.add(clonedMtbColt);
}
}
return mtbColts;
// List<MtbColt> mtbColtSplitted = Stream.of(inputMtbColrs)
// .distinctBy(mtbColr -> UtilityDate.formatDate(mtbColr.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + mtbColr.getNumOrd() + mtbColr.getGestione())
// .map(mtbColr -> {
// MtbColt mtbColt = new MtbColt();
//
// mtbColt.setDataOrd(mtbColr.getDataOrd());
// mtbColt.setNumOrd(mtbColr.getNumOrd());
// mtbColt.setGestione(mtbColr.getGestione());
//
// mtbColt.setOperation(OperationType.INSERT_OR_UPDATE);
//
// return mtbColt;
// })
// .toList();
//
// if (mtbColtSplitted == null) return null;
//
// if (!mtbColtSplitted.isEmpty()) {
//
// for (final MtbColt mtbColt : mtbColtSplitted) {
//
// mtbColt.setMtbColr(new ArrayList<>());
//
// List<MtbColr> mtbColrsToAdd = inputMtbColrs.stream()
// .filter(mtbColr -> mtbColt.getDataOrd().equals(mtbColr.getDataOrd()) &&
// mtbColt.getNumOrd().equals(mtbColr.getNumOrd()) &&
// mtbColr.getQtaCol().compareTo(BigDecimal.ZERO) > 0)
// .collect(Collectors.toList());
//
// if (mtbColrsToAdd != null && !mtbColrsToAdd.isEmpty()) {
// mtbColrsToAdd
// .forEach(mtbColr -> {
// mtbColr.setOperation(OperationType.INSERT_OR_UPDATE);
// mtbColt.getMtbColr().add(mtbColr);
// });
// }
// }
// }
//
// return mtbColtSplitted.stream()
// .filter(mtbColt -> !mtbColt.getMtbColr().isEmpty())
// .collect(Collectors.toList());
}
}

View File

@@ -24,6 +24,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
@Service
@@ -319,7 +320,7 @@ public class PackagesImportService {
.setCodTcol(details[5])
.setFornitore(details[6])
.setColliBancale(new Integer(details[7]))
.setDataCollo(UtilityString.parseDate(details[8]))
.setDataCollo(UtilityString.parseLocalDate(details[8]))
.setDataOrd(UtilityString.parseDate(details[10]))
.setNumOrd(new Integer(details[11]))
.setCodJfas(details[12])
@@ -340,7 +341,7 @@ public class PackagesImportService {
public List<MtbColt> importColliDaProduzione(List<ImportColliDaProduzioneDTO> importColliList) throws Exception {
List<MtbColt> savedMtbColt = new ArrayList<>();
Date dataVers = new Date();
LocalDateTime dataVers = UtilityLocalDate.getNowTime();
for (ImportColliDaProduzioneDTO importColliProd : importColliList) {
savedMtbColt.addAll(importColloDaProduzione(importColliProd, dataVers));
@@ -348,7 +349,7 @@ public class PackagesImportService {
//CHIAMATA A PROCESS ENTITY LIST
if (savedMtbColt.size() == 0) {
if (savedMtbColt.isEmpty()) {
throw new Exception("Non ci sono colli creati");
}
@@ -356,14 +357,14 @@ public class PackagesImportService {
}
public List<MtbColt> importColloDaProduzione(ImportColliDaProduzioneDTO importColliProd, Date dataVers) throws Exception {
public List<MtbColt> importColloDaProduzione(ImportColliDaProduzioneDTO importColliProd, LocalDateTime dataVers) throws Exception {
Connection connection = multiDBTransactionManager.getPrimaryConnection();
String serCollo = setupGest.getImportSetup(connection, "COLLI", "COLLI_DA_PRODUZIONE", "SER_COLLO");
String flagStart = UtilityString.streNull(setupGest.getImportSetup(connection, "COLLI", "COLLI_DA_PRODUZIONE", "AUTO_START"));
String flagStop = UtilityString.streNull(setupGest.getImportSetup(connection, "COLLI", "COLLI_DA_PRODUZIONE", "AUTO_STOP"));
dataVers = UtilityDate.RelativeDateTime(dataVers, UtilityDate.DaysAfter(dataVers, importColliProd.getDataCollo()));
dataVers = importColliProd.getDataCollo().atTime(dataVers.getHour(), dataVers.getMinute(), dataVers.getSecond());
String query = null;
if (importColliProd.getGestione().equalsIgnoreCase("L")) {
@@ -404,7 +405,7 @@ public class PackagesImportService {
}
mtbColt.setCodMdep(codMdep)
.setPreparatoDa(requestDataDTO.getUsername())
.setDataCollo(UtilityLocalDate.localDateFromDate(importColliProd.getDataCollo()))
.setDataCollo(importColliProd.getDataCollo())
.setSerCollo(serCollo)
.setCodTcol(importColliProd.getCodTcol())
.setPesoKg(importColliProd.getPesoLordo())
@@ -413,7 +414,7 @@ public class PackagesImportService {
.setNumOrd(importColliProd.getNumOrd())
.setGestione(importColliProd.getGestione())
.setSegno(1)
.setDataVers(UtilityLocalDate.localDateTimeFromDate(dataVers))
.setDataVers(dataVers)
.setCodJfas(importColliProd.getCodJfas())
.setAnnotazioni(importColliProd.getAnnotazioni());
@@ -448,7 +449,7 @@ public class PackagesImportService {
MtbColt mtbColtV = new MtbColt()
.setGestione("V")
.setCodMdep(codMdep)
.setDataCollo(UtilityLocalDate.localDateFromDate(importColliProd.getDataCollo()))
.setDataCollo(importColliProd.getDataCollo())
.setSerCollo(serCollo)
.setSegno(-1)
.setPesoKg(importColliProd.getPesoLordo())
@@ -456,7 +457,7 @@ public class PackagesImportService {
.setCodTcol(importColliProd.getCodTcol())
.setPreparatoDa(requestDataDTO.getUsername())
.setAnnotazioni(importColliProd.getFornitore())
.setDataVers(UtilityLocalDate.localDateTimeFromDate(dataVers))
.setDataVers(dataVers)
.setMtbColr(new ArrayList<>());
mtbColtV.setOperation(OperationType.INSERT);
entityBases.add(mtbColtV);
@@ -565,7 +566,7 @@ public class PackagesImportService {
ordSteps = new DtbOrdSteps()
.setDataIniz(dataIniz)
.setDataFine(dataVers)
.setDataFine(UtilityLocalDate.localDateTimeToDate(dataVers))
.setCodJfas(importColliProd.getCodJfas())
.setIdRiga(idRiga)
.setIdStep(maxStep);
@@ -576,7 +577,7 @@ public class PackagesImportService {
entityBases.add(ordT);
} else if (maxStep > 0 && dataFineStep != null) {
ordSteps = new DtbOrdSteps()
.setDataFine(dataVers)
.setDataFine(UtilityLocalDate.localDateTimeToDate(dataVers))
.setCodJfas(importColliProd.getCodJfas())
.setIdRiga(idRiga)
.setIdStep(maxStep);

View File

@@ -5,7 +5,6 @@ import it.integry.annotations.PostContextConstruct;
import it.integry.common.var.CommonConstants;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.production.dto.OrdineLavorazioneDTO;
import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoDTO;
import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoGroupMercDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
@@ -489,7 +488,7 @@ public class ProductionOrderDataHandlerService {
" jtb_cicl.unt_mis_prod, " +
" mtb_tcol.descrizione," +
" mtb_aart.flag_tracciabilita," +
" setupCaricoImmediato.flag_carico_scarico_immediato " +
" setupCaricoImmediato.flag_carico_scarico_immediato, dtb_ordt.data_cons_prod_max " +
" ORDER BY dtb_ordr.data_ord, dtb_ordr.num_ord, dtb_ordr.pos_riga, dtb_ordt.num_ord";
}

View File

@@ -52,7 +52,7 @@ public class WMSColliController {
if (useNewDistribution)
response.setEntityList(wmsColliService.distribuisciUL(filtroDistribuzioneColloDTO));
response.setEntityList(wmsColliService.distribuisciUL(filtroDistribuzioneColloDTO, false));
else
response.setEntityList(logisticService.distribuzioneRigheCollo(filtroDistribuzioneColloDTO));

View File

@@ -43,7 +43,7 @@ public class WMSColliService {
@Autowired
private DistribuzioneColliService distribuzioneColliService;
public List<MtbColt> distribuisciUL(FiltroDistribuzioneColloDTO filtroDistribuzioneColloDTO) throws Exception {
public List<MtbColt> distribuisciUL(FiltroDistribuzioneColloDTO filtroDistribuzioneColloDTO, boolean skipCommit) throws Exception {
MtbColt sourceMtbColt = new MtbColt()
.setNumCollo(filtroDistribuzioneColloDTO.getNumCollo())
.setGestione(filtroDistribuzioneColloDTO.getGestione())
@@ -54,7 +54,7 @@ public class WMSColliService {
sourceMtbColt.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(sourceMtbColt, multiDBTransactionManager);
return distribuzioneColliService.distribuzioneRigheColloNew(filtroDistribuzioneColloDTO);
return distribuzioneColliService.distribuzioneRigheColloNew(filtroDistribuzioneColloDTO, skipCommit);
}
public MtbColt assegnaLottoSuColloScarico(MtbColt sourceMtbColt) throws Exception {

View File

@@ -0,0 +1,14 @@
package it.integry.ems.retail.wms.dto;
public class CloseUDCLavorazioneRequestDTO extends CloseUDCRequestDTO {
private boolean createDocuments;
private String documentCodDtip;
public boolean isCreateDocuments() {
return createDocuments;
}
public String getDocumentCodDtip() {
return documentCodDtip;
}
}

View File

@@ -0,0 +1,20 @@
package it.integry.ems.retail.wms.dto;
public class CloseUDSLavorazioneRequestDTO extends CloseUDSRequestDTO {
private boolean createDocument;
private String documentCodDtip;
private String documentCodAnag;
public boolean isCreateDocument() {
return createDocument;
}
public String getDocumentCodDtip() {
return documentCodDtip;
}
public String getDocumentCodAnag() {
return documentCodAnag;
}
}

View File

@@ -0,0 +1,17 @@
package it.integry.ems.retail.wms.dto;
import it.integry.ems_model.entity.DtbDoct;
public class CloseUDSLavorazioneResponseDTO extends CloseUDSResponseDTO {
private DtbDoct generatedDocument;
public DtbDoct getGeneratedDocument() {
return generatedDocument;
}
public CloseUDSLavorazioneResponseDTO setGeneratedDocument(DtbDoct generatedDocument) {
this.generatedDocument = generatedDocument;
return this;
}
}

View File

@@ -1,5 +1,6 @@
package it.integry.ems.retail.wms.dto;
import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
import it.integry.ems_model.entity.MtbColt;
public class CloseUDSRequestDTO {
@@ -7,6 +8,7 @@ public class CloseUDSRequestDTO {
private String orderCodMdep;
private MtbColt mtbColt;
private FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum criterioDistribuzione = FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.U;
public String getOrderCodMdep() {
return orderCodMdep;
@@ -15,4 +17,8 @@ public class CloseUDSRequestDTO {
public MtbColt getMtbColt() {
return mtbColt;
}
public FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum getCriterioDistribuzione() {
return criterioDistribuzione;
}
}

View File

@@ -50,14 +50,14 @@ public class WMSLavorazioneController {
@RequestMapping(value = "closeUDC", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse closeUDC(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody CloseUDCRequestDTO closeUDCRequestDTO) throws Exception {
@RequestBody CloseUDCLavorazioneRequestDTO closeUDCRequestDTO) throws Exception {
return ServiceRestResponse.createPositiveResponse(wmsLavorazioneService.closeUDC(closeUDCRequestDTO));
}
@RequestMapping(value = "closeUDS", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse closeUDS(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody CloseUDSRequestDTO closeUDSRequestDTO) throws Exception {
@RequestBody CloseUDSLavorazioneRequestDTO closeUDSRequestDTO) throws Exception {
return ServiceRestResponse.createPositiveResponse(wmsLavorazioneService.closeUDS(closeUDSRequestDTO));
}

View File

@@ -14,6 +14,8 @@ import it.integry.ems.retail.wms.exceptions.UDSQuantityOverflowException;
import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO;
import it.integry.ems.retail.wms.generic.service.WMSGenericService;
import it.integry.ems.retail.wms.generic.service.WMSGiacenzaULService;
import it.integry.ems.rules.businessLogic.LoadColliService;
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.user.UserSession;
@@ -72,6 +74,9 @@ public class WMSLavorazioneService {
@Autowired
private SetupGest setupGest;
@Autowired
private LoadColliService loadColliService;
public MtbColt createUDS(CreateUDSRequestDTO createUDSRequestDTO) throws Exception {
if (!userSession.isAttivo()) {
@@ -191,36 +196,62 @@ public class WMSLavorazioneService {
}
public CloseUDSResponseDTO closeUDS(CloseUDSRequestDTO closeUDSRequestDTO) throws Exception {
public CloseUDSLavorazioneResponseDTO closeUDS(CloseUDSLavorazioneRequestDTO closeUDSRequestDTO) throws Exception {
if (!userSession.isAttivo()) {
throw new UsernameNotFoundException("Utente " + userSession.getUsername() + " non riconoscuto!");
}
MtbColt mtbColtToClose = closeUDSRequestDTO.getMtbColt();
CloseUDSLavorazioneResponseDTO response = new CloseUDSLavorazioneResponseDTO();
if (wmsGenericService.canULBeDeleted(mtbColtToClose)) {
wmsGenericService.deleteUL(mtbColtToClose);
return new CloseUDSResponseDTO().setDeleted(true);
try {
MtbColt mtbColtToClose = closeUDSRequestDTO.getMtbColt();
if (wmsGenericService.canULBeDeleted(mtbColtToClose)) {
wmsGenericService.deleteUL(mtbColtToClose);
response.setDeleted(true);
return response;
}
mtbColtToClose.getMtbColr().clear();
mtbColtToClose.setOraFinePrep(new Date())
.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(mtbColtToClose, multiDBTransactionManager);
List<MtbColt> distributedUDS = wmsColliService.distribuisciUL(new FiltroDistribuzioneColloDTO()
.setDataCollo(mtbColtToClose.getDataCollo())
.setSerCollo(mtbColtToClose.getSerCollo())
.setGestione(mtbColtToClose.getGestione())
.setNumCollo(mtbColtToClose.getNumCollo())
.setCriterioDistribuzione(closeUDSRequestDTO.getCriterioDistribuzione().getText()), true);
response.setSaved(true)
.setGeneratedMtbColts(distributedUDS);
if (closeUDSRequestDTO.isCreateDocument()) {
LoadColliDTO loadColliDTO = new LoadColliDTO();
loadColliDTO
.setColli(distributedUDS)
.setCodAnag(closeUDSRequestDTO.getDocumentCodAnag())
.setCodDtip(closeUDSRequestDTO.getDocumentCodDtip())
.setGestione(GestioneEnum.LAVORAZIONE.getText())
.setFlagLeggiDatiOrd(false)
.setCodMdep(closeUDSRequestDTO.getMtbColt().getCodMdep());
DtbDoct documentToSave = loadColliService.createDocFromColli(multiDBTransactionManager, loadColliDTO);
entityProcessor.processEntity(documentToSave, true, multiDBTransactionManager);
UtilityEntity.throwEntityException(documentToSave);
response.setGeneratedDocument(documentToSave);
}
} catch (Exception e) {
multiDBTransactionManager.rollbackAll();
throw e;
}
mtbColtToClose.getMtbColr().clear();
mtbColtToClose.setOraFinePrep(new Date())
.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(mtbColtToClose, multiDBTransactionManager);
FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum criterioDistribuzione = FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.U;
List<MtbColt> distributedUDS = wmsColliService.distribuisciUL(new FiltroDistribuzioneColloDTO()
.setDataCollo(mtbColtToClose.getDataCollo())
.setSerCollo(mtbColtToClose.getSerCollo())
.setGestione(mtbColtToClose.getGestione())
.setNumCollo(mtbColtToClose.getNumCollo())
.setCriterioDistribuzione(criterioDistribuzione.getText()));
return new CloseUDSResponseDTO()
.setSaved(true)
.setGeneratedMtbColts(distributedUDS);
return response;
}
@@ -544,7 +575,7 @@ public class WMSLavorazioneService {
}
public CloseUDCResponseDTO closeUDC(CloseUDCRequestDTO closeUDCRequestDTO) throws Exception {
public CloseUDCResponseDTO closeUDC(CloseUDCLavorazioneRequestDTO closeUDCRequestDTO) throws Exception {
if (!userSession.isAttivo()) {
throw new UsernameNotFoundException("Utente " + userSession.getUsername() + " non riconoscuto!");
}

View File

@@ -199,7 +199,7 @@ public class WMSSpedizioneService {
.setSerCollo(mtbColtToClose.getSerCollo())
.setGestione(mtbColtToClose.getGestione())
.setNumCollo(mtbColtToClose.getNumCollo())
.setCriterioDistribuzione(criterioDistribuzione.getText()));
.setCriterioDistribuzione(criterioDistribuzione.getText()), false);
boolean generaDoc = setupGest.getSetupBoolean("PICKING", "SPEDIZIONE", "GENERA_DOC");
@@ -526,7 +526,7 @@ public class WMSSpedizioneService {
.setSerCollo(mtbColt.getSerCollo())
.setGestione(mtbColt.getGestione())
.setNumCollo(mtbColt.getNumCollo())
.setCriterioDistribuzione(FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.U.getText()));
.setCriterioDistribuzione(FiltroDistribuzioneColloDTO.CriterioDistribuzioneEnum.U.getText()), false);
mtbColtListToReturn.addAll(distributedUDS);
}