public List <StatusDroneDto> GetDroneStatus()
        {
            var droneStatus = _statusDroneExecutor.ExcecuteCommand(GetStatusSqlCommand()).ToList();

            foreach (var status in droneStatus)
            {
                var pedido = _pedidoMongoRepository.FindByIdAsync(status.PedidoId).Result;

                status.ClienteId = pedido.ClienteId;
                status.Nome      = pedido.Cliente.Nome;
                status.Latitude  = pedido.Cliente.Latitude;
                status.Longitude = pedido.Cliente.Longitude;
            }

            var pedidosPendentes = _pedidoMongoRepository.FindAll(_ => _.Situacao == 1).Result;

            droneStatus.AddRange(pedidosPendentes.Select(_ => new StatusDroneDto()
            {
                ClienteId = _.ClienteId,
                DroneId   = 0,
                Latitude  = _.Cliente.Latitude,
                Longitude = _.Cliente.Longitude,
                Nome      = _.Cliente.Nome,
                PedidoId  = _.Id.ToString(),
                Situacao  = false
            }));


            return(droneStatus);
        }
Esempio n. 2
0
        public async Task <DroneStatusDto> GetAvailiableDroneAsync(double distance, Pedido pedido)
        {
            var drones = (await _pedidoDroneRepository.RetornaPedidosEmAbertoAsync())
                         .Select(d => new
            {
                distance = _coordinateService.GetKmDistance(pedido.GetPoint(), pedido.GetPoint()),
                droneId  = d.DroneId
            }).OrderBy(p => p.distance);


            if (drones.FirstOrDefault() != null)
            {
                foreach (var drone in drones)
                {
                    var pedidosDrone = await _pedidoDroneRepository.RetornarPedidosPorDrone(drone.droneId);

                    var pesoAux = 0;

                    foreach (var pedDrone in pedidosDrone)
                    {
                        var pedidoTemp = await _pedidoRepository.FindByIdAsync(pedDrone.PedidoId);

                        pesoAux += pedidoTemp.Peso;
                    }

                    var resultado = _droneRepository.RetornaDroneStatus(drone.droneId);
                    resultado.SomaPeso = pesoAux;

                    if (ConsegueCarregar(resultado, drone.distance, distance, pedido))
                    {
                        return(resultado);
                    }
                    else
                    {
                        var distanciaPedido = resultado.SomaDistancia + distance + drone.distance;

                        await _pedidoDroneRepository.UpdatePedidoDroneAsync(resultado, distanciaPedido);
                    }
                }
                return(null);
            }
            else
            {
                await FinalizaPedidosAsync();

                var drone = _droneRepository.RetornaDrone();
                return(new DroneStatusDto(drone));
            }
        }
Esempio n. 3
0
        private async Task AdicionarPedidoDrone(Pedido pedido, DroneDto drone)
        {
            var newDrone = await _droneRepository.GetByIdAsync(drone.DroneStatus.Drone.Id);

            var newPedido = await _pedidoRepository.FindByIdAsync(pedido.Id.ToString());

            var pedidoDrone = new PedidoDrone()
            {
                Distancia = drone.Distancia,
                Drone     = newDrone,
                DroneId   = drone.DroneStatus.Drone.Id,
                //Pedido = newPedido,
                PedidoId    = pedido.Id.ToString(),
                StatusEnvio = (int)StatusEnvio.AGUARDANDO
            };

            await _pedidoDroneRepository.AddAsync(pedidoDrone);
        }