public static void CriarObjetos() { TodosOsObjetos = new List <Objeto>(); Estantes = new List <Estante>(); Robos = new List <Robo>(); int teste = 0; for (int i = 1; i < 10 - 3; i++) { int teste2 = 0; for (int j = 0; j < 8; j++) { Estante e = new Estante(i, j); Estantes.Add(e); TodosOsObjetos.Add(e); teste2++; if (teste2 == 2) { j++; teste2 = 0; } } teste++; if (teste == 2) { i++; teste = 0; } } Estantes[1].Produtos.Add(new Produto("Banana")); Estantes[14].Produtos.Add(new Produto("Maçã")); for (int i = 1; i < 8 - 1; i++) { Robo r = new Robo(10 - 2, i); Robos.Add(r); TodosOsObjetos.Add(r); } TodosOsObjetos.Add(PontoDeEntrega); }
public static void ProcessarPedido(Pedido pedido) { // Recebe um JSON com o pedido e busca a estante onde está o produto. List <Estante> estantesComOsProdutosDoPedidoDuplicado = new List <Estante>(); foreach (Produto produto in pedido.Produtos) { estantesComOsProdutosDoPedidoDuplicado.Add(BancoDeDados.Estantes.FirstOrDefault(r => r.Produtos.Any(p => p.NomeProduto == produto.NomeProduto))); } List <Estante> estantesComOsProdutosDoPedido = new List <Estante>(); foreach (Estante e in estantesComOsProdutosDoPedidoDuplicado) { if (!estantesComOsProdutosDoPedido.Contains(e)) { estantesComOsProdutosDoPedido.Add(e); } } // Descobrir quais robôs estão disponíveis List <Objeto> robosDisponiveis = new List <Objeto>(); foreach (Objeto robo in BancoDeDados.Robos) { string retorno = RealizarRequisicao($"{robo.ID}/EstaDisponivel", "get"); if (bool.Parse(retorno)) { robosDisponiveis.Add(robo); } } // Enviar a solicitação para todos os robos disponíveis via API para descobrir qual é o mais próximo do objetivo foreach (Estante e in estantesComOsProdutosDoPedido) { int menorCaminho = int.MaxValue; Robo roboQueVaiPraEstante = null; if (robosDisponiveis.Any()) { foreach (Robo robo in robosDisponiveis) { int distancia = int.Parse(RealizarRequisicao($"{robo.ID}/EstaDisponivel", "post")); if (menorCaminho > distancia) { menorCaminho = distancia; roboQueVaiPraEstante = robo; } } } else { pedidos.Append(pedido); } // Agora que se sabe qual é o robô de menor caminho, envia o robô para a estante RealizarRequisicao($"{roboQueVaiPraEstante.ID}/DefinirObjetivo", "post", JsonConvert.SerializeObject(e)); robosDisponiveis.Remove(roboQueVaiPraEstante); } //Retornar um status 200 (OK) com a mensagem de "Robo de id {ID} está indo buscar o produto" }