/// <summary> /// Compara a estrutura nas duas listas /// </summary> /// <param name="pObjetosLista1"></param> /// <param name="pObjetosLista2"></param> /// <param name="pEstrutura"></param> /// <returns></returns> public EstruturaComparacao ComparaEstruturas(List <ObjetoComparacaoLista> pObjetosLista1, List <ObjetoComparacaoLista> pObjetosLista2, string pEstrutura) { EstruturaComparacao saida = new EstruturaComparacao(); saida.NomeEstruturaSaida = FuncoesUteis.NomeEstruturaMaiusculo(pEstrutura); saida.PosicoesSomenteListaOriginal = pObjetosLista1.Where(x => !pObjetosLista2.Any(y => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, y.NumeracaoComMaterial))).Select(x => x.NumeracaoComMaterial).ToList(); saida.PosicoesSomenteListaNova = pObjetosLista2.Where(x => !pObjetosLista1.Any(y => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, y.NumeracaoComMaterial))).Select(x => x.NumeracaoComMaterial).ToList(); List <string> posicoesNasDuas = pObjetosLista1.Where(x => pObjetosLista2.Any(y => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, y.NumeracaoComMaterial))).Select(x => x.NumeracaoComMaterial).ToList(); if (posicoesNasDuas.Count > 0) { foreach (string posicao in posicoesNasDuas) { ObjetoComparacaoLista objetoLista1 = pObjetosLista1.FirstOrDefault(x => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, posicao)); ObjetoComparacaoLista objetoLista2 = pObjetosLista2.FirstOrDefault(x => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, posicao)); List <ErroPosicao> divergencias = objetoLista1.CompararComObjeto(objetoLista2); if (divergencias.Count > 0) { saida.ListaPosicoesComErros.Add(new PosicaoComparacao(divergencias, posicao)); } } } return(saida); }
/// <summary> /// Compara a estrutura nas duas listas /// </summary> /// <param name="pObjetosLista1"></param> /// <param name="pObjetosLista2"></param> /// <param name="pQualLista"></param> /// <returns></returns> public List <DivergenciaEntreEstruturaLista> ComparaEstruturasUmaLista(Dictionary <string, List <ObjetoComparacaoLista> > pEstruturasLista, string pQualLista) { List <DivergenciaEntreEstruturaLista> saida = new List <DivergenciaEntreEstruturaLista>(); for (int i = 0; i < pEstruturasLista.Count; i++) { string nomeEstrutura = pEstruturasLista.Keys.ToList()[i]; List <ObjetoComparacaoLista> estrutura1 = pEstruturasLista[nomeEstrutura]; foreach (ObjetoComparacaoLista objetoEstrutura1 in estrutura1) { DivergenciaEntreEstruturaLista jaEncontrouErro = saida.FirstOrDefault(x => x.Posicao.Equals(objetoEstrutura1.NumeracaoComMaterial)); if (jaEncontrouErro != null) { jaEncontrouErro.EstruturasQueContem.Add(nomeEstrutura); } else { for (int k = i + 1; k < pEstruturasLista.Count; k++) { string nomeEstrutura2 = pEstruturasLista.Keys.ToList()[k]; List <ObjetoComparacaoLista> estrutura2 = pEstruturasLista[nomeEstrutura2]; ObjetoComparacaoLista objetoEstrutura2 = estrutura2.FirstOrDefault(x => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, objetoEstrutura1.NumeracaoComMaterial)); if (objetoEstrutura2 != null) { List <ErroPosicao> divergencias = objetoEstrutura1.CompararComObjeto(objetoEstrutura2); if (divergencias.Count > 0) { if (divergencias.Count == 1 && divergencias[0].TipoErroEnum.Equals(EnumErrosPosicao.Quantidade)) { continue; } saida.Add(new DivergenciaEntreEstruturaLista(new List <string> { nomeEstrutura }, pQualLista, objetoEstrutura1.NumeracaoComMaterial)); } } } } } } return(saida); }
/// <summary> /// A partir das listas de string que representam cada linha da lista de material em Excel, cria os objetosComparacaoLista para cada estrutura /// </summary> /// <param name="pListaLinhasListaMateriais"></param> /// <returns></returns> public static Dictionary <string, List <ObjetoComparacaoLista> > CriaObjetosComparacaoListaByTxt(List <string> pListaLinhasListaMateriais) { string estruturaVigenteLista = ""; Dictionary <string, List <ObjetoComparacaoLista> > dicObjetosPorEstrutura = new Dictionary <string, List <ObjetoComparacaoLista> >(); for (int i = 0; i < pListaLinhasListaMateriais.Count; i++) { string objetoLista = pListaLinhasListaMateriais[i]; if (objetoLista.Count() < 2) { continue; } if (VerificaLinhaTXTEstrutura(objetoLista)) { estruturaVigenteLista = objetoLista.Split(new string[] { " - " }, StringSplitOptions.RemoveEmptyEntries).Last(); continue; } ObjetoComparacaoLista objetoCriado = null; //CHAPA if (objetoLista.Substring(14, 24).Replace(" ", "").Contains("C")) { objetoCriado = new ChapaComparacaoLista(objetoLista, estruturaVigenteLista); } //CANTONEIRA else { objetoCriado = new CantoneiraComparacaoLista(objetoLista, estruturaVigenteLista); } if (!dicObjetosPorEstrutura.ContainsKey(estruturaVigenteLista)) { dicObjetosPorEstrutura.Add(estruturaVigenteLista, new List <ObjetoComparacaoLista>()); } dicObjetosPorEstrutura[estruturaVigenteLista].Add(objetoCriado); } return(dicObjetosPorEstrutura); }
/// <summary> /// A partir das listas de string que representam cada linha da lista de material em Excel, cria os objetosComparacaoLista para cada estrutura /// </summary> /// <param name="pListaLinhasListaMateriais"></param> /// <returns></returns> public static Dictionary <string, List <ObjetoComparacaoLista> > CriaObjetosComparacaoListaByExcel(List <List <string> > pListaLinhasListaMateriais) { string estruturaVigenteLista = ""; Dictionary <string, List <ObjetoComparacaoLista> > dicObjetosPorEstrutura = new Dictionary <string, List <ObjetoComparacaoLista> >(); for (int i = 0; i < pListaLinhasListaMateriais.Count; i++) { List <string> objetoLista = pListaLinhasListaMateriais[i]; if (i > 10 && pListaLinhasListaMateriais[i - 4][0].Equals("L I S T A D E M A T E R I A I S") && pListaLinhasListaMateriais[i + 1][0].Contains("Conj. Soldado")) { estruturaVigenteLista = objetoLista[0]; } bool eCalota = objetoLista[4].ToLower().Contains("calota") || (objetoLista[4].Contains("d") && objetoLista[4].Contains("r")); if (objetoLista.Count < 9 || string.IsNullOrEmpty(objetoLista[1]) || string.IsNullOrEmpty(objetoLista[4]) || (!eCalota && string.IsNullOrEmpty(objetoLista[6])) || string.IsNullOrEmpty(objetoLista[7]) || string.IsNullOrEmpty(objetoLista[8])) { continue; } string posicao = objetoLista[1].ToString().Split(new string[] { ".0" }, StringSplitOptions.RemoveEmptyEntries).First().Split(new string[] { ",0" }, StringSplitOptions.RemoveEmptyEntries).First().Replace(" ", ""); string posicaoSemMaterial = posicao.Last().Equals('H') || posicao.Last().Equals('G') || posicao.Last().Equals('h') || posicao.Last().Equals('g') ? posicao.Remove(posicao.Count() - 1) : posicao; //posicaoStringNumero so serve pra testar converter pra double no try e garantir que é uma linha de uma peça na lista string posicaoStringNumero = posicaoSemMaterial; if (Char.IsLetter(posicaoSemMaterial.Last())) { posicaoStringNumero = posicaoStringNumero.Remove(posicaoStringNumero.Count() - 1); } if (Char.IsLetter(posicaoSemMaterial.First())) { posicaoStringNumero = posicaoStringNumero.Remove(0, 1); } try { System.Convert.ToDouble(posicaoStringNumero); } catch { continue; } ObjetoComparacaoLista objetoCriado = null; //CHAPA if (objetoLista[4].Contains("C")) { objetoCriado = new ChapaComparacaoLista(objetoLista, estruturaVigenteLista); } //CANTONEIRA else { objetoCriado = new CantoneiraComparacaoLista(objetoLista, estruturaVigenteLista); } if (!dicObjetosPorEstrutura.ContainsKey(estruturaVigenteLista)) { dicObjetosPorEstrutura.Add(estruturaVigenteLista, new List <ObjetoComparacaoLista>()); } dicObjetosPorEstrutura[estruturaVigenteLista].Add(objetoCriado); } return(dicObjetosPorEstrutura); }