Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }