示例#1
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));
            }
        }
        public async Task TestDroneAtendePedidoQuandoDroneExiste()
        {
            var droneService = new DroneService(_coordinateService,
                                                _pedidoDroneRepository,
                                                _droneRepository,
                                                _pedidoRepository);
            var pedidoService = new PedidoService(droneService, _coordinateService);

            _coordinateService.GetKmDistance(Arg.Any <Point>(), Arg.Any <Point>())
            .Returns(10);
            _pedidoDroneRepository.RetornaPedidosEmAbertoAsync().Returns(SetupTests.GetPedidoDrones(StatusEnvio.AGUARDANDO));
            _droneRepository.RetornaDroneStatus(Arg.Any <int>())
            .Returns(SetupTests.GetDroneStatusDto());
            var drone = await pedidoService.DroneAtendePedido(SetupTests.GetPedido());

            Assert.True(drone != null);
        }