Package systextil.bo.inte.gra
Class GraRule
java.lang.Object
systextil.bo.inte.gra.GraRule
Regras da integracao GRA: configuracao, agendamento do ciclo na OPER_001 (modos, encerramento e "Forcar execucao")
e as chamadas a API do GRA (pedidos, referencias cruzadas e NF-e).
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordResposta de uma chamada a API do GRA. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringClasse do batch da integracao na OPER_001 (plano, 6.1).static final intValor de OPER_001.campo_01 no agendamento do "Executar uma vez": o batch inte_f010 processa mesmo com a configuracao inativa e nao reagenda.static final intCiclo sem heartbeat por mais que isso conta como morto ou travado (servidor reiniciado, conexao perdida): o batch o encerra, e a tela o mostra em vermelho (design, 8.2 e 8.5).static final intCodigo daGraRule.RespostaGraquando o GRA nao respondeu, fora dos codigos HTTP: a fila de pedidos e notas o grava em status_http, e a tela mostra "Sem resposta do GRA" (PendenteAnalise, 9.12).static final StringTitulos na lista de processos (plano, 6.5): o agendado e o "Proximo ciclo"; ao comecar, o ciclo volta ao nome normal.static final Stringstatic final Stringstatic final intAgendado com a hora passada ha mais que isso conta como atraso: o agente batch olha a OPER_001 a cada minuto. -
Constructor Summary
ConstructorsConstructorDescriptionGraRule(br.com.intersys.systextil.connection.AppConnection conn, int empresa) -
Method Summary
Modifier and TypeMethodDescriptionintadiarAgendamento(int empresa, int minutos, int codigoServidor) Adia o agendamento pendente da empresa para daqui aminutose o passa para o servidor de quem adia: a cadeia fica no servidor que esta rodando, e um pendente esquecido de outro servidor e adotado, em vez de parar a cadeia (PendenteAnalise, 10.3).voidagendarProcesso(Mdi mdi, int codigoBatch, int empresa) Proximo ciclo da cadeia (ModoAgendamentoEnum.CICLO): o batch, no inicio do ciclo.booleanagendarProcesso(Mdi mdi, int codigoBatch, int empresa, ModoAgendamentoEnum modo) Agenda o ciclo da empresa na OPER_001 conforme oModoAgendamentoEnum.atualizarStatusNota(String chaveAcesso, String status, String descricao) Atualiza o status da NF-e no GRA Cloud.static GraRule.RespostaGraGET de um endereco que a API do GRA indica (o XML da NF-e), sem o token.buscarDetalheNota(String chaveAcesso) Detalhe da NF-e no GRA pela chave de acesso: cabecalho e itens, cada um com o vinculo ao pedido de compra (numero e linha).buscarNfeDisponiveis(int pagina, int status, int filial) NF-es disponiveis para a integracao, paginadas, so da filial do ciclo (plano, 6.4): o GRA filtra pelo campo "filial", o mesmo id_filial que o pedido envia (o codigo da empresa).buscarReferencia(String codigoFornecedor, String itemFornecedor) Registros da referencia no GRA, para achar o id quando a INTE_005 nao o guardou (exclusao).intencerrarCiclos(int empresa, String motivo, int excetoSolicitacao, int semSinalMinutos) Encerra (status -2) os ciclos da integracao da empresa em execucao.voidenfileirarReversaoNota(String chaveAcesso, int empresaNfe) Enfileira a reversao de uma nota na INTE_002 (tipo_operacao='D').enviarPedido(String jsonPedido) Pedido de compra (inclusao, alteracao ou cancelamento): o sync do GRA e idempotente.enviarReferencias(String jsonLote) Inclui ou altera ate 100 referencias (upsert pela chave fornecedor + item_fornecedor + um_fornecedor).voidexcluirConfig(int empresa) excluirReferencia(long idGra) Exclusao fisica no GRA pelo id (404: ja nao existe).intforcarExecucao(Mdi mdi, int codigoBatch, int empresa) "Forcar execucao" das Configuracoes (design, 8.3): encerra o ciclo em execucao da empresa (travado ou morto tambem; a thread de um ciclo vivo para no proximo heartbeat), apaga os agendamentos pendentes e agenda um ciclo para agora.intintervaloMinutos(int empresa) Tempo entre ciclos da configuracao da empresa (5 min se nao informado).voidsalvarConfig(GraConfigDTO dto) Chamada leve para conferir o token no inicio do ciclo (design, 8.12): o GRA nao tem rota de autenticacao, e um fornecedor que nao existe deixa a resposta vazia e rapida.static booleantokenRecusado(GraRule.RespostaGra resposta) Token recusado pelo GRA (design, 8.12): HTTP 401/403 ou mensagem comecando por "Token JWT", em qualquer codigo, para um token vencido nao ser lido como recusa do conteudo.
-
Field Details
-
EXECUCAO_UNICA
public static final int EXECUCAO_UNICAValor de OPER_001.campo_01 no agendamento do "Executar uma vez": o batch inte_f010 processa mesmo com a configuracao inativa e nao reagenda.- See Also:
-
CLASSE_BATCH
Classe do batch da integracao na OPER_001 (plano, 6.1). O agente batch carrega a classe por este nome: os registros com o nome antigo (br.com.intersys.systextil.batch.gra.inte_f010) sao trocados pelo 267153-001-004.ddl.- See Also:
-
LIMITE_SEM_HEARTBEAT_MINUTOS
public static final int LIMITE_SEM_HEARTBEAT_MINUTOSCiclo sem heartbeat por mais que isso conta como morto ou travado (servidor reiniciado, conexao perdida): o batch o encerra, e a tela o mostra em vermelho (design, 8.2 e 8.5). Bem acima do maior intervalo entre heartbeats: uma tentativa com as chamadas HTTP no timeout.- See Also:
-
TOLERANCIA_ATRASO_SEGUNDOS
public static final int TOLERANCIA_ATRASO_SEGUNDOSAgendado com a hora passada ha mais que isso conta como atraso: o agente batch olha a OPER_001 a cada minuto.- See Also:
-
TITULO_CICLO
Titulos na lista de processos (plano, 6.5): o agendado e o "Proximo ciclo"; ao comecar, o ciclo volta ao nome normal. Estado, dedupe, trava e rotacao filtram por classe e status, nunca pelo titulo.- See Also:
-
TITULO_PROXIMO_CICLO
- See Also:
-
TITULO_EXECUCAO_UNICA
- See Also:
-
SEM_RESPOSTA
public static final int SEM_RESPOSTACodigo daGraRule.RespostaGraquando o GRA nao respondeu, fora dos codigos HTTP: a fila de pedidos e notas o grava em status_http, e a tela mostra "Sem resposta do GRA" (PendenteAnalise, 9.12). Antes ia como 500, "Erro Servidor".- See Also:
-
-
Constructor Details
-
GraRule
public GraRule(br.com.intersys.systextil.connection.AppConnection conn, int empresa)
-
-
Method Details
-
getConfig
-
salvarConfig
-
excluirConfig
public void excluirConfig(int empresa) -
enfileirarReversaoNota
Enfileira a reversao de uma nota na INTE_002 (tipo_operacao='D'). O batch inte_f010 processara e enviara o status 'R' ao GRA de forma assincrona. Chamado pela regra de exclusao de nota de entrada quando a integracao GRA esta ativa.- Parameters:
chaveAcesso- chave de acesso da NF-e excluidaempresaNfe- codigo da empresa dona da nota
-
agendarProcesso
Proximo ciclo da cadeia (ModoAgendamentoEnum.CICLO): o batch, no inicio do ciclo. -
agendarProcesso
Agenda o ciclo da empresa na OPER_001 conforme oModoAgendamentoEnum. Um agendamento pendente por empresa, de qualquer codigo de servidor (tp_reg_relatorio): a empresa tem uma cadeia so. Grava a empresa alvo (parametro empresa), e nao mdi.codigo_empresa (empresa logada): a tela padrao da OPER_001 filtra pela empresa de quem esta olhando, e o processo so aparece la gravado com a empresa certa.- Returns:
- false quando nao agendou nem antecipou: no IMEDIATO, com um ciclo em execucao (o fim dele agenda o proximo); nos outros modos, com um agendamento pendente; em qualquer modo, quando as 5 tentativas acharam o numero ja usado
-
forcarExecucao
"Forcar execucao" das Configuracoes (design, 8.3): encerra o ciclo em execucao da empresa (travado ou morto tambem; a thread de um ciclo vivo para no proximo heartbeat), apaga os agendamentos pendentes e agenda um ciclo para agora. Tudo na transacao de quem chama.- Returns:
- ciclos em execucao encerrados
-
encerrarCiclos
Encerra (status -2) os ciclos da integracao da empresa em execucao. A mensagem leva o motivo, o ultimo sinal e a ultima etapa gravada pelo heartbeat, para mostrar onde parou. Sem data_fim_execucao (morreu antes de o BaseThread gravar o inicio), conta a data agendada.- Parameters:
excetoSolicitacao- ciclo que nao entra (o do batch que chama); 0: nenhumsemSinalMinutos- so os sem heartbeat ha mais que isso (servidor reiniciado, conexao perdida ou processo travado); 0: todos- Returns:
- ciclos encerrados (
AppConnection.executeUpdate())
-
adiarAgendamento
public int adiarAgendamento(int empresa, int minutos, int codigoServidor) Adia o agendamento pendente da empresa para daqui aminutose o passa para o servidor de quem adia: a cadeia fica no servidor que esta rodando, e um pendente esquecido de outro servidor e adotado, em vez de parar a cadeia (PendenteAnalise, 10.3). Continua um pendente por empresa. Sem pendente (configuracao inativada, que apaga os pendentes), nao cria: o batch usa no heartbeat e no fim do ciclo, e a tela no agendamento imediato.- Parameters:
codigoServidor- tp_reg_relatorio do ciclo em execucao ou, na tela, o do contexto- Returns:
- quantidade de agendamentos adiados (
AppConnection.executeUpdate())
-
intervaloMinutos
public int intervaloMinutos(int empresa) Tempo entre ciclos da configuracao da empresa (5 min se nao informado). -
baixar
GET de um endereco que a API do GRA indica (o XML da NF-e), sem o token. Nunca lanca excecao: a falha vem comoSEM_RESPOSTA. -
enviarPedido
Pedido de compra (inclusao, alteracao ou cancelamento): o sync do GRA e idempotente. -
enviarReferencias
Inclui ou altera ate 100 referencias (upsert pela chave fornecedor + item_fornecedor + um_fornecedor). -
buscarReferencia
Registros da referencia no GRA, para achar o id quando a INTE_005 nao o guardou (exclusao). -
testarToken
Chamada leve para conferir o token no inicio do ciclo (design, 8.12): o GRA nao tem rota de autenticacao, e um fornecedor que nao existe deixa a resposta vazia e rapida. VertokenRecusado(systextil.bo.inte.gra.GraRule.RespostaGra). -
excluirReferencia
Exclusao fisica no GRA pelo id (404: ja nao existe). -
tokenRecusado
Token recusado pelo GRA (design, 8.12): HTTP 401/403 ou mensagem comecando por "Token JWT", em qualquer codigo, para um token vencido nao ser lido como recusa do conteudo. -
buscarNfeDisponiveis
NF-es disponiveis para a integracao, paginadas, so da filial do ciclo (plano, 6.4): o GRA filtra pelo campo "filial", o mesmo id_filial que o pedido envia (o codigo da empresa). -
buscarDetalheNota
Detalhe da NF-e no GRA pela chave de acesso: cabecalho e itens, cada um com o vinculo ao pedido de compra (numero e linha). O XML do fornecedor nao traz o pedido do cliente. -
atualizarStatusNota
Atualiza o status da NF-e no GRA Cloud.- Parameters:
chaveAcesso- Chave de acesso da nota.status- Sucesso = 'S' | Erro = 'E' | Reversao = 'R'descricao- Mensagem detalhada sobre o processamento- Returns:
- a resposta do GRA (ok() no HTTP 2xx);
SEM_RESPOSTAtambem quando o JSON nao montou
-