Processamento assíncrono na Geração e Publicação do DIOF
Data de elaboração | |
---|---|
Responsável pelo estudo |
|
Equipe do estudo | Caveiras |
Alvo | PPE - Plataforma de Publicação Eletrônica de Diários Oficiais do Estado de Rondônia. |
Origem |
|
Objetivo | |
Glossário
SignalR: ASP.NET SignalR é uma biblioteca para desenvolvedores de ASP.NET que simplifica o processo de adição de funcionalidade da Web em tempo real aos aplicativos. A funcionalidade da Web em tempo real é a capacidade de fazer com que o código do servidor envie conteúdo por push para clientes conectados instantaneamente à medida que ele se torna disponível, em vez de fazer com que o servidor aguarde um cliente solicitar novos dados.
1. Introdução
OA geração e publicação do DIOF no sistema PPE atéhoje então,ocorre nãquando o possuiusuário com perfil Administrador, sendo ele diretor ou diretor substituto, clica no botão Gerar. Então uma funcionalidaderequisição é iniciada e muitos processamentos são realizados como:
- A Busca das matérias que
atendaestãoessaagendadasnecessidadepararelatadaaanteriormente.dataSendoatual,necessárioexcetorealizaras que possuem a matéria reprovada ou aguardando reavaliação. - Tratamento para manter a ordenação das matérias conforme a hierarquia de cada secretaria/cliente, observando a área de publicação de cada um
estudodeles. - Geração do Pdf respeitando as regras de estilos do Diof e estilos das matérias de origem do SEI, do editor do PPE ou do GovDoc
- Atribuição do nome e cargo do assinante do DIOF entres outros processamentos.
Ocorre que, dependendo do número de matérias, o retorno da requisição ao usuário pode demorar bastante, em alguns casos a fimrequisição é interrompida por exceder o limite máximo de encontrarespera formas(timeout). viáveisEsse estudo propõe uma solução para que seja possível gerar DIOFs com infinitas matérias sem ocorrência de atendererros essae/ou necessidade, contudo mantendo a integridade das informaçinterrupções registradasna até o atual momento.requisição.
2. Desenvolvimento
já utilizamos métodos assíncronos que retornam Task ou Task<T>, porém o uso de await na chamada desses métodos faz com que a thread principal fique aguardando todo o processamento desse método concluir para que a próxima linha do fluxo seja executada.
Atualmente2.1 Retorno imediato
O primeiro ponto é liberar o retorno da requisição ao usuário removendo o uso do await na chamada da história principal, que orquestra todas as outras. Com essa alteração o processamento continuará em segundo plano não sendo necessário aguardar a estruturaconclusão, deliberando dadoso dousuário sistema,que referenterapidamente arecebe DAREo retorno da requisição informando que o processamento desejado foi iniciado e matérias,está seem encontra da seguinte maneira:andamento.
2.2 seNotificação ado equipeprogresso dedo desenvolvimentoprocessamento forao atenderusuário
Uma solicitação,vez semque trabalharo processamento continua em umabackground novaé funcionalidade,preciso serianotificar o usuário do progresso, para isso será necessário ouimplementar excluirnotificação osem registrostempo real com signalR. Essas notificações não precisam ser necessariamente de cada passo do bancoprogresso, dea dadosideia ougeral marcaré comoavisar pagas,o gerando inconsistências de ambas as formas.
3.1 Soluções
Com base na atual estruturausuário do projeto,sucesso ae solução mais viável encontrada, foi criar uma nova funcionalidade que permitira o arquivamento de DARE's. Internamente no projeto, a nova tabela ira se chamar "ArquivoDeDares", contendo os dadostermino do responsávelprocessamento pelo arquivamento e a devida justificativa, além de também adicionar um novo status chamado "Arquivada", a fim de conhecimento, os status atuais das DARE's são "Aguardando Pagamento", "Paga" e "Vencida".
3.2 Tela De Arquivamentos
A visualização principal das DARE's arquivadas, será conforme o exemplo abaixo:
E estará disponível apenas no perfil de administrador, sendo acessível atravésou de um submenu,possível dentroerro e talvez possibilitar uma reprocessamento de uma determinada tarefa ou do menuprocesso financeiro.como Nessaum tela,todo.
Para implementação do SignalR será necessário realizar os registrosseguintes poderão ser filtrados, e também ficara visível a "Data, Cliente, Quantidade e Valor Total".passos:
3.3 Tela Novo Arquivamento
A tela de criação de arquivamento será seguinte maneira:
OndeInstalar o administradorpacote irada selecionar o cliente e filtrar. Na caixa de seleção, só serão exibidos os clientes que estiverem inadimplente ou possuir dares vencidas. Ao clicar em buscar, será listado as DARE's, e o administrador ira escolher e arquivarlib de acordo com a necessidade.versão no framework conforme imagem abaixo.
Criar a classe que representa o hub.
Registrar o serviço SignalR e configurar o endpoint de comunicação Financeirana classe statup.cs.
Injetar o serviço do hub para envio das mensagens de notificação no serviço desejado.
Enviar a notificação
2.2 Receber notificação do progresso
Na view que mostrará o progresso do processamento ao usuário é necessário referenciar a biblioteca do signalr.js, preparar a conexão e conectar no mesmo método do envio, que nesse exemplo é o ProgressoDoDiof
Outro recurso que será criado para facilitar o gerenciamento, será criar uma coluna "Situação", na listagem de secretarias dentro do perfil de administrador, onde vai ser possível saber se o cliente esta adimplente ou inadimplente sem a necessidade de visualizar os detalhes.
3.5 Tela Detalhes Da Secretaria Com Mais Informações
Além desse recurso, agora ao clicar em detalhes, o administrador poderá ter uma visão mais ampla da situação financeira do cliente, conforme o exemplo abaixo:
3. Conclusão
ApósSeguindo umaessa analiseestratégia técnicapode-se daobservar atualvárias estruturapontos doque sistema,melhoram foio definido pela equipefluxo de desenvolvimento,grandes processamentos e que adevem melhorser maneira de atender a demanda solicitadainiciados pelo DIOF,usuário:
- Será possível
principalmenterealizarmantergrandestodosprocessamentososcomoregistrosgerar e publicar o Diário oficial do dia, sem a necessidade deDARE'saguardararquivadas,a conclusão da tarefa. - Possibilita o reprocessamento de uma determinada tarefa que falhou no meio do processo, já que é possível atribui ações em casos de falhas.
- Libera o usuário para
finsrealizardeoutrashistóricoatividadesenoauditoria,sistema não sendo necessário esperar já que as notificações além de serem envidas em tempo real tambémdepodemmanterser armazenadas na base para que posteriormente possa ser analisada pelo usuário - Possibilita a
consistênciageraçãodosdodados.diário com inúmeras matérias, já que o tempo de processamento não é mais um impedimento
4. Referências (opcional)
https://learn.microsoft.com/pt-br/aspnet/signalr/overview/getting-started/introduction-to-signalr