RollBack para correção do build

master
Fabio Faria 2022-03-28 19:57:49 -03:00
parent 9e694510ce
commit f8c4ae43b5
2 changed files with 176 additions and 0 deletions

View File

@ -0,0 +1,14 @@
package com.rjconsultores.ventaboletos.service;
import java.io.ByteArrayInputStream;
import com.rjconsultores.ventaboletos.blocos.DetalheRetorno;
import com.rjconsultores.ventaboletos.entidad.Empresa;
public interface ImportacaoRetornoBancarioService {
public String lerArquivo(ByteArrayInputStream bais, Empresa empresa);
public boolean salvarRetornoBancario(DetalheRetorno detalhe, Integer empresaId, Integer usuarioId) throws Exception;
}

View File

@ -0,0 +1,162 @@
package com.rjconsultores.ventaboletos.service.impl;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.rjconsultores.ventaboletos.ArquivoRetornoItem;
import com.rjconsultores.ventaboletos.blocos.CabecalhoRetorno;
import com.rjconsultores.ventaboletos.blocos.DetalheRetorno;
import com.rjconsultores.ventaboletos.blocos.itau.DetalheRetornoItau;
import com.rjconsultores.ventaboletos.dao.RemessaCNABBancosDAO;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FechamentoBoleto;
import com.rjconsultores.ventaboletos.enuns.BancoLayout;
import com.rjconsultores.ventaboletos.service.ImportacaoRetornoBancarioService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
@Service("importacaoRetornoBancarioService")
public class ImportacaoRetornoBancarioServiceImpl implements ImportacaoRetornoBancarioService {
@Autowired
private RemessaCNABBancosDAO remessaCNABBancosDAO;
private static Logger log = Logger.getLogger(ImportacaoRetornoBancarioServiceImpl.class);
@Override
public String lerArquivo(ByteArrayInputStream bais, Empresa empresa){
StringBuilder resultado = new StringBuilder();
StringBuilder detalhado = new StringBuilder();
Integer usuarioId = UsuarioLogado.getUsuarioLogado().getUsuarioId();
Integer atualizados = 0;
Integer erros = 0;
try {
BancoLayout banco = BancoLayout.getInstanceByCodBanco(remessaCNABBancosDAO.findBanco(empresa));
ArquivoRetornoItem retornoBancario = processaRetornoBancario(bais, empresa, banco);
if( retornoBancario == null ) {
resultado.append("O banco cadastrado para a empresa não tem implementação de retorno bancário");
return resultado.toString();
}
if(!banco.getCodBanco().equals(retornoBancario.getCabecalhoRetorno().getCodigoBanco())) {
resultado.append("O banco cadastrado para a empresa não é o mesmo do arquivo selecionado");
return resultado.toString();
}
for (DetalheRetorno detalhe : retornoBancario.getTitulos()) {
try {
if( salvarRetornoBancario( detalhe, empresa.getEmpresaId(), usuarioId )) {
atualizados++;
detalhado.append("Quitado:").append(detalhe.getNossoNumero()).append(".\n");
}else {
erros++;
detalhado.append("Nao Quitado: ").append(detalhe.getNossoNumero()).append(".\n");
}
} catch (SQLException se) {
detalhado.append("Ocorreu um erro no banco de dados: ").append(detalhe.getNossoNumero());
log.error(se);
erros++;
} catch (RuntimeException re) {
detalhado.append(re.getMessage());
log.error(re);
erros++;
}
}
resultado.append("Arquivo Processado ");
if(erros > 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 );
}
}