Excel Com Execução em Background
Devido a configurações para melhor desempenho do sistema não recomendamos a gerar um excel que com muitos dados diretamente no navegador, se passou de 2 minutos já é muito tempo para um processo do sistema ficar exclusivo para isso. Também se leva em conta que o cliente pode tentar gerar o mesmo relatório várias vezes.
Dependendo do tempo parar gerar o relatório também não conseguimos dar esse responsabilidade para o Scheduler, porque vai gerar um timeout, porque o se aumentar o timeout dele pode ser que fique muito tempo preso numa mesma fila.
Para solucionar esse problemas estamos utilizando uma aplicação de código aberto chamada de Async Jobs, nele enviamos o relatório para que seja gerado em background.
Acima é representando o fluxo dos dados, que são:
- É feita a ação de gerar o relatório
- Dados do relatório são enviados para o Async Jobs e é mostrado um LINK para acessar a tela de Download
- Após dois minutos depois do envio, é iniciado o processo do relatório
- E criado um novo registro dizendo que a geração do relatório está em progresso
- Ao finalizar a tela de Download atualizada e o arquvo é salvo no AWS S3 onde fica disponível para download
Configuração no relatório
No relatório Excel na coluna EXPORT_OPTIONS é necessário adiconar mais uma chave e valor, que é "background":true"
.
Ex.:
{
"excel": {
"template": ""
},
"background":true
}
Create Table
Também é bom verificar se existe a tabela nfs_reports_background, caso não, executar o create table abaixo:
CREATE TABLE `nfs_reports_background` (
`SEQ_DB` bigint NOT NULL AUTO_INCREMENT,
`EMPRESA` int DEFAULT NULL,
`FILIAL` int DEFAULT NULL,
`LOCAL` int DEFAULT NULL,
`REPORT_NAME` varchar(200) NOT NULL,
`FILE_NAME` varchar(300) NOT NULL,
`INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`UPD_DH` timestamp null ON UPDATE CURRENT_TIMESTAMP,
`USUARIO_SEQ_DB` bigint,
`PROGRESS_STATUS` tinyint default 0,
PRIMARY KEY (`SEQ_DB`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;