Пример #1
0
        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));
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        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());
        }