bug#al-3113

JCA - 64123 - Espec - Serviços DD - Geração por Marca
dev:
qua:
master
valdir.cordeiro 2023-10-23 14:04:55 -03:00
parent 2edbe5c8d7
commit 8e11e54064
4 changed files with 191 additions and 5 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId>
<artifactId>ModelWeb</artifactId>
<version>1.17.1</version>
<version>1.17.2</version>
<distributionManagement>
<repository>

View File

@ -82,4 +82,36 @@ public interface EsquemaCorridaDAO extends GenericDAO<EsquemaCorrida, Integer> {
public Integer atualizaServicoIntegracaoTotvs(Marca marca, Integer corridaId) throws BusinessException;
/**
* Buscar corrida primeiro piso, a partir do segundo
*
* @param esquemaCorrida
* @return
*/
public EsquemaCorrida buscarPrimeiroPisoPeloSegundo(EsquemaCorrida esquemaCorrida);
/**
* Indica se o esquema é o indicado como terceiro piso nas configuações de doble piso
*
* @param esquemaCorrida
* @return
*/
public boolean esTerceiroPiso(EsquemaCorrida esquemaCorrida);
/**
* Buscar corrida primeiro piso, a partir do terceiro
*
* @param esquemaCorrida
* @return
*/
public EsquemaCorrida buscarPrimeiroPisoPeloTerceiro(EsquemaCorrida esquemaCorrida);
/**
* Buscar corrida, a partir do HijoRebote
*
* @param esquemaCorrida
* @return
*/
public EsquemaCorrida buscarEsquemaPeloHijoRebote(EsquemaCorrida esquemaCorrida);
}

View File

@ -125,6 +125,28 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO<EsquemaCorri
return (cant > 0);
}
/**
* Buscar corrida, a partir do HijoRebote
*
* @param esquemaCorrida
* @return
*/
@SuppressWarnings("unchecked")
@Override
public EsquemaCorrida buscarEsquemaPeloHijoRebote(EsquemaCorrida esquemaCorrida) {
Criteria c = makeCriteria();
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("esquemaCorridaRebote", esquemaCorrida.getNumCorrida()));
List<EsquemaCorrida> primeiroPiso = c.list();
if(primeiroPiso != null && !primeiroPiso.isEmpty()) {
return primeiroPiso.get(0);
}
return null;
}
/**
* Indica se o esquema é o indicado como segundo piso nas configuações de doble piso
@ -143,6 +165,68 @@ public class EsquemaCorridaHibernateDAO extends GenericHibernateDAO<EsquemaCorri
return (cant > 0);
}
/**
* Indica se o esquema é o indicado como terceiro piso nas configuações de doble piso
*
* @param esquemaCorrida
* @return
*/
@Override
public boolean esTerceiroPiso(EsquemaCorrida esquemaCorrida) {
Criteria c = makeCriteria();
c.setProjection(Projections.rowCount());
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("numCorridaPisoExtra2", esquemaCorrida.getNumCorrida()));
Long cant = HibernateFix.count(c.list());
return (cant > 0);
}
/**
* Buscar corrida primeiro piso, a partir do segundo
*
* @param esquemaCorrida
* @return
*/
@SuppressWarnings("unchecked")
@Override
public EsquemaCorrida buscarPrimeiroPisoPeloSegundo(EsquemaCorrida esquemaCorrida) {
Criteria c = makeCriteria();
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("numCorridaPisoExtra", esquemaCorrida.getNumCorrida()));
List<EsquemaCorrida> primeiroPiso = c.list();
if(primeiroPiso != null && !primeiroPiso.isEmpty()) {
return primeiroPiso.get(0);
}
return null;
}
/**
* Buscar corrida primeiro piso, a partir do segundo
*
* @param esquemaCorrida
* @return
*/
@SuppressWarnings("unchecked")
@Override
public EsquemaCorrida buscarPrimeiroPisoPeloTerceiro(EsquemaCorrida esquemaCorrida) {
Criteria c = makeCriteria();
c.add(Restrictions.eq("activo", Boolean.TRUE));
c.add(Restrictions.eq("numCorridaPisoExtra", esquemaCorrida.getNumCorrida()));
List<EsquemaCorrida> primeiroPiso = c.list();
if(primeiroPiso != null && !primeiroPiso.isEmpty()) {
return primeiroPiso.get(0);
}
return null;
}
@Override
public List<EsquemaCorrida> buscaDentroVigencia(Date dataGeracao) {

View File

@ -942,10 +942,11 @@ public class CorridaServiceImpl implements CorridaService {
try {
for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) {
Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
log.info("esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
//Usado para validar se deve buscar o primeiro piso e vincular com o segungo/terceiro caso ele ja esteja criado
boolean isSegundoOuTerceiroPiso = false;
if (isGeracaoAutomaticaCorrida) {
boolean esHijoRebote = esquemaCorridaDAO.esHijoRebote(esquemaCorrida);
boolean esSegundoPiso = esquemaCorridaDAO.esSegundoPiso(esquemaCorrida);
@ -956,9 +957,60 @@ public class CorridaServiceImpl implements CorridaService {
corridaGerada = false;
continue;
}
} else {
// Caso nao seja automatico e o segundo piso seja enviado, busca o primeiro piso e geram os dois (ou tres pisos),
// caso o primeiro piso ja exista, o segundo e gerado e os dois sao vinculados
boolean esHijoRebote = esquemaCorridaDAO.esHijoRebote(esquemaCorrida);
//Nessas tres condições, o "filho" só é gerado a partir do esquema corrida "pai"
if (esHijoRebote) {
log.info("E segundo HijoRebote, procurando a corrida Pai. ");
esquemaCorrida = esquemaCorridaDAO.buscarEsquemaPeloHijoRebote(esquemaCorrida);
if(esquemaCorrida == null) {
log.info(String.format("Esquema nao gerado. esHijoRebote:%s ; ",esHijoRebote));
corridaGerada = false;
continue;
}
log.info("Corrida Pai esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
}
boolean esSegundoPiso = esquemaCorridaDAO.esSegundoPiso(esquemaCorrida);
if(esSegundoPiso) {
isSegundoOuTerceiroPiso = true;
log.info("E segundo Piso, procurando o primeiro piso para gerar. ");
esquemaCorrida = esquemaCorridaDAO.buscarPrimeiroPisoPeloSegundo(esquemaCorrida);
if(esquemaCorrida == null) {
log.info("Primeiro piso nao encontrado, nao ira gerar o servico: " );
corridaGerada = false;
continue;
}
log.info("Primeiro Piso esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
}
boolean esTerceiroPiso = esquemaCorridaDAO.esTerceiroPiso(esquemaCorrida);
if(esTerceiroPiso) {
isSegundoOuTerceiroPiso = true;
log.info("E terceiro Piso, procurando o primeiro piso para gerar. ");
esquemaCorrida = esquemaCorridaDAO.buscarPrimeiroPisoPeloTerceiro(esquemaCorrida);
if(esquemaCorrida == null) {
log.info("Primeiro piso nao encontrado, nao ira gerar o servico: " );
corridaGerada = false;
continue;
}
log.info("Primeiro Piso esquema=" + esquemaCorrida.getEsquemacorridaId() + " numCorrida=" + esquemaCorrida.getNumCorrida());
}
}
Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado);
if(corrida != null) {
generarCorridaInfo(corrida, esquemaCorrida);
}
@ -966,9 +1018,19 @@ public class CorridaServiceImpl implements CorridaService {
corridaPisoExtra = null;
corridaPisoExtra2 = null;
if (corrida == null) {
if (corrida == null && !isSegundoOuTerceiroPiso) {
corridaGerada = false;
continue;
} else if(corrida == null && isSegundoOuTerceiroPiso) {
log.info(" Primeiro piso ja existe, buscando corrida para vincular ao piso extra");
corrida = corridaDAO.buscarPorId(criarIdCorrida(dataGeracao, esquemaCorrida));
if (corrida == null) {
log.info("Nao foi encontrada corrida original, nao sera gerado o segundo/terceiro piso");
corridaGerada = false;
continue;
}
}
// PISO EXTRA
@ -1054,6 +1116,14 @@ public class CorridaServiceImpl implements CorridaService {
return corridaGerada;
}
private Id criarIdCorrida(Date dataGeracao, EsquemaCorrida esquemaCorrida) {
Corrida.Id id = new Corrida.Id();
id.setCorridaId(esquemaCorrida.getNumCorrida());
id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao));
return id;
}
private void criaCorridaRebote(Date dataGeracao, Corrida corrida, Corrida corridaPisoExtra,
Corrida corridaPisoExtra2, EsquemaCorrida esquemaCorrida, Boolean isFeriado) {
log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId());