public async Task <ActionResult <IEnumerable <SituacaoDroneDTO> > > GetSituacaoDrone() { var drones = await _droneService.GetAll(); IList <SituacaoDroneDTO> situacaoDrones = new List <SituacaoDroneDTO>(); foreach (var drone in drones) { SituacaoDroneDTO situacaoDrone = new SituacaoDroneDTO(); situacaoDrone.Drone = drone; var droneItinerario = _droneItinerarioService.GetAll().Result.SingleOrDefault(x => x.DroneId == drone.Id); if (droneItinerario == null) { situacaoDrone.StatusDrone = EnumStatusDrone.Disponivel.ToString(); } else { situacaoDrone.StatusDrone = droneItinerario.StatusDrone.ToString(); } var pedidos = await _pedidoService.GetAll(); situacaoDrone.Pedidos = pedidos.Where(p => p.Drone != null && p.Status != EnumStatusPedido.Entregue && p.Drone.Id == drone.Id).ToList();; situacaoDrones.Add(situacaoDrone); } return(Ok(situacaoDrones)); }
public async Task <DroneDTO> AtribuirPedidoDrone(Pedido pedido) { var drones = await _droneService.GetAll(); foreach (var drone in drones) { if (DroneAtendeMaisUmPedido(drone, pedido)) { return(new DroneDTO(drone, 0)); //abandona a rotina quando encontra um drone disponivel } } return(null); }
public async Task <DroneDTO> DroneAtendePedido(Pedido pedido) { double distance = GeoCalculator.GetDistance(LATITUDE_SAIDA_DRONE, LONGITUDE_SAIDA_DRONE, pedido.Latitude, pedido.Longitude, 1, DistanceUnit.Kilometers) * 2; var drones = await _droneService.GetAll(); var buscaDrone = drones.Where(d => d.PerfomanceRestante >= distance && d.CapacidadeRestante >= pedido.Peso).OrderByDescending(p => p.Perfomance).FirstOrDefault(); if (buscaDrone == null) { return(null); } buscaDrone.PerfomanceRestante -= distance; buscaDrone.CapacidadeRestante -= pedido.Peso; return(new DroneDTO(buscaDrone, distance)); }
public async Task <IActionResult> GetDrone() { await _pedidoService.DespacharPedidos(); var drones = await _droneService.GetAll(); var situacaoDrones = new List <SituacaoDroneDTO>(); var dronesItinerario = _droneItinerarioService.GetAll().Result; var pedidosEmTransito = await _pedidoService.GetPedidosEmTransito(); foreach (var drone in drones) { var situacaoDrone = new SituacaoDroneDTO { Drone = drone }; var droneItinerario = dronesItinerario.SingleOrDefault(x => x.DroneId == drone.Id); if (droneItinerario == null) { situacaoDrone.StatusDrone = EnumStatusDrone.Disponivel.ToString(); } else { situacaoDrone.StatusDrone = droneItinerario.StatusDrone.ToString(); } situacaoDrone.Pedidos = pedidosEmTransito.Where(p => p.Drone != null && p.Status != EnumStatusPedido.Entregue && p.Drone.Id == drone.Id).ToList(); situacaoDrones.Add(situacaoDrone); } return(Ok(situacaoDrones)); }