Interface ProcessamentoRepository
- All Superinterfaces:
io.micronaut.data.repository.CrudRepository<ProcessamentoXls, Long>, io.micronaut.data.repository.GenericRepository<ProcessamentoXls, Long>
@JdbcRepository(dialect=POSTGRES)
public interface ProcessamentoRepository
extends io.micronaut.data.repository.CrudRepository<ProcessamentoXls, Long>
Persistência JDBC de
ProcessamentoXls e atualizações de status.-
Method Summary
Modifier and TypeMethodDescriptionintatualizarDefesa(Long id, Boolean xlsLegado, Integer marca, Integer modelo, Integer ano, Integer tipoFrota, Integer placa) Atualiza as 6 colunas de defesa do cadastro veicular (V11).intatualizarLogArquivo(Long id, String logArquivo) Grava o caminho/nome do arquivo de log associado ao processamento.intatualizarMetricas(Long id, int fatIns, int fatUpd, int fatNoOp, int fatDel, int movIns, int movUpd, int movNoOp, int movDel) Atualiza as 8 métricas de idempotência (V7) para o processamentoid.default intatualizarMetricas(Long id, MesclaResumo r) Conveniência: extrai os 8 contadores deMesclaResumo.intatualizarObjeto(Long id, String bucket, String chave, long tamanhoBytes) Migra a linha para o object storage: grava a referência do objeto (bucket, chave, tamanho) e zeraarquivo_bytes.intatualizarObjetoMantendoBytes(Long id, String bucket, String chave, long tamanhoBytes) Grava a referência do objeto (bucket, chave, tamanho) sem zerararquivo_bytes.intatualizarPeriodo(Long id, LocalDate periodoInicial, LocalDate periodoFinal) Grava o período (datas inicial e final) coberto pelo processamento.default Optional<ProcessamentoXls> buscarPorChecksum(String checksum) Busca um processamento pelo checksum SHA-256 do arquivo enviado.default Optional<ProcessamentoXls> buscarPorId(Long id) Busca um processamento pelo seu identificador.longConta os processamentos, com filtro opcional de status.findByChecksumSha256(String checksumSha256) Query derivada que localiza um processamento pelo checksum SHA-256 do arquivo.findByConjuntoId(String conjuntoId) Lista os processamentos de um lote (.zip) peloconjunto_id.Query derivada que lista os processamentos de um status, ordenados porrecebido_emdecrescente.intgravarArquivoBytes(Long id, byte[] bytes) Grava o binário do XLS na colunaarquivo_bytes(modosPSQLePSQL_GARAGE).Lista os ids de processamentos comarquivo_bytesmas sem objeto no Garage — pendentes de cópia no modoPSQL_GARAGE.Lista os ids de processamentos com binário legado emarquivo_bytes(pendentes de backfill/cleanup para o object storage — usada no modoGARAGE).default byte[]Lê o binário legado dearquivo_bytes.intZeraarquivo_bytesde uma linha que já possui objeto no Garage.default List<ProcessamentoXls> Lista processamentos por número de página (base zero), convertendopage/sizeemoffset/limitparalistarPaginado(String, int, int).listarPaginado(String status, int limit, int offset) Lista processamentos ordenados porrecebido_emdecrescente, com paginação e filtro opcional de status.intmarcarErro(Long id, LocalDateTime concluidoEm, long tempoMs, String erro) Marca o processamento comoERRO, gravando conclusão, duração e a mensagem de erro.intmarcarProcessando(Long id, LocalDateTime iniciadoEm) Marca o processamento comoPROCESSANDOe grava o instante de início.intmarcarSucesso(Long id, LocalDateTime concluidoEm, long tempoMs, int regFat, int regMov) Marca o processamento comoSUCESSO, gravando conclusão, duração e os totais brutos de registros de faturamento e movimento.Apoio alerArquivoBytesLegado(Long): o Micronaut Data exige um tipo introspectado (ArquivoBytesLegado) para projetar obyte[]dearquivo_bytes— um retorno escalarbyte[]não é suportado.intReverte o processamento para o statusPENDENTE, limpando todos os campos de execução (instantes, duração, erro, contadores, período e log) para permitir reprocessá-lo.default ProcessamentoXlssalvar(ProcessamentoXls processamento) Persiste (insere ou atualiza) um processamento de XLS.Methods inherited from interface io.micronaut.data.repository.CrudRepository
count, delete, deleteAll, deleteAll, deleteById, existsById, findAll, findById, insert, insertAll, save, saveAll, update, updateAll
-
Method Details
-
salvar
Persiste (insere ou atualiza) um processamento de XLS.- Parameters:
processamento- entidade a gravar.- Returns:
- a entidade persistida, com
idpreenchido em caso de inserção.
-
buscarPorId
Busca um processamento pelo seu identificador.- Parameters:
id- identificador do processamento.- Returns:
- o processamento correspondente, ou
Optional.empty()se não existir.
-
buscarPorChecksum
Busca um processamento pelo checksum SHA-256 do arquivo enviado.- Parameters:
checksum- checksum SHA-256 do arquivo XLS.- Returns:
- o processamento correspondente, ou
Optional.empty()se não existir.
-
findByChecksumSha256
Query derivada que localiza um processamento pelo checksum SHA-256 do arquivo.- Parameters:
checksumSha256- checksum SHA-256 do arquivo XLS.- Returns:
- o processamento correspondente, ou
Optional.empty()se não existir.
-
listarPaginado
@Query("SELECT * FROM xls_processamento\nWHERE (:status IS NULL OR status = :status)\nORDER BY recebido_em DESC\nLIMIT :limit OFFSET :offset\n") List<ProcessamentoXls> listarPaginado(@Nullable String status, int limit, int offset) Lista processamentos ordenados porrecebido_emdecrescente, com paginação e filtro opcional de status.- Parameters:
status- status a filtrar; quandonullretorna todos os status.limit- quantidade máxima de registros a retornar.offset- deslocamento inicial da página.- Returns:
- lista de processamentos da página solicitada (possivelmente vazia).
-
listar
Lista processamentos por número de página (base zero), convertendopage/sizeemoffset/limitparalistarPaginado(String, int, int).- Parameters:
page- número da página, começando em 0.size- quantidade de registros por página.status- status a filtrar; quandonullretorna todos os status.- Returns:
- lista de processamentos da página solicitada (possivelmente vazia).
-
contar
@Query("SELECT COUNT(*) FROM xls_processamento\nWHERE (:status IS NULL OR status = :status)\n") long contar(@Nullable String status) Conta os processamentos, com filtro opcional de status.- Parameters:
status- status a filtrar; quandonullconta todos os status.- Returns:
- número total de processamentos que atendem ao filtro.
-
findByStatusOrderByRecebidoEmDesc
Query derivada que lista os processamentos de um status, ordenados porrecebido_emdecrescente.- Parameters:
status- status a filtrar.- Returns:
- lista de processamentos com o status informado (possivelmente vazia).
-
findByConjuntoId
Lista os processamentos de um lote (.zip) peloconjunto_id.- Parameters:
conjuntoId- id do lote.- Returns:
- processamentos do lote (possivelmente vazia).
-
marcarProcessando
@Query(value="UPDATE xls_processamento\nSET status = 'PROCESSANDO', iniciado_em = :iniciadoEm\nWHERE id = :id\n", readOnly=false) int marcarProcessando(Long id, LocalDateTime iniciadoEm) Marca o processamento comoPROCESSANDOe grava o instante de início.- Parameters:
id- identificador do processamento.iniciadoEm- instante em que o processamento começou.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
marcarSucesso
@Query(value="UPDATE xls_processamento\nSET status = 'SUCESSO',\n concluido_em = :concluidoEm,\n tempo_ms = :tempoMs,\n registros_faturamento = :regFat,\n registros_movimento = :regMov\nWHERE id = :id\n", readOnly=false) int marcarSucesso(Long id, LocalDateTime concluidoEm, long tempoMs, int regFat, int regMov) Marca o processamento comoSUCESSO, gravando conclusão, duração e os totais brutos de registros de faturamento e movimento.- Parameters:
id- identificador do processamento.concluidoEm- instante em que o processamento foi concluído.tempoMs- duração total do processamento em milissegundos.regFat- total de registros de faturamento processados.regMov- total de registros de movimento processados.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarMetricas
@Query(value="UPDATE xls_processamento\nSET faturamento_inseridas = :fatIns,\n faturamento_atualizadas = :fatUpd,\n faturamento_inalteradas = :fatNoOp,\n faturamento_removidas = :fatDel,\n movimento_inseridas = :movIns,\n movimento_atualizadas = :movUpd,\n movimento_inalteradas = :movNoOp,\n movimento_removidas = :movDel\nWHERE id = :id\n", readOnly=false) int atualizarMetricas(Long id, int fatIns, int fatUpd, int fatNoOp, int fatDel, int movIns, int movUpd, int movNoOp, int movDel) Atualiza as 8 métricas de idempotência (V7) para o processamentoid. Chamado peloProcessamentoProcessadorapós oBulkUpserter; coexistência commarcarSucesso(Long, LocalDateTime, long, int, int)é deliberada —marcarSucessograva os totais brutos (uploaded.size()),atualizarMetricasgrava o detalhamento diff-aware.- Parameters:
id- identificador do processamento.fatIns- linhas de faturamento inseridas.fatUpd- linhas de faturamento atualizadas.fatNoOp- linhas de faturamento inalteradas.fatDel- linhas de faturamento removidas.movIns- linhas de movimento inseridas.movUpd- linhas de movimento atualizadas.movNoOp- linhas de movimento inalteradas.movDel- linhas de movimento removidas.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarMetricas
Conveniência: extrai os 8 contadores deMesclaResumo.- Parameters:
id- identificador do processamento.r- resumo com as métricas de faturamento e movimento.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarDefesa
@Query(value="UPDATE xls_processamento\nSET xls_legado = :xlsLegado,\n defesa_marca_ausente_qtd = :marca,\n defesa_modelo_ausente_qtd = :modelo,\n defesa_ano_invalido_qtd = :ano,\n defesa_tipo_frota_ausente_qtd = :tipoFrota,\n defesa_placa_malformada_qtd = :placa\nWHERE id = :id\n", readOnly=false) int atualizarDefesa(Long id, Boolean xlsLegado, Integer marca, Integer modelo, Integer ano, Integer tipoFrota, Integer placa) Atualiza as 6 colunas de defesa do cadastro veicular (V11). Chamada após oexcelProcessor.processar()peloProcessamentoProcessador.Quando
xlsLegado=true, as 5 contagens sãoNULL(semântica "não avaliado"). Quandofalse, contém os totais por motivo da defesa. Spec 006 — Req. 13.- Parameters:
id- identificador do processamento.xlsLegado- flag de XLS legado (≥80% das linhas sem cadastro).marca- contagem MARCA_AUSENTE.modelo- contagem MODELO_AUSENTE.ano- contagem ANO_INVALIDO.tipoFrota- contagem TIPO_FROTA_AUSENTE.placa- contagem PLACA_MALFORMADA.- Returns:
- número de linhas afetadas.
-
marcarErro
@Query(value="UPDATE xls_processamento\nSET status = 'ERRO',\n concluido_em = :concluidoEm,\n tempo_ms = :tempoMs,\n erro_mensagem = :erro\nWHERE id = :id\n", readOnly=false) int marcarErro(Long id, LocalDateTime concluidoEm, long tempoMs, String erro) Marca o processamento comoERRO, gravando conclusão, duração e a mensagem de erro.- Parameters:
id- identificador do processamento.concluidoEm- instante em que o processamento foi interrompido.tempoMs- duração decorrida até a falha, em milissegundos.erro- mensagem descritiva do erro.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarLogArquivo
@Query(value="UPDATE xls_processamento\nSET log_arquivo = :logArquivo\nWHERE id = :id\n", readOnly=false) int atualizarLogArquivo(Long id, String logArquivo) Grava o caminho/nome do arquivo de log associado ao processamento.- Parameters:
id- identificador do processamento.logArquivo- referência do arquivo de log a gravar.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarPeriodo
@Query(value="UPDATE xls_processamento\nSET periodo_inicial = :periodoInicial,\n periodo_final = :periodoFinal\nWHERE id = :id\n", readOnly=false) int atualizarPeriodo(Long id, LocalDate periodoInicial, LocalDate periodoFinal) Grava o período (datas inicial e final) coberto pelo processamento.- Parameters:
id- identificador do processamento.periodoInicial- data inicial do período processado.periodoFinal- data final do período processado.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarObjeto
@Query(value="UPDATE xls_processamento\nSET objeto_bucket = :bucket,\n objeto_chave = :chave,\n objeto_tamanho_bytes = :tamanhoBytes,\n arquivo_bytes = NULL\nWHERE id = :id\n", readOnly=false) int atualizarObjeto(Long id, String bucket, String chave, long tamanhoBytes) Migra a linha para o object storage: grava a referência do objeto (bucket, chave, tamanho) e zeraarquivo_bytes. Usada peloStorageBackfillService.- Parameters:
id- identificador do processamento.bucket- bucket do objeto.chave- chave do objeto.tamanhoBytes- tamanho do objeto em bytes.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
atualizarObjetoMantendoBytes
@Query(value="UPDATE xls_processamento\nSET objeto_bucket = :bucket,\n objeto_chave = :chave,\n objeto_tamanho_bytes = :tamanhoBytes\nWHERE id = :id\n", readOnly=false) int atualizarObjetoMantendoBytes(Long id, String bucket, String chave, long tamanhoBytes) Grava a referência do objeto (bucket, chave, tamanho) sem zerararquivo_bytes. Usada pelo backfill no modoPSQL_GARAGE, em que as duas cópias (Postgres e Garage) coexistem.- Parameters:
id- identificador do processamento.bucket- bucket do objeto.chave- chave do objeto.tamanhoBytes- tamanho do objeto em bytes.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
limparArquivoBytes
@Query(value="UPDATE xls_processamento SET arquivo_bytes = NULL WHERE id = :id", readOnly=false) int limparArquivoBytes(Long id) Zeraarquivo_bytesde uma linha que já possui objeto no Garage. Usada pelo cleanup do modoGARAGEpara linhas migradas anteriormente emPSQL_GARAGE.- Parameters:
id- identificador do processamento.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
idsPendentesBackfill
@Query("SELECT id FROM xls_processamento WHERE arquivo_bytes IS NOT NULL ORDER BY id") List<Long> idsPendentesBackfill()Lista os ids de processamentos com binário legado emarquivo_bytes(pendentes de backfill/cleanup para o object storage — usada no modoGARAGE).- Returns:
- ids das linhas a migrar (possivelmente vazia).
-
idsLegadosSemObjeto
@Query("SELECT id FROM xls_processamento\nWHERE arquivo_bytes IS NOT NULL AND objeto_chave IS NULL\nORDER BY id\n") List<Long> idsLegadosSemObjeto()Lista os ids de processamentos comarquivo_bytesmas sem objeto no Garage — pendentes de cópia no modoPSQL_GARAGE. Diferente deidsPendentesBackfill(), ignora linhas já migradas (que mantêmarquivo_bytes), tornando o backfillPSQL_GARAGEidempotente sem precisar zerar a coluna.- Returns:
- ids das linhas legadas ainda não copiadas para o Garage (possivelmente vazia).
-
gravarArquivoBytes
@Query(value="UPDATE xls_processamento SET arquivo_bytes = :bytes WHERE id = :id", readOnly=false) int gravarArquivoBytes(Long id, byte[] bytes) Grava o binário do XLS na colunaarquivo_bytes(modosPSQLePSQL_GARAGE). Método de repositório — gerencia a própria conexão, ao contrário de umDataSource.getConnection()cru sobre o datasource contextual do Micronaut Data, que exigiria uma transação na thread chamadora.- Parameters:
id- identificador do processamento.bytes- conteúdo binário do arquivo.xlsx.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-
lerArquivoBytesLegado
Lê o binário legado dearquivo_bytes. A entidadeProcessamentoXlsnão mapeia mais essa coluna — apenas o backfill a acessa, por esta query raw.- Parameters:
id- identificador do processamento.- Returns:
- bytes do arquivo legado, ou
nullse a coluna (ou a linha) estiver vazia.
-
projetarArquivoBytesLegado
@Query("SELECT arquivo_bytes FROM xls_processamento WHERE id = :id") Optional<ArquivoBytesLegado> projetarArquivoBytesLegado(Long id) Apoio alerArquivoBytesLegado(Long): o Micronaut Data exige um tipo introspectado (ArquivoBytesLegado) para projetar obyte[]dearquivo_bytes— um retorno escalarbyte[]não é suportado.- Parameters:
id- identificador do processamento.- Returns:
- projeção com o binário legado, ou
Optional.empty()se a linha não existir.
-
resetarParaPendente
@Query(value="UPDATE xls_processamento\nSET status = 'PENDENTE',\n iniciado_em = NULL,\n concluido_em = NULL,\n tempo_ms = NULL,\n erro_mensagem = NULL,\n registros_faturamento = NULL,\n registros_movimento = NULL,\n periodo_inicial = NULL,\n periodo_final = NULL,\n log_arquivo = NULL\nWHERE id = :id\n", readOnly=false) int resetarParaPendente(Long id) Reverte o processamento para o statusPENDENTE, limpando todos os campos de execução (instantes, duração, erro, contadores, período e log) para permitir reprocessá-lo.- Parameters:
id- identificador do processamento.- Returns:
- número de linhas afetadas (1 quando o
idexiste).
-