fixes bug #AL-3494

master
valdevir 2024-02-29 15:36:17 -03:00
parent d306752cdd
commit 4f7871cc67
4 changed files with 91 additions and 29 deletions

View File

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

View File

@ -18,5 +18,6 @@ public interface CorridaTramoService extends GenericService<CorridaTramo, Intege
public List<CorridaTramo> criaCorridaTramoList(Autobus autobus, Date dataGeracao, Date fechorSalidaOriginalH ,
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.FeriadoCache;
import com.rjconsultores.ventaboletos.utilerias.HoraSistema;
import com.rjconsultores.ventaboletos.utilerias.LocaleUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
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();
id.setCorridaId(numCorrida);
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;
}
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
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,
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();
String fecCorrida = DateUtil.getStringDate(horario);
if (!vigenciaValida(esquemaCorrida, dataGeracao)) {
@ -672,25 +682,12 @@ public class CorridaServiceImpl implements CorridaService {
return Boolean.FALSE;
}
}
if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Não contem trechos (EsquemaTramo nulo ou vazio)");
return Boolean.FALSE;
if(isValidaTrecho) {
if(!realizaValidacoesTrecho(corridaId, fecCorrida, lsEsquemaTramo)) {
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())){
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;
}
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 ){
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.TramoServicio;
import com.rjconsultores.ventaboletos.entidad.TramoTiempo;
import com.rjconsultores.ventaboletos.service.BoletoService;
import com.rjconsultores.ventaboletos.service.CorridaService;
import com.rjconsultores.ventaboletos.service.CorridaTramoService;
import com.rjconsultores.ventaboletos.service.TramoServicioService;
@ -48,6 +49,9 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
@Autowired
private CorridaService corridaService;
@Autowired
BoletoService boletoService;
public CorridaTramoServiceImpl() {
super();
log = LogManager.getLogger(CorridaTramoServiceImpl.class);
@ -96,9 +100,13 @@ public class CorridaTramoServiceImpl implements CorridaTramoService {
@Override
@Transactional
public List<CorridaTramo> recriaCorridaTramo(EsquemaCorrida esquemaCorrida, Date dataCorrida, List<EsquemaTramo> esquemaTramoNovoList, Corrida corrida) {
//Busca todas as corridas tramo
public List<CorridaTramo> recriaCorridaTramo(EsquemaCorrida esquemaCorrida, Date dataCorrida, List<EsquemaTramo> esquemaTramoNovoList, Corrida corrida, List<EsquemaTramo> lsEsquemaTramoOrignal) {
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 null;
}
inativaCorridasTramos(corridaTramoListAntigas);
@ -115,6 +123,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;
}
/**