Refactor Depositi and MovimentiContabili services and controllers; add migration for foreign key constraints
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit

This commit is contained in:
2025-10-24 19:19:54 +02:00
parent b666064d15
commit 797c5c7736
9 changed files with 197 additions and 31 deletions

View File

@@ -0,0 +1,30 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251024175524 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement(
"exec DropForeignKey 'ctb_amac', 'mtb_depo_posizioni'",
"exec DropForeignKey 'jrl_fase_posizioni', 'mtb_depo_posizioni'",
"exec DropPrimaryKey 'mtb_depo_posizioni'");
dropIndex("mtb_depo_posizioni", "ix_mtb_depo_posizioni_unique");
executeStatement("alter table mtb_depo_posizioni add constraint pk_mtb_depo_posizioni primary key ( posizione)",
"alter table ctb_amac add constraint fk_ctb_amac_mtb_depo_posizioni foreign key (posizione) references mtb_depo_posizioni(posizione)",
"alter table jrl_fase_posizioni add constraint fk_jrl_fase_posizioni_mtb_depo_posizioni foreign key (posizione) references mtb_depo_posizioni(posizione)"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -332,14 +332,19 @@ public class PackagesRules extends QueryRules {
}
public static HashMap<String, Object> calcPeso(Connection conn, MtbColr entity) throws Exception {
String sql =
String sql = "select cifre_dec from mtb_unt_mis where flag_unita_kg = 'S'";
Integer cifreDec = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
if ( cifreDec == null ) { cifreDec = 5; }
sql =
"SELECT mtb_aart.unt_mis, " +
" mtb_aart.tara_kg, " +
" mtb_aart.peso_kg, " +
" case when mtb_aart.flag_peso_egalizzato = 1 THEN mtb_aart.qta_cnf ELSE 1 END * mtb_aart.peso_kg as 'peso_egalizzato', " +
" mtb_unt_mis.flag_unita_kg, " +
" mtb_aart.flag_peso_egalizzato, " +
" ISNULL((select cifre_dec from mtb_unt_mis where flag_unita_kg = 'S'), 5) as cifre_dec " +
" ISNULL((), 5) as cifre_dec " +
" FROM mtb_aart INNER JOIN mtb_unt_mis ON mtb_aart.unt_mis = mtb_unt_mis.unt_mis " +
" WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(entity.getCodMart());
@@ -352,7 +357,6 @@ public class PackagesRules extends QueryRules {
String flagUnitaKg = (String) queryResults.get("flag_unita_kg");
BigDecimal pesoKGEgalizzato = (BigDecimal) queryResults.get("peso_egalizzato");
Boolean pesoEgalizzato = (Boolean) queryResults.get("flag_peso_egalizzato");
int cifreDec = ((BigDecimal) queryResults.get("cifre_dec")).intValue();
if ("S".equalsIgnoreCase(flagUnitaKg)) {
pesoNetto = entity.getQtaCol();

View File

@@ -66,7 +66,6 @@ public class CtbAmac extends EntityBase {
private Boolean flagAttivo;
@SqlField(value = "cod_mdep")
@FK(tableName = MtbDepoPosizioni.ENTITY)
private String codMdep;
@SqlField(value = "posizione")

View File

@@ -138,7 +138,7 @@ public class MtbDepo extends EntityBase {
@EntityChild
private List<MtbDepoIntercode> mtbDepoIntercode = new ArrayList<>();
@EntityChild
@EntityChild(value = 0)
private List<MtbDepoPosizioni> mtbDepoPosizioni = new ArrayList<>();
@EntityChild
@@ -591,4 +591,6 @@ public class MtbDepo extends EntityBase {
WtbDepo wtbDepo = new WtbDepo();
wtbDepo.deleteAllEntities(connection, this);
}
}

View File

@@ -10,6 +10,7 @@ import org.apache.logging.log4j.Logger;
import org.kie.api.definition.type.PropertyReactive;
import java.math.BigDecimal;
import java.util.Objects;
@PropertyReactive
@Table(MtbDepoPosizioni.ENTITY)
@@ -22,7 +23,6 @@ public class MtbDepoPosizioni extends EntityBase {
private static final long serialVersionUID = 1L;
@PK
@SqlField(value = "cod_mdep", maxLength = 5, nullable = false)
private String codMdep;
@@ -62,6 +62,8 @@ public class MtbDepoPosizioni extends EntityBase {
@SqlField(value = "tipo_prelievo")
private TipoPrelievo tipoPrelievo;
private String posIsChanged;
@Priority(1)
private StbPosizioni stbPosizioni;
@@ -180,6 +182,15 @@ public class MtbDepoPosizioni extends EntityBase {
return this;
}
public String getPosIsChanged() {
return posIsChanged;
}
public MtbDepoPosizioni setPosIsChanged(String posIsChanged) {
this.posIsChanged = posIsChanged;
return this;
}
public StbPosizioni getStbPosizioni() {
return stbPosizioni;
}
@@ -190,10 +201,15 @@ public class MtbDepoPosizioni extends EntityBase {
}
@Override
protected void insertChilds() throws Exception {
// stbPosizioni.manageWithParentConnection(connection, dataCompleting);
//
// this.setIdPosizione(stbPosizioni.getId());
public boolean equals(Object o) {
if (!(o instanceof MtbDepoPosizioni)) return false;
MtbDepoPosizioni that = (MtbDepoPosizioni) o;
return Objects.equals(getCodMdep(), that.getCodMdep()) && Objects.equals(getPosizione(), that.getPosizione()) && Objects.equals(getDescrizione(), that.getDescrizione()) && Objects.equals(isFlagMonoCollo(), that.isFlagMonoCollo()) && Objects.equals(getPriorita(), that.getPriorita()) && Objects.equals(getFlagSilosLiquidi(), that.getFlagSilosLiquidi()) && Objects.equals(getCapacita(), that.getCapacita()) && Objects.equals(getIdPosizione(), that.getIdPosizione()) && Objects.equals(getTipoMagazAutomatico(), that.getTipoMagazAutomatico()) && Objects.equals(getPostiPallet(), that.getPostiPallet()) && Objects.equals(getCodArea(), that.getCodArea()) && getTipoPrelievo() == that.getTipoPrelievo() && Objects.equals(getPosIsChanged(), that.getPosIsChanged());
}
@Override
public int hashCode() {
return Objects.hash(getCodMdep(), getPosizione(), getDescrizione(), isFlagMonoCollo(), getPriorita(), getFlagSilosLiquidi(), getCapacita(), getIdPosizione(), getTipoMagazAutomatico(), getPostiPallet(), getCodArea(), getTipoPrelievo(), getPosIsChanged());
}
public enum TipoPrelievo implements IBaseEnum {

View File

@@ -1,8 +1,9 @@
package it.integry.ems.contabil.controller;
import it.integry.common.var.CommonConstants;
import it.integry.ems.contabil.service.MovimentiContabiliServices;
import it.integry.ems.contabil.service.MovimentiContabiliService;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.entity.CtbMovt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@@ -15,7 +16,9 @@ import javax.servlet.http.HttpServletRequest;
@RequestMapping("movimenti-contabili")
public class MovimentiContabiliController {
@Autowired
private MovimentiContabiliServices movimentiContabiliServices;
private MovimentiContabiliService movimentiContabiliServices;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@PostMapping(value = "save")
public @ResponseBody
@@ -23,7 +26,7 @@ public class MovimentiContabiliController {
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody CtbMovt ctbMovt) throws Exception {
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.save(ctbMovt));
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.save(multiDBTransactionManager, ctbMovt));
}
@PostMapping(value = "setTipoBene")
@@ -33,7 +36,7 @@ public class MovimentiContabiliController {
@RequestParam Integer riga,
@RequestParam (required = false) String tipoBene) throws Exception {
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.setTipoBene(numCmov, riga, tipoBene));
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.setTipoBene(multiDBTransactionManager,numCmov, riga, tipoBene));
}
@PostMapping(value = "delete")
@@ -41,7 +44,7 @@ public class MovimentiContabiliController {
ServiceRestResponse delete(HttpServletRequest request,
@RequestParam String whereCond) throws Exception {
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.delete(whereCond));
return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.delete(multiDBTransactionManager,whereCond));
}
}

View File

@@ -1,15 +1,11 @@
package it.integry.ems.contabil.service;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.base.EntityInterface;
import it.integry.ems_model.config.EmsRestConstants;
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 org.springframework.beans.factory.annotation.Autowired;
@@ -17,19 +13,15 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
@Service
@Scope("request")
public class MovimentiContabiliServices {
public class MovimentiContabiliService {
@Autowired
private EntityProcessor entityProcessor;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
public CtbMovt save(CtbMovt ctbMovt) throws Exception {
public CtbMovt save(MultiDBTransactionManager multiDBTransactionManager, CtbMovt ctbMovt) throws Exception {
List<EntityBase> entitiesToSave = new ArrayList<>();
if (ctbMovt.getNumCmov() != null && ctbMovt.getOperation() != OperationType.DELETE) {
@@ -68,14 +60,14 @@ public class MovimentiContabiliServices {
entitiesToSave = Collections.singletonList(ctbMovt);
}
List<EntityBase> entityRet = entityProcessor.processEntityList(entitiesToSave, true);
List<EntityBase> entityRet = entityProcessor.processEntityList(entitiesToSave, multiDBTransactionManager, true);
UtilityEntity.throwEntitiesException(entityRet);
CtbMovt ctbMovtRet = entityRet.stream().filter(x->x instanceof CtbMovt).map(x->(CtbMovt)x).findFirst().orElse(null);
return ctbMovtRet;
}
public CtbMovt setTipoBene(Integer numCmov, Integer riga, String tipoBene) throws Exception {
public CtbMovt setTipoBene(MultiDBTransactionManager multiDBTransactionManager, Integer numCmov, Integer riga, String tipoBene) throws Exception {
CtbMovt ctbMovt = new CtbMovt()
.setNumCmov(numCmov);
@@ -87,10 +79,10 @@ public class MovimentiContabiliServices {
ctbMovi.setOperation(OperationType.UPDATE);
ctbMovt.getCtbMovi().add(ctbMovi);
return save(ctbMovt);
return save(multiDBTransactionManager, ctbMovt);
}
public List<CtbMovt> delete(String whereCond) throws Exception {
public List<CtbMovt> delete(MultiDBTransactionManager multiDBTransactionManager, String whereCond) throws Exception {
String sql = "SELECT num_cmov " +
" FROM " + CtbMovt.ENTITY +
" WHERE " + whereCond;
@@ -103,7 +95,7 @@ public class MovimentiContabiliServices {
ctbMovts.stream().forEach(x->{x.setOperation(OperationType.DELETE);});
List<EntityBase> entityBaseList = entityProcessor.processEntityList(ctbMovts, false);
List<EntityBase> entityBaseList = entityProcessor.processEntityList(ctbMovts, multiDBTransactionManager, false);
UtilityEntity.throwEntitiesException(entityBaseList);
return ctbMovts;

View File

@@ -0,0 +1,32 @@
package it.integry.ems.logistic.controller;
import it.integry.common.var.CommonConstants;
import it.integry.ems.logistic.service.DepositiService;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.entity.MtbDepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@Scope("request")
@RequestMapping("depositi")
public class DepositiController {
@Autowired
private DepositiService depositiService;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@PostMapping(value = "save")
public @ResponseBody
ServiceRestResponse save(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody MtbDepo mtbDepo) throws Exception {
return ServiceRestResponse.createPositiveResponse(depositiService.save(multiDBTransactionManager, mtbDepo));
}
}

View File

@@ -0,0 +1,88 @@
package it.integry.ems.logistic.service;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class DepositiService {
@Autowired
private EntityProcessor entityProcessor;
public MtbDepo save(MultiDBTransactionManager multiDBTransactionManager, MtbDepo mtbDepo) throws Exception {
List<EntityBase> entityToSave = new ArrayList<>();
mtbDepo.getMtbDepoPosizioni().stream()
.forEach(x->x.setOperation(OperationType.INSERT_OR_UPDATE));
List<String> posizioni =
mtbDepo.
getMtbDepoPosizioni().stream().filter(x -> x.getPosIsChanged() != null && x.getPosIsChanged().equalsIgnoreCase("S"))
.map(MtbDepoPosizioni::getPosizione)
.collect(Collectors.toList());
if (!posizioni.isEmpty()) {
String sql = String.format(
"SELECT * FROM jrl_fase_posizioni WHERE posizione IN (%s)",
UtilityDB.listValueToString(posizioni));
List<JrlFasePosizioni> jrlFasePosizionis = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, JrlFasePosizioni.class);
if (jrlFasePosizionis != null) {
jrlFasePosizionis.forEach(x ->
x
.setCodMdep(mtbDepo.getCodMdep())
.setOperation(OperationType.UPDATE));
entityToSave.addAll(jrlFasePosizionis);
}
sql = String.format(
"SELECT cod_cmac, cod_mdep, posizione FROM ctb_amac WHERE posizione IN (%s)",
UtilityDB.listValueToString(posizioni));
List<CtbAmac> ctbAmacs = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, CtbAmac.class);
if (ctbAmacs != null) {
ctbAmacs.forEach(x ->
x
.setCodMdep(mtbDepo.getCodMdep())
.setOperation(OperationType.UPDATE));
entityToSave.addAll(ctbAmacs);
}
}
List<String> aree = mtbDepo.getMtbDepoArea().stream().map(x -> x.getCodArea()).collect(Collectors.toList());
List<MtbDepoArea> mtbDepoAreas = mtbDepo.getMtbDepoPosizioni()
.stream()
.filter(x -> x.getCodArea() != null && !aree.contains(x.getCodArea()))
.map(x -> {
MtbDepoArea area =
new MtbDepoArea().setCodMdep(x.getCodMdep())
.setCodArea(x.getCodArea());
area.setOperation(OperationType.INSERT_OR_UPDATE);
return area;
}).collect(Collectors.toList());
if (!mtbDepoAreas.isEmpty()) {
mtbDepo.getMtbDepoArea().addAll(mtbDepoAreas);
}
entityToSave.add(mtbDepo);
List<EntityBase> entityRet = entityProcessor.processEntityList(entityToSave, multiDBTransactionManager, true);
UtilityEntity.throwEntitiesException(entityRet);
MtbDepo mtbDepoRet = entityRet.stream().filter(x -> x instanceof MtbDepo).map(x -> (MtbDepo) x).findFirst().orElse(null);
return mtbDepoRet;
}
}