Beispiel #1
0
        public async Task <ModeracaoAutoRS> ListarPerguntasPendentes(ModeracaoAutoRQ request)
        {
            var avaliacoes = new ModeracaoAutoRS();

            avaliacoes.Perguntas = new List <QAProdutoDTO>();


            using (var ctx = new DataBaseContext())
            {
                object[] xParams =
                {
                    new SqlParameter("@APIKey", request.Token),
                };

                var db = await ctx.Database.SqlQuery <QAListarPaginaDataMapper>("exec QAModeracaoListar @APIKey", xParams).ToListAsync();

                if (db.Any())
                {
                    foreach (var item in db)
                    {
                        avaliacoes.Perguntas.Add(
                            new QAProdutoDTO
                        {
                            IDQuestion                = item.IdQA,
                            ClienteNome               = item.ClienteNome,
                            ClienteEmail              = item.ClienteEmail,
                            ClientePergunta           = item.ClientePergunta,
                            RespondidoPorOutroCliente = item.RespTerceiroStatus == 1 ? true : false,
                            Resposta     = item.Resposta,
                            RespostaNome = item.RespTerceiroClienteNome,
                            Produto      = new ProdutoDTO
                            {
                                PrdCodigo = item.ProdCodigo,
                                PrdNome   = item.PrdNome
                            }
                        });
                    }
                }
            }
            return(avaliacoes);
        }
Beispiel #2
0
        public async Task <ModeracaoAutoRS> ListarAvaliacoesPendentes(ModeracaoAutoRQ request)
        {
            var avaliacoes = new ModeracaoAutoRS();

            avaliacoes.Avaliacoes = new List <AvaliacaoDTO>();

            using (var ctx = new DataBaseContext())
            {
                object[] xParams = { new SqlParameter("@APIKey", request.Token) };

                var db = await ctx.Database.SqlQuery <AvalialiacaoListarPaginaDataMapper>("exec AvaliacaoModeracaoListar @APIKey", xParams).ToListAsync();

                if (db.Any())
                {
                    foreach (var item in db)
                    {
                        avaliacoes.Avaliacoes.Add(
                            new AvaliacaoDTO
                        {
                            IdAvaliacao          = item.IdAvaliacao,
                            DataAvaliacao        = item.ClienteDataAvaliacao,
                            ClienteClassificacao = item.ClienteClassificacao,
                            ClienteTitulo        = item.ClienteTitulo,
                            ClienteComentario    = item.ClienteComentario,
                            ClienteLocalizacao   = item.ClienteLocalizacao,
                            ClienteNome          = item.ClienteNome,
                            ClienteEmail         = item.ClienteEmail,
                            ClienteRecomenda     = item.ClienteRecomenda,
                            ClienteVerificado    = item.ClienteVerificado,
                            QtdAjudou            = item.QtdAjudou,
                            QtdNaoAjudou         = item.QtdNaoAjudou
                        });
                    }
                }
            }
            return(avaliacoes);
        }
Beispiel #3
0
        public async Task <string> ExecutaModeracaoAvaliacoes()
        {
            int totalGeral   = 0;
            int totalComErro = 0;
            int totalSucesso = 0;
            var request      = new ModeracaoAutoRQ();
            var response     = new ModeracaoAutoRS();

            response.Avaliacoes = new List <Messages.Dtos.AvaliacaoDTO>();

            var clientes = await cliService.FindAllAsync(x => x.FlagAtivo);

            if (clientes != null)
            {
                foreach (var c in clientes)
                {
                    request.Token = c.APIKey;
                    response      = await avaliacaoService.ListarAvaliacoesPendentes(request);


                    if (response != null && response.Avaliacoes != null && response.Avaliacoes.Any())
                    {
                        var palavraRecusada = await ObterPalavrasRecusadas(c);

                        foreach (var a in response.Avaliacoes)
                        {
                            string clienteTitulo     = a.ClienteTitulo.RemoveDiacriticsLower();
                            string clienteNome       = a.ClienteNome.RemoveDiacriticsLower();
                            string clienteComentario = a.ClienteComentario.RemoveDiacriticsLower();
                            string clienteEmail      = a.ClienteEmail.RemoveDiacriticsLower();

                            var palavraTituloOuComentario = new List <string>();
                            palavraTituloOuComentario.AddRange(ContainBadWords(palavraRecusada, clienteTitulo));
                            palavraTituloOuComentario.AddRange(ContainBadWords(palavraRecusada, clienteComentario));

                            var palavraEmailOuNome = new List <string>();
                            palavraEmailOuNome.AddRange(ContainBadWords(palavraRecusada, clienteEmail));
                            palavraEmailOuNome.AddRange(ContainBadWords(palavraRecusada, clienteNome));

                            if (palavraTituloOuComentario.Any())
                            {
                                a.IdAvaluacaoStatus = StatusAvaliacaoEnum.RejeitadoRoboAprovacao;
                                await avaliacaoService.AlterarStatusAvaliacao(a.IdAvaliacao, StatusAvaliacaoEnum.RejeitadoRoboAprovacao,
                                                                              $"Robô Aprovação - CANCELADO AUTOMATICAMENTE. COMENTÁRIO PARECE TER ALGUMA PALAVRA NEGATIVA/PROFANA OU INVALIDA. PALAVRA(S) ECONTRADA(S): {string.Join(",", palavraTituloOuComentario.Select(x => x))}");

                                totalComErro++;
                            }
                            else if (a.ClienteComentario.Length <= 4)
                            {
                                a.IdAvaluacaoStatus = StatusAvaliacaoEnum.RejeitadoRoboAprovacao;
                                await avaliacaoService.AlterarStatusAvaliacao(a.IdAvaliacao, StatusAvaliacaoEnum.RejeitadoRoboAprovacao,
                                                                              $"Robô Aprovação - CANCELADO AUTOMATICAMENTE. POUCOS CARACTERES NO COMENTÁRIO. CONTEÚDO MENOR QUE 4 É CANCELADO AUTOMATICAMENTE.");

                                totalComErro++;
                            }
                            else
                            {
                                a.IdAvaluacaoStatus = StatusAvaliacaoEnum.PendenteRevisao;
                                await avaliacaoService.AlterarStatusAvaliacao(a.IdAvaliacao, StatusAvaliacaoEnum.PendenteRevisao, "Revisado automaticamente, aguardando revisão manual de usuário.");

                                totalSucesso++;
                            }
                            totalGeral++;
                        }
                    }
                }
            }

            string result = totalGeral > 0 ? string.Format("Moderação automatica executada em {3}. Total Geral:{0}, total com erro:{1}, total aguardando revisão manual:{2} ", totalGeral, totalComErro, totalSucesso, DateTime.Now.ToString()) : "Não há registros para processar.";

            return(result);
        }
Beispiel #4
0
        public async Task <string> ExecutaModeracaoQA()
        {
            int totalGeral   = 0;
            int totalComErro = 0;
            int totalSucesso = 0;
            var request      = new ModeracaoAutoRQ();
            var response     = new ModeracaoAutoRS();

            response.Perguntas = new List <Messages.Dtos.QAProdutoDTO>();

            var clientes = await cliService.FindAllAsync(x => x.FlagAtivo);

            if (clientes != null)
            {
                foreach (var c in clientes)
                {
                    request.Token = c.APIKey;
                    response      = await qaRepository.ListarPerguntasPendentes(request);


                    if (response != null && response.Perguntas != null && response.Perguntas.Any())
                    {
                        var palavraRecusada = await ObterPalavrasRecusadas(c);

                        foreach (var p in response.Perguntas)
                        {
                            var perguntaDuplicada = await qaRepository.FindAllAsync(x => x.IdQAStatus == 5 && x.Produto != null && x.Produto.Codigo.Equals(p.Produto.PrdCodigo) && x.Pergunta.Equals(p.ClientePergunta));

                            string clienteNome       = p.ClienteNome.RemoveDiacriticsLower();
                            string clienteComentario = p.ClientePergunta.RemoveDiacriticsLower();
                            string clienteEmail      = p.ClienteEmail.RemoveDiacriticsLower();

                            var palavraTituloOuComentario = new List <string>();
                            palavraTituloOuComentario.AddRange(ContainBadWords(palavraRecusada, clienteComentario));

                            var palavraEmailOuNome = new List <string>();
                            palavraEmailOuNome.AddRange(ContainBadWords(palavraRecusada, clienteEmail));
                            palavraEmailOuNome.AddRange(ContainBadWords(palavraRecusada, clienteNome));


                            if (palavraTituloOuComentario.Any())
                            {
                                p.IdQAStatus = StatusQAEnum.RejeitadoRoboAprovacao;
                                await qaRepository.AlterarStatusQA(p.IDQuestion, StatusQAEnum.RejeitadoRoboAprovacao,
                                                                   $"Robô Aprovação - CANCELADO AUTOMATICAMENTE. COMENTÁRIO PARECE TER ALGUMA PALAVRA NEGATIVA/PROFANA OU INVALIDA. PALAVRA(S) ECONTRADA(S): {string.Join(",", palavraTituloOuComentario.Select(x => x))}");

                                totalComErro++;
                            }
                            else if (p.ClientePergunta.Length <= 2)
                            {
                                p.IdQAStatus = StatusQAEnum.RejeitadoRoboAprovacao;
                                await qaRepository.AlterarStatusQA(p.IDQuestion, StatusQAEnum.RejeitadoRoboAprovacao,
                                                                   $"Robô Aprovação - CANCELADO AUTOMATICAMENTE. POUCOS CARACTERES NO COMENTÁRIO. CONTEÚDO MENOR QUE 4 É CANCELADO AUTOMATICAMENTE.");

                                totalComErro++;
                            }
                            else if (perguntaDuplicada != null && perguntaDuplicada.Any())
                            {
                                p.IdQAStatus = StatusQAEnum.RejeitadoRoboAprovacao;
                                await qaRepository.AlterarStatusQA(p.IDQuestion, StatusQAEnum.RejeitadoRoboAprovacao,
                                                                   $"Robô Aprovação - CANCELADO AUTOMATICAMENTE. PERGUNTA DUPLICADA PARA UM PRODUTO. A pergunta recusada foi {p.ClientePergunta}");

                                totalComErro++;
                            }
                            else
                            {
                                p.IdQAStatus = StatusQAEnum.PendenteRevisao;
                                await qaRepository.AlterarStatusQA(p.IDQuestion, StatusQAEnum.PendenteRevisao, "Revisado automaticamente, aguardando revisão manual de usuário.");

                                totalSucesso++;
                            }
                            totalGeral++;
                        }
                    }
                }
            }

            string result = totalGeral > 0 ? string.Format("Moderação automatica executada em {3}. Total Geral:{0}, total com erro:{1}, total aguardando revisão manual:{2} ", totalGeral, totalComErro, totalSucesso, DateTime.Now.ToString()) : "Não há registros para processar.";

            return(result);
        }