public static void BuscaObjetosDaTela() { var listaRobos = Select("Robo", new List <string> { "id", "posicaoInicialX", "posicaoInicialY" }); TodosOsObjetos = new List <Objeto>(); Robos = new List <Robo>(); foreach (object[] robozinho in listaRobos) { Robo robo = new Robo(int.Parse(robozinho[0].ToString()), int.Parse(robozinho[1].ToString()), int.Parse(robozinho[2].ToString())); Robos.Add(robo); TodosOsObjetos.Add(robo); } var listaEstante = Select("Estante", new List <string> { "id", "posicaoInicialX", "posicaoInicialY" }); Estantes = new List <Estante>(); foreach (object[] estanteEE in listaEstante) { Estante estante = new Estante(int.Parse(estanteEE[0].ToString()), int.Parse(estanteEE[1].ToString()), int.Parse(estanteEE[2].ToString())); Estantes.Add(estante); TodosOsObjetos.Add(estante); } var listaPde = Select("PontoDeEntrega", new List <string> { "id", "posicaoInicialX", "posicaoInicialY" }); foreach (object[] pde in listaPde) { PontoDeEntrega = new PontoEntrega(int.Parse(pde[0].ToString()), int.Parse(pde[1].ToString()), int.Parse(pde[2].ToString())); } TodosOsObjetos.Add(PontoDeEntrega); }
public 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) { var estantesComProduto = BancoDeDados.Select("produto", new List <string> { "idEstante" }, $"nome like '{produto.NomeProduto.ToLower()}'"); int idEstante = int.Parse(((object[])estantesComProduto[0])[0].ToString()); estantesComOsProdutosDoPedidoDuplicado.Add(BancoDeDados.Estantes.FirstOrDefault(r => r.ID == idEstante)); } 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; string estanteSerializada = JsonConvert.SerializeObject(e); if (robosDisponiveis.Any()) { foreach (Robo robo in robosDisponiveis) { int distancia = int.Parse(RealizarRequisicao($"{robo.ID}/VerificarDistancia", "post", estanteSerializada)); 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", estanteSerializada); robosDisponiveis.Remove(roboQueVaiPraEstante); } //Retornar um status 200 (OK) com a mensagem de "Robo de id {ID} está indo buscar o produto" }