Ir para o conteúdo principal

Processamento assíncrono na Geração e Publicação do DIOF

Data de elaboração 07/07/2231/10/2022
Responsável pelo estudo
  • Alexandre dos Santos Freire Ferreira (Assessor)
  • Moisés Ferreira Evangelista (Assessor)

Equipe do estudo Caveiras
Alvo PPE - Plataforma de Publicação Eletrônica de Diários Oficiais do Estado de Rondônia.
Origem
  • Implementação: oArquivamento de DARE's no PPE, a fim de manter histórico e integridade das informações.

Objetivo OPropor objetivosolução inicialpara doque estudo era atender uma demanda solicitada pelo DIOF, onde fosseseja possível encontrargerar umaDIOFs formacom infinitas matérias sem ocorrência de ignorarerros todase/ou as DARE's até 26/06/2022 da CAERD, e contar a partir de 27/06/2022 a verificação de vencimentos das DARE's, a fim de evitar bloqueio por situação de inadimplência.
Observaçinterrupções Ona arquivamento vai manter histórico de todos os registros, além de manter a integridade das informações. Logo, ao arquivar os registros permanecem no banco.requisição.
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 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ão essaagendadas necessidadepara relatadaa anteriormente.data Sendoatual, necessárioexceto realizaras 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.
  • técnico,
  • 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.

image.pngimage.png

Dessaimage.png

forma,

2.2 seNotificação ado equipeprogresso dedo desenvolvimentoprocessamento forao atenderusuário

a

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".

image.png

3.2 Tela De Arquivamentos

A visualização principal das DARE's arquivadas, será conforme o exemplo abaixo:

image.png

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:

image.png

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.

3.4image.png

Coluna

De

Situaç

 

 

 

Criar a classe que representa o hub.

image.png

Registrar o serviço SignalR e configurar o endpoint de comunicação Financeirana classe statup.cs.

image.png

image.png

Injetar o serviço do hub para envio das mensagens de notificação no serviço desejado.

image.png

Enviar a notificação

image.png

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.

image.png


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:

image.pngimage.png

 

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:

é
    desenvolver um funcionalidade de arquivamento das DARE's, onde será
  • Será possível principalmenterealizar mantergrandes todosprocessamentos oscomo registrosgerar e publicar o Diário oficial do dia, sem a necessidade de DARE'saguardar arquivadas,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 finsrealizar deoutras históricoatividades eno auditoria,sistema não sendo necessário esperar já que as notificações além de serem envidas em tempo real também depodem manterser armazenadas na base para que posteriormente possa ser analisada pelo usuário
  • Possibilita a consistênciageração dosdo dados.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

https://learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model