package com.rjconsultores.ventaboletos.service.impl; import java.io.BufferedReader; import java.io.Reader; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.rjconsultores.ventaboletos.entidad.Cliente; import com.rjconsultores.ventaboletos.entidad.ClienteFidelidad; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.TarjetaFidelidad; import com.rjconsultores.ventaboletos.service.ClienteService; import com.rjconsultores.ventaboletos.service.ImportacaoClientesService; import com.rjconsultores.ventaboletos.service.TarjetaFidelidadService; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; @Service("importacaoClientesService") public class ImportacaoClientesServiceImpl implements ImportacaoClientesService { @Autowired private ClienteService clienteService; @Autowired private TarjetaFidelidadService tarjetaFidelidadService; private static Logger log = Logger.getLogger(ImportacaoClientesServiceImpl.class); @Override public String[] lerArquivo(Reader reader, List empresas) { String linha = null; Integer index = 0; StringBuilder qtdeGravados = new StringBuilder(); StringBuilder erros = new StringBuilder(); Integer inseridos = 0; Integer atualizados = 0; try { BufferedReader leitor = new BufferedReader(reader); while ((linha = leitor.readLine()) != null) { String[] dados = linha.replace("\"", "").split(","); Integer[] gravados = salvarClientes(dados, empresas); inseridos = gravados[0] + inseridos; atualizados = gravados[1] + atualizados; index++; } leitor.close(); qtdeGravados.append("Gravados ").append(inseridos + atualizados).append(" clientes de ").append(index).append(" importados.\n"); qtdeGravados.append("Atualizados ").append(atualizados).append(" clientes.\n"); qtdeGravados.append("Inseridos ").append(inseridos).append(" novos clientes."); String[] resultado = { qtdeGravados.toString(), erros.toString() }; return resultado; } catch (Exception e) { erros.append("Linha ").append(index).append(" do arquivo de clientes, erro: ").append(e.getCause().getCause()).append("\n"); log.error(e); String[] resultado = { e.toString() }; return resultado; } } @Override public Integer[] salvarClientes(String[] cliente, List empresas) { String nomeCliente = cliente[1].replace("\"", "").toUpperCase(); Integer inseridos = new Integer(0); Integer atualizados = new Integer(0); Integer[] gravados = {0,0}; for (Empresa e : empresas){ Cliente clienteGravar = clienteService.buscarPorNumeroFidelidade(Integer.parseInt(cliente[0]), e); if (clienteGravar == null) { clienteGravar = new Cliente(); clienteGravar.setNombcliente(nomeCliente); clienteGravar.setNumIdentificaUno(cliente[3]); TarjetaFidelidad tarjetaFidelidad = new TarjetaFidelidad(); tarjetaFidelidad.setActivo(Boolean.TRUE); tarjetaFidelidad.setFecmodif(Calendar.getInstance().getTime()); tarjetaFidelidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); // cast para Integer para remover 0 a esquerda: tarjetaFidelidad.setNumTarjeta(Long.parseLong(cliente[0])); List ls = new ArrayList(); ClienteFidelidad clienteFidelidad = new ClienteFidelidad(); clienteFidelidad.setTarjetaFidelidad(tarjetaFidelidad); clienteFidelidad.setActivo(Boolean.TRUE); clienteFidelidad.setFecmodif(Calendar.getInstance().getTime()); clienteFidelidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); clienteFidelidad.setCliente(clienteGravar); clienteFidelidad.setEmpresa(e); ls.add(clienteFidelidad); clienteGravar.setListClienteFidelidad(ls); clienteService.suscribir(clienteGravar); inseridos = inseridos + 1; gravados[0] =gravados[0] + inseridos; } else { clienteGravar.setNombcliente(nomeCliente); clienteGravar.setNumIdentificaUno(cliente[3]); clienteService.actualizacion(clienteGravar); atualizados = atualizados + 1; gravados[1] =gravados[1] + atualizados; } } return gravados; } }