Histórico da Página
01. DADOS GERAIS
Produto: | TOTVS Transmite |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | BackOffice |
Módulo: | TOTVS Transmite |
Função: | Não Há |
País: | Brasil |
Ticket: | Não Há |
Requisito/Story/Issue (informe o requisito relacionado) : | DSERTSS3-3553 |
02. SITUAÇÃO/REQUISITO
Atualmente as API's que atendem os documentos NF-e e CT-e estão apresentando cenários de falha em processos e travando com muita frequência, sendo necessária uma análise criteriosa em ambas, para constatar o que pode ser melhorado para evitar a queda dos serviços e tratar os incidentes indesejados (como a inserção de documentos em bases indevidas). Além da avaliação técnica, há a necessidade de avaliar a infraestrutura disponível para essas API's, redefinindo os parâmetros para aumentar a capacidade desta, se necessário. Ao final, espera-se que ambas API's se mantenham em funcionamento sem quedas e os cenários de falha deixem de ocorrer.
Para esta tarefa, que tem como escopo a API de CT-e e CT-e OS, os pontos a guiar o desenvolvimento serão:
- Manter a injeção de dependência da conexão do Mongo DB como Singleton;
- Alterar a Injeção de dependência dos repositórios que utilizam a conexão com o Mongo DB, para escopo Scoped;
- Nesta injeção dos repositórios, respeitar a sessão TNF das chamadas, para devido posicionamento na base de dados do cliente;
- Garantir a abertura e fechamento das sessões com o Mongo DB;
- Garantir a limpeza de memória de referências à objetos não mais utilizados pelas conexões.
03. SOLUÇÃO
Após os ajustes realizados na tarefa DSERTSS3-3549, e do acompanhamento realizado após a aplicação das alterações em ambiente produtivo, é possível afirmar que os pontos modificados surtiram o efeito desejado. Partindo desta premissa o escopo desta tarefa é propagar as melhorias para a API de CT-e e CT-e OS, só que desta vez, de uma maneira ampla, para todas as funcionalidades em todas as modalidades (Emitidos e Recebidos).
A partir disto, as modificações realizadas foram:
- Criação de novos modelos CTeRepository, CTeRecebidoRepository, CTeOsRepository e CTeOsRecebidoRepository que herdam do BaseRepository, para utilizar estes nos fluxos que estão no escopo desta tarefa;
- Nova injeção de dependência, para as classes acima, definindo a modalidade para Scoped, que passará a criar um objeto em cada requisição que entra na API, já realizando o posicionamento do repositório no banco de dados correspondente;
- Alteração do fluxos de listagem e contagem, para utilização de escopo e dos novos repositórios;
- Alteração do fluxo de importação, para utilização de escopo e dos novos repositórios;
- Alteração do fluxo de detalhamento, para utilização de escopo e dos novos repositórios;
- Alteração do fluxo de impressão, para utilização de escopo e dos novos repositórios;
- Alteração do fluxo de exportação individual, para utilização de escopo e dos novos repositórios;
- Alteração do fluxo de desacordo, para utilização de escopo e dos novos repositórios;
- Alteração de fluxos de exportação e envio de e-mail, para utilização de escopo e dos novos repositórios;
Além disso, em todos os pontos cabíveis, foi utilizada a implementação criada na tarefa DSERTSS3-3462, com relação a leitura do XML, visando melhora de performance.
...
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:text>{</xsl:text>
<xsl:text>"CodigoFilial":"</xsl:text>
<xsl:value-of select="//CodigoFilial"/>
<xsl:text>",</xsl:text>
<xsl:text>"Filial":"</xsl:text>
<xsl:value-of select="//Filial"/>
<xsl:text>",</xsl:text>
<xsl:text>"Ambiente":"</xsl:text>
<xsl:value-of select="//ide/tpAmb"/>
<xsl:text>",</xsl:text>
<xsl:text>"Modalidade":"</xsl:text>
<xsl:value-of select="//ide/tpEmis"/>
<xsl:text>",</xsl:text>
<xsl:text>"TipoDocumento":"</xsl:text>
<xsl:value-of select="//ide/tpCTe"/>
<xsl:text>",</xsl:text>
<xsl:text>"Emissao":"</xsl:text>
<xsl:value-of select="//ide/dhEmi"/>
<xsl:text>",</xsl:text>
<xsl:text>"Serie":</xsl:text>
<xsl:value-of select="//ide/serie"/>
<xsl:text>,</xsl:text>
<xsl:text>"Numero":</xsl:text>
<xsl:value-of select="//ide/nCT"/>
<xsl:text>,</xsl:text>
<xsl:text>"ChaveCTeOs":"</xsl:text>
<xsl:value-of select="//infProt/chCTe"/>
<xsl:text>",</xsl:text>
<xsl:text>"Status":"6",</xsl:text>
<xsl:text>"CteOsId":"</xsl:text>
<xsl:value-of select="concat(//ide/serie, //ide/nCT)"/>
<xsl:text>",</xsl:text>
<xsl:text>"Mensagem":"</xsl:text>
<xsl:value-of select="//infProt/xMotivo"/>
<xsl:text>",</xsl:text>
<xsl:text>"Protocolo":"</xsl:text>
<xsl:value-of select="//infProt/nProt"/>
<xsl:text>",</xsl:text>
<xsl:text>"Email":"</xsl:text>
<xsl:value-of select="//dest/email"/>
<xsl:text>",</xsl:text>
<xsl:text>"CnpjCpfDest":"</xsl:text>
<xsl:value-of select="//dest/CNPJ | //dest/CPF"/>
<xsl:text>"}</xsl:text>
</xsl:template>
</xsl:stylesheet> |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/> <xsl:template match="/"> <xsl:text>{</xsl:text> <xsl:text>"CodigoFilial":"</xsl:text> <xsl:value-of select="//CodigoFilial"/> <xsl:text>",</xsl:text> <xsl:text>"Filial":"</xsl:text> <xsl:value-of select="//Filial"/> <xsl:text>",</xsl:text> <xsl:text>"Ambiente":"</xsl:text> <xsl:value-of select="//ide/tpAmb"/> <xsl:text>",</xsl:text> <xsl:text>"Modalidade":"</xsl:text> <xsl:value-of select="//ide/tpEmis"/> <xsl:text>",</xsl:text> <xsl:text>"TipoDocumento":"</xsl:text> <xsl:value-of select="//ide/tpCTe"/> <xsl:text>",</xsl:text> <xsl:text>"Emissao":"</xsl:text> <xsl:value-of select="//ide/dhEmi"/> <xsl:text>",</xsl:text> <xsl:text>"Serie":</xsl:text> <xsl:value-of select="//ide/serie"/> <xsl:text>,</xsl:text> <xsl:text>"Numero":</xsl:text> <xsl:value-of select="//ide/nCT"/> <xsl:text>,</xsl:text> <xsl:text>"ChaveCTeOs":"</xsl:text> <xsl:value-of select="//infProt/chCTe"/> <xsl:text>",</xsl:text> <xsl:text>"Status":"6",</xsl:text> <xsl:text>"CteOsId":"</xsl:text> <xsl:value-of select="concat(//ide/serie, //ide/nCT)"/> <xsl:text>",</xsl:text> <xsl:text>"Mensagem":"</xsl:text> <xsl:value-of select="//infProt/xMotivo"/> <xsl:text>",</xsl:text> <xsl:text>"Protocolo":"</xsl:text> <xsl:value-of select="//infProt/nProt"/> <xsl:text>",</xsl:text> <xsl:text>"Email":"</xsl:text> <xsl:value-of select="//dest/email"/> <xsl:text>",</xsl:text> <xsl:text>"CnpjCpfDest":"</xsl:text> <xsl:value-of select="//tomadest/CNPJ | //tomadest/CPF"/> <xsl:text>",}</xsl:text> <xsl:text>"CnpjCpfEmi":"</xsl:text> <xsl:value-of select="//emit/CNPJ | //emit/CPF"/> <xsl:text>",</xsl:text> <xsl:text>"Emissor":"</xsl:text> <xsl:value-of select="//emit/xNome"/> <xsl:text>",</xsl:text> <xsl:text>"DhRecbto":"</xsl:text> <xsl:value-of select="//infProt/dhRecbto"/> <xsl:text>",</xsl:text> <xsl:text>"Destinatario":"</xsl:text> <xsl:value-of select="//dest/xNome"/> <xsl:text>",</xsl:text> <xsl:text>"Tomador":"</xsl:text> <xsl:value-of select="//toma/xNome"/> <xsl:text>"}</xsl:text> </xsl:template> </xsl:template> </xsl:stylesheet> |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:text>{</xsl:text>
<xsl:text>"CodigoFilial":"</xsl:text>
<xsl:value-of select="//CodigoFilial"/>
<xsl:text>",</xsl:text>
<xsl:text>"Filial":"</xsl:text>
<xsl:value-of select="//Filial"/>
<xsl:text>",</xsl:text>
<xsl:text>"Ambiente":"</xsl:text>
<xsl:value-of select="//ide/tpAmb"/>
<xsl:text>",</xsl:text>
<xsl:text>"Modalidade":"</xsl:text>
<xsl:value-of select="//ide/tpEmis"/>
<xsl:text>",</xsl:text>
<xsl:text>"TipoDocumento":"</xsl:text>
<xsl:value-of select="//ide/tpCTe"/>
<xsl:text>",</xsl:text>
<xsl:text>"Emissao":"</xsl:text>
<xsl:value-of select="//ide/dhEmi"/>
<xsl:text>",</xsl:text>
<xsl:text>"Serie":</xsl:text>
<xsl:value-of select="//ide/serie"/>
<xsl:text>,</xsl:text>
<xsl:text>"Numero":</xsl:text>
<xsl:value-of select="//ide/nCT"/>
<xsl:text>,</xsl:text>
<xsl:text>"ChaveCTe":"</xsl:text>
<xsl:value-of select="//infProt/chCTe"/>
<xsl:text>",</xsl:text>
<xsl:text>"Status":"6",</xsl:text>
<xsl:text>"CteId":"</xsl:text>
<xsl:value-of select="concat(//ide/serie, //ide/nCT)"/>
<xsl:text>",</xsl:text>
<xsl:text>"Mensagem":"</xsl:text>
<xsl:value-of select="//infProt/xMotivo"/>
<xsl:text>",</xsl:text>
<xsl:text>"Protocolo":"</xsl:text>
<xsl:value-of select="//infProt/nProt"/>
<xsl:text>",</xsl:text>
<xsl:text>"Email":"</xsl:text>
<xsl:value-of select="//dest/email"/>
<xsl:text>",</xsl:text>
<xsl:text>"CnpjCpfDest":"</xsl:text>
<xsl:value-of select="//dest/CNPJ | //dest/CPF"/>
<xsl:text>"}</xsl:text>
</xsl:template>
</xsl:stylesheet> |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/> <xsl:template match="/"> <xsl:text>{</xsl:text> <xsl:text>"CodigoFilial":"</xsl:text> <xsl:value-of select="//CodigoFilial"/> <xsl:text>",</xsl:text> <xsl:text>"Filial":"</xsl:text> <xsl:value-of select="//Filial"/> <xsl:text>",</xsl:text> <xsl:text>"Ambiente":"</xsl:text> <xsl:value-of select="//ide/tpAmb"/> <xsl:text>",</xsl:text> <xsl:text>"Modalidade":"</xsl:text> <xsl:value-of select="//ide/tpEmis"/> <xsl:text>",</xsl:text> <xsl:text>"TipoDocumento":"</xsl:text> <xsl:value-of select="//ide/tpCTe"/> <xsl:text>",</xsl:text> <xsl:text>"Emissao":"</xsl:text> <xsl:value-of select="//ide/dhEmi"/> <xsl:text>",</xsl:text> <xsl:text>"Serie":</xsl:text> <xsl:value-of select="//ide/serie"/> <xsl:text>,</xsl:text> <xsl:text>"Numero":</xsl:text> <xsl:value-of select="//ide/nCT"/> <xsl:text>,</xsl:text> <xsl:text>"ChaveCTe":"</xsl:text> <xsl:value-of select="//infProt/chCTe"/> <xsl:text>",</xsl:text> <xsl:text>"Status":"6",</xsl:text> <xsl:text>"CteId":"</xsl:text> <xsl:value-of select="concat(//ide/serie, //ide/nCT)"/> <xsl:text>",</xsl:text> <xsl:text>"Mensagem":"</xsl:text> <xsl:value-of select="//infProt/xMotivo"/> <xsl:text>",</xsl:text> <xsl:text>"Protocolo":"</xsl:text> <xsl:value-of select="//infProt/nProt"/> <xsl:text>",</xsl:text> <xsl:text>"Email":"</xsl:text> <xsl:value-of select="//dest/email"/> <xsl:text>",</xsl:text> <xsl:text>"CnpjCpfDest":"</xsl:text> <xsl:value-of select="//dest/CNPJ | //dest/CPF"/> <xsl:text>",</xsl:text> <xsl:text>"CnpjCpfEmi":"</xsl:text> <xsl:value-of select="//emit/CNPJ | //emit/CPF"/> <xsl:text>",</xsl:text> <xsl:text>"Emissor":"</xsl:text> <xsl:value-of select="//emit/xNome"/> <xsl:text>",</xsl:text> <xsl:text>"DhRecbto":"</xsl:text> <xsl:value-of select="//infProt/dhRecbto"/> <xsl:text>",</xsl:text> <xsl:text>"Destinatario":"</xsl:text> <xsl:value-of select="//dest/xNome"/> <xsl:text>"}</xsl:text> </xsl:template> </xsl:stylesheet> |
04. DEMAIS INFORMAÇÕES
Não Há.
05. ASSUNTOS RELACIONADOS
Não Há.