Merge pull request 'fixes bug #AL-3494' (!156) from AL-3494 into master

Reviewed-on: adm/ModelWeb#156
Reviewed-by: aristides <aristides@rjconsultores.com.br>
master
aristides 2024-02-27 17:14:27 +00:00
commit 38e00c557a
6 changed files with 180 additions and 146 deletions

View File

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

View File

@ -35,6 +35,8 @@ public interface CorridaDAO extends GenericDAO<Corrida, Corrida.Id> {
* @return
*/
public Boolean existe(Id id);
public Boolean existeActivo(Id id);
public List<Corrida> buscarPorAutobusCorridasFuturas(DiagramaAutobus diagramaAutobus);

View File

@ -88,6 +88,20 @@ public class CorridaHibernateDAO extends GenericHibernateDAO<Corrida, Corrida.Id
return (cant > 0);
}
@Override
public Boolean existeActivo(final Id id) {
Criteria c = makeCriteria();
c.setProjection(Projections.rowCount());
c.add(Restrictions.eq("id", id));
c.add(Restrictions.eq("activo", ActivoUtil.ATIVO));
Long cant = HibernateFix.count(c.list());
return (cant > 0);
}
@Override
public Corrida suscribir(final Corrida entity) {

View File

@ -1,34 +1,34 @@
package com.rjconsultores.ventaboletos.dao.hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.IntegracaoTotvsDAO;
import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.IntegracaoTotvs;
@Repository("integracaoTotvsDAO")
public class IntegracaoTotvsHibernateDAO extends GenericHibernateDAO<IntegracaoTotvs, Integer> implements IntegracaoTotvsDAO {
@Autowired
public IntegracaoTotvsHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@Override
public void borrarByCorrida(Corrida corrida) {
StringBuilder sQuery = new StringBuilder("update INTEGRACAO_TOTVS_CORRIDA set activo = 0 WHERE corrida_Id = :corridaId AND TRUNC(feccorrida) = :feccorrida ");
SQLQuery qrUpdate = getSession().createSQLQuery(sQuery.toString());
qrUpdate.setParameter("feccorrida", corrida.getId().getFeccorrida());
qrUpdate.setParameter("corridaId", corrida.getId().getCorridaId());
qrUpdate.executeUpdate();
}
}
package com.rjconsultores.ventaboletos.dao.hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.IntegracaoTotvsDAO;
import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.IntegracaoTotvs;
@Repository("integracaoTotvsDAO")
public class IntegracaoTotvsHibernateDAO extends GenericHibernateDAO<IntegracaoTotvs, Integer> implements IntegracaoTotvsDAO {
@Autowired
public IntegracaoTotvsHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@Override
public void borrarByCorrida(Corrida corrida) {
StringBuilder sQuery = new StringBuilder("update INTEGRACAO_TOTVS_CORRIDA set integradototvs = 0 WHERE corrida_Id = :corridaId AND TRUNC(feccorrida) = :feccorrida ");
SQLQuery qrUpdate = getSession().createSQLQuery(sQuery.toString());
qrUpdate.setParameter("feccorrida", corrida.getId().getFeccorrida());
qrUpdate.setParameter("corridaId", corrida.getId().getCorridaId());
qrUpdate.executeUpdate();
}
}

View File

@ -1,91 +1,91 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.rjconsultores.ventaboletos.service;
import java.util.Date;
import java.util.List;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.CorridaTramo;
import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.Corrida.Id;
import com.rjconsultores.ventaboletos.exception.BusinessException;
/**
*
* @author rodrigo
*/
public interface CorridaService extends GenericService<Corrida, Corrida.Id> {
/**
* Genera las corridas de acuerdo con el parametro de cant dias.
*
*
* @return - Si fue generado exitosamente o no
*/
public boolean generarCorridaAutomatica();
public List<Corrida> buscarPorAutobusCorridasFuturas(DiagramaAutobus diagramaAutobus);
public List<Corrida> buscarPorRolOperativoCorridasFuturas(DiagramaAutobus diagramaAutobus);
public List<Corrida> buscarPorFecCorrida(Date value);
public List<Corrida> verificarCorridaId(Integer corridaId);
public List<Corrida> buscarPorId(Integer idCorrida);
public List<Corrida> buscarFiltro(Parada ori, Parada des, Date hora, ClaseServicio cs);
/**
* Regresa la fecha final para el período de generacion automatica de corridas.
*
*
* @return
*/
public Date calcularDataFinalGeneracionCorrida();
public List<Corrida> buscarDistinct(Parada ori, Parada des, Date horaSalidaInicio, Date horaSalidaFin, ClaseServicio cs, Integer corridaId);
/**
* Gera corrida a partir dos servicos selecionados e no intervalo de dias informados. <br/>
*
* @param lsEsquemaCorrida
* @param dataDe
* @param dataAte
* @return A quantidade de corridas geradas
* @throws BusinessException
*/
public Long generarCorridasSelecionadas(List<EsquemaCorrida> lsEsquemaCorrida, Date dataDe, Date dataAte) throws BusinessException;
public List<Corrida> buscarGroupCorrridaId(Integer corridaId, Date dateInicio, Date dateFin);
public List<Corrida> buscarGroupCorrridaId(Integer corridaId, Integer origem, Integer destino, Integer ruta, Integer numRuta, Date dateInicio, Date dateFin);
public Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial);
Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial, Integer corridaId);
Boolean editarCorridaPorOutraCorrida(Estado estado, Date dataInicial, Integer corridaId, Date dataPadrao);
public List<Corrida> buscarCorridaRelAproveitamento(Parada origem, Parada destino, Date feccorrida, Integer corridaId);
public Corrida buscaCorrridaFutura(Ruta ruta, Date fecInicio);
public Boolean existeCorrida(Long id);
public Integer buscarOcupacaoCorrida(Corrida corrida);
public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList);
public Corrida buscarPorId(Corrida.Id id);
public Corrida buscarCorridaAtivaPorId(Id id);
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.rjconsultores.ventaboletos.service;
import java.util.Date;
import java.util.List;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Corrida;
import com.rjconsultores.ventaboletos.entidad.CorridaTramo;
import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.Corrida.Id;
import com.rjconsultores.ventaboletos.exception.BusinessException;
/**
*
* @author rodrigo
*/
public interface CorridaService extends GenericService<Corrida, Corrida.Id> {
/**
* Genera las corridas de acuerdo con el parametro de cant dias.
*
*
* @return - Si fue generado exitosamente o no
*/
public boolean generarCorridaAutomatica();
public List<Corrida> buscarPorAutobusCorridasFuturas(DiagramaAutobus diagramaAutobus);
public List<Corrida> buscarPorRolOperativoCorridasFuturas(DiagramaAutobus diagramaAutobus);
public List<Corrida> buscarPorFecCorrida(Date value);
public List<Corrida> verificarCorridaId(Integer corridaId);
public List<Corrida> buscarPorId(Integer idCorrida);
public List<Corrida> buscarFiltro(Parada ori, Parada des, Date hora, ClaseServicio cs);
/**
* Regresa la fecha final para el período de generacion automatica de corridas.
*
*
* @return
*/
public Date calcularDataFinalGeneracionCorrida();
public List<Corrida> buscarDistinct(Parada ori, Parada des, Date horaSalidaInicio, Date horaSalidaFin, ClaseServicio cs, Integer corridaId);
/**
* Gera corrida a partir dos servicos selecionados e no intervalo de dias informados. <br/>
*
* @param lsEsquemaCorrida
* @param dataDe
* @param dataAte
* @return A quantidade de corridas geradas
* @throws BusinessException
*/
public Long generarCorridasSelecionadas(List<EsquemaCorrida> lsEsquemaCorrida, Date dataDe, Date dataAte) throws BusinessException;
public List<Corrida> buscarGroupCorrridaId(Integer corridaId, Date dateInicio, Date dateFin);
public List<Corrida> buscarGroupCorrridaId(Integer corridaId, Integer origem, Integer destino, Integer ruta, Integer numRuta, Date dateInicio, Date dateFin);
public Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial);
Boolean atualizarCorridaFecHusoFecVerano(Estado estado, Date dataInicial, Integer corridaId);
Boolean editarCorridaPorOutraCorrida(Estado estado, Date dataInicial, Integer corridaId, Date dataPadrao);
public List<Corrida> buscarCorridaRelAproveitamento(Parada origem, Parada destino, Date feccorrida, Integer corridaId);
public Corrida buscaCorrridaFutura(Ruta ruta, Date fecInicio);
public Boolean existeCorrida(Long id);
public Integer buscarOcupacaoCorrida(Corrida corrida);
public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList, boolean isValidaActivo);
public Corrida buscarPorId(Corrida.Id id);
public Corrida buscarCorridaAtivaPorId(Id id);
}

View File

@ -455,7 +455,7 @@ public class CorridaServiceImpl implements CorridaService {
* @return - La corrida generada o null si no fue generada.
*/
@SuppressWarnings("deprecation")
private Corrida generarCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, boolean isPisoExtra, Boolean isFeriado, List<CorridaTramo> corridaTramoList) {
private Corrida generarCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, boolean isPisoExtra, Boolean isFeriado, List<CorridaTramo> corridaTramoList, boolean isValidaActivo) {
Corrida corrida = null;
@ -475,7 +475,7 @@ public class CorridaServiceImpl implements CorridaService {
id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao));
List<EsquemaTramo> lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida);
if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida, horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo)) {
if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida, horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo, isValidaActivo)) {
return null;
}
@ -489,7 +489,7 @@ public class CorridaServiceImpl implements CorridaService {
CorridaCtrl corridaCtrl = criaCorridaCtrl(isPisoExtra, ruta, claseServicio, marca, horario, numCorrida);
corrida = criaCorrida(esquemaCorrida, dataGeracao, id, lsEsquemaTramo, origemCorrida, destinoCorrida,
corridaCtrl, corridaTramoList);
corridaCtrl, corridaTramoList, isValidaActivo);
cantCorridaGenerada++;
@ -503,7 +503,7 @@ public class CorridaServiceImpl implements CorridaService {
}
private Corrida criaCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, Corrida.Id id,
List<EsquemaTramo> lsEsquemaTramo, Parada origemCorrida, Parada destinoCorrida, CorridaCtrl corridaCtrl, List<CorridaTramo> corridaTramoList) {
List<EsquemaTramo> lsEsquemaTramo, Parada origemCorrida, Parada destinoCorrida, CorridaCtrl corridaCtrl, List<CorridaTramo> corridaTramoList, boolean isCorridaInativa) {
Corrida corrida;
corrida = new Corrida();
corrida.setId(id);
@ -571,7 +571,12 @@ public class CorridaServiceImpl implements CorridaService {
}
corrida.setIndTipoVenta(null);
corrida.setCodProdutoFiscal(UtiliteriasFiscal.defineCodigoProduto(corrida.getOrigem().getParadaId(), corrida.getDestino().getParadaId(), corrida.getRuta().getRutaId()));
corrida = corridaDAO.suscribir(corrida);
if(!isCorridaInativa) {
corrida = corridaDAO.suscribir(corrida);
}else {
corrida = corridaDAO.actualizacion(corrida);
}
return corrida;
}
@ -630,7 +635,7 @@ public class CorridaServiceImpl implements CorridaService {
}
private Boolean realizaValidacoesGerais(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer diaSemana, Boolean isFeriado,
Ruta ruta, Corrida.Id id, Integer numCorrida, Date horario, ClaseServicio claseServicio, Marca marca, Boolean isPisoExtra, List<EsquemaTramo> lsEsquemaTramo){
Ruta ruta, Corrida.Id id, Integer numCorrida, Date horario, ClaseServicio claseServicio, Marca marca, Boolean isPisoExtra, List<EsquemaTramo> lsEsquemaTramo, boolean isGeraCorridaInativa){
Integer corridaId = esquemaCorrida.getNumCorrida();
String fecCorrida = DateUtil.getStringDate(horario);
if (!vigenciaValida(esquemaCorrida, dataGeracao)) {
@ -659,9 +664,16 @@ public class CorridaServiceImpl implements CorridaService {
return Boolean.FALSE;
}
if (corridaDAO.existe(id)) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra);
return Boolean.FALSE;
if(!isGeraCorridaInativa) {
if (corridaDAO.existe(id)) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra);
return Boolean.FALSE;
}
}else {
if (corridaDAO.existeActivo(id)) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra);
return Boolean.FALSE;
}
}
if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) {
@ -836,7 +848,7 @@ public class CorridaServiceImpl implements CorridaService {
return b - a;
}
public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList) {
public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList, boolean isValidaActivo) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
@ -931,7 +943,7 @@ public class CorridaServiceImpl implements CorridaService {
}
Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado, corridaTramoList);
corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado, corridaTramoList, isValidaActivo);
corridaPisoExtra = null;
@ -966,7 +978,7 @@ public class CorridaServiceImpl implements CorridaService {
continue;
}
corridaPisoExtra = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null);
corridaPisoExtra = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null, false);
Boolean atualizarPisoExtra = false;
// caso corrida segundo piso for gerada antes, atualizar
@ -978,6 +990,8 @@ public class CorridaServiceImpl implements CorridaService {
if(corridaPisoExtra !=null) {
if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) {
validaCriaReservaCliente(corridaPisoExtra, unUsuarioId, unPuntoVenta, estacionId);
}else {
log.error("Usuario ou ponto de venda ou estação não definidos para reserva especial nas contantes");
}
}
@ -996,7 +1010,7 @@ public class CorridaServiceImpl implements CorridaService {
continue;
}
corridaPisoExtra2 = generarCorrida(esquemaCorridaTerceiroPiso, dataGeracao, true, isFeriado, null);
corridaPisoExtra2 = generarCorrida(esquemaCorridaTerceiroPiso, dataGeracao, true, isFeriado, null, false);
atualizarPisoExtra = false;
// caso corrida segundo piso for gerada antes, atualizar
@ -1009,6 +1023,8 @@ public class CorridaServiceImpl implements CorridaService {
if(corridaPisoExtra !=null) {
if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) {
validaCriaReservaCliente(corridaPisoExtra, unUsuarioId, unPuntoVenta, estacionId);
}else {
log.error("Usuario ou ponto de venda ou estação não definidos para reserva nas contantes");
}
}
}
@ -1043,6 +1059,8 @@ public class CorridaServiceImpl implements CorridaService {
if(corrida !=null) {
if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) {
validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId);
}else {
log.error("Usuario ou ponto de venda ou estação não definidos para reserva especial nas contantes");
}
}
@ -1061,7 +1079,7 @@ public class CorridaServiceImpl implements CorridaService {
Corrida corridaPisoExtra2, EsquemaCorrida esquemaCorrida, Boolean isFeriado) {
log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId());
Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado, null);
Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado, null, false);
Corrida corridaPisoExtraRebote = null;
boolean generaReboteDiaSeguinte = false;
@ -1073,7 +1091,7 @@ public class CorridaServiceImpl implements CorridaService {
log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",ecRebote.getEsquemacorridaId(),ecRebote.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() ));
corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null);
corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null, false);
if (corridaRebote != null && corridaPisoExtraRebote != null) {
// Salvando Referencia da Corrida no piso extra
@ -1337,7 +1355,7 @@ public class CorridaServiceImpl implements CorridaService {
java.sql.Date data = new java.sql.Date(dataGeracao.getTime());
Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
return generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), tmp.getTime(), false, isFeriado, null);
return generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), tmp.getTime(), false, isFeriado, null, false);
}
private List<Integer> getDiaDeLaSemana(TramoTiempo tramoTiempo) {
@ -1476,7 +1494,7 @@ public class CorridaServiceImpl implements CorridaService {
List<EsquemaCorrida> lsTmp = new ArrayList<EsquemaCorrida>();
lsTmp.add(esquemaCorrida);
this.generarCorrida(dataDe, lsTmp, true, null);
this.generarCorrida(dataDe, lsTmp, true, null, false);
calendarData.setTime(dataDe);
calendarData.add(Calendar.DATE, 1);
@ -1521,7 +1539,7 @@ public class CorridaServiceImpl implements CorridaService {
if (dentroVigenciaEsquemaOperacional) {
log.debug("Geracao de servicos sem cant dias especifico. Adotando o padrao");
this.generarCorrida(dataDe, lsEsquemaCorrida, true, null);
this.generarCorrida(dataDe, lsEsquemaCorrida, true, null, false);
} else {
log.info("No hay esquema vigente para la fecha " + sdfData.format(dataDe));
@ -1604,7 +1622,7 @@ public class CorridaServiceImpl implements CorridaService {
break;
}
boolean corridaGerada = this.generarCorrida(dataAte, Arrays.asList(esquemaCorrida), false, null);
boolean corridaGerada = this.generarCorrida(dataAte, Arrays.asList(esquemaCorrida), false, null, false);
log.info(String.format("Corrida gerada = %s [%s - %s]",corridaGerada,esquemaCorrida.getNumCorrida() ,strDataGeracao));
@ -1674,7 +1692,7 @@ public class CorridaServiceImpl implements CorridaService {
while (DateUtil.compareOnlyDate(dataDe, dataAte) <= 0) {
log.info("*** Data: " + sdfData.format(dataDe));
this.generarCorrida(dataDe, lsEsquemaCorrida, false, null);
this.generarCorrida(dataDe, lsEsquemaCorrida, false, null, false);
calendarData.add(Calendar.DATE, 1);
dataDe = calendarData.getTime();