public RoteiroColetaDTO getRoteiroCompleto([FromBody] ParametrosCalculoRoteiroCompletoDTO param) { RoteiroColetaDTO roteiro = param.Roteiro; ParadaRoteiroColetaDTO[] paradas = roteiro.Paradas; DateTime dataHoraPartida = DateTime.Parse(param.DataHoraPartida, new CultureInfo("pt-BR")); float velocidade = param.Velocidade; float distanciaTotal = roteiro.Distancia; float distanciaAcc = 0; int qtdParadas = paradas.Length; DateTime dataHoraAnterior = dataHoraPartida; foreach (var parada in paradas) { float distanciaTrecho = parada.Distancia; //Calculando o tempo de deslocamento no trecho, adicionando 10% de margem de segurança DateTime dataHoraChegada = dataHoraAnterior.AddMilliseconds((distanciaTrecho / velocidade) * (60 * 60 * 1000)); parada.HorarioChegada = dataHoraChegada.ToString("dd/MM/yyyy HH:mm:ss"); dataHoraAnterior = dataHoraChegada.AddMinutes(30); //Contabilizando 30 minutos para carregamento do veículo distanciaAcc += distanciaTrecho; } roteiro.DataHoraRetorno = dataHoraAnterior.AddMilliseconds(((distanciaTotal - distanciaAcc) / velocidade) * (60 * 60 * 1000)).ToString("dd/MM/yyyy HH:mm:ss"); return(roteiro); }
public async Task <RoteiroColetaDTO> getRoteiroCalculado(String tipo, [FromBody] ParadaRoteiroColetaDTO[] paradas, [FromServices] IHttpContextAccessor accessor) { String cpfLogado = accessor.HttpContext.User.Identity.Name; SupervisorLogistica sup = (new DAOSupervisorLogistica()).obter(cpfLogado); RoteiroColetaDTO roteiro = null; if (sup != null) { if (tipo == "auto") { roteiro = FacadeRotas.gerarRoteiroAutomatico(paradas, sup.CentroDistribuicao); } else { roteiro = FacadeRotas.gerarRoteiroManual(paradas, sup.CentroDistribuicao); } } return(roteiro); }
public static RoteiroColetaDTO gerarRoteiroAutomatico(ParadaRoteiroColetaDTO[] paradas, CentroDistribuicao centroDistribuicao) { ConectorRotas conector = obterConectorRotas(); RoteiroColetaDTO roteiro = null; Local[] locais = derivarLocais(paradas, centroDistribuicao); OtimizacaoRota o = conector.obterOtimizacaoRota(locais).Result; float distanciaTotal = o.DistanciaTotal; int[] indicesReordenados = o.SequenciaLocais; float[] distanciasTrechos = o.DistanciasTrechos; List <ParadaRoteiroColetaDTO> paradasReordenadas = new List <ParadaRoteiroColetaDTO>(); foreach (var indice in indicesReordenados) { int i = indice; if ((i != 0) && (i != (indicesReordenados.Count() - 1))) { paradasReordenadas.Add(paradas[i - 1]); } } for (int p = 0; p < paradasReordenadas.Count; p++) { float distanciaTrecho = distanciasTrechos[p]; paradasReordenadas[p].Distancia = distanciaTrecho; } roteiro = new RoteiroColetaDTO(); roteiro.Distancia = distanciaTotal; roteiro.Paradas = paradasReordenadas.ToArray(); return(roteiro); }
public static RoteiroColetaDTO gerarRoteiroManual(ParadaRoteiroColetaDTO[] paradas, CentroDistribuicao centroDistribuicao) { ConectorRotas conector = new ConectorMapQuest(); RoteiroColetaDTO roteiro = null; Local[] locais = derivarLocais(paradas, centroDistribuicao); MensuracaoRota m = conector.obterMensuracaoRota(locais).Result; float distanciaTotal = m.DistanciaTotal; float[] distanciasTrechos = m.DistanciasTrechos; for (int p = 0; p < paradas.Length; p++) { paradas[p].Distancia = distanciasTrechos[p]; } roteiro = new RoteiroColetaDTO(); roteiro.Distancia = distanciaTotal; roteiro.Paradas = paradas; return(roteiro); }