public async Task AtualizarStatusDrones() { await CriarDroneItinerario(); var droneItinerarios = _droneItinerarioRepository.ObterTodos().Result.Where(d => d.StatusDrone != EnumStatusDrone.Disponivel).ToList(); foreach (var droneItinerario in droneItinerarios) { if (droneItinerario.StatusDrone == EnumStatusDrone.Carregando) { if (DateTime.Now.Subtract(droneItinerario.DataHora).TotalMinutes >= droneItinerario.Drone.Carga) { droneItinerario.StatusDrone = EnumStatusDrone.Disponivel; droneItinerario.Drone.AutonomiaRestante = droneItinerario.Drone.Autonomia; droneItinerario.DataHora = DateTime.Now; await _droneItinerarioRepository.Atualizar(droneItinerario); } } else if (droneItinerario.StatusDrone == EnumStatusDrone.EmTransito) { var pedidos = _repositoryPedido.ObterPedidosEmTransito().Result.Where(p => p.Status == EnumStatusPedido.EmTransito && p.Drone.Id == droneItinerario.DroneId).ToList(); int tempoEntrega = CalcularTempoTotalEntregaEmMinutos(pedidos, droneItinerario.Drone); if (droneItinerario.DataHora.AddMinutes(tempoEntrega) <= DateTime.Now) { int limiteAutonomiaParaRecarga = Convert.ToInt32(Math.Ceiling(droneItinerario.Drone.Autonomia * 0.2)); if (droneItinerario.Drone.AutonomiaRestante <= limiteAutonomiaParaRecarga) { droneItinerario.StatusDrone = EnumStatusDrone.Carregando; } else { droneItinerario.StatusDrone = EnumStatusDrone.Disponivel; } droneItinerario.DataHora = DateTime.Now; foreach (var pedido in pedidos) { pedido.InformarStatus(EnumStatusPedido.Entregue); await _repositoryPedido.Atualizar(pedido); } await _droneItinerarioRepository.Atualizar(droneItinerario); } } } }
public async Task <bool> Update(DroneItinerario droneItinerario) { await _droneItinerarioRepository.Atualizar(droneItinerario); return(await _droneItinerarioRepository.UnitOfWork.Commit()); }