Ejemplo n.º 1
0
        public bool ValidarAutonomiaSobraPorPontoEntrega(ICalcularTempoEntrega calcularTempoEntrega, double latitudeOrigem, double longitudeOrigem, double latitudeDestino, double longitudeDestino)
        {
            var ultimaLatitude  = latitudeOrigem;
            var ultimaLongitude = longitudeOrigem;

            //obter tempo entrega dos pedidos que ja estao no drone
            double tempoEntregaAtual = 0;

            foreach (var cliente in Pedidos.Where(x => x.Status == PedidoStatus.EmEntrega).Select(x => x.Usuario))
            {
                tempoEntregaAtual += calcularTempoEntrega.ObterTempoEntregaEmMinutosIda(ultimaLatitude, ultimaLongitude, cliente.Latitude, cliente.Longitude, Velocidade);
                ultimaLatitude     = cliente.Latitude;
                ultimaLongitude    = cliente.Longitude;
            }

            //ida do ultimo pedido até o novo pedido
            var tempoIdaUltimoPedido = calcularTempoEntrega.ObterTempoEntregaEmMinutosIda(ultimaLatitude, ultimaLongitude, latitudeDestino, longitudeDestino, Velocidade);

            //volta pra base
            var tempoVoltaUltimoPedido = calcularTempoEntrega.ObterTempoEntregaEmMinutosIda(latitudeDestino, longitudeDestino, latitudeOrigem, longitudeOrigem, Velocidade);

            // somar com o tempo do novo pedido
            tempoEntregaAtual += tempoIdaUltimoPedido;
            tempoEntregaAtual += tempoVoltaUltimoPedido;

            //obter autonomia atual considerando a bateria do drone
            var autonomialAtual = Autonomia * Carga / 100;

            return((autonomialAtual - tempoEntregaAtual) >= 0);
        }
Ejemplo n.º 2
0
        public bool ValidarAutonomia(ICalcularTempoEntrega calcularTempoEntrega, double latitudeOrigem, double longitudeOrigem, double latitudeDestino, double longitudeDestino)
        {
            var tempoEmMinutos = calcularTempoEntrega.ObterTempoEntregaEmMinutos(latitudeOrigem, longitudeOrigem, latitudeDestino, longitudeDestino, Velocidade);

            // nao entrega
            if (tempoEmMinutos == 0)
            {
                return(false);
            }

            return(tempoEmMinutos <= Autonomia);
        }
Ejemplo n.º 3
0
        public bool AdicionarPedido(Pedido pedido, ICalcularTempoEntrega calcularTempoEntrega, double latitudeOrigem, double longitudeOrigem)
        {
            var temCapacidade = ValidarCapacidadeSobra(pedido.Peso);

            if (!temCapacidade)
            {
                return(false);
            }

            var temAutonomia = ValidarAutonomiaSobraPorPontoEntrega(calcularTempoEntrega, latitudeOrigem, longitudeOrigem, pedido.Usuario.Latitude, pedido.Usuario.Longitude);

            if (!temAutonomia)
            {
                return(false);
            }


            _pedidos.Add(pedido);
            return(true);
        }
Ejemplo n.º 4
0
 public AssociarPedidoDroneService(IUnitOfWork unitOfWork, IOptions <DronePontoInicialConfig> dronePontoInicialConfig, ICalcularTempoEntrega calcularTempoEntrega)
 {
     _unitOfWork              = unitOfWork;
     _calcularTempoEntrega    = calcularTempoEntrega;
     _dronePontoInicialConfig = dronePontoInicialConfig;
 }
 public CalcularTempoEntregaTests()
 {
     _calcularTempoEntrega = new CalcularTempoEntrega();
 }