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); }
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); }
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); }
public AssociarPedidoDroneService(IUnitOfWork unitOfWork, IOptions <DronePontoInicialConfig> dronePontoInicialConfig, ICalcularTempoEntrega calcularTempoEntrega) { _unitOfWork = unitOfWork; _calcularTempoEntrega = calcularTempoEntrega; _dronePontoInicialConfig = dronePontoInicialConfig; }
public CalcularTempoEntregaTests() { _calcularTempoEntrega = new CalcularTempoEntrega(); }