public static DroneDto CreateFromEntity(DroneEntity dbEntity)
 {
     return(new DroneDto
     {
         iddrones = dbEntity.iddrones,
         ...
     });
        public async Task <DroneEntity> SelecionarDrone(PedidoEntity pedido)
        {
            DroneEntity drone = null;

            var listaDrones = await _dronesRepository.GetAll();

            foreach (var item in listaDrones)
            {
                await AtualizaStatusDrones(item); //Aproveito para atualizar o status de cada drone

                if (!Disponivel(item))            //Se o drone não encontra-se disponível, então pula para verificar a disponibilidade do próximo
                {
                    continue;
                }

                var listPedidosDrone = await _droneQuery.RetornaConsultaDronePedido(item);

                if (SuportaPeso(listPedidosDrone, item, pedido) && TemAutonomiaSuficiente(listPedidosDrone, item, pedido))
                {
                    drone = item;
                    break;
                }
            }
            return(drone);
        }
        public async Task Incluir(DroneEntity drone)
        {
            var model = drone.ConvertTo <Drone>();


            _connection.CreateTableIfNotExists <Drone>();
            await _connection.InsertAsync(model);
        }
Exemple #4
0
 public async Task Incluir(DroneEntity drone)
 {
     using (SqlConnection conexao = new SqlConnection(
                _configuracoes.GetConnectionString(_configConnectionString)))
     {
         await conexao.InsertAsync <DroneEntity>(drone);
     }
 }
 private async Task <ConsultaDronePedidoDTO> RetornConsultaDronePedido(DroneEntity drone)
 {
     return(new ConsultaDronePedidoDTO
     {
         IdDrone = drone.Id,
         Situacao = drone.Status.ToString()
     });
 }
        public async Task Atualizar(DroneEntity drone)
        {
            var model = drone.ConvertTo <Drone>();


            _connection.CreateTableIfNotExists <Drone>();
            await _connection.UpdateAsync(model);
        }
Exemple #7
0
        private async Task AtualizaStatusDrones(DroneEntity drone)
        {
            drone.DataAtualizacao ??= DateTime.Now;
            var total = (DateTime.Now - drone.DataAtualizacao).Value.TotalMinutes;

            switch (drone.Status)
            {
            case DroneStatus.Pronto:
                break;

            case DroneStatus.EmTransito:
                var pedidos = await _pedidosRepository.GetByDroneID(drone.Id);

                if (total > drone.AUTONOMIA_RECARGA)
                {
                    drone.Status          = DroneStatus.Pronto;
                    drone.DataAtualizacao = DateTime.Now;
                    await _dronesRepository.Atualizar(drone);

                    foreach (var pedido in pedidos)
                    {
                        pedido.Status = PedidoStatus.Entregue.ToString();
                        await _pedidosRepository.Atualizar(pedido);
                    }
                }

                if (total > drone.AUTONOMIA_MAXIMA)
                {
                    drone.Status          = DroneStatus.Carregando;
                    drone.DataAtualizacao = DateTime.Now;
                    await _dronesRepository.Atualizar(drone);

                    foreach (var pedido in pedidos)
                    {
                        pedido.Status = PedidoStatus.Entregue.ToString();
                        await _pedidosRepository.Atualizar(pedido);
                    }
                }

                break;

            case DroneStatus.Carregando:
                if (total > drone.TEMPO_RECARGA_MINUTOS)
                {
                    drone.Status          = DroneStatus.Pronto;
                    drone.DataAtualizacao = DateTime.Now;
                    await _dronesRepository.Atualizar(drone);
                }
                break;

            default:
                drone.Status          = DroneStatus.Pronto;
                drone.DataAtualizacao = DateTime.Now;
                await _dronesRepository.Atualizar(drone);

                break;
            }
        }
Exemple #8
0
        public async Task Incluir(DroneEntity drone)
        {
            var model = drone.ConvertTo <Drone>();

            using var conexao = await _dbFactory.OpenAsync();

            conexao.CreateTableIfNotExists <Drone>();
            await conexao.InsertAsync(model);
        }
Exemple #9
0
        public async Task AtualizaDrone(DroneEntity drone)
        {
            if (drone == null)
            {
                return;
            }

            await _dronesRepository.Atualizar(drone);
        }
Exemple #10
0
        private async Task <ConsultaDronePedidoDTO> RetornConsultaDronePedido(DroneEntity drone)
        {
            var pedidos = await _pedidosRepository.GetByDroneID(drone.Id);

            return(new ConsultaDronePedidoDTO
            {
                IdDrone = drone.Id,
                Situacao = drone.Status.ToString(),
                Pedidos = pedidos
            });
        }
Exemple #11
0
        private bool SuportaPeso(ConsultaDronePedidoDTO listDronePedidos, DroneEntity drone, PedidoEntity pedidoNovo)
        {
            bool suporta = false;

            var pesoDeTodosPedidos = listDronePedidos != null && listDronePedidos.Pedidos != null && listDronePedidos.Pedidos.Count > 0 ? (listDronePedidos.Pedidos.Sum(s => s.Peso) + pedidoNovo.Peso) : pedidoNovo.Peso;

            if (pesoDeTodosPedidos <= drone.Capacidade)
            {
                suporta = true;
            }

            return(suporta);
        }
Exemple #12
0
        private async Task <ConsultaDronePedidoDTO> RetornConsultaDronePedido(DroneEntity drone)
        {
            var pedido = await _pedidosRepository.GetByDroneID(drone.Id);

            var idPedido = pedido == null ? (Guid?)null : pedido.Id;

            return(new ConsultaDronePedidoDTO
            {
                IdDrone = drone.Id,
                Situacao = drone.Status.ToString(),
                PedidoId = idPedido
            });
        }
Exemple #13
0
        protected DroneEntity ConvertModelToModelEntity(Drone drone)
        {
            DroneEntity p = new DroneEntity()
            {
                Id               = drone.Id,
                Status           = RetornaStatus(drone.Status),
                AutonomiaMinitos = drone.Autonomia,
                CapacidadeGamas  = drone.Capacidade,
                VelocidadeKmH    = drone.Velocidade,
                DataAtualizacao  = drone.DataAtualizacao
            };

            return(p);
        }
Exemple #14
0
        private bool TemAutonomiaSuficiente(ConsultaDronePedidoDTO listDronePedidos, DroneEntity drone, PedidoEntity pedidoNovo)
        {
            bool temAuto = false;

            var distanciaDeTodosPedidosEmMetros = listDronePedidos != null && listDronePedidos.Pedidos != null && listDronePedidos.Pedidos.Count > 0 ? (listDronePedidos.Pedidos.Sum(s => s.DistanciaDaEntrega) + pedidoNovo.DistanciaDaEntrega) : pedidoNovo.DistanciaDaEntrega;
            var distanciaDeTodosPedidosKM       = distanciaDeTodosPedidosEmMetros / 1000;

            var tempoTotalDeViagemParaTodosPedidosEmMinutos = (distanciaDeTodosPedidosKM * 60) / drone.Velocidade; //Multiplicando o KM por 60 minutos para representar Km/h e depois divido pela velocidade máxima do drone

            if ((tempoTotalDeViagemParaTodosPedidosEmMinutos * 2) <= drone.Autonomia)                              // Multiplico por 2 porque tem a ida e a volta, assim saberei o tempo total gasto em Minutos para entregar os pedidos
            {
                temAuto = true;
            }

            return(temAuto);
        }
Exemple #15
0
        public async Task Atualizar(DroneEntity drone)
        {
            using (SqlConnection conexao = new SqlConnection(
                       _configuracoes.GetConnectionString(_configConnectionString)))
            {
                var dataAtualizacao = DateTime.Now;

                var query = @"UPDATE Dbo.Drone		
			        SET Status = @status, DataAtualizacao = @dataAtualizacao
                    WHERE Id = @id
                ";

                await conexao.ExecuteAsync(query, new { drone.DescricaoStatus, dataAtualizacao, drone.Id }
                                           );
            }
        }
        private async Task AtualizaStatusDrones(DroneEntity drone)
        {
            drone.DataAtualizacao ??= DateTime.Now;
            var total = (drone.DataAtualizacao - DateTime.Now).Value.TotalMinutes;

            switch (drone.Status)
            {
            case DroneStatus.Pronto:
                break;

            case DroneStatus.EmTransito:

                if (total > drone.AUTONOMIA_RECARGA)
                {
                    drone.Status          = DroneStatus.Pronto;
                    drone.DataAtualizacao = DateTime.Now;
                    await _dronesRepository.Atualizar(drone);
                }

                if (total > drone.AUTONOMIA_MAXIMA)
                {
                    drone.Status          = DroneStatus.Carregando;
                    drone.DataAtualizacao = DateTime.Now;
                    await _dronesRepository.Atualizar(drone);
                }

                break;

            case DroneStatus.Carregando:
                if (total > drone.TEMPO_RECARGA_MINUTOS)
                {
                    drone.Status          = DroneStatus.Pronto;
                    drone.DataAtualizacao = DateTime.Now;
                    await _dronesRepository.Atualizar(drone);
                }
                break;

            default:
                drone.Status          = DroneStatus.Pronto;
                drone.DataAtualizacao = DateTime.Now;
                await _dronesRepository.Atualizar(drone);

                break;
            }
        }
        public async Task <ConsultaDronePedidoDTO> RetornaConsultaDronePedido(DroneEntity drone)
        {
            var pedidos = await _pedidosRepository.GetByDroneID(drone.Id);

            List <ConsultaPedidoCompradorDTO> listPedidoComprador = null;

            if (pedidos != null)
            {
                listPedidoComprador = pedidos.Select(async d => await GetPedidosWithComprador(d))
                                      .Select(c => c.Result).ToList();
            }

            return(new ConsultaDronePedidoDTO
            {
                IdDrone = drone.Id,
                Situacao = drone.Status.ToString(),
                Pedidos = pedidos,
                PedidosComprador = listPedidoComprador
            });
        }
 public async Task AtualizaDrone(DroneEntity drone)
 {
     await _dronesRepository.Atualizar(drone);
 }
 public Task Atualizar(DroneEntity drone)
 {
     _drones.FirstOrDefault().DataAtualizacao = DateTime.Now;
     return(Task.CompletedTask);
 }
 public Task Incluir(DroneEntity drone)
 {
     _drones.Add(drone);
     return(Task.CompletedTask);
 }
Exemple #21
0
 private bool Disponivel(DroneEntity drone)
 {
     return(drone.Status.Equals(DroneStatus.Pronto));
 }