package br.com.centralit.citcorpore.negocio;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import br.com.centralit.citcorpore.bean.CargaCatalagoServicoDTO;
import br.com.centralit.citcorpore.bean.CategoriaServicoDTO;
import br.com.centralit.citcorpore.bean.ServicoDTO;
import br.com.centralit.citcorpore.bean.TipoDemandaServicoDTO;
import br.com.centralit.citcorpore.bean.TipoEventoServicoDTO;
import br.com.centralit.citcorpore.bean.TipoServicoDTO;
import br.com.centralit.citcorpore.integracao.CategoriaServicoDao;
import br.com.centralit.citcorpore.integracao.ServicoDao;
import br.com.centralit.citcorpore.integracao.TipoDemandaServicoDao;
import br.com.centralit.citcorpore.integracao.TipoEventoServicoDao;
import br.com.centralit.citcorpore.integracao.TipoServicoDao;
import br.com.centralit.citcorpore.util.Util;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
public class CargaCatalagoServicoServiceEjb extends CrudServiceImpl implements CargaCatalagoServicoService {
private ServicoDao dao;
@Override
protected ServicoDao getDao() {
if (dao == null) {
dao = new ServicoDao();
}
return dao;
}
@Override
public List<CargaCatalagoServicoDTO> gerarCarga(final String[] carga) throws ServiceException, Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public List<CargaCatalagoServicoDTO> gerarCarga(final File carga, final Integer idEmpresa) throws ServiceException, Exception {
System.out.println("Iniciando carga de Catalogo de Servicos...");
// Daos das Transa��o
final CategoriaServicoDao categoriaServicoDao = new CategoriaServicoDao();
final TipoServicoDao tipoServicoDao = new TipoServicoDao();
final TipoDemandaServicoDao tipoDemandaServicoDao = new TipoDemandaServicoDao();
final TipoEventoServicoDao tipoEventoServicoDao = new TipoEventoServicoDao();
new ServicoDTO();
CategoriaServicoDTO categoriaServicoDTO = new CategoriaServicoDTO();
TipoServicoDTO tipoServicoDTO = new TipoServicoDTO();
TipoDemandaServicoDTO tipoDemandaServicoDTO = new TipoDemandaServicoDTO();
TipoEventoServicoDTO tipoEventoServicoDTO = new TipoEventoServicoDTO();
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
this.getDao().setTransactionControler(tc);
categoriaServicoDao.setTransactionControler(tc);
tipoServicoDao.setTransactionControler(tc);
tipoDemandaServicoDao.setTransactionControler(tc);
tipoEventoServicoDao.setTransactionControler(tc);
tc.start();
BufferedReader arq = new BufferedReader(new InputStreamReader(new FileInputStream(carga), "WINDOWS-1252"));
// Scanner arq = new Scanner(carga);
boolean primeiraLinha = true;
final int qtdNivel = 5;
String nomeServico = "";
int status = 0;
while (arq.ready()) {
final String linhaAux = arq.readLine();
String linha = null;
if (linhaAux != null) {
linha = new String(linhaAux);
linha = linha.trim();
}
// System.out.println("Carga de Catalogo de Servicos... Linha: " + linha);
nomeServico = "";
ServicoDTO beanServicoDTO = null;
String[] linhaQuebrada = null;
if (linha != null) {
linhaQuebrada = linha.split("\n");
}
if (linhaQuebrada != null && linhaQuebrada.length > 0) {
for (final String string : linhaQuebrada) {
final String[] colunasArray = string.split(";");
// Verifica se j� inicio dos dados
if (colunasArray.length > 24) {
System.out.println("Linha OK... " + linha);
if (primeiraLinha) {
primeiraLinha = false;
break;
}
int j = 0;
int nivel = 0;
for (final String coluna : colunasArray) {
CategoriaServicoDTO beanCategoriaServicoDTO = null;
TipoServicoDTO beanTipoServicoDTO = null;
TipoDemandaServicoDTO beanTipoDemandaServicoDTO = null;
TipoEventoServicoDTO beanTipoEventoServicoDTO = null;
if (j < qtdNivel) {
beanCategoriaServicoDTO = new CategoriaServicoDTO();
if (coluna != null && coluna.length() > 0) {
beanCategoriaServicoDTO = this.existeCategoriaPorNome(coluna.trim(), categoriaServicoDao);
beanCategoriaServicoDTO.setIdEmpresa(idEmpresa);
if (beanCategoriaServicoDTO.getIdCategoriaServico() == null) {
if (nivel > 0) {
beanCategoriaServicoDTO.setNomeCategoriaServico(coluna.trim());
beanCategoriaServicoDTO.setIdCategoriaServicoPai(categoriaServicoDTO.getIdCategoriaServico());
categoriaServicoDTO = this.criaCategoriaServicoDTO(beanCategoriaServicoDTO, categoriaServicoDao);
System.out.println("Criando categoria de servicos...(2) " + beanCategoriaServicoDTO.getNomeCategoriaServicoConcatenado());
} else {
beanCategoriaServicoDTO.setNomeCategoriaServico(coluna);
categoriaServicoDTO = this.criaCategoriaServicoDTO(beanCategoriaServicoDTO, categoriaServicoDao);
System.out.println("Criando categoria de servicos...(1) " + beanCategoriaServicoDTO.getNomeCategoriaServicoConcatenado());
}
nivel++;
} else {
if (nivel > 0) {
final List<CategoriaServicoDTO> listCatalagoServico = this.listCategoriasServicoidPaiFilho(categoriaServicoDTO,
beanCategoriaServicoDTO, categoriaServicoDao);
if (listCatalagoServico != null) {
categoriaServicoDTO = listCatalagoServico.get(0);
} else {
beanCategoriaServicoDTO.setNomeCategoriaServico(coluna);
beanCategoriaServicoDTO.setIdCategoriaServicoPai(categoriaServicoDTO.getIdCategoriaServico());
categoriaServicoDTO = this.criaCategoriaServicoDTO(beanCategoriaServicoDTO, categoriaServicoDao);
System.out.println("Criando categoria de servicos...(4) " + beanCategoriaServicoDTO.getNomeCategoriaServicoConcatenado());
}
} else {
categoriaServicoDTO = beanCategoriaServicoDTO;
final List<CategoriaServicoDTO> listCatalagoServico = this.listCategoriasServicoidPaiIsNull(beanCategoriaServicoDTO,
categoriaServicoDao);
if (listCatalagoServico != null) {
categoriaServicoDTO = listCatalagoServico.get(0);
} else {
beanCategoriaServicoDTO = new CategoriaServicoDTO();
beanCategoriaServicoDTO.setNomeCategoriaServico(coluna);
beanCategoriaServicoDTO.setIdEmpresa(idEmpresa);
categoriaServicoDTO = this.criaCategoriaServicoDTO(beanCategoriaServicoDTO, categoriaServicoDao);
System.out.println("Criando categoria de servicos...(3) " + beanCategoriaServicoDTO.getNomeCategoriaServicoConcatenado());
}
}
nivel++;
}
}
}
if (j == 5) {
nomeServico = coluna;
}
if (j == 6) {
beanTipoServicoDTO = new TipoServicoDTO();
beanTipoServicoDTO = this.existeTipoServicoPorNome(coluna, tipoServicoDao);
if (beanTipoServicoDTO.getIdTipoServico() == null) {
beanTipoServicoDTO.setIdEmpresa(idEmpresa);
beanTipoServicoDTO.setIdTipoServico(tipoServicoDTO.getIdTipoServico());
beanTipoServicoDTO.setNomeTipoServico(coluna);
beanTipoServicoDTO.setSituacao("A");
// System.out.println("Criando tipo de servicos... " + beanTipoServicoDTO.getNomeTipoServico());
tipoServicoDTO = this.criaTipoServicoDTO(beanTipoServicoDTO, tipoServicoDao);
} else {
tipoServicoDTO = beanTipoServicoDTO;
}
}
if (j == 7) {
if (coluna.equalsIgnoreCase("Ativo")) {
status = 1;
} else if (coluna.equalsIgnoreCase("Inativo")) {
status = 2;
} else {
status = 1;
}
}
if (j == 8) {
beanTipoDemandaServicoDTO = new TipoDemandaServicoDTO();
beanTipoDemandaServicoDTO.setNomeTipoDemandaServico(coluna);
if (coluna.equalsIgnoreCase("Incidente")) {
beanTipoDemandaServicoDTO.setClassificacao("I");
} else if (coluna.equalsIgnoreCase("Solicita��o")) {
beanTipoDemandaServicoDTO.setClassificacao("R");
beanTipoDemandaServicoDTO.setNomeTipoDemandaServico("Requisi��o");
} else if (coluna.equalsIgnoreCase("Requisi��o")) {
beanTipoDemandaServicoDTO.setClassificacao("R");
} else if (coluna.toLowerCase().contains("Ordem de Servi�o".toLowerCase())) {
beanTipoDemandaServicoDTO.setClassificacao("O");
}
beanTipoDemandaServicoDTO = this.existeTipoDemandaPorNome(beanTipoDemandaServicoDTO.getNomeTipoDemandaServico(), tipoDemandaServicoDao);
if (beanTipoDemandaServicoDTO.getIdTipoDemandaServico() == null) {
/* tipoDemandaDTO.setIdTipoDemanda(tipoServicoDTO.getIdTipoServico()); */
if (coluna.equalsIgnoreCase("Incidente")) {
beanTipoDemandaServicoDTO.setClassificacao("I");
} else if (coluna.equalsIgnoreCase("Solicita��o")) {
beanTipoDemandaServicoDTO.setClassificacao("R");
beanTipoDemandaServicoDTO.setNomeTipoDemandaServico("Requisi��o");
} else if (coluna.equalsIgnoreCase("Requisi��o")) {
beanTipoDemandaServicoDTO.setClassificacao("R");
} else if (coluna.toLowerCase().contains("Ordem de Servi�o".toLowerCase())) {
beanTipoDemandaServicoDTO.setClassificacao("O");
}
// System.out.println("Criando tipo de demanda de servicos... " + beanTipoDemandaServicoDTO.getNomeTipoDemandaServico());
tipoDemandaServicoDTO = this.criaTipoDemandaServicoDTO(beanTipoDemandaServicoDTO, tipoDemandaServicoDao);
} else {
tipoDemandaServicoDTO = beanTipoDemandaServicoDTO;
}
}
if (j == 12) {
beanTipoEventoServicoDTO = new TipoEventoServicoDTO();
beanTipoEventoServicoDTO = this.existeTipoEventoServicoPorNome(coluna, tipoEventoServicoDao);
if (beanTipoEventoServicoDTO.getIdTipoEventoServico() == null) {
/* tipoEventoServicoDTO.setIdTipoEventoServico(tipoEventoServicoDTO.getIdTipoEventoServico()); */
beanTipoEventoServicoDTO.setNomeTipoEventoServico(coluna);
// System.out.println("Criando tipo de evento de servicos... " + beanTipoEventoServicoDTO.getNomeTipoEventoServico());
tipoEventoServicoDTO = this.criaTipoEventoServicoDTO(beanTipoEventoServicoDTO, tipoEventoServicoDao);
} else {
tipoEventoServicoDTO = beanTipoEventoServicoDTO;
}
}
j++;
}
beanServicoDTO = new ServicoDTO();
beanServicoDTO.setNomeServico(nomeServico);
beanServicoDTO = this.existeServicoDTOPorNome(beanServicoDTO);
if (beanServicoDTO.getIdServico() == null) {
beanServicoDTO.setDataInicio(Util.getSqlDataAtual());
beanServicoDTO.setDetalheServico(nomeServico);
beanServicoDTO.setDispPortal("N");
beanServicoDTO.setIdCategoriaServico(categoriaServicoDTO.getIdCategoriaServico());
beanServicoDTO.setIdEmpresa(idEmpresa);
beanServicoDTO.setIdSituacaoServico(status);
beanServicoDTO.setIdTipoDemandaServico(tipoDemandaServicoDTO.getIdTipoDemandaServico());
beanServicoDTO.setIdTipoEventoServico(tipoEventoServicoDTO.getIdTipoEventoServico());
beanServicoDTO.setIdTipoServico(tipoServicoDTO.getIdTipoServico());
beanServicoDTO.setNomeServico(nomeServico);
this.criaServico(beanServicoDTO, this.getDao());
} else {
beanServicoDTO.setDataInicio(Util.getSqlDataAtual());
beanServicoDTO.setDetalheServico(nomeServico);
beanServicoDTO.setDispPortal("N");
beanServicoDTO.setIdCategoriaServico(categoriaServicoDTO.getIdCategoriaServico());
beanServicoDTO.setIdEmpresa(idEmpresa);
beanServicoDTO.setIdSituacaoServico(status);
beanServicoDTO.setIdTipoDemandaServico(tipoDemandaServicoDTO.getIdTipoDemandaServico());
beanServicoDTO.setIdTipoEventoServico(tipoEventoServicoDTO.getIdTipoEventoServico());
beanServicoDTO.setIdTipoServico(tipoServicoDTO.getIdTipoServico());
beanServicoDTO.setNomeServico(nomeServico);
this.criaServico(beanServicoDTO, this.getDao());
}
} else {
System.out.println("Linha NAO OK... " + linha);
}
}
}
}
arq.close();
arq = null;
tc.commit();
} catch (final Exception e) {
System.out.println("PROBLEMAS NA CARGA... ");
tc.rollback();
e.printStackTrace();
throw new ServiceException(e);
} finally {
tc.closeQuietly();
}
System.out.println("Fim - carga de Catalogo de Servicos...");
return null;
}
private ServicoDTO criaServico(final ServicoDTO servicoDTO, final ServicoDao dao) throws Exception {
if (servicoDTO.getIdServico() == null) {
return (ServicoDTO) dao.create(servicoDTO);
} else if (servicoDTO.getIdServico() != null) {
dao.update(servicoDTO);
}
return null;
}
private String nomeConcatenado(final List<CategoriaServicoDTO> listCategoriaHierarquia) {
String nomeConcatenado = "";
for (int i = listCategoriaHierarquia.size() - 1; i >= 0; i--) {
final CategoriaServicoDTO categoriaServicoDTO = listCategoriaHierarquia.get(i);
if (i == 0) {
nomeConcatenado += categoriaServicoDTO.getNomeCategoriaServico();
} else {
nomeConcatenado += categoriaServicoDTO.getNomeCategoriaServico() + " - ";
}
}
return nomeConcatenado;
}
private List<CategoriaServicoDTO> listCategoriaHierarquia(final CategoriaServicoDTO categoriaServicoDTO, final CategoriaServicoDao dao,
final List<CategoriaServicoDTO> listCategoriaHierarquia) throws Exception {
CategoriaServicoDTO bean = new CategoriaServicoDTO();
listCategoriaHierarquia.add(categoriaServicoDTO);
if (categoriaServicoDTO.getIdCategoriaServicoPai() != null) {
bean.setIdCategoriaServico(categoriaServicoDTO.getIdCategoriaServicoPai());
bean = (CategoriaServicoDTO) dao.restore(bean);
if (bean.getIdCategoriaServicoPai() != null) {
this.listCategoriaHierarquia(bean, dao, listCategoriaHierarquia);
} else {
listCategoriaHierarquia.add(bean);
}
}
return listCategoriaHierarquia;
}
private List<CategoriaServicoDTO> listCategoriasServicoidPaiFilho(final CategoriaServicoDTO categoriaServicoDTO, final CategoriaServicoDTO beanCategoriaServicoDTO,
final CategoriaServicoDao categoriaServicoDao) throws Exception {
CategoriaServicoDTO categoriaServicoDtoExiteServicoPai = null;
categoriaServicoDtoExiteServicoPai = new CategoriaServicoDTO();
categoriaServicoDtoExiteServicoPai.setNomeCategoriaServico(beanCategoriaServicoDTO.getNomeCategoriaServico());
categoriaServicoDtoExiteServicoPai.setIdCategoriaServicoPai(categoriaServicoDTO.getIdCategoriaServico());
final List<CategoriaServicoDTO> listCatalagoServico = categoriaServicoDao.listCategoriasServicoidPaiFilho(categoriaServicoDtoExiteServicoPai);
return listCatalagoServico;
}
private List<CategoriaServicoDTO> listCategoriasServicoidPaiIsNull(final CategoriaServicoDTO beanCategoriaServicoDTO, final CategoriaServicoDao categoriaServicoDao)
throws Exception {
CategoriaServicoDTO categoriaServicoDtoExiteServicoPai = null;
categoriaServicoDtoExiteServicoPai = new CategoriaServicoDTO();
categoriaServicoDtoExiteServicoPai.setNomeCategoriaServico(beanCategoriaServicoDTO.getNomeCategoriaServico());
final List<CategoriaServicoDTO> listCatalagoServico = categoriaServicoDao.listCategoriasServicoidPaiIsNull(categoriaServicoDtoExiteServicoPai);
return listCatalagoServico;
}
private CategoriaServicoDTO criaCategoriaServicoDTO(final CategoriaServicoDTO categoriaServicoDTO, final CategoriaServicoDao dao) throws Exception {
final List<CategoriaServicoDTO> listCategoriaHierarquia = new ArrayList<CategoriaServicoDTO>();
if (categoriaServicoDTO.getIdCategoriaServicoPai() != null) {
categoriaServicoDTO.setNomeCategoriaServicoConcatenado(this.nomeConcatenado(this.listCategoriaHierarquia(categoriaServicoDTO, dao, listCategoriaHierarquia)));
} else {
categoriaServicoDTO.setNomeCategoriaServicoConcatenado(categoriaServicoDTO.getNomeCategoriaServico());
}
categoriaServicoDTO.setDataInicio(Util.getSqlDataAtual());
return (CategoriaServicoDTO) dao.create(categoriaServicoDTO);
}
private TipoServicoDTO criaTipoServicoDTO(final TipoServicoDTO tipoServicoDTO, final TipoServicoDao dao) throws Exception {
return (TipoServicoDTO) dao.create(tipoServicoDTO);
}
private TipoDemandaServicoDTO criaTipoDemandaServicoDTO(final TipoDemandaServicoDTO tipoDemandaServicoDTO, final TipoDemandaServicoDao dao) throws Exception {
return (TipoDemandaServicoDTO) dao.create(tipoDemandaServicoDTO);
}
private TipoEventoServicoDTO criaTipoEventoServicoDTO(final TipoEventoServicoDTO tipoEventoServicoDTO, final TipoEventoServicoDao dao) throws Exception {
return (TipoEventoServicoDTO) dao.create(tipoEventoServicoDTO);
}
private ServicoDTO existeServicoDTOPorNome(final ServicoDTO servicoDTO) throws Exception {
final List<ServicoDTO> listServico = (List<ServicoDTO>) this.getDao().findByNome(servicoDTO);
if (listServico != null) {
return listServico.get(0);
}
return servicoDTO;
}
private CategoriaServicoDTO existeCategoriaPorNome(final String nome, final CategoriaServicoDao categoriaServicoDao) throws Exception {
final CategoriaServicoDTO categoriaServicoDTO = new CategoriaServicoDTO();
categoriaServicoDTO.setNomeCategoriaServico(nome);
final List<CategoriaServicoDTO> listCategoriaServico = (List<CategoriaServicoDTO>) categoriaServicoDao.findByNomeCategoria(categoriaServicoDTO);
if (listCategoriaServico != null) {
return listCategoriaServico.get(0);
}
return categoriaServicoDTO;
}
private TipoServicoDTO existeTipoServicoPorNome(final String nome, final TipoServicoDao tipoServicoDao) throws Exception {
final TipoServicoDTO tipoServicoDTO = new TipoServicoDTO();
tipoServicoDTO.setNomeTipoServico(nome);
final List<TipoServicoDTO> listTipoServico = (List<TipoServicoDTO>) tipoServicoDao.findByNome(tipoServicoDTO);
if (listTipoServico != null) {
return listTipoServico.get(0);
}
return tipoServicoDTO;
}
private TipoDemandaServicoDTO existeTipoDemandaPorNome(final String nome, final TipoDemandaServicoDao tipoDemandaServicoDao) throws Exception {
final TipoDemandaServicoDTO tipoDemandaServicoDTO = new TipoDemandaServicoDTO();
tipoDemandaServicoDTO.setNomeTipoDemandaServico(nome);
final List<TipoDemandaServicoDTO> listTipoDemanda = (List<TipoDemandaServicoDTO>) tipoDemandaServicoDao.findByNome(tipoDemandaServicoDTO);
if (listTipoDemanda != null) {
return listTipoDemanda.get(0);
}
return tipoDemandaServicoDTO;
}
private TipoEventoServicoDTO existeTipoEventoServicoPorNome(final String nome, final TipoEventoServicoDao tipoEventoServicoDao) throws Exception {
final TipoEventoServicoDTO tipoEventoServicoDTO = new TipoEventoServicoDTO();
tipoEventoServicoDTO.setNomeTipoEventoServico(nome);
final List<TipoEventoServicoDTO> listTipoEventoServico = (List<TipoEventoServicoDTO>) tipoEventoServicoDao.findByNome(tipoEventoServicoDTO);
if (listTipoEventoServico != null) {
return listTipoEventoServico.get(0);
}
return tipoEventoServicoDTO;
}
}