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

Reviewed-on: adm/ModelWeb#159
Reviewed-by: fabio <fabio.faria@rjconsultores.com.br>
master
fabio 2024-02-29 20:22:47 +00:00
commit 3f222cce7a
4 changed files with 90 additions and 29 deletions

View File

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

View File

@ -18,5 +18,6 @@ public interface CorridaTramoService extends GenericService<CorridaTramo, Intege
public List<CorridaTramo> criaCorridaTramoList(Autobus autobus, Date dataGeracao, Date fechorSalidaOriginalH , public List<CorridaTramo> criaCorridaTramoList(Autobus autobus, Date dataGeracao, Date fechorSalidaOriginalH ,
List<EsquemaTramo> lsEsquemaTramo, Nodo nodo, ClaseServicio claseServicio, String statusCorrida); List<EsquemaTramo> lsEsquemaTramo, Nodo nodo, ClaseServicio claseServicio, String statusCorrida);
public List<CorridaTramo> recriaCorridaTramo(EsquemaCorrida esquemaCorrida, Date dataCorrida, List<EsquemaTramo> esquemaTramoNovoList, Corrida corrida); public List<CorridaTramo> recriaCorridaTramo(EsquemaCorrida esquemaCorrida, Date dataCorrida, List<EsquemaTramo> esquemaTramoNovoList, Corrida corrida, List<EsquemaTramo> lsParadaEsquemaOrignal);
} }

View File

@ -91,10 +91,8 @@ import com.rjconsultores.ventaboletos.utilerias.ActivoUtil;
import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.FeriadoCache; import com.rjconsultores.ventaboletos.utilerias.FeriadoCache;
import com.rjconsultores.ventaboletos.utilerias.HoraSistema; import com.rjconsultores.ventaboletos.utilerias.HoraSistema;
import com.rjconsultores.ventaboletos.utilerias.LocaleUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.utilerias.UtiliteriasFiscal; import com.rjconsultores.ventaboletos.utilerias.UtiliteriasFiscal;
import com.rjconsultores.ventaboletos.vo.esquemaoperacional.TarefaGeracaoCorridaVO;
/** /**
* *
@ -473,15 +471,26 @@ public class CorridaServiceImpl implements CorridaService {
Corrida.Id id = new Corrida.Id(); Corrida.Id id = new Corrida.Id();
id.setCorridaId(numCorrida); id.setCorridaId(numCorrida);
id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao)); id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao));
List<EsquemaTramo> lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida); List<EsquemaTramo> lsEsquemaTramo = null;
Parada origemCorrida = null;
Parada destinoCorrida =null;
boolean isValidaTrecho = true;
if(corridaTramoList !=null && !corridaTramoList.isEmpty()) {
origemCorrida = corridaTramoList.get(0).getOrigem();
destinoCorrida = corridaTramoList.get(corridaTramoList.size()-1).getDestino();
isValidaTrecho = false;
}else {
lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida);
origemCorrida = lsEsquemaTramo.get(0).getTramo().getOrigem();
destinoCorrida = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1).getTramo().getDestino();
}
if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida, horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo, isValidaActivo)) {
if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida,
horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo, isValidaActivo, isValidaTrecho)) {
return null; return null;
} }
Parada origemCorrida = lsEsquemaTramo.get(0).getTramo().getOrigem();
Parada destinoCorrida = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1).getTramo().getDestino();
/* Como o numCorrida corresponde ao corrida_id do corridaCtrl, ou seja, é chave primaria, temos que buscar somente por esse campo /* Como o numCorrida corresponde ao corrida_id do corridaCtrl, ou seja, é chave primaria, temos que buscar somente por esse campo
Caso o registro já exista, atualizamos os dados dele. Sendo assim, o que vai indicar a "duplicidade" de uma corrida será apenas o número dela e não mais o conjunto : clase + marca + horario + ruta*/ Caso o registro já exista, atualizamos os dados dele. Sendo assim, o que vai indicar a "duplicidade" de uma corrida será apenas o número dela e não mais o conjunto : clase + marca + horario + ruta*/
@ -635,7 +644,8 @@ public class CorridaServiceImpl implements CorridaService {
} }
private Boolean realizaValidacoesGerais(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer diaSemana, Boolean isFeriado, 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, boolean isGeraCorridaInativa){ Ruta ruta, Corrida.Id id, Integer numCorrida, Date horario, ClaseServicio claseServicio, Marca marca, Boolean isPisoExtra,
List<EsquemaTramo> lsEsquemaTramo, boolean isGeraCorridaInativa, boolean isValidaTrecho ){
Integer corridaId = esquemaCorrida.getNumCorrida(); Integer corridaId = esquemaCorrida.getNumCorrida();
String fecCorrida = DateUtil.getStringDate(horario); String fecCorrida = DateUtil.getStringDate(horario);
if (!vigenciaValida(esquemaCorrida, dataGeracao)) { if (!vigenciaValida(esquemaCorrida, dataGeracao)) {
@ -672,25 +682,12 @@ public class CorridaServiceImpl implements CorridaService {
return Boolean.FALSE; return Boolean.FALSE;
} }
} }
if(isValidaTrecho) {
if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) { if(!realizaValidacoesTrecho(corridaId, fecCorrida, lsEsquemaTramo)) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Não contem trechos (EsquemaTramo nulo ou vazio)"); return Boolean.FALSE;
return Boolean.FALSE; }
} }
EsquemaTramo primeiroTrechoCorrida = lsEsquemaTramo.get(0);
Parada origemCorrida = primeiroTrechoCorrida.getTramo().getOrigem();
if (origemCorrida == null) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Origem não preenchido (Primeiro trecho EsquemaTramo)");
return Boolean.FALSE;
}
EsquemaTramo ultimoTrechoCorrida = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1);
Parada destinoCorrida = ultimoTrechoCorrida.getTramo().getDestino();
if (destinoCorrida == null) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Destino não preenchido (Último trecho EsquemaTramo)");
return Boolean.FALSE;
}
if(marca !=null && Boolean.FALSE.equals(marca.getActivo())){ if(marca !=null && Boolean.FALSE.equals(marca.getActivo())){
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". MarcaId=" + marca.getMarcaId() +" inativa, corrida não pode ser gerada"); log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". MarcaId=" + marca.getMarcaId() +" inativa, corrida não pode ser gerada");
@ -699,6 +696,29 @@ public class CorridaServiceImpl implements CorridaService {
return Boolean.TRUE; return Boolean.TRUE;
} }
private boolean realizaValidacoesTrecho(Integer corridaId, String fecCorrida,List<EsquemaTramo> lsEsquemaTramo ) {
if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Não contem trechos (EsquemaTramo nulo ou vazio)");
return Boolean.FALSE;
}
EsquemaTramo primeiroTrechoCorrida = lsEsquemaTramo.get(0);
Parada origemCorrida = primeiroTrechoCorrida.getTramo().getOrigem();
if (origemCorrida == null) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Origem não preenchido (Primeiro trecho EsquemaTramo)");
return Boolean.FALSE;
}
EsquemaTramo ultimoTrechoCorrida = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1);
Parada destinoCorrida = ultimoTrechoCorrida.getTramo().getDestino();
if (destinoCorrida == null) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Destino não preenchido (Último trecho EsquemaTramo)");
return Boolean.FALSE;
}
return true;
}
private Boolean validaCorridaDiaSimDiaNao(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer numCorrida ){ private Boolean validaCorridaDiaSimDiaNao(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer numCorrida ){
if (Boolean.TRUE.equals(esquemaCorrida.getIndDiaSimDiaNao())) { if (Boolean.TRUE.equals(esquemaCorrida.getIndDiaSimDiaNao())) {

View File

@ -28,6 +28,7 @@ import com.rjconsultores.ventaboletos.entidad.Nodo;
import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.TramoServicio; import com.rjconsultores.ventaboletos.entidad.TramoServicio;
import com.rjconsultores.ventaboletos.entidad.TramoTiempo; import com.rjconsultores.ventaboletos.entidad.TramoTiempo;
import com.rjconsultores.ventaboletos.service.BoletoService;
import com.rjconsultores.ventaboletos.service.CorridaService; import com.rjconsultores.ventaboletos.service.CorridaService;
import com.rjconsultores.ventaboletos.service.CorridaTramoService; import com.rjconsultores.ventaboletos.service.CorridaTramoService;
import com.rjconsultores.ventaboletos.service.TramoServicioService; import com.rjconsultores.ventaboletos.service.TramoServicioService;
@ -48,6 +49,9 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
@Autowired @Autowired
private CorridaService corridaService; private CorridaService corridaService;
@Autowired
BoletoService boletoService;
public CorridaTramoServiceImpl() { public CorridaTramoServiceImpl() {
super(); super();
log = LogManager.getLogger(CorridaTramoServiceImpl.class); log = LogManager.getLogger(CorridaTramoServiceImpl.class);
@ -96,9 +100,12 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
@Override @Override
@Transactional @Transactional
public List<CorridaTramo> recriaCorridaTramo(EsquemaCorrida esquemaCorrida, Date dataCorrida, List<EsquemaTramo> esquemaTramoNovoList, Corrida corrida) { public List<CorridaTramo> recriaCorridaTramo(EsquemaCorrida esquemaCorrida, Date dataCorrida, List<EsquemaTramo> esquemaTramoNovoList, Corrida corrida, List<EsquemaTramo> lsEsquemaTramoOrignal) {
//Busca todas as corridas tramo
List<CorridaTramo> corridaTramoListAntigas = corridaTramoDAO.buscaCorridaTramoByFecCorridaECorridaId(dataCorrida, esquemaCorrida.getNumCorrida(), false); List<CorridaTramo> corridaTramoListAntigas = corridaTramoDAO.buscaCorridaTramoByFecCorridaECorridaId(dataCorrida, esquemaCorrida.getNumCorrida(), false);
//Caso encontre nas CorridaTramo existente algum trecho vendido que não está nas configurações do serviço retorna null
if(!validaTramoInexistenteServicoComVenda(esquemaCorrida, dataCorrida, lsEsquemaTramoOrignal, corridaTramoListAntigas)) {
return corridaTramoListAntigas;
}
inativaCorridasTramos(corridaTramoListAntigas); inativaCorridasTramos(corridaTramoListAntigas);
@ -115,6 +122,39 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
} }
/**
* Valida se existe alguma CorrridaTramo atualmente que contem venda e não está nas configurações de Serviço.
* @param esquemaCorrida
* @param dataCorrida
* @param lsParadaEsquemaOrignal
* @param corridaTramoListAntigas
* @return
*/
private boolean validaTramoInexistenteServicoComVenda(EsquemaCorrida esquemaCorrida, Date dataCorrida,
List<EsquemaTramo> lsParadaEsquemaOrignal, List<CorridaTramo> corridaTramoListAntigas) {
List<CorridaTramo> corridaTramoInexistenteList = new ArrayList<CorridaTramo>();
for (CorridaTramo corridaTramo : corridaTramoListAntigas) {
boolean isTrechoExiste = false;
for (EsquemaTramo esquemaTramo : lsParadaEsquemaOrignal) {
if(esquemaTramo.getTramo().getOrigem().equals(corridaTramo.getTramo().getOrigem()) &&
esquemaTramo.getTramo().getDestino().equals(corridaTramo.getDestino())) {
isTrechoExiste = true;
break;
}
}
if(!isTrechoExiste) {
corridaTramoInexistenteList.add(corridaTramo);
}
}
for (CorridaTramo corridaTramo : corridaTramoInexistenteList) {
if(boletoService.isExisteBoletoPorCorridaOrigemIdOuDestinoId(esquemaCorrida.getNumCorrida(), dataCorrida, corridaTramo.getOrigem().getParadaId(), corridaTramo.getDestino().getParadaId())){
return false;
}
}
return true;
}
/** /**