コード例 #1
0
 public ActionResult <List <DtoLigacao> > ConsulteLigacoes([FromBody] DtoConsultaLigacoes filtro)
 {
     using (var servico = new ServicoDeLigacoes())
     {
         return(Ok(servico.ObtenhaLigacoes(filtro)));
     }
 }
コード例 #2
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());
        }