/// <summary> /// Envia o alerta por API para o sistema Notificações. /// </summary> /// <param name="notificacao"></param> private static bool EnviarNotificacao(NotificacaoDTO notificacao) { SYS_RecursoAPI recurso = new SYS_RecursoAPI { rap_id = (int)eRecursoAPI.Notificacoes }; SYS_RecursoAPIBO.GetEntity(recurso); if (recurso.IsNew || string.IsNullOrEmpty(recurso.rap_url) || recurso.rap_situacao == (byte)RecursoAPISituacao.Excluido) { return(true); } HttpClient client = new HttpClient(); List <SYS_UsuarioAPI> lstUsuario = SYS_RecursoUsuarioAPIBO.SelecionaUsuarioPorRecurso(eRecursoAPI.Notificacoes); if (lstUsuario.Any()) { var auth = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", lstUsuario.First().uap_usuario, lstUsuario.First().uap_senha)); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(auth)); } HttpContent contentPost = new StringContent(JsonConvert.SerializeObject(notificacao), Encoding.UTF8, "application/json"); HttpResponseMessage response = client.PostAsync(recurso.rap_url, contentPost).Result; if (response.IsSuccessStatusCode) { return(true); } return(false); }
//Lista todas as notificações, inclusive invalidas, quando o check box está marcado na tela de listar todas as notificações public List <NotificacaoDTO> GetNotificacaosWithInvalidas() { #region Change attributes values //Atribuição dos valores que serão usados nesse metodo nas variáveis de uso comum da classe query = $"CALL {notificationconstant.GetPListarNotificacoesWithInvalidas()}();"; connection = new MySqlConnection(ConstantConnection.GetConnection()); command = new MySqlCommand(query, connection); #endregion #region //Criação da lista que será retornada com os valores vindos do banco List <NotificacaoDTO> notificacoes = new List <NotificacaoDTO>(); notificacoes.Clear(); #endregion #region Database Access //Abertura da conexão ao MySQL e tentativa de chamada da procedure para exibir notificações try { //Tentatica de abertura da conexão ao banco de dados connection.Open(); //Usa a variável reader para armazenar o resultado, e em seguida preenche a lista com os registros vindos do banco using (reader = command.ExecuteReader()) { while (reader.Read()) { if (!reader.IsDBNull(0)) { NotificacaoDTO notificacao = new NotificacaoDTO(); notificacao.notificacao = reader.GetString(0); notificacao.texto = reader.GetString(1); notificacao.usuario = reader.GetString(2); notificacao.user_name = reader.GetString(3); notificacao.valido = reader.GetString(4); notificacoes.Add(notificacao); } } } } catch (MySqlException ex) { //Lança uma exceção, caso seja gerada alguma Error.SendError("Ocorreu um erro interno.\nCaso persista, contate o suporte com o codigo: " + ex.Number.ToString(), "Erro interno"); } finally { //Encerramento da conexão ao banco de dados connection.Close(); } #endregion #region Return //Retorna a lista de notificações para o local onde foi chamado se não estiver vazia return(notificacoes); #endregion }
public NotificacoesClassificadasDTO GetNotificacoesClassificadas(int idClient, int idAplicacao, string versaoAplicacao) { using (MiniProfiler.Current.Step("Obtendo notificações classificadas")) { if (!RedisCacheManager.CannotCache(RedisCacheConstants.DadosFakes.KeyGetNotificacoesClassificadas)) { return(RedisCacheManager.GetItemObject <NotificacoesClassificadasDTO> (RedisCacheConstants.DadosFakes.KeyGetNotificacoesClassificadas)); } NotificacoesClassificadasDTO notificacoesClassificadas = new NotificacoesClassificadasDTO(); List <NotificacaoDTO> lstNotificacaoDTO = new List <NotificacaoDTO> (); var notificacoes = GetNotificacoesPerfilAluno(idClient, idAplicacao, versao: versaoAplicacao); var cultureInfo = new CultureInfo("pt-BR"); foreach (var not in notificacoes) { var notificacaoDTO = new NotificacaoDTO { IdNotificacao = not.IdNotificacao, Texto = not.Texto, Titulo = not.Titulo, TipoNotificacaoId = not.TipoNotificacao.Id, Matricula = not.Matricula, Data = not.DataOriginal.ToString("MMM/yy", cultureInfo), Dia = not.DataOriginal.ToString("dd"), DataUnix = Utilidades.ToUnixTimespan(not.DataOriginal), Quantidade = not.Quantidade, DataOriginal = not.DataOriginal, Lida = not.Lida, TipoNotificacao = not.TipoNotificacao, InfoAdicional = GetInfoAdicional(not), Destaque = not.Destaque }; lstNotificacaoDTO.Add(notificacaoDTO); } notificacoesClassificadas.NotificacaoDestaque = lstNotificacaoDTO.OrderByDescending(x => x.DataOriginal).FirstOrDefault(x => x.Destaque && !x.Lida); notificacoesClassificadas.NotificacoesClassificacao = lstNotificacaoDTO.GroupBy(x => new { x.TipoNotificacao.Ordem, x.TipoNotificacao.Alias }) .Select(y => new NotificacaoClassificacaoDTO { Notificacoes = y.OrderByDescending(o => o.DataOriginal).ToList(), TipoNotificacao = y.Key.Ordem, Alias = y.Key.Alias, Ordem = y.Key.Ordem, Quantidade = y.Count() }).OrderBy(x => x.Ordem).ToList(); return(notificacoesClassificadas); } }
/// <summary> /// Processa o alerta de alunos com baixa frequência. /// </summary> public static void ExecJOB_AlertaAlunosBaixaFrequencia() { CFG_Alerta alerta = CFG_AlertaBO.GetEntity(new CFG_Alerta { cfa_id = (byte)CFG_AlertaBO.eChaveAlertas.AlertaAlunosBaixaFrequencia }); if (alerta.cfa_periodoAnalise > 0 && !string.IsNullOrEmpty(alerta.cfa_assunto)) { // Busca os usuários para envio da notificação DataTable dt = new GestaoEscolarServicoDAO().ExecJOB_AlertaAlunosBaixaFrequencia(); List <sAlertaAlunosBaixaFrequencia> lstUsuarios = (from DataRow dr in dt.Rows select(sAlertaAlunosBaixaFrequencia) GestaoEscolarUtilBO.DataRowToEntity(dr, new sAlertaAlunosBaixaFrequencia())).ToList(); List <int> lstEscolas = lstUsuarios.Select(p => p.esc_id).Distinct().ToList(); DateTime dataAtual = DateTime.UtcNow; lstEscolas.ForEach(e => { NotificacaoDTO notificacao = new NotificacaoDTO(); notificacao.SenderName = "SGP"; notificacao.Recipient = new DestinatarioNotificacao(); notificacao.Recipient.UserRecipient = new List <string>(); notificacao.MessageType = 3; notificacao.DateStartNotification = string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual); notificacao.DateEndNotification = alerta.cfa_periodoValidade > 0 ? string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual.AddHours(alerta.cfa_periodoValidade)) : null; notificacao.Title = alerta.cfa_nome; List <sAlertaAlunosBaixaFrequencia> lstUsuariosEscola = lstUsuarios.FindAll(u => u.esc_id == e); notificacao.Message = alerta.cfa_assunto .Replace("[NomeEscola]", lstUsuariosEscola.First().esc_nome.ToString()) .Replace("[PercentualMinimoFrequencia]", lstUsuariosEscola.First().percentualBaixaFrequencia.ToString()) .Replace("[Dias]", alerta.cfa_periodoAnalise.ToString()) .Replace("[PulaLinha]", "<br/>"); lstUsuariosEscola.ForEach(ue => notificacao.Recipient.UserRecipient.Add(ue.usu_id.ToString())); if (EnviarNotificacao(notificacao)) { List <LOG_AlertaAlunosBaixaFrequencia> lstLog = new List <LOG_AlertaAlunosBaixaFrequencia>(); notificacao.Recipient.UserRecipient.ForEach(ur => lstLog.Add(new LOG_AlertaAlunosBaixaFrequencia { usu_id = new Guid(ur), esc_id = e, lbf_dataEnvio = DateTime.Now })); LOG_AlertaAlunosBaixaFrequenciaBO.SalvarEmLote(lstLog); } } ); } }
/// <summary> /// Processa o alerta de preenchimento de frequência. /// </summary> public static void ExecJOB_AlertaPreenchimentoFrequencias() { CFG_Alerta alerta = CFG_AlertaBO.GetEntity(new CFG_Alerta { cfa_id = (byte)CFG_AlertaBO.eChaveAlertas.AlertaPreenchimentoFrequencia }); if (!string.IsNullOrEmpty(alerta.cfa_assunto)) { // Busca os usuários para envio da notificação DataTable dt = new GestaoEscolarServicoDAO().ExecJOB_AlertaPreenchimentoFrequencias(); List <sAlertaPreenchimentoFrequencia> lstUsuarios = (from DataRow dr in dt.Rows select(sAlertaPreenchimentoFrequencia) GestaoEscolarUtilBO.DataRowToEntity(dr, new sAlertaPreenchimentoFrequencia())).ToList(); if (lstUsuarios.Any()) { DateTime dataAtual = DateTime.UtcNow; NotificacaoDTO notificacao = new NotificacaoDTO(); notificacao.SenderName = "SGP"; notificacao.Recipient = new DestinatarioNotificacao(); notificacao.Recipient.UserRecipient = new List <string>(); notificacao.MessageType = 3; notificacao.DateStartNotification = string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual); notificacao.DateEndNotification = alerta.cfa_periodoValidade > 0 ? string.Format("{0:yyyy-MM-ddTHH:mm:ss.0000000-00:00}", dataAtual.AddHours(alerta.cfa_periodoValidade)) : null; notificacao.Title = alerta.cfa_nome; notificacao.Message = alerta.cfa_assunto.Replace("[PulaLinha]", "<br/>"); lstUsuarios.ForEach(ue => notificacao.Recipient.UserRecipient.Add(ue.usu_id.ToString())); if (EnviarNotificacao(notificacao)) { List <LOG_AlertaPreenchimentoFrequencia> lstLog = new List <LOG_AlertaPreenchimentoFrequencia>(); notificacao.Recipient.UserRecipient.ForEach(ur => lstLog.Add(new LOG_AlertaPreenchimentoFrequencia { usu_id = new Guid(ur), lpf_dataEnvio = DateTime.Now })); LOG_AlertaPreenchimentoFrequenciaBO.SalvarEmLote(lstLog); } } } }
public void Notificar(NotificacaoDTO notificacao) { Notificacoes.Add(notificacao); }