Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
This commit is contained in:
@@ -14,7 +14,7 @@ public class ExecutorServiceConfig {
|
||||
|
||||
private final int corePoolSize = Runtime.getRuntime().availableProcessors();
|
||||
private final int maxPoolSize = (int) (corePoolSize * 1.5f);
|
||||
private final int queueSize = 500;
|
||||
private final int queueSize = 1_000_000;
|
||||
|
||||
@Bean
|
||||
public ExecutorService taskExecutor() {
|
||||
|
||||
@@ -60,7 +60,11 @@ public class DbmsChangeTracker {
|
||||
createConnection();
|
||||
} catch (SQLException e) {
|
||||
try {
|
||||
integryConnection.close();
|
||||
try {
|
||||
integryConnection.close();
|
||||
} catch (Exception ex) {
|
||||
//ignore
|
||||
}
|
||||
createConnection();
|
||||
} catch (SQLException ex) {
|
||||
logger.error("Unable to reestablish DB connection for Change Tracker", ex);
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package it.integry.ems.migration.model;
|
||||
|
||||
import it.integry.ems.migration._base.BaseMigration;
|
||||
import it.integry.ems.migration._base.MigrationModelInterface;
|
||||
|
||||
public class Migration_20251124164630 extends BaseMigration implements MigrationModelInterface {
|
||||
|
||||
@Override
|
||||
public void up() throws Exception {
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
createOrUpdateFunction("getMaterialiDistinta",
|
||||
"CREATE FUNCTION [dbo].[getMaterialiDistinta](@codProd VARCHAR(15), @explodeSemilavorati BIT)\n" +
|
||||
" RETURNS TABLE\n" +
|
||||
" AS\n" +
|
||||
" RETURN(WITH distinta AS (SELECT cod_prod,\n" +
|
||||
" CONVERT(VARCHAR(15), NULL) AS cod_parent,\n" +
|
||||
" cod_prod AS cod_mart,\n" +
|
||||
" jtb_cicl.descrizione_prod AS descrizione,\n" +
|
||||
" jtb_cicl.descrizione_estesa,\n" +
|
||||
" CONVERT(VARCHAR(3), unt_mis_prod) AS unt_mis_prod,\n" +
|
||||
" CONVERT(NUMERIC(20, 5), rap_conv_prod) AS rap_conv_prod,\n" +
|
||||
" CONVERT(NUMERIC(20, 5), jtb_cicl.qta_prod) AS qta_prod,\n" +
|
||||
" CONVERT(NUMERIC(20, 5), jtb_cicl.qta_prod) AS qta_dist,\n" +
|
||||
" 1 AS livello,\n" +
|
||||
" FORMAT(ROW_NUMBER() OVER ( ORDER BY cod_prod), '00000') AS item_id,\n" +
|
||||
" CONVERT(VARCHAR(15), cod_prod) AS cod_prod_pri,\n" +
|
||||
" CAST(0 AS BIT) AS ricorsione,\n" +
|
||||
" CONVERT(NUMERIC(5, 2), 0) AS perc_sfrido,\n" +
|
||||
" CONVERT(INT, NULL) AS num_fase,\n" +
|
||||
" CONVERT(VARCHAR(1), NULL) AS flag_pri,\n" +
|
||||
" CONVERT(VARCHAR(1024), NULL) AS note,\n" +
|
||||
" CAST(1 AS BIT) AS is_root,\n" +
|
||||
" CAST(0 AS BIT) AS is_foglia\n" +
|
||||
" FROM jtb_cicl\n" +
|
||||
" WHERE (@codProd IS NULL OR cod_prod = @codProd)\n" +
|
||||
" UNION ALL\n" +
|
||||
" SELECT distinta.cod_prod,\n" +
|
||||
" CONVERT(VARCHAR(15), jtb_dist_mate.cod_prod) AS cod_parent,\n" +
|
||||
" jtb_dist_mate.cod_mart,\n" +
|
||||
" jtb_dist_mate.descrizione,\n" +
|
||||
" jtb_dist_mate.descrizione_estesa,\n" +
|
||||
" CONVERT(VARCHAR(3), jtb_dist_mate.unt_mis_dist) AS unt_mis_prod,\n" +
|
||||
" CONVERT(NUMERIC(20, 5), jtb_dist_mate.rap_conv_dist) AS rap_conv_prod,\n" +
|
||||
" CONVERT(NUMERIC(20, 5),\n" +
|
||||
" ((jtb_dist_mate.qta_std * (1 + jtb_dist_mate.perc_sfrido / 100)) /\n" +
|
||||
" (distinta.qta_prod)) * distinta.qta_prod) AS qta_prod,\n" +
|
||||
" CONVERT(NUMERIC(20, 5), NULL),\n" +
|
||||
" distinta.livello + 1,\n" +
|
||||
" distinta.item_id + '_' +\n" +
|
||||
" FORMAT(\n" +
|
||||
" ROW_NUMBER() OVER ( ORDER BY jtb_dist_mate.flag_pri DESC, jtb_dist_mate.num_fase, id_riga ),\n" +
|
||||
" '00000') AS item_id,\n" +
|
||||
" CONVERT(VARCHAR(15), distinta.cod_mart) AS cod_prod_pri,\n" +
|
||||
" CAST(CASE\n" +
|
||||
" WHEN jtb_dist_mate.cod_mart = jtb_dist_mate.cod_prod THEN 1\n" +
|
||||
" ELSE 0 END AS BIT) AS ricorsione,\n" +
|
||||
" jtb_dist_mate.perc_sfrido,\n" +
|
||||
" jtb_dist_mate.num_fase,\n" +
|
||||
" CONVERT(VARCHAR(1), jtb_dist_mate.flag_pri) AS flag_pri,\n" +
|
||||
" CONVERT(VARCHAR(1024), jtb_dist_mate.note) AS note,\n" +
|
||||
" CAST(0 AS BIT) AS is_root,\n" +
|
||||
" CAST(IIF(jtb_dist_mate.flag_pri = 's', 0, 1) AS BIT) AS is_foglia\n" +
|
||||
" FROM jtb_dist_mate\n" +
|
||||
" INNER JOIN distinta ON jtb_dist_mate.cod_prod = distinta.cod_mart\n" +
|
||||
" INNER JOIN mtb_aart ON mtb_aart.cod_mart = jtb_dist_mate.cod_mart\n" +
|
||||
" WHERE distinta.ricorsione = 0\n" +
|
||||
" AND (distinta.is_root = 1 OR distinta.flag_pri = 'S' OR @explodeSemilavorati = 1))\n" +
|
||||
" SELECT cod_prod,\n" +
|
||||
" cod_parent,\n" +
|
||||
" cod_mart,\n" +
|
||||
" descrizione,\n" +
|
||||
" descrizione_estesa,\n" +
|
||||
" unt_mis_prod,\n" +
|
||||
" rap_conv_prod,\n" +
|
||||
" ISNULL(qta_dist, qta_prod) AS qta_prod,\n" +
|
||||
" livello,\n" +
|
||||
" item_id,\n" +
|
||||
" cod_prod_pri,\n" +
|
||||
" perc_sfrido,\n" +
|
||||
" num_fase,\n" +
|
||||
" DENSE_RANK() OVER ( PARTITION BY cod_prod ORDER BY cod_prod_pri ) - 1 + num_fase AS num_fase_calc,\n" +
|
||||
" flag_pri,\n" +
|
||||
" note,\n" +
|
||||
" is_root,\n" +
|
||||
" is_foglia\n" +
|
||||
" FROM distinta)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void down() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package it.integry.ems.rules.completing;
|
||||
|
||||
import it.integry.ems._context.ApplicationContextProvider;
|
||||
import it.integry.ems.dynamic_cache.EntityCacheComponent;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.service.ComuniService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
@@ -227,4 +229,19 @@ public class AnagRules extends QueryRules {
|
||||
|
||||
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
|
||||
}
|
||||
|
||||
|
||||
public static boolean completeSetupInsDest(Connection connection) {
|
||||
final EntityCacheComponent entityCacheComponent = ApplicationContextProvider.getApplicationContext().getBean(EntityCacheComponent.class);
|
||||
|
||||
return entityCacheComponent.<StbGestSetup>getCachedEntitiesStream(connection.getIntegryCustomerDB(), StbGestSetup.ENTITY,
|
||||
x -> x.getGestName().equalsIgnoreCase("GTB_ANAG") &&
|
||||
x.getSection().equalsIgnoreCase("SETUP") &&
|
||||
x.getKeySection().equalsIgnoreCase("INSERISCI_DEST_CLIE"))
|
||||
.map(x -> "S".equalsIgnoreCase(x.getValue()))
|
||||
.findFirst()
|
||||
.orElse(false);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -69,6 +69,10 @@ public class EntityProcessor {
|
||||
return processEntity(entity, false, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
public <T> T processEntity(EntityInterface entity, MultiDBTransactionManager multiDBTransactionManager, RequestDataDTO requestDataDTO) throws Exception {
|
||||
return (T) processEntity(entity, false, true, requestDataDTO.getUsername(), multiDBTransactionManager, requestDataDTO);
|
||||
}
|
||||
|
||||
public <T> T processEntity(EntityInterface entity, MultiDBTransactionManager multiDBTransactionManager, boolean completeEntity) throws Exception {
|
||||
return processEntity(entity, false, multiDBTransactionManager, completeEntity);
|
||||
}
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
package it.integry.ems.service.comuni.controller;
|
||||
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.comuni.dto.SavePositionRequestDTO;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.exceptions.ComuniException;
|
||||
import it.integry.ems.service.comuni.service.ComuniService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -20,18 +25,24 @@ public class ComuniController {
|
||||
@Autowired
|
||||
private ComuniService comuniService;
|
||||
|
||||
@Autowired
|
||||
private MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
@Autowired
|
||||
private RequestDataDTO requestDataDTO;
|
||||
|
||||
@PostMapping(value = "savePosition")
|
||||
public ServiceRestResponse savePosition(@RequestParam(CommonConstants.PROFILE_DB) String config,
|
||||
@RequestBody SavePositionRequestDTO request) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.savePosition(request));
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.savePosition(multiDBTransactionManager, request, requestDataDTO));
|
||||
}
|
||||
|
||||
@PostMapping(value = "retrievePosition")
|
||||
public ServiceRestResponse retrievePosition(@RequestParam(CommonConstants.PROFILE_DB) String config,
|
||||
@RequestBody String id) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.retrievePosition(id));
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.retrievePosition(multiDBTransactionManager, requestDataDTO, id));
|
||||
}
|
||||
|
||||
@PostMapping(value = "infoComuni")
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package it.integry.ems.service.comuni.service;
|
||||
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.comuni.base.CapCittaProv;
|
||||
import it.integry.ems.service.comuni.base.ComuniSearchableFields;
|
||||
import it.integry.ems.service.comuni.dto.SavePositionRequestDTO;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.exceptions.ComuniException;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.entity.StbPosizioni;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.service.comuni.base.CapCittaProv;
|
||||
import it.integry.ems.service.comuni.base.ComuniSearchableFields;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.exceptions.ComuniException;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Scope("request")
|
||||
public class ComuniService {
|
||||
|
||||
@Autowired
|
||||
@@ -35,14 +34,11 @@ public class ComuniService {
|
||||
@Autowired
|
||||
private EntityProcessor entityProcessor;
|
||||
|
||||
@Autowired
|
||||
private MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
public List<Comune> getComuni() {
|
||||
return unitaTerritorialiService.getComuni();
|
||||
}
|
||||
|
||||
public StbPosizioni savePosition(SavePositionRequestDTO savePositionRequestDTO) throws Exception {
|
||||
public StbPosizioni savePosition(MultiDBTransactionManager multiDBTransactionManager, SavePositionRequestDTO savePositionRequestDTO, RequestDataDTO requestDataDTO) throws Exception {
|
||||
StbPosizioni position = new StbPosizioni()
|
||||
.setCitta(savePositionRequestDTO.getCitta())
|
||||
.setIndirizzo(savePositionRequestDTO.getIndirizzo())
|
||||
@@ -53,17 +49,17 @@ public class ComuniService {
|
||||
.setLng(BigDecimal.valueOf(savePositionRequestDTO.getLng()));
|
||||
|
||||
position.setOperation(OperationType.INSERT);
|
||||
entityProcessor.processEntity(position, multiDBTransactionManager);
|
||||
entityProcessor.processEntity(position, multiDBTransactionManager, requestDataDTO);
|
||||
|
||||
position.setOperation(OperationType.SELECT_OBJECT);
|
||||
return position;
|
||||
}
|
||||
|
||||
public StbPosizioni retrievePosition(String id) throws Exception {
|
||||
public StbPosizioni retrievePosition(MultiDBTransactionManager multiDBTransactionManager, RequestDataDTO requestDataDTO, String id) throws Exception {
|
||||
StbPosizioni position = new StbPosizioni().setId(Long.valueOf(id));
|
||||
|
||||
position.setOperation(OperationType.SELECT_OBJECT);
|
||||
entityProcessor.processEntity(position, multiDBTransactionManager);
|
||||
entityProcessor.processEntity(position, multiDBTransactionManager, requestDataDTO);
|
||||
|
||||
return position;
|
||||
}
|
||||
|
||||
@@ -333,10 +333,10 @@ public class GeneraOrdLav {
|
||||
.setFlagEvasoProd(flagEvasoProd != null ? flagEvasoProd.getValue().toString() : null)
|
||||
.setGeneraOrdLavDaProd(dtbOrdt.isGeneraOrdLavDaProd());
|
||||
|
||||
if (row.getFlagSospesoOrdl() !=null) {
|
||||
if (row.getFlagSospesoOrdl() != null) {
|
||||
ordT.setFlagSospeso(row.getFlagSospesoOrdl());
|
||||
}
|
||||
if (row.getRifOrdOrdl() !=null) {
|
||||
if (row.getRifOrdOrdl() != null) {
|
||||
ordT.setRifOrd(row.getRifOrdOrdl());
|
||||
}
|
||||
|
||||
@@ -1477,7 +1477,7 @@ public class GeneraOrdLav {
|
||||
}
|
||||
|
||||
|
||||
if (dataInizProdOld != null && dataInizNew != null && dataInizProdOld != EmsRestConstants.LOCAL_DATE_NULL && dataInizNew != EmsRestConstants.LOCAL_DATE_NULL){
|
||||
if (dataInizProdOld != null && dataInizNew != null && dataInizProdOld != EmsRestConstants.LOCAL_DATE_NULL && dataInizNew != EmsRestConstants.LOCAL_DATE_NULL) {
|
||||
Integer ggDiff = Math.toIntExact(UtilityLocalDate.daysAfterDate(dataInizProdOld, dataInizNew));
|
||||
if (ggDiff != 0) {
|
||||
sql = "SELECT * FROM dtb_ordr";
|
||||
@@ -1542,7 +1542,7 @@ public class GeneraOrdLav {
|
||||
|
||||
BigDecimal qtaProdOld = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
BigDecimal qtaProdNew = qtaProd.multiply(rapConv);
|
||||
BigDecimal moltiplicatore = qtaProdNew.divide(qtaProdOld, 5);
|
||||
BigDecimal moltiplicatore = qtaProdNew.divide(qtaProdOld, 5, RoundingMode.HALF_UP);
|
||||
|
||||
if (!moltiplicatore.equals(BigDecimal.ONE)) {
|
||||
sql = "SELECT * FROM dtb_ordr";
|
||||
|
||||
@@ -482,7 +482,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
|
||||
super(logger);
|
||||
}
|
||||
|
||||
public DtbOrdt(String gestione, LocalDate dataOrd,Integer numOrd) {
|
||||
public DtbOrdt(String gestione, LocalDate dataOrd, Integer numOrd) {
|
||||
super(logger);
|
||||
this.gestione = gestione;
|
||||
this.dataOrd = UtilityLocalDate.localDateToDate(dataOrd);
|
||||
@@ -1789,7 +1789,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
|
||||
|
||||
@Override
|
||||
public void checkPreSave() throws Exception {
|
||||
switch(getOperation()) {
|
||||
switch (getOperation()) {
|
||||
case NO_OP:
|
||||
case SELECT_OBJECT:
|
||||
case SELECT:
|
||||
@@ -1935,7 +1935,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
if(hashCodeKey() != other.hashCodeKey())
|
||||
if (hashCodeKey() != other.hashCodeKey())
|
||||
return false;
|
||||
|
||||
return getDataOrd().equals(other.getDataOrd()) && getGestione().equals(other.getGestione()) && Objects.equals(getNumOrd(), other.getNumOrd());
|
||||
@@ -1953,4 +1953,17 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
|
||||
public int hashCode() {
|
||||
return Objects.hash(getDataOrd(), getGestione(), getNumOrd(), getAcconto(), getActivityId(), getActivityTypeId(), getAspettoBeni(), getCausaleTrasp(), getCodAbi(), getCodAnag(), getCodAuto(), getCodBanc(), getCodBancAzi(), getCodCab(), getCodDgrpArt(), getCodDivi(), getCodEtic(), getCodFornTd(), getCodJcom(), getCodJfas(), getCodMdep(), getCodPaga(), getCodProd(), getCodTcolUi(), getCodTcolUl(), getCodVage(), getCodVage2(), getCodVdes(), getCodVvet(), getCodVvet2(), getCodVzon(), getColliPedana(), getCompilatoDa(), getControllatoDa(), getDataConsProd(), getDataConsProdMax(), getDataEsportazione(), getDataConferma(), getDataInizProd(), getDataInizTrasp(), getDataInsOrd(), getDataOrdRif(), getRifDataOrd(), getDataRicezione(), getDataRifScad(), getDataUltMod(), getDescrEstesaProd(), getDescrizionePaga(), getDescrizioneProd(), getEanFidelity(), getFlagAnnulla(), getFlagEscRoyal(), getFlagEvasoForzato(), getFlagEvasoProd(), getFlagPrzScontati(), getFlagSospeso(), getFlagTipologia(), getGestioneRif(), getItemId(), getListino(), getLivello(), getMezzo(), getModificatoDa(), getNettoMerce(), getNolo(), getNolo2(), getNote(), getNumColli(), getNumCons(), getNumFase(), getNumOrdProvv(), getNumOrdRif(), getRifNumOrd(), getPartitaMag(), getPercEsclStat(), getPersonaRif(), getPeso(), getPorto(), getQtaEvasaProd(), getQtaPrenotataRep(), getQtaProd(), getRapConvProd(), getRfid(), getRifOrd(), getRigaOrdRif(), getSconto1(), getSconto2(), getSconto3(), getSconto4(), getSerie(), getTermCons(), getTipoAnag(), getTotFasi(), getTotImponib(), getTotIva(), getTotMerce(), getTotOmaggi(), getTotProvvig(), getUntMisProd(), getFlagPrzIva(), getNoteConferma(), getCodJflav(), getTarga(), getPostiPallet(), getFlagBudget(), getDataConsRich(), getNoteExport(), getNumCnfProd(), getCodLingua(), getCambio(), getUserName(), getFlagTd(), getGestisciStralciOrdV(), getIdViaggioTestata(), getExplodeKit(), getGestisciOrdLavTx(), getOrdTrasf(), isGeneraOrdLavDaProd());
|
||||
}
|
||||
|
||||
public void clearChilds() {
|
||||
setDtbOrdr(new ArrayList<>());
|
||||
setDtbOrds(new ArrayList<>());
|
||||
setDtbOrdL(new ArrayList<>());
|
||||
setDtbOrdMacc(new ArrayList<>());
|
||||
setDtbOrdSteps(new ArrayList<>());
|
||||
setDtbOrdCq(new ArrayList<>());
|
||||
setDtbOrdCqr(new ArrayList<>());
|
||||
setJrlDisOrd(new ArrayList<>());
|
||||
setDrlOrdAttached(new ArrayList<>());
|
||||
setArlSchaccOrd(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,13 @@ package it.integry.googleCloudApi.controller;
|
||||
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@@ -13,6 +16,9 @@ import java.math.BigDecimal;
|
||||
@Scope("request")
|
||||
public class GeocodingController {
|
||||
|
||||
@Autowired
|
||||
private MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
@Autowired
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
@@ -35,7 +41,7 @@ public class GeocodingController {
|
||||
@RequestParam BigDecimal lat,
|
||||
@RequestParam BigDecimal lng) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(geocodingService.getPositionFromCoords(lat, lng));
|
||||
return ServiceRestResponse.createPositiveResponse(geocodingService.getPositionFromCoords(multiDBTransactionManager, lat, lng));
|
||||
}
|
||||
|
||||
@GetMapping(value = "map/getCoordinatesByCity")
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package it.integry.googleCloudApi.service;
|
||||
|
||||
import com.google.maps.GeocodingApi;
|
||||
import com.google.maps.model.*;
|
||||
import com.google.maps.model.GeocodingResult;
|
||||
import com.google.maps.model.Geometry;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.KeyManagerService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
@@ -14,14 +15,12 @@ import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.utility.GoogleApiUtility;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
@Service
|
||||
@Scope("request")
|
||||
public class GeocodingService {
|
||||
|
||||
@Autowired
|
||||
@@ -30,9 +29,6 @@ public class GeocodingService {
|
||||
@Autowired
|
||||
public EntityProcessor entityProcessor;
|
||||
|
||||
@Autowired
|
||||
public MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
@Autowired
|
||||
public SetupGest setupGest;
|
||||
|
||||
@@ -49,13 +45,13 @@ public class GeocodingService {
|
||||
return GoogleApiUtility.buildIndirizzoDTO(results);
|
||||
}
|
||||
|
||||
public IndirizzoDTO getPositionFromCoords(BigDecimal lat, BigDecimal lng) throws Exception {
|
||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||
public IndirizzoDTO getPositionFromCoords(MultiDBTransactionManager multiDBTransactionManager, BigDecimal lat, BigDecimal lng) throws Exception {
|
||||
Connection connection = multiDBTransactionManager.getPrimaryConnection();
|
||||
IndirizzoDTO indirizzo;
|
||||
|
||||
double formattedLat = lat.setScale(5, RoundingMode.HALF_EVEN).doubleValue();
|
||||
double formattedLng = lng.setScale(5, RoundingMode.HALF_EVEN).doubleValue();
|
||||
int distance = setupGest.getSetupInteger(conn, "MAPS", "SETUP", "GEOCODE_PRECISION", 50);
|
||||
int distance = setupGest.getSetupInteger(connection, "MAPS", "SETUP", "GEOCODE_PRECISION", 50);
|
||||
|
||||
String nearbyPointQuery = "SELECT * from ( " +
|
||||
" SELECT *,(6371392.896 * acos(cos(radians(" + formattedLat + ")) * cos(radians(lat)) * " +
|
||||
@@ -66,7 +62,7 @@ public class GeocodingService {
|
||||
"where distance < " + distance +
|
||||
" ORDER BY distance";
|
||||
|
||||
StbPosizioni stbPosizioni = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, nearbyPointQuery, StbPosizioni.class);
|
||||
StbPosizioni stbPosizioni = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, nearbyPointQuery, StbPosizioni.class);
|
||||
|
||||
if (stbPosizioni != null) {
|
||||
indirizzo = new IndirizzoDTO()
|
||||
|
||||
@@ -22,12 +22,7 @@ when
|
||||
eval(completeRulesEnabled)
|
||||
$gtbAnag: GtbAnag( insDestinatario == null && operation != OperationType.DELETE )
|
||||
then
|
||||
String sql = "SELECT value FROM stb_gest_setup " +
|
||||
" WHERE stb_gest_setup.gest_name = 'GTB_ANAG' AND " +
|
||||
"stb_gest_setup.section = 'SETUP' AND " +
|
||||
"stb_gest_setup.key_section = 'INSERISCI_DEST_CLIE'";
|
||||
|
||||
Boolean insDest = ((String) QueryRules.getSingleValue(conn, sql)).equalsIgnoreCase("S");
|
||||
Boolean insDest = AnagRules.completeSetupInsDest(conn);
|
||||
|
||||
modify ( $gtbAnag ) {
|
||||
setInsDestinatario(insDest)
|
||||
|
||||
@@ -338,7 +338,7 @@ rule "checkDeleteMtbColrWithoutDoc"
|
||||
no-loop
|
||||
when
|
||||
eval(checkRulesEnabled)
|
||||
$entity : MtbColr(operation == OperationType.DELETE && !hasDocument || !hasQuantity)
|
||||
$entity : MtbColr(operation == OperationType.DELETE && (!hasDocument || !hasQuantity))
|
||||
then
|
||||
PackagesRules.checkForAnyColloRif(conn, $entity.getGestione(), $entity.getSerCollo(), $entity.getNumCollo(), $entity.getDataCollo());
|
||||
end
|
||||
|
||||
@@ -7,7 +7,6 @@ import it.integry.ems.activity.dto.UserWorkHoursClockOutRequestDTO;
|
||||
import it.integry.ems.activity.dto.UserWorkHoursStatusDTO;
|
||||
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.system.service.SystemService;
|
||||
import it.integry.ems.user.dto.UserDTO;
|
||||
@@ -21,9 +20,7 @@ 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.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityDate;
|
||||
import it.integry.ems_model.utility.UtilityLocalDate;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.firebase.dto.MessageDTO;
|
||||
import it.integry.firebase.dto.NotificationDTO;
|
||||
import it.integry.firebase.dto.android.AndroidConfigDTO;
|
||||
@@ -31,6 +28,8 @@ import it.integry.firebase.dto.android.AndroidNotificationDTO;
|
||||
import it.integry.firebase.dto.apns.ApnsConfigDTO;
|
||||
import it.integry.firebase.dto.apns.ApsDTO;
|
||||
import it.integry.firebase.service.NotificationService;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -39,9 +38,7 @@ import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -97,7 +94,7 @@ public class UserWorkHoursService {
|
||||
jtbRLavt.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
|
||||
final IndirizzoDTO positionFromCoords =
|
||||
geocodingService.getPositionFromCoords(userWorkHoursClockInRequestDTO.getPositionLatitude(), userWorkHoursClockInRequestDTO.getPositionLongitude());
|
||||
geocodingService.getPositionFromCoords(multiDBTransactionManager, userWorkHoursClockInRequestDTO.getPositionLatitude(), userWorkHoursClockInRequestDTO.getPositionLongitude());
|
||||
|
||||
JtbRLavr jtbRLavr = new JtbRLavr()
|
||||
.setDaOra(userWorkHoursClockInRequestDTO.getTimestamp() != null ?
|
||||
@@ -141,7 +138,7 @@ public class UserWorkHoursService {
|
||||
jtbRLavt.setFlagTrasferta("S");
|
||||
|
||||
final IndirizzoDTO positionFromCoords =
|
||||
geocodingService.getPositionFromCoords(userWorkHoursClockOutRequestDTO.getPositionLatitude(), userWorkHoursClockOutRequestDTO.getPositionLongitude());
|
||||
geocodingService.getPositionFromCoords(multiDBTransactionManager, userWorkHoursClockOutRequestDTO.getPositionLatitude(), userWorkHoursClockOutRequestDTO.getPositionLongitude());
|
||||
|
||||
JtbRLavr jtbRLavr = new JtbRLavr()
|
||||
.setCodJcom(userWorkHoursClockOutRequestDTO.getCodJcom())
|
||||
|
||||
@@ -6,7 +6,6 @@ import it.integry.ems._context.ApplicationContextProvider;
|
||||
import it.integry.ems.production.agribook.model.*;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.utility.UtilityFile;
|
||||
import it.integry.ems_model.entity.MtbDepo;
|
||||
@@ -16,6 +15,7 @@ import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -195,7 +195,7 @@ public class AgribookOrderController {
|
||||
BigDecimal lng = x.getValue().get(0).getLng();
|
||||
|
||||
//Creazione posizione con coords
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.getPositionFromCoords(lat, lng);
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.getPositionFromCoords(multiDBTransactionManager, lat, lng);
|
||||
|
||||
|
||||
MtbDepoPosizioni matchPosizione = Stream.of(mtbDepoPosizioni)
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import it.integry.ems.production.agribook.model.*;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.user.UserSession;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
@@ -15,8 +14,9 @@ import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.ems_model.utility.dto.PaginatedDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.apache.commons.text.StringSubstitutor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
@@ -1335,7 +1335,7 @@ public class AgribookOrderService {
|
||||
|
||||
for (AgribookSaveCoordsDTO saveCoordsDTO : agribookSaveCoordsDTOS) {
|
||||
// Creazione posizione con coords
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.getPositionFromCoords(saveCoordsDTO.getLat(), saveCoordsDTO.getLng());
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.getPositionFromCoords(multiDBTransactionManager, saveCoordsDTO.getLat(), saveCoordsDTO.getLng());
|
||||
|
||||
String codMdep = saveCoordsDTO.getCodMdep();
|
||||
|
||||
|
||||
@@ -495,7 +495,7 @@ public class MesProductionControllerV2 {
|
||||
@PostMapping(value = "ordine/ripianifica")
|
||||
public @ResponseBody
|
||||
ServiceRestResponse ripianifica(@RequestBody RipianificaOrdineLavRequestDTO dto) throws Exception {
|
||||
productionOrdersLifecycleService.ripianificaOrdLav(dto);
|
||||
productionOrdersLifecycleService.ripianificaOrdLav(multiDBTransactionManager,dto);
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
|
||||
@@ -353,6 +353,16 @@ public class MesProductionServiceV2 {
|
||||
));
|
||||
}
|
||||
|
||||
if (lastStep.getDataIniz() != null && lastStep.getDataFine() == null) {
|
||||
throw new Exception(String.format(
|
||||
"L'ordine selezionato è già in corso su questa linea. (Gestione %s, data ord. %s, num ord. %d, linea %s)",
|
||||
gestioneOrd,
|
||||
CommonConstants.DATE_DMY_SLASHED_FORMATTER.format(dataOrd),
|
||||
numOrd,
|
||||
codJfas
|
||||
));
|
||||
}
|
||||
|
||||
Date dataIniz;
|
||||
if (dataInizLav == null) {
|
||||
dataIniz = new Date();
|
||||
|
||||
@@ -16,6 +16,7 @@ import it.integry.ems.production.dto.ReopenOrdineLavRequestDTO;
|
||||
import it.integry.ems.production.event.ProductionOrderClosedEvent;
|
||||
import it.integry.ems.service.AziendaService;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.utility.UtilityDebug;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
@@ -27,11 +28,13 @@ import it.integry.ems_model.utility.*;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.docx4j.org.apache.xpath.operations.Mult;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -347,25 +350,64 @@ public class ProductionOrdersLifecycleService {
|
||||
}
|
||||
}
|
||||
|
||||
public void ripianificaOrdLav(RipianificaOrdineLavRequestDTO ripianificaOrdineLavRequestDTO) throws Exception {
|
||||
public void ripianificaOrdLav(MultiDBTransactionManager multiDBTransactionManager, RipianificaOrdineLavRequestDTO ripianificaOrdineLavRequestDTO) throws Exception {
|
||||
//<editor-fold desc="Retrieve impostazioni e variabili base">
|
||||
Connection connection = multiDBTransactionManager.getPrimaryConnection();
|
||||
|
||||
DtbOrdt ordL = new DtbOrdt(ripianificaOrdineLavRequestDTO.getGestione(), ripianificaOrdineLavRequestDTO.getDataOrd(), ripianificaOrdineLavRequestDTO.getNumOrd());
|
||||
ordL.setOperation(OperationType.SELECT_OBJECT);
|
||||
entityProcessor.processEntity(ordL, true, multiDBTransactionManager);
|
||||
|
||||
LocalDate dataPianificazione = UtilityLocalDate.isNull(ripianificaOrdineLavRequestDTO.getDataPianificazione(), ripianificaOrdineLavRequestDTO.getDataOrd());
|
||||
String codJfas = UtilityString.isNull(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld());
|
||||
|
||||
boolean reimpostaLotto = setupGest.getSetupDepoBoolean("PVM", "MONITORAGGIO_LINEE_V2", "REIMPOSTA_LOTTO_ORDINE_RIPIANIFICATO", ordL.getCodMdep());
|
||||
boolean flagEditedCodJfas = !ripianificaOrdineLavRequestDTO.getCodJfasOld().equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew());
|
||||
boolean flagEditedDataOrd = !UtilityLocalDate.isSameDay(ripianificaOrdineLavRequestDTO.getDataOrd(), ripianificaOrdineLavRequestDTO.getDataPianificazione());
|
||||
//</editor-fold>
|
||||
|
||||
if (!flagEditedCodJfas && !flagEditedDataOrd) {
|
||||
throw new Exception("Nessuna modifica da apportare.");
|
||||
}
|
||||
|
||||
//<editor-fold desc="Cambio data di produzione">
|
||||
if (flagEditedDataOrd) {
|
||||
ripianificaDataOrdLav(connection, ordL, ripianificaOrdineLavRequestDTO.getDataPianificazione());
|
||||
ordL.clearChilds();
|
||||
ordL.setOldPk(null);
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
//<editor-fold desc="Cambio linea">
|
||||
if (flagEditedCodJfas) {
|
||||
ripianificaLineaOrdLav(connection, ordL, codJfas);
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
//<editor-fold desc="Ricalcolo dati ordine di produzione">
|
||||
|
||||
DtbOrdr oldRigaProd = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, Query.format(
|
||||
"SELECT * from dtb_ordr where gestione = {} and data_ord = {} and num_ord = {} and riga_ord = {}",
|
||||
ordL.getGestioneRif(),
|
||||
ordL.getDataOrdRif(),
|
||||
ordL.getNumOrdRif(),
|
||||
ordL.getRigaOrdRif()
|
||||
), DtbOrdr.class);
|
||||
|
||||
if (oldRigaProd == null)
|
||||
throw new Exception("Riga ordine di produzione originale non trovata.");
|
||||
|
||||
|
||||
DtbOrdt dtbOrdtP = new DtbOrdt()
|
||||
.setCodJfas(UtilityString.isNull(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld()))
|
||||
.setDataOrd(UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataPianificazione() == null ?
|
||||
ripianificaOrdineLavRequestDTO.getDataOrd() :
|
||||
ripianificaOrdineLavRequestDTO.getDataPianificazione())
|
||||
)
|
||||
.setCodJfas(codJfas)
|
||||
.setDataOrd(UtilityLocalDate.localDateToDate(dataPianificazione))
|
||||
.setGestione("A")
|
||||
.setGestioneRif("A")
|
||||
.setGeneraOrdLavDaProd(false)
|
||||
.setOrdTrasf(false);
|
||||
dtbOrdtP.setOperation(OperationType.SELECT_OBJECT);
|
||||
dtbOrdtP.setOnlyPkMaster(false);
|
||||
entityProcessor.processEntity(dtbOrdtP, multiDBTransactionManager);
|
||||
|
||||
boolean reimpostaLotto = setupGest.getSetupDepoBoolean("PVM", "MONITORAGGIO_LINEE_V2", "REIMPOSTA_LOTTO_ORDINE_RIPIANIFICATO", dtbOrdtP.getCodMdep());
|
||||
boolean flagEditedCodJfas = !ripianificaOrdineLavRequestDTO.getCodJfasOld().equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew());
|
||||
boolean flagEditedDataOrd = !UtilityLocalDate.isSameDay(ripianificaOrdineLavRequestDTO.getDataOrd(), ripianificaOrdineLavRequestDTO.getDataPianificazione());
|
||||
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
|
||||
|
||||
|
||||
if (dtbOrdtP.getNumOrd() == null) {
|
||||
@@ -375,15 +417,15 @@ public class ProductionOrdersLifecycleService {
|
||||
" FROM dtb_ordt " +
|
||||
"WHERE EXISTS (SELECT * FROM dtb_ordt orl WHERE dtb_ordt.gestione = orl.gestione_rif AND dtb_ordt.data_ord = orl.data_ord_rif AND " +
|
||||
"dtb_ordt.num_ord = orl.num_ord_rif and gestione = %s and data_ord = %s and num_ord = %s)",
|
||||
ripianificaOrdineLavRequestDTO.getGestione(),
|
||||
ripianificaOrdineLavRequestDTO.getDataOrd(),
|
||||
ripianificaOrdineLavRequestDTO.getNumOrd()
|
||||
ordL.getGestione(),
|
||||
ordL.getDataOrd(),
|
||||
ordL.getNumOrd()
|
||||
);
|
||||
|
||||
dtbOrdtP = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdt.class);
|
||||
dtbOrdtP
|
||||
.setCodJfas(ripianificaOrdineLavRequestDTO.getCodJfasNew() == null ? dtbOrdtP.getCodJfas() : ripianificaOrdineLavRequestDTO.getCodJfasNew())
|
||||
.setDataOrd(ripianificaOrdineLavRequestDTO.getDataPianificazione() == null ? dtbOrdtP.getDataOrd() : UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataPianificazione()))
|
||||
.setCodJfas(codJfas)
|
||||
.setDataOrd(UtilityLocalDate.localDateToDate(dataPianificazione))
|
||||
.setNumOrd(null)
|
||||
.setGeneraOrdLavDaProd(false)
|
||||
.setOrdTrasf(false);
|
||||
@@ -392,66 +434,46 @@ public class ProductionOrdersLifecycleService {
|
||||
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
String sql =
|
||||
Query.format("SELECT ISNULL(MAX(riga_ord), 0) + 1 FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
|
||||
dtbOrdtP.getGestione(),
|
||||
dtbOrdtP.getDataOrd(),
|
||||
dtbOrdtP.getNumOrd());
|
||||
dtbOrdtP.setOperation(OperationType.UPDATE);
|
||||
dtbOrdtP.getDtbOrdr().add(oldRigaProd);
|
||||
|
||||
Integer rigaOrdProd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
Integer rigaOrdProd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT ISNULL(MAX(riga_ord), 0) + 1 FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
|
||||
dtbOrdtP.getGestione(),
|
||||
dtbOrdtP.getDataOrd(),
|
||||
dtbOrdtP.getNumOrd()));
|
||||
|
||||
HashMap<String, Object> oldPk = new HashMap<>();
|
||||
Date dataOrd = UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataOrd());
|
||||
if (ripianificaOrdineLavRequestDTO.getDataPianificazione() != null &&
|
||||
!ripianificaOrdineLavRequestDTO.getDataOrd().equals(ripianificaOrdineLavRequestDTO.getDataPianificazione())) {
|
||||
oldPk.put("dataOrd", ripianificaOrdineLavRequestDTO.getDataOrd());
|
||||
dataOrd = UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataPianificazione());
|
||||
}
|
||||
|
||||
DtbOrdt dtbOrdl = new DtbOrdt()
|
||||
.setDataOrd(dataOrd)
|
||||
.setGestione(ripianificaOrdineLavRequestDTO.getGestione())
|
||||
.setNumOrd(ripianificaOrdineLavRequestDTO.getNumOrd())
|
||||
oldRigaProd
|
||||
.setOldPk(new HashMap<String, Object>() {{
|
||||
put("dataOrd", oldRigaProd.getDataOrd());
|
||||
put("gestione", oldRigaProd.getGestione());
|
||||
put("numOrd", oldRigaProd.getNumOrd());
|
||||
put("rigaOrd", oldRigaProd.getRigaOrd());
|
||||
}});
|
||||
oldRigaProd.setRigaOrd(rigaOrdProd)
|
||||
.setCodJfas(codJfas)
|
||||
.setDataOrd(dtbOrdtP.getDataOrd())
|
||||
.setNumOrd(dtbOrdtP.getNumOrd())
|
||||
.setGestione(dtbOrdtP.getGestione())
|
||||
.setOperation(OperationType.SUBSTITUTE);
|
||||
ordL
|
||||
.setGestioneRif(dtbOrdtP.getGestione())
|
||||
.setDataOrdRif(dtbOrdtP.getDataOrd())
|
||||
.setNumOrdRif(dtbOrdtP.getNumOrd())
|
||||
.setDataConsProd(dataOrd)
|
||||
.setRigaOrdRif(rigaOrdProd);
|
||||
if (!oldPk.isEmpty()) {
|
||||
dtbOrdl.setOldPk(oldPk);
|
||||
dtbOrdl.setOperation(OperationType.SUBSTITUTE);
|
||||
} else {
|
||||
dtbOrdl.setOperation(OperationType.UPDATE);
|
||||
.setDataConsProd(UtilityLocalDate.localDateToDate(dataPianificazione))
|
||||
.setRigaOrdRif(rigaOrdProd)
|
||||
.setDtbOrdtProd(null);
|
||||
//</editor-fold>
|
||||
|
||||
//<editor-fold desc="Altre operazioni">
|
||||
if (reimpostaLotto) {
|
||||
ordL.setPartitaMag(EmsRestConstants.NULL);
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
if (reimpostaLotto && (flagEditedCodJfas || flagEditedDataOrd)) {
|
||||
dtbOrdl.setPartitaMag(EmsRestConstants.NULL);
|
||||
}
|
||||
ordL.setOperation(OperationType.UPDATE);
|
||||
|
||||
if (!UtilityString.equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld())) {
|
||||
sql =
|
||||
Query.format(
|
||||
"SELECT * FROM dtb_ord_steps WHERE gestione = %s AND data_ord = %s AND num_ord = %s ORDER BY data_fine desc",
|
||||
ripianificaOrdineLavRequestDTO.getGestione(),
|
||||
ripianificaOrdineLavRequestDTO.getDataOrd(),
|
||||
ripianificaOrdineLavRequestDTO.getNumOrd());
|
||||
DtbOrdSteps lastStep = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
|
||||
|
||||
lastStep.setFlagStepAttivo("N");
|
||||
lastStep.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
dtbOrdl.getDtbOrdSteps().add(lastStep);
|
||||
|
||||
DtbOrdSteps dtbOrdSteps = (DtbOrdSteps) lastStep.deepClone();
|
||||
dtbOrdSteps
|
||||
.setCodJfas(ripianificaOrdineLavRequestDTO.getCodJfasNew())
|
||||
.setIdRiga(0)
|
||||
.setDataIniz(new Date())
|
||||
.setDataFine(new Date())
|
||||
.setFlagStepAttivo("S");
|
||||
dtbOrdSteps.setOperation(OperationType.INSERT);
|
||||
dtbOrdl.getDtbOrdSteps().add(dtbOrdSteps);
|
||||
}
|
||||
entityProcessor.processEntity(dtbOrdl, true, multiDBTransactionManager);
|
||||
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
|
||||
entityProcessor.processEntity(ordL, true, multiDBTransactionManager);
|
||||
|
||||
}
|
||||
|
||||
@@ -484,4 +506,39 @@ public class ProductionOrdersLifecycleService {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
private void ripianificaDataOrdLav(Connection connection, DtbOrdt ordLav, LocalDate dataPianificazione) throws Exception {
|
||||
HashMap<String, Object> oldPk = new HashMap<>();
|
||||
oldPk.put("dataOrd", ordLav.getDataOrd());
|
||||
ordLav
|
||||
.setDataOrd(UtilityLocalDate.localDateToDate(dataPianificazione))
|
||||
.setOldPk(oldPk);
|
||||
|
||||
ordLav.setOperation(OperationType.SUBSTITUTE);
|
||||
entityProcessor.processEntity(ordLav, true, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
private void ripianificaLineaOrdLav(Connection connection, DtbOrdt dtbOrdt, String codJfas) throws Exception {
|
||||
String sql =
|
||||
Query.format(
|
||||
"SELECT * FROM dtb_ord_steps WHERE gestione = %s AND data_ord = %s AND num_ord = %s ORDER BY data_fine desc, id_step DESC, id_riga DESC",
|
||||
dtbOrdt.getGestione(),
|
||||
dtbOrdt.getDataOrd(),
|
||||
dtbOrdt.getNumOrd());
|
||||
DtbOrdSteps lastStep = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
|
||||
|
||||
lastStep.setFlagStepAttivo("N");
|
||||
lastStep.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
dtbOrdt.getDtbOrdSteps().add(lastStep);
|
||||
|
||||
DtbOrdSteps dtbOrdSteps = (DtbOrdSteps) lastStep.deepClone();
|
||||
dtbOrdSteps
|
||||
.setCodJfas(codJfas)
|
||||
.setIdRiga(0)
|
||||
.setDataIniz(new Date())
|
||||
.setDataFine(new Date())
|
||||
.setFlagStepAttivo("S");
|
||||
dtbOrdSteps.setOperation(OperationType.INSERT);
|
||||
dtbOrdt.getDtbOrdSteps().add(dtbOrdSteps);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package it.integry.ems.retail.wms.Utility;
|
||||
|
||||
import com.annimon.stream.Optional;
|
||||
import com.annimon.stream.Stream;
|
||||
import it.integry.ems._context.ApplicationContextProvider;
|
||||
import it.integry.ems.dynamic_cache.EntityCacheComponent;
|
||||
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.retail.wms.dto.InsertUDCRowRequestDTO;
|
||||
@@ -348,15 +350,12 @@ public class WMSUtility {
|
||||
public static List<MtbAart> getArticoliByCodMarts(List<String> codMarts, Connection connection) throws Exception {
|
||||
if (codMarts == null || codMarts.isEmpty()) return null;
|
||||
|
||||
String query =
|
||||
"SELECT DISTINCT mtb_aart.*"
|
||||
+ " FROM mtb_aart "
|
||||
+ " WHERE cod_mart IN (" + UtilityQuery.concatStringFieldsWithSeparator(codMarts, ",") + ")";
|
||||
final EntityCacheComponent entityCacheComponent = ApplicationContextProvider.getApplicationContext().getBean(EntityCacheComponent.class);
|
||||
|
||||
List<MtbAart> listMtbAart = entityCacheComponent.getCachedEntitiesList(
|
||||
connection.getIntegryCustomerDB(), MtbAart.ENTITY, x -> codMarts.parallelStream().anyMatch(y -> y.equalsIgnoreCase(x.getCodMart())));
|
||||
|
||||
List<MtbAart> listMtbAart = UtilityDB.executeSimpleQueryDTO(connection, query, MtbAart.class);
|
||||
|
||||
List<MtbAartBarCode> barCodeFromCod = getBarCodeFromCod(codMarts, connection);
|
||||
List<MtbAartBarCode> barCodeFromCod = getAlternativeMtbAartBarCodes(codMarts, connection);
|
||||
|
||||
if (listMtbAart != null && !listMtbAart.isEmpty()) {
|
||||
List<String> untMisStrings = listMtbAart.stream()
|
||||
@@ -399,9 +398,18 @@ public class WMSUtility {
|
||||
return mtbUntMis != null ? mtbUntMis : new ArrayList<>();
|
||||
}
|
||||
|
||||
public static List<MtbAartBarCode> getBarCodeFromCod(List<String> codMart, Connection conn) throws Exception {
|
||||
String sql = "SELECT * FROM mtb_aart_bar_code WHERE cod_mart IN (" + UtilityQuery.concatStringFieldsWithSeparator(codMart, ",") + ")";
|
||||
final List<MtbAartBarCode> barCodeList = UtilityDB.executeSimpleQueryDTO(conn, sql, MtbAartBarCode.class);
|
||||
public static List<MtbAartBarCode> getAlternativeMtbAartBarCodes(List<String> codMarts, Connection conn) {
|
||||
codMarts = codMarts.stream()
|
||||
.distinct().collect(Collectors.toList());
|
||||
|
||||
final EntityCacheComponent entityCacheComponent = ApplicationContextProvider.getApplicationContext().getBean(EntityCacheComponent.class);
|
||||
|
||||
List<String> finalCodMarts = codMarts;
|
||||
List<MtbAartBarCode> barCodeList = entityCacheComponent.getCachedEntitiesList(
|
||||
conn.getIntegryCustomerDB(),
|
||||
MtbAartBarCode.ENTITY,
|
||||
x -> finalCodMarts.stream().anyMatch(y -> y.equalsIgnoreCase(x.getCodMart())));
|
||||
|
||||
return barCodeList != null ? barCodeList : new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.system.exchange.service.structure.ExchangeImportDataManagerService;
|
||||
import it.integry.ems.system.exchange.service.structure.ExchangeImportSchemaManagerService;
|
||||
import it.integry.ems.task.TaskExecutorService;
|
||||
import it.integry.ems_model.base.EquatableEntityInterface;
|
||||
import it.integry.ems_model.entity.GtbAnag;
|
||||
import it.integry.ems_model.entity.VtbClie;
|
||||
@@ -19,9 +20,11 @@ import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -45,6 +48,8 @@ public class ExchangeClientiImportService {
|
||||
|
||||
@Autowired
|
||||
private SetupGest setupGest;
|
||||
@Autowired
|
||||
private TaskExecutorService taskExecutorService;
|
||||
|
||||
|
||||
public void importClienti(MultiDBTransactionManager internalMultiDb, MultiDBTransactionManager exchangeMultiDb, RequestDataDTO requestDataDTO) throws Exception {
|
||||
@@ -65,63 +70,80 @@ public class ExchangeClientiImportService {
|
||||
|
||||
final Exception[] firstExceptionToThrow = {null};
|
||||
|
||||
List<Callable<Void>> callableList = new ArrayList<>();
|
||||
|
||||
|
||||
for (String diacod : diacodsToSync) {
|
||||
|
||||
final List<GtbAnag> exchangeImportedData = retrieveClienti(
|
||||
exchangeMultiDb.getPrimaryConnection(),
|
||||
true, false, diacod);
|
||||
|
||||
final List<GtbAnag> exchangeUpdatedData = retrieveClienti(
|
||||
exchangeMultiDb.getPrimaryConnection(),
|
||||
false, useTempTable, diacod);
|
||||
callableList.add(() -> {
|
||||
try (MultiDBTransactionManager internalMultiDbTask = new MultiDBTransactionManager(internalMultiDb.getPrimaryConnection().getProfileName(), false);
|
||||
MultiDBTransactionManager exchangeMultiDbTask = new MultiDBTransactionManager(exchangeMultiDb.getPrimaryConnection().getProfileName(), false)) {
|
||||
|
||||
List<EquatableEntityInterface> allData = exchangeImportDataManagerService
|
||||
.runSync(GtbAnag.class, exchangeImportedData, exchangeUpdatedData);
|
||||
final List<GtbAnag> exchangeImportedData = retrieveClienti(
|
||||
exchangeMultiDbTask.getPrimaryConnection(),
|
||||
true, false, diacod);
|
||||
|
||||
allData.parallelStream()
|
||||
.map(x -> (GtbAnag) x)
|
||||
.forEach(x -> {
|
||||
if (x.getOperation() == OperationType.DELETE)
|
||||
x.setOperation(OperationType.UPDATE);
|
||||
final List<GtbAnag> exchangeUpdatedData = retrieveClienti(
|
||||
exchangeMultiDbTask.getPrimaryConnection(),
|
||||
false, useTempTable, diacod);
|
||||
|
||||
if (x.getVtbClie() != null) {
|
||||
if (x.getVtbClie().getOperation() == OperationType.DELETE) {
|
||||
x.getVtbClie().setFlagStato("I")
|
||||
.setOperation(OperationType.UPDATE);
|
||||
x.setOperation(OperationType.UPDATE);
|
||||
} else {
|
||||
x.getVtbClie().setFlagStato("A");
|
||||
x.setOperation(x.getOperation() == OperationType.INSERT ? OperationType.INSERT_OR_UPDATE : x.getOperation());
|
||||
}
|
||||
List<EquatableEntityInterface> allData = exchangeImportDataManagerService
|
||||
.runSync(GtbAnag.class, exchangeImportedData, exchangeUpdatedData);
|
||||
|
||||
allData.parallelStream()
|
||||
.map(x -> (GtbAnag) x)
|
||||
.forEach(x -> {
|
||||
if (x.getOperation() == OperationType.DELETE)
|
||||
x.setOperation(OperationType.UPDATE);
|
||||
|
||||
if (x.getVtbClie() != null) {
|
||||
if (x.getVtbClie().getOperation() == OperationType.DELETE) {
|
||||
x.getVtbClie().setFlagStato("I")
|
||||
.setOperation(OperationType.UPDATE);
|
||||
x.setOperation(OperationType.UPDATE);
|
||||
} else {
|
||||
x.getVtbClie().setFlagStato("A");
|
||||
x.setOperation(x.getOperation() == OperationType.INSERT ? OperationType.INSERT_OR_UPDATE : x.getOperation());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (allData.isEmpty())
|
||||
dataCount.addAndGet(-exchangeUpdatedData.size());
|
||||
|
||||
for (EquatableEntityInterface<?> dataToSave : allData) {
|
||||
((GtbAnag) dataToSave).setPrecode(precode);
|
||||
|
||||
logger.debug("Importati {} clienti di {}", importedCounter.incrementAndGet(), dataCount.get());
|
||||
|
||||
|
||||
try {
|
||||
entityProcessor.processEntity(dataToSave, true, true, EXCHANGE_USER, internalMultiDbTask, requestDataDTO);
|
||||
|
||||
singleUpdateImported(exchangeMultiDbTask.getPrimaryConnection(), (GtbAnag) dataToSave, useTempTable);
|
||||
internalMultiDbTask.commitAll();
|
||||
exchangeMultiDbTask.commitAll();
|
||||
} catch (Exception ex) {
|
||||
internalMultiDbTask.rollbackAll();
|
||||
exchangeMultiDbTask.commitAll();
|
||||
|
||||
GtbAnag gtbAnagError = (GtbAnag) dataToSave;
|
||||
Exception newException = new EntityException("Errore durante l'importazione del cliente [" +
|
||||
"cod_anag: " + gtbAnagError.getCodAnag() + "]", ex);
|
||||
|
||||
if (firstExceptionToThrow[0] == null) firstExceptionToThrow[0] = newException;
|
||||
logger.error(newException);
|
||||
}
|
||||
});
|
||||
|
||||
for (EquatableEntityInterface dataToSave : allData) {
|
||||
|
||||
((GtbAnag) dataToSave).setPrecode(precode);
|
||||
|
||||
logger.debug("Importati {} clienti di {}", importedCounter.incrementAndGet(), dataCount.get());
|
||||
try {
|
||||
entityProcessor.processEntity(dataToSave, true, true, EXCHANGE_USER, internalMultiDb, requestDataDTO);
|
||||
|
||||
singleUpdateImported(exchangeMultiDb.getPrimaryConnection(), (GtbAnag) dataToSave, useTempTable);
|
||||
internalMultiDb.commitAll();
|
||||
exchangeMultiDb.commitAll();
|
||||
} catch (Exception ex) {
|
||||
internalMultiDb.rollbackAll();
|
||||
exchangeMultiDb.commitAll();
|
||||
|
||||
GtbAnag gtbAnagError = (GtbAnag) dataToSave;
|
||||
Exception newException = new EntityException("Errore durante l'importazione del cliente [" +
|
||||
"cod_anag: " + gtbAnagError.getCodAnag() + "]", ex);
|
||||
|
||||
if (firstExceptionToThrow[0] == null) firstExceptionToThrow[0] = newException;
|
||||
logger.error(newException);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
taskExecutorService.executeTasks(callableList);
|
||||
|
||||
if (firstExceptionToThrow[0] != null) throw firstExceptionToThrow[0];
|
||||
|
||||
} finally {
|
||||
@@ -172,7 +194,8 @@ public class ExchangeClientiImportService {
|
||||
}
|
||||
|
||||
|
||||
private void singleUpdateImported(Connection connection, GtbAnag importedData, boolean useTempTable) throws Exception {
|
||||
private void singleUpdateImported(Connection connection, GtbAnag importedData, boolean useTempTable) throws
|
||||
Exception {
|
||||
final HashMap<String, Object> importedKey = new HashMap<String, Object>() {{
|
||||
put("cod_anag", importedData.getCodAnag());
|
||||
}};
|
||||
|
||||
@@ -10,7 +10,6 @@ import it.integry.ems.report.dto.PairsDTO;
|
||||
import it.integry.ems.response.EsitoType;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.service.ReportProcessor;
|
||||
import it.integry.ems.service.exception.EmptyReportException;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
@@ -23,8 +22,12 @@ import it.integry.ems_model.entity.JtbRLavr;
|
||||
import it.integry.ems_model.entity.JtbRLavt;
|
||||
import it.integry.ems_model.entity.JtbRicorrenze;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import it.integry.ems_model.utility.UtilityXML;
|
||||
import it.integry.ems_model.utility.UtilityZip;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -40,8 +43,8 @@ import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URL;
|
||||
import java.sql.Date;
|
||||
import java.sql.*;
|
||||
import java.sql.Date;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@@ -625,7 +628,7 @@ public class UtilityService {
|
||||
try {
|
||||
double lat = rs.getDouble("lat");
|
||||
double lng = rs.getDouble("lng");
|
||||
IndirizzoDTO address = geocodingService.getPositionFromCoords(BigDecimal.valueOf(lat), BigDecimal.valueOf(lng));
|
||||
IndirizzoDTO address = geocodingService.getPositionFromCoords(multiDBTransactionManager, BigDecimal.valueOf(lat), BigDecimal.valueOf(lng));
|
||||
if (address == null) {
|
||||
logger.debug("nessun indirizzo trovato per le coordinate : [ " + lat + " , " + lng + " ]");
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user