Páginas filhas
  • DSERTSS3-3553 - DT TRANSMITE - Refatorar API de CTe/CTe OS

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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
languagexml
themeMidnight
titleMapeamento Documento OS Importação
linenumberstrue
collapsetrue
<?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
languagexml
themeMidnight
titleMapeamento Documento OS Recebido Importação
linenumberstrue
collapsetrue
<?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
languagexml
themeMidnight
titleMapeamento Documento Importação
linenumberstrue
collapsetrue
<?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
languagexml
themeMidnight
titleMapeamento Documento Recebido Importação
linenumberstrue
collapsetrue
<?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á.