예제 #1
0
        private async Task VerificaAtualizacoes()
        {
            Trace.TraceInformation("Iniciando a verificação de novas tramitações.");
            EnviarEmailAdministrativo("Iniciando a verificação de novas tramitações.");

            var processosAtualizados = new List <Processo>();

            using (var servico = new MateriasService())
            {
                foreach (var processo in servico.ProcessosMonitorados)
                {
                    EnviarEmailAdministrativo($"Verificando atualizações para o processo {processo}...");
                    //consulta o web service para recuperar as tramitações da matéria:
                    var movimentacao = await servico.TramitacoesDaMateria(processo.Codigo);

                    //recupera a data mais recente de tramitação:
                    var dataUltimaTramitacao = movimentacao.Materia.Tramitacoes
                                               .OrderByDescending(t => t.Identificacao.Data)
                                               .Select(t => t.Identificacao.Data)
                                               .First();
                    if (dataUltimaTramitacao.CompareTo(processo.DataUltimaAtualizacao) > 0)
                    {
                        string mensagem = $"Processo {processo} teve atualizações!";
                        Trace.TraceInformation(mensagem);
                        EnviarEmailAdministrativo(mensagem);

                        processo.DataUltimaAtualizacao = dataUltimaTramitacao;
                        processosAtualizados.Add(processo);
                    }
                }
            }

            if (processosAtualizados.Count > 0)
            {
                using (var contexto = new ProcessoContext())
                {
                    try
                    {
                        contexto.Processos.UpdateRange(processosAtualizados);
                        contexto.SaveChanges();
                        EnviarEmailAtualizacao(processosAtualizados.Select(p => p.Id));
                    } catch (Exception e)
                    {
                        EnviarEmailAdministrativo($"Ocorreu um erro: {e.Message}\r\nInner Exception: {e.InnerException.Message}\r\n{e.StackTrace}");
                    }
                }
            }
            else
            {
                EnviarEmailAdministrativo("Não houveram novas tramitações para os processos monitorados.");
            }
        }
예제 #2
0
        private async Task VerificaAtualizacoes()
        {
            var processosAtualizados = new List <Processo>();

            using (var servico = new MateriasService())
            {
                foreach (var processo in servico.ProcessosMonitorados)
                {
                    //consulta o web service para recuperar as tramitações da matéria:
                    var movimentacao = await servico.TramitacoesDaMateria(processo.Codigo);

                    //recupera a data mais recente de tramitação:
                    var dataUltimaTramitacao = movimentacao.Materia.Tramitacoes
                                               .OrderByDescending(t => t.Identificacao.Data)
                                               .Select(t => t.Identificacao.Data)
                                               .First();
                    if (dataUltimaTramitacao.CompareTo(processo.DataUltimaAtualizacao) > 0)
                    {
                        Trace.TraceInformation($"Processo {processo} teve atualizações.");
                        processo.DataUltimaAtualizacao = dataUltimaTramitacao;
                        processosAtualizados.Add(processo);
                    }
                }
            }

            if (processosAtualizados.Count > 0)
            {
                using (var contexto = new ProcessoContext())
                {
                    Trace.TraceInformation("Persistindo processos atualizados.");
                    contexto.Processos.AddRange(processosAtualizados);
                    contexto.SaveChanges();
                }

                EnviarEmailAtualizacao(processosAtualizados.Select(p => p.Id));
            }
            else
            {
                EnviarEmailAdministrativo();
            }
        }