コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }