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); }
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); }
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); }
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); }