Boa noite, tenho a seguinte situação:
Preciso fazer uma requisição a uma API, passando Algumas informações e o tipo de retorno desejado como no exemplo abaixo:
{
"cnpjfilialemissora": "",
"periodoInicial": "",
"periodoFinal": "",
"cnpj_cpfcliente": "",
"codigocliente": 0,
"faixanumerosctes": [],
"faixachavesctes": [
{
"Chave": "35210801599101000193570030332829641469282336"
},
{
"Chave": "35210801599101000193570030332830261620382335"
}
],
"tipoExtracao": 1,
"tipoRetorno": "PDF"
}
Existem 2 tipos de retorno: XML e PDF
O retorno da API é um hash de um zip em base64, que eu preciso decodificar e fazer o download.
PROBLEMA 1: A API só aceita um máximo de 500 chaves de CTE por requisição; PROBLEMA 2: A API demora demais pra retornar quando ao tipo de Retorno é igual a PDF, e quando for, aceita um máximo de 350 chaves, caso contrário dá erro de servidor. (Isso é algo que eu já pontuei para os desenvolvedores da API);
E agora vem o maior problema de todos:
O sistema que eu trabalho é de uma transportadora, e o volume de dados que eles trabalham é imenso!
Quando o usuário precisa fazer um download, seja ele de XML ou de PDF, normalmente ele faz através de um número de fatura do sistema. É muito comum que uma fatura tenha 10 mil CTE's, e até mais.
O que eu preciso fazer para retornar esses downloads é:
- Buscar no banco de dados todos os CTE's.
- Dividir tudo em blocos de 500 CTE's. faço isso adicionando cada bloco de 500 como um índice de um array associativo.
- Fazer um foreach em cada índice contendo 500 CTE's;
- A cada 500 CTE's eu faço a request para pegar o hash, decodifica-lo e gerar o download;
O Meu maior problema é que a demora é enorme, e por isso eu gostaria de saber se é possível aplicar esses conceitos de assincronicidade nesse problema que eu tenho.
Exemplo de problema:
$arrCtes = [
request1 => 500chaves,
request2 => 500chaves,
];
foreach($arrCtes AS chaves) {
request_para_buscar_o_zip; => aqui demora muito tempo
}
PS: o sistema todo foi desenvolvido em uma espécie de Zend 1.. eu falo "espécie" pq foi todo modificado para se adequar à necessidade.