01. DADOS GERAIS
Produto: | |
---|
Linha de Produto: | |
---|
Segmento: | |
---|
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.
Para os processos de importação e desacordo, foram incluídos 5 novos templates XSLT, para a substituição do processo de serialização de XML que usava o XmlDocument.
<?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>"StatusEvento":"</xsl:text>
<xsl:value-of select="//infEvento/cStat"/>
<xsl:text>",</xsl:text>
<xsl:text>"COrgao":"</xsl:text>
<xsl:value-of select="//infEvento/cOrgao"/>
<xsl:text>",</xsl:text>
<xsl:text>"XMotivo":"</xsl:text>
<xsl:value-of select="//infEvento/xMotivo"/>
<xsl:text>",</xsl:text>
<xsl:text>"XEvento":"</xsl:text>
<xsl:value-of select="//infEvento/xEvento"/>
<xsl:text>",</xsl:text>
<xsl:text>"NSeqEvento":"</xsl:text>
<xsl:value-of select="//infEvento/nSeqEvento"/>
<xsl:text>",</xsl:text>
<xsl:text>"NProt":"</xsl:text>
<xsl:value-of select="//nProt"/>
<xsl:text>",</xsl:text>
<xsl:text>"DataEvento":"</xsl:text>
<xsl:value-of select="//infEvento/dhRegEvento"/>
<xsl:text>",</xsl:text>
<xsl:text>"XJust":"</xsl:text>
<xsl:value-of select="//infEvento/xJust"/>
<xsl:text>"}</xsl:text>
</xsl:template>
</xsl:stylesheet>
<?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>
<?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>
<?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>
<?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>
Não Há.
05. ASSUNTOS RELACIONADOS
Não Há.