public FileStream ObtenhaGravacaoParaPlayer(string uniqueId) { var dataTable = PersistenciaMySql.ExecuteConsulta( $"SELECT calldate, userfield " + $"FROM cdr " + $"WHERE uniqueid = {uniqueId}"); var linhaResultado = dataTable.Rows.OfType <DataRow>().FirstOrDefault(); var data = ((DateTime)linhaResultado?["calldate"]).ToString("yyyy-MM-dd"); var userField = linhaResultado["userfield"].ToString(); var caminhoTemporario = Path.GetTempFileName(); BaixeArquivoEmDiretorioEspecifico(ObtenhaUrlGravacao(data, userField), caminhoTemporario); return(File.OpenRead(caminhoTemporario)); }
public Stream ObtenhaGravacao(string uniqueId, out string nomeDoArquivo) { var dataTable = PersistenciaMySql.ExecuteConsulta( $"SELECT calldate, userfield " + $"FROM cdr " + $"WHERE uniqueid = {uniqueId}"); var linhaResultado = dataTable.Rows.OfType <DataRow>().FirstOrDefault(); var data = ((DateTime)linhaResultado?["calldate"]).ToString("yyyy-MM-dd"); var userField = linhaResultado["userfield"].ToString(); using (var httpClient = CrieHttpClient()) { nomeDoArquivo = $"{userField}.wav"; return(httpClient.GetStreamAsync(ObtenhaUrlGravacao(data, userField)).Result); } }
public FileStream ObtenhaListaDeGravacoes(IList <string> ids, out string nomeArquivoZip) { var idOperacao = $"{DateTime.Now:dd_MM_yyyy_HH_mm_ss}"; var caminhoPasta = Path.Combine($@"{AppDomain.CurrentDomain.BaseDirectory}", "Gravacoes", idOperacao); Directory.CreateDirectory(caminhoPasta); var dataTable = PersistenciaMySql.ExecuteConsulta( $"SELECT calldate, userfield " + $"FROM cdr " + $"WHERE uniqueid IN ({string.Join(", ", ids)})" + $" AND userfield IS NOT NULL" + $" AND userfield != ''"); var listaDeGravacoes = dataTable.Rows.OfType <DataRow>().Select(x => new { Data = ((DateTime)x?["calldate"]).ToString("yyyy-MM-dd"), UserField = x["userfield"].ToString() }).Distinct().ToList(); listaDeGravacoes.ForEach(x => { var testePath = Path.Combine(caminhoPasta, $"{x.UserField}.wav"); BaixeArquivoEmDiretorioEspecifico(ObtenhaUrlGravacao(x.Data, x.UserField), testePath); }); nomeArquivoZip = $"ListaDeGravacoes{idOperacao}.zip"; var teste = Path.Combine($@"{AppDomain.CurrentDomain.BaseDirectory}/Gravacoes/{idOperacao}", nomeArquivoZip); using (var zipOutputStream = new ZipOutputStream(File.Create(teste))) { zipOutputStream.SetLevel(4); var buffer = new byte[4096]; listaDeGravacoes.ForEach(x => { var caminhoArquivo = Path.Combine(caminhoPasta, $"{x.UserField}.wav"); var zipEntry = new ZipEntry($"{x.UserField}.wav") { DateTime = DateTime.Now }; zipOutputStream.PutNextEntry(zipEntry); using (var fileStream = File.OpenRead(caminhoArquivo)) { int sourceBytes; do { sourceBytes = fileStream.Read(buffer, 0, buffer.Length); zipOutputStream.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } }); zipOutputStream.Finish(); zipOutputStream.Close(); } var caminhoArquivoZip = Path.Combine(caminhoPasta, nomeArquivoZip); // Apaga o arquivo após x segundos, calculados com tempo de sobra pro usuário baixar, mesmo com uma taxa de 1 MB/s Task.Run(() => { var fileInfo = new FileInfo(caminhoArquivoZip); var tamanhoEmMb = Convert.ToDecimal(fileInfo.Length / 1000000); var segundosEstimados = Convert.ToInt32(Math.Round(tamanhoEmMb)); Thread.Sleep(TimeSpan.FromSeconds(segundosEstimados > 15 ? segundosEstimados : 15)); MegaUtilitarios.ApagueDiretorioEArquivos(caminhoPasta); }); return(File.OpenRead(caminhoArquivoZip)); }
public List <DtoLigacao> ObtenhaLigacoes(DtoConsultaLigacoes filtro) { var filtros = new List <string>(); var dataHoraInicio = !string.IsNullOrEmpty(filtro.DataInicio + filtro.HoraInicio) ? $"{filtro.DataInicio} {filtro.HoraInicio}" : string.Empty; var dataHoraFim = !string.IsNullOrEmpty(filtro.DataFim + filtro.HoraFim) ? $"{filtro.DataFim} {filtro.HoraFim}" : string.Empty; if (!string.IsNullOrEmpty(dataHoraInicio)) { filtros.Add($"calldate >= '{dataHoraInicio.ConvertaStringDateTimePtBrParaEnUs()}'"); } if (!string.IsNullOrEmpty(dataHoraFim)) { filtros.Add($"calldate <= '{dataHoraFim.ConvertaStringDateTimePtBrParaEnUs()}'"); } var filtroFinal = string.Join(" AND ", filtros); var query = $"SELECT src, dst, calldate, uniqueid, duration " + $"FROM cdr "; if (!string.IsNullOrEmpty(filtroFinal)) { query += $"WHERE {filtroFinal};"; } var dataTable = PersistenciaMySql.ExecuteConsulta(query); var ligacoes = dataTable.Rows.OfType <DataRow>().Select(MonteObjeto).ToList(); ligacoes.ForEach(x => { x.Tipo = x.Origem.Length > 4 ? "Recebida" : "Originada"; }); var dtos = ligacoes.Select(ConvertaParaDto); var dtoLigacoes = dtos.ToList(); var novasLigacoes = dtoLigacoes .Where(dtoLigacao => dtoLigacao.Tipo == "Originada" && dtoLigacao.Numero.Length <= 4) .Select(dtoLigacao => dtoLigacao.CloneObjeto(x => { var rml = x.Ramal; x.Ramal = x.Numero; x.Numero = rml; x.Tipo = "Recebida"; })).ToList(); dtoLigacoes.AddRange(novasLigacoes); dtos = dtoLigacoes; if (!string.IsNullOrEmpty(filtro.Tipo)) { dtos = dtoLigacoes.Where(x => x.Tipo == filtro.Tipo); } if (!string.IsNullOrEmpty(filtro.Numero)) { dtos = dtoLigacoes.Where(x => x.Numero.Contains(filtro.Numero)); } if (!string.IsNullOrEmpty(filtro.Ramal)) { dtos = dtoLigacoes.Where(x => x.Ramal == filtro.Ramal); } int i = 1; return(dtos.OrderByDescending(x => x.DataHora).Select(x => { x.position = i++.ToString(); return x; }).ToList()); }