public static string ConsultarEstoquePreACD(string guid, string filtro) { try { int usuarioId = HttpContext.Current.Session["UsuarioId"].ToString().ToInt(); var filtroSQL = new StringBuilder(); var nomeArquivo = Path.Combine(HttpContext.Current.Server.MapPath("."), "Uploads", $"PACD_{guid}.csv"); int totalRegistros = 0; if (!string.IsNullOrWhiteSpace(filtro)) { FiltroConsultaPreACD filtroConsultaPreACD = JsonConvert.DeserializeObject <FiltroConsultaPreACD>(filtro); if (filtroConsultaPreACD != null) { if (!string.IsNullOrEmpty(filtroConsultaPreACD.EntradaDe)) { if (StringHelpers.IsDate(filtroConsultaPreACD.EntradaDe)) { filtroSQL.Append(" AND DataHoraEntradaEstoque >= CONVERT(DATETIME,'" + Convert.ToDateTime(filtroConsultaPreACD.EntradaDe).ToString("dd/MM/yyyy") + " 00:00:00', 103) "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.EntradaAte)) { if (StringHelpers.IsDate(filtroConsultaPreACD.EntradaAte)) { filtroSQL.Append(" AND DataHoraEntradaEstoque <= CONVERT(DATETIME,'" + Convert.ToDateTime(filtroConsultaPreACD.EntradaAte).ToString("dd/MM/yyyy") + " 23:59:59', 103) "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.UnidadeRFB)) { if (filtroConsultaPreACD.UnidadeRFB.ToInt() > 0) { filtroSQL.Append(" AND CodigoURF = '" + filtroConsultaPreACD.UnidadeRFB + "' "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.RecintoDespacho)) { if (filtroConsultaPreACD.RecintoDespacho.ToInt() > 0) { filtroSQL.Append(" AND CodigoRA = '" + filtroConsultaPreACD.RecintoDespacho + "' "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.CnpjResponsavel)) { filtroSQL.Append(" AND REPLACE(REPLACE(REPLACE(IdResponsavel, '.', ''), '/', ''), '-', '') = '" + filtroConsultaPreACD.CnpjResponsavel.RemoverCaracteresEspeciais() + "' "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.NCM)) { filtroSQL.Append(" AND NcmCodigo = '" + filtroConsultaPreACD.NCM + "' "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.PaisDestinatario)) { if (filtroConsultaPreACD.PaisDestinatario.ToInt() > 0) { filtroSQL.Append(" AND CodigoPaisDestinatario = '" + filtroConsultaPreACD.PaisDestinatario + "' "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.EmissaoNFDe)) { if (StringHelpers.IsDate(filtroConsultaPreACD.EmissaoNFDe)) { filtroSQL.Append(" AND DataEmissaoNF >= CONVERT(DATETIME,'" + Convert.ToDateTime(filtroConsultaPreACD.EmissaoNFDe).ToString("dd/MM/yyyy") + " 00:00:00', 103) "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.EmissaoNFAte)) { if (StringHelpers.IsDate(filtroConsultaPreACD.EmissaoNFAte)) { filtroSQL.Append(" AND DataEmissaoNF <= CONVERT(DATETIME,'" + Convert.ToDateTime(filtroConsultaPreACD.EmissaoNFAte).ToString("dd/MM/yyyy") + " 23:59:59', 103) "); } } if (!string.IsNullOrEmpty(filtroConsultaPreACD.CnpjEmitente)) { filtroSQL.Append(" AND REPLACE(REPLACE(REPLACE(NotaFiscalEmitenteIdentificacao, '.', ''), '/', ''), '-', '') = '" + filtroConsultaPreACD.CnpjEmitente.RemoverCaracteresEspeciais() + "' "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.CnpjDestinatario)) { var cnpjs = filtroConsultaPreACD.CnpjDestinatario .Split(',') .Select(c => $"'{c.RemoverCaracteresEspeciais()}'"); filtroSQL.Append($" AND REPLACE(REPLACE(REPLACE(CnpjDestinatario, '.', ''), '/', ''), '-', '') IN ({string.Join(",", cnpjs)}) "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.NumeroNF)) { filtroSQL.Append(" AND NumeroNF = '" + filtroConsultaPreACD.NumeroNF + "' "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.ModeloNF)) { filtroSQL.Append(" AND NotaFiscalModelo = '" + filtroConsultaPreACD.ModeloNF + "' "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.SerieNF)) { filtroSQL.Append(" AND NotaFiscalSerie = '" + filtroConsultaPreACD.SerieNF + "' "); } if (!string.IsNullOrEmpty(filtroConsultaPreACD.Item)) { if (filtroConsultaPreACD.Item.ToInt() > 0) { filtroSQL.Append(" AND Item = " + filtroConsultaPreACD.Item + " "); } } } } using (SqlConnection Con = new SqlConnection(Banco.StringConexao())) { using (SqlCommand Cmd = new SqlCommand()) { Cmd.CommandTimeout = 4800; Cmd.Connection = Con; Cmd.CommandType = CommandType.Text; Cmd.CommandText = $@" SELECT DISTINCT [DataEmissaoNF] ,[NumeroNF] ,[NotaFiscalModelo] ,[NotaFiscalSerie] ,[PesoAferido] ,[Saldo] ,[UnidadeEstatistica] ,[DataHoraEntradaEstoque] ,[ResponsavelNome] ,[ResponsavelIdentificacao] ,[Latitude] ,[Longitude] ,[LocalRaCodigo] ,[LocalRaDescricao] ,[NotaFiscalEmitenteIdentificacao] ,[NotaFiscalEmitenteNome] ,[NotaFiscalUf] ,[TransportadorIdentificacao] ,[TransportadorNome] ,[CodigoRA] ,[NumeroDocumento] ,[Tipo] ,[CodigoNCM] ,[CodigoURF] ,[IdResponsavel] ,[NomeResponsavel] ,[CodigoPaisDestinatario] ,[NomePaisDestinatario] ,[AnoDeposito] ,[SequenciaDeposito] ,[ExisteConteiner] ,[DataConsulta] ,[IdentificacaoCondutor] ,[NomeCondutor] ,[DescricaoAvarias] ,[LocalUrfCodigo] ,[LocalUrfDescricao] ,[NcmCodigo] ,[NcmDescricao] ,[NotaFiscalDestinatarioNome] ,[NotaFiscalDestinatarioPais] ,[NotaFiscalEmissao] ,[NotaFiscalEmitentePais] ,[NotaFiscalNumero] ,[NumeroDue] ,[NumeroItem] ,[PaisDestino] ,[QuantidadeExportada] ,[ResponsavelPais] ,[TransportadorPais] ,[Valor] ,[CnpjDestinatario] ,[Item] ,[SaldoAtual] ,[Cancelado] ,ROW_NUMBER() OVER (ORDER BY Id) AS Linha ,COUNT(*) OVER() TotalLinhas FROM [dbo].[TbConsultaEstoquePreACD] WHERE Id > 0 and DATAHORAENTRADAESTOQUE is not null {filtroSQL.ToString()} ORDER BY DATAHORAENTRADAESTOQUE "; Con.Open(); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); SqlDataReader dataReader = Cmd.ExecuteReader(); //dataReader.Read(); stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; //System.Diagnostics.Debug.WriteLine($"Consulta: {ts} Página: {pagina}"); stopWatch = new Stopwatch(); stopWatch.Start(); //if (dataReader.HasRows) //{ // totalFiltro = Convert.ToInt32(dataReader.GetValue(dataReader.GetOrdinal("TotalLinhas"))); //} EstoqueDAO estoqueDAO = new EstoqueDAO(false); totalRegistros = ObterTotalItensProcessar(filtroSQL.ToString()); estoqueDAO.InserirStatusExportacaoCSV(guid, usuarioId, totalRegistros, 0, "Iniciando Processamento"); StreamWriter sw; if (!File.Exists(nomeArquivo)) { sw = new StreamWriter(new FileStream(nomeArquivo, FileMode.Create), Encoding.UTF8, 65536); StringBuilder sb = new StringBuilder(); var colunasStr = ObterNomesColunas(); var colunas = colunasStr.Split(';'); sw.WriteLine(string.Join(";", colunas)); sw.Close(); } sw = new StreamWriter(new FileStream(nomeArquivo, FileMode.Append), Encoding.UTF8, 65536); stopWatch.Stop(); ts = stopWatch.Elapsed; System.Diagnostics.Debug.WriteLine($"Montar Cabeçalho: {ts}"); stopWatch = new Stopwatch(); stopWatch.Start(); while (dataReader.Read()) { var sb = new StringBuilder(); for (int index = 0; index < dataReader.FieldCount - 2; index++) { if (!dataReader.IsDBNull(index)) { string value = dataReader.GetValue(index).ToString(); if (dataReader.GetFieldType(index) == typeof(String)) { if (value.IndexOf("\"") >= 0) { value = value.Replace("\"", "\"\""); } if (value.IndexOf(";") >= 0) { value = "\"" + value + "\""; } } sb.Append(value); } if (index < dataReader.FieldCount - 2) { sb.Append(";"); } } if (!dataReader.IsDBNull(dataReader.FieldCount - 3)) { sb.Append(dataReader.GetValue(dataReader.FieldCount - 3).ToString().Replace(";", " ")); } sw.WriteLine(string.Join(";", sb.ToString().QuebraDeLinhaXML())); if (dataReader.GetValue(dataReader.GetOrdinal("Linha")).ToString().ToInt() % 10000 == 0) { var registrosProcessados = dataReader.GetValue(dataReader.GetOrdinal("Linha")).ToString().ToInt(); estoqueDAO.AtualizarStatusExportacaoCSV(guid, usuarioId, registrosProcessados, $"Total de registros processados: {registrosProcessados}"); } } estoqueDAO.AtualizarStatusExportacaoCSV(guid, usuarioId, totalRegistros, $"Total de registros processados: {totalRegistros}"); stopWatch.Stop(); ts = stopWatch.Elapsed; System.Diagnostics.Debug.WriteLine($"Escreveu arquivo: {ts}"); dataReader.Close(); sw.Close(); return(""); } } } catch (Exception ex) { throw new Exception(ex.Message); } }