public async Task <Pedido> GetById(Guid id) { var pedido = await _repositoryPedido.GetById(id); if (pedido.DroneId.GetValueOrDefault() > 0) { pedido.Drone = await _droneRepository.GetById(pedido.DroneId.GetValueOrDefault()); } return(pedido); }
public async Task <ActionResult <Drone> > GetDrone(int id) { var drone = await _droneRepository.GetById(id); if (drone == null) { return(NotFound()); } return(drone); }
void AddDrone() { foreach (var drone in droneData) { var d = _droneRepository.GetById(drone.Id).Result; if (d == null) { _droneRepository.AddDrone(drone).Wait(); } } }
public void TestaAtualizaDrone(int id, int capacidade, int velocidade, int autonomia, int carga, StatusDrone status) { var drone = _droneRepository.GetById(id).Result; drone.Capacidade = capacidade; drone.Velocidade = velocidade; drone.Autonomia = autonomia; drone.Carga = carga; drone.StatusDrone = status; _droneRepository.UpdateDrone(drone).Wait(); }
private async Task distribuirPedidos() { // pedidos mais antigos vao primeiro var pedidos = await _repositoryPedido.GetPedidosEmAberto(); if (!pedidos.Any()) { return; } var droneItinerarios = _droneItinerarioRepository.GetAll().Result .Where(d => d.StatusDrone == EnumStatusDrone.Disponivel) .ToList(); foreach (var droneItinerario in droneItinerarios) { droneItinerario.Drone = await _droneRepository.GetById(droneItinerario.DroneId); } var dronesDisponiveis = droneItinerarios.Select(d => d.Drone).OrderByDescending(d => d.Capacidade).ToList(); if (!dronesDisponiveis.Any()) { return; } IDictionary <Drone, IList <Pedido> > pedidosPorDrone = new Dictionary <Drone, IList <Pedido> >(); IList <Pedido> pedidosEntregar = new List <Pedido>(); IList <Pedido> pedidosDistribuidos = new List <Pedido>(); double distanciaTrajeto = 0; double distanciaRetorno = 0; double distanciaPercorrida = 0; double distanciaTotal = 0; double latitudeOrigem = 0; double longitudeOrigem = 0; int tempoTrajetoCompleto = 0; foreach (var drone in dronesDisponiveis) { pedidosEntregar.Clear(); distanciaTrajeto = 0; distanciaRetorno = 0; distanciaPercorrida = 0; distanciaTotal = 0; latitudeOrigem = 0; longitudeOrigem = 0; tempoTrajetoCompleto = 0; int capacidadeDisponivel = drone.Capacidade; int autonomiaDisponivel = drone.AutonomiaRestante; foreach (var pedido in pedidos) { if (pedidosDistribuidos.Contains(pedido)) { continue; } if (pedido.Peso <= capacidadeDisponivel) { if (pedidosEntregar.Any()) { latitudeOrigem = (double)pedidosEntregar.Last().Cliente.Latitude; longitudeOrigem = (double)pedidosEntregar.Last().Cliente.Longitude; } else { latitudeOrigem = _latitudeLoja; longitudeOrigem = _longitudeLoja; } distanciaTrajeto = calcularDistanciaEmKilometros(latitudeOrigem, longitudeOrigem, (double)pedido.Cliente.Latitude, (double)pedido.Cliente.Longitude); distanciaRetorno = calcularDistanciaEmKilometros((double)pedido.Cliente.Latitude, (double)pedido.Cliente.Longitude, _latitudeLoja, _longitudeLoja); distanciaTotal = distanciaPercorrida + distanciaTrajeto + distanciaRetorno; tempoTrajetoCompleto = calcularTempoTrajetoEmMinutos(distanciaTotal, drone.Velocidade); if (tempoTrajetoCompleto <= drone.AutonomiaRestante) { pedidosEntregar.Add(pedido); distanciaPercorrida += distanciaTrajeto; capacidadeDisponivel -= pedido.Peso; autonomiaDisponivel = drone.AutonomiaRestante - tempoTrajetoCompleto; } } else { continue; } // se não cabe mais, nao precisa verificar os demais pedidos if (capacidadeDisponivel <= 0 || tempoTrajetoCompleto >= drone.AutonomiaRestante) { break; } } if (pedidosEntregar.Any()) { drone.AutonomiaRestante = autonomiaDisponivel; if (!pedidosPorDrone.ContainsKey(drone)) { pedidosPorDrone.Add(drone, new List <Pedido>()); } foreach (var pedido in pedidosEntregar) { pedidosPorDrone[drone].Add(pedido); } pedidosDistribuidos = pedidosDistribuidos.Concat(pedidosEntregar).ToList(); } } if (pedidosPorDrone.Count > 0) { foreach (var item in pedidosPorDrone) { Drone drone = item.Key; DroneItinerario droneItinerario = droneItinerarios.Where(d => d.DroneId == drone.Id).FirstOrDefault(); droneItinerario.DataHora = DateTime.Now; droneItinerario.Drone = drone; droneItinerario.DroneId = drone.Id; droneItinerario.StatusDrone = EnumStatusDrone.EmTransito; await _droneRepository.Update(drone); await _droneItinerarioRepository.Update(droneItinerario); foreach (var pedido in item.Value) { pedido.Drone = drone; pedido.Status = EnumStatusPedido.EmTransito; await _repositoryPedido.Update(pedido); } } } }
public async Task <Drone> GetById(int id) { return(await _droneRepository.GetById(id)); }