Interface ConjuntoLoteRepository
- All Superinterfaces:
io.micronaut.data.repository.CrudRepository<ConjuntoLote, String>, io.micronaut.data.repository.GenericRepository<ConjuntoLote, String>
@JdbcRepository(dialect=POSTGRES)
public interface ConjuntoLoteRepository
extends io.micronaut.data.repository.CrudRepository<ConjuntoLote, String>
Persistência de
ConjuntoLote (lote por zip).-
Method Summary
Modifier and TypeMethodDescriptionintincrementarDuplicados(String conjuntoId) Conta um arquivo já existente (HTTP 200).intincrementarNaoProcessados(String conjuntoId) Conta uma entrada do zip que não gerou processamento nem era duplicata-sucesso.intCria o lote se ainda não existir (idempotente).inttentarNotificar(String conjuntoId) UPDATE atômico: retorna 1 só para o thread que completa o lote (duplicados + nao_processados + finalizados >= total), 0 para os demais.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
-
registrar
@Query(value="INSERT INTO xls_conjunto_lote (conjunto_id, total, criado_em)\nVALUES (:conjuntoId, :total, NOW())\nON CONFLICT (conjunto_id) DO NOTHING\n", readOnly=false) int registrar(String conjuntoId, int total) Cria o lote se ainda não existir (idempotente). -
incrementarDuplicados
@Query(value="UPDATE xls_conjunto_lote SET duplicados = duplicados + 1\nWHERE conjunto_id = :conjuntoId\n", readOnly=false) int incrementarDuplicados(String conjuntoId) Conta um arquivo já existente (HTTP 200). -
incrementarNaoProcessados
@Query(value="UPDATE xls_conjunto_lote SET nao_processados = nao_processados + 1\nWHERE conjunto_id = :conjuntoId\n", readOnly=false) int incrementarNaoProcessados(String conjuntoId) Conta uma entrada do zip que não gerou processamento nem era duplicata-sucesso. -
tentarNotificar
@Query(value="UPDATE xls_conjunto_lote SET notificado_em = NOW()\nWHERE conjunto_id = :conjuntoId\n AND notificado_em IS NULL\n AND (duplicados + nao_processados + (\n SELECT COUNT(*) FROM xls_processamento\n WHERE conjunto_id = :conjuntoId\n AND status NOT IN ('PENDENTE', 'PROCESSANDO')\n )) >= total\n", readOnly=false) int tentarNotificar(String conjuntoId) UPDATE atômico: retorna 1 só para o thread que completa o lote (duplicados + nao_processados + finalizados >= total), 0 para os demais.
-