From 85f1d256cac866d53b952f9eb9e7af29bf0ce405 Mon Sep 17 00:00:00 2001 From: fabio Date: Thu, 10 Feb 2022 19:54:35 +0000 Subject: [PATCH] fixes bug#24059 dev: Celio qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@110844 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../dao/RemessaCNABBancosDAO.java | 5 + .../RemessaCNABBancosHibernateDAO.java | 65 +++++++ .../entidad/FechamentoBoleto.java | 8 + .../ImportacaoRetornoBancarioService.java | 14 ++ .../ImportacaoRetornoBancarioServiceImpl.java | 162 ++++++++++++++++++ 5 files changed, 254 insertions(+) create mode 100644 src/com/rjconsultores/ventaboletos/service/ImportacaoRetornoBancarioService.java create mode 100644 src/com/rjconsultores/ventaboletos/service/impl/ImportacaoRetornoBancarioServiceImpl.java diff --git a/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java b/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java index fe0c0f6fe..31ae3d267 100644 --- a/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/RemessaCNABBancosDAO.java @@ -1,5 +1,6 @@ package com.rjconsultores.ventaboletos.dao; +import java.sql.SQLException; import java.util.Date; import java.util.List; @@ -30,4 +31,8 @@ public interface RemessaCNABBancosDAO extends GenericDAO public List getEmpresas(); public Boolean atualizaRemessa(Empresa empresa, ArquivoRemessa arquivoRemessa) throws Exception; + + public FechamentoBoleto obtenerFechamentoBoletoPorNossoNumero(String nossoNumero, Integer empresaId); + + public boolean quitarFechamentoBoleto(Long fechamentoboletoId, Integer usuarioId) throws SQLException; } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java index 80803b067..8cbaec16b 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/RemessaCNABBancosHibernateDAO.java @@ -3,6 +3,7 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Connection; +import java.sql.SQLException; import java.sql.Statement; import java.text.DateFormat; import java.text.DecimalFormat; @@ -15,6 +16,11 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Query; import org.hibernate.SessionFactory; +import org.hibernate.transform.AliasToBeanResultTransformer; +import org.hibernate.type.BooleanType; +import org.hibernate.type.IntegerType; +import org.hibernate.type.LongType; +import org.hibernate.type.StringType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; @@ -1677,5 +1683,64 @@ public class RemessaCNABBancosHibernateDAO extends GenericHibernateDAO 0) { + resultado.append("com ressalvas.\n"); + }else { + resultado.append("com sucesso. \n"); + } + resultado.append("Quitados ").append(atualizados).append(".\n"); + resultado.append("Nao Quitados ").append(erros).append(".\n"); + resultado.append(detalhado); + return resultado.toString(); + + } catch (IOException ioe) { + resultado.append("Ocorreu um erro ao processar o arquivo enviado"); + log.error(ioe); + return resultado.toString(); + } catch (Exception e) { + resultado.append("Ocorreu um erro ao processar o arquivo enviado"); + log.error(e); + return resultado.toString(); + } + } + + private ArquivoRetornoItem processaRetornoBancario(ByteArrayInputStream bais, Empresa empresa, BancoLayout banco) throws IOException{ + + if(BancoLayout.ITAU_400_Envio.equals(banco)){ + return geraRetornoBancarioItau(bais, empresa, banco); + }else if(BancoLayout.BB_240_Envio.equals(banco)){ + throw new RuntimeException("Retorno Bancário não implementado"); + }else if(BancoLayout.BRADESCO_400_Envio.equals(banco)){ + throw new RuntimeException("Retorno Bancário não implementado"); + }else if(BancoLayout.SANTANDER_400_Envio.equals(banco)){ + throw new RuntimeException("Retorno Bancário não implementado"); + }else { + throw new RuntimeException("Retorno Bancário não implementado"); + } + } + + private ArquivoRetornoItem geraRetornoBancarioItau(ByteArrayInputStream bais, Empresa empresa, BancoLayout banco) throws IOException { + String linha = null; + ArquivoRetornoItem arquivo = new ArquivoRetornoItem(); + CabecalhoRetorno cabecalho = new CabecalhoRetorno(); + + BufferedReader leitor = new BufferedReader(new InputStreamReader(bais)); + + while ((linha = leitor.readLine()) != null) { + + if( linha.startsWith("0")) { //cabecalho + cabecalho.setCodigoBanco(linha.substring(76, 79)); + continue; + } + + if(linha.startsWith("1")) { //detalhe + DetalheRetornoItau detalhe = new DetalheRetornoItau(); + detalhe.setNossoNumero(linha.substring(62, 70)); + arquivo.addTitulo(detalhe); + continue; + } + + if(linha.startsWith("9")) { //rodape + + } + } + + leitor.close(); + + arquivo.setCabecalhoRetorno(cabecalho); + + return arquivo; + } + + @Override + public boolean salvarRetornoBancario(DetalheRetorno detalhe, Integer empresaId, Integer usuarioId) throws SQLException { + FechamentoBoleto boleto = remessaCNABBancosDAO.obtenerFechamentoBoletoPorNossoNumero( detalhe.getNossoNumero(), empresaId ); + + if(boleto == null) { + throw new RuntimeException("Fechamento não encontrado para a empresa com o nosso numero: "+detalhe.getNossoNumero()+"\n"); + } + + if( boleto.getIndBoletoQuitado() !=null && boleto.getIndBoletoQuitado()) { + throw new RuntimeException("Boleto já quitado para a empresa com o nosso numero: "+detalhe.getNossoNumero()+"\n"); + } + + return remessaCNABBancosDAO.quitarFechamentoBoleto( boleto.getFechamentoboletoId(), usuarioId ); + + } + +}