package gcom.batch;
import gcom.arrecadacao.ControladorArrecadacaoLocal;
import gcom.arrecadacao.ControladorArrecadacaoLocalHome;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cobranca.ComandoEmpresaCobrancaContaExtensao;
import gcom.cobranca.NegativacaoComando;
import gcom.cobranca.Negativador;
import gcom.cobranca.NegativadorContrato;
import gcom.cobranca.NegativadorMovimento;
import gcom.cobranca.NegativadorMovimentoReg;
import gcom.faturamento.ControladorFaturamentoLocal;
import gcom.faturamento.ControladorFaturamentoLocalHome;
import gcom.faturamento.FaturamentoAtividade;
import gcom.faturamento.FaturamentoGrupo;
import gcom.financeiro.ControladorFinanceiroLocal;
import gcom.financeiro.ControladorFinanceiroLocalHome;
import gcom.financeiro.ParametrosDevedoresDuvidosos;
import gcom.seguranca.acesso.Funcionalidade;
import gcom.spcserasa.ControladorSpcSerasaLocal;
import gcom.spcserasa.ControladorSpcSerasaLocalHome;
import gcom.spcserasa.FiltroNegativadorMovimento;
import gcom.tarefa.TarefaBatch;
import gcom.util.ConstantesJNDI;
import gcom.util.ControladorException;
import gcom.util.ControladorUtilLocal;
import gcom.util.ControladorUtilLocalHome;
import gcom.util.IoUtil;
import gcom.util.ServiceLocator;
import gcom.util.ServiceLocatorException;
import gcom.util.SistemaException;
import gcom.util.filtro.ParametroSimples;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import javax.ejb.CreateException;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.jboss.logging.Logger;
public class FuncionalidadeIniciada implements Serializable {
private static final long serialVersionUID = 1L;
private Logger logger = Logger.getLogger(FuncionalidadeIniciada.class);
private Integer id;
private Date dataHoraInicio;
private Date dataHoraTermino;
private FuncionalidadeSituacao funcionalidadeSituacao;
private ProcessoIniciado processoIniciado;
private ProcessoFuncionalidade processoFuncionalidade;
private Set unidadesIniciadas;
private Set relatoriosGerados;
private byte[] tarefaBatch;
private String descricaoExcecao;
public String getDescricaoExcecao() {
return descricaoExcecao;
}
public void setDescricaoExcecao(String descricaoExcecao) {
this.descricaoExcecao = descricaoExcecao;
}
/** full constructor */
public FuncionalidadeIniciada(Date dataHoraInicio, Date dataHoraTermino, gcom.batch.FuncionalidadeSituacao funcionalidadeSituacao,
gcom.batch.ProcessoIniciado processoIniciado, gcom.batch.ProcessoFuncionalidade processoFuncionalidade, Set unidadesIniciadas, Set relatoriosGerados) {
this.dataHoraInicio = dataHoraInicio;
this.dataHoraTermino = dataHoraTermino;
this.funcionalidadeSituacao = funcionalidadeSituacao;
this.processoIniciado = processoIniciado;
this.processoFuncionalidade = processoFuncionalidade;
this.unidadesIniciadas = unidadesIniciadas;
this.relatoriosGerados = relatoriosGerados;
}
/** default constructor */
public FuncionalidadeIniciada() {
}
/** minimal constructor */
public FuncionalidadeIniciada(gcom.batch.FuncionalidadeSituacao funcionalidadeSituacao, gcom.batch.ProcessoIniciado processoIniciado,
gcom.batch.ProcessoFuncionalidade processoFuncionalidade, Set unidadesIniciadas, Set relatoriosGerados) {
this.funcionalidadeSituacao = funcionalidadeSituacao;
this.processoIniciado = processoIniciado;
this.processoFuncionalidade = processoFuncionalidade;
this.unidadesIniciadas = unidadesIniciadas;
this.relatoriosGerados = relatoriosGerados;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getDataHoraInicio() {
return this.dataHoraInicio;
}
public void setDataHoraInicio(Date dataHoraInicio) {
this.dataHoraInicio = dataHoraInicio;
}
public Date getDataHoraTermino() {
return this.dataHoraTermino;
}
public void setDataHoraTermino(Date dataHoraTermino) {
this.dataHoraTermino = dataHoraTermino;
}
public gcom.batch.FuncionalidadeSituacao getFuncionalidadeSituacao() {
return this.funcionalidadeSituacao;
}
public void setFuncionalidadeSituacao(gcom.batch.FuncionalidadeSituacao funcionalidadeSituacao) {
this.funcionalidadeSituacao = funcionalidadeSituacao;
}
public gcom.batch.ProcessoIniciado getProcessoIniciado() {
return this.processoIniciado;
}
public void setProcessoIniciado(gcom.batch.ProcessoIniciado processoIniciado) {
this.processoIniciado = processoIniciado;
}
public gcom.batch.ProcessoFuncionalidade getProcessoFuncionalidade() {
return this.processoFuncionalidade;
}
public void setProcessoFuncionalidade(gcom.batch.ProcessoFuncionalidade processoFuncionalidade) {
this.processoFuncionalidade = processoFuncionalidade;
}
public Set getUnidadesIniciadas() {
return this.unidadesIniciadas;
}
public void setUnidadesIniciadas(Set unidadesIniciadas) {
this.unidadesIniciadas = unidadesIniciadas;
}
public Set getRelatoriosGerados() {
return this.relatoriosGerados;
}
public void setRelatoriosGerados(Set relatoriosGerados) {
this.relatoriosGerados = relatoriosGerados;
}
public String toString() {
return new ToStringBuilder(this).append("id", getId()).toString();
}
public byte[] getTarefaBatch() {
return tarefaBatch;
}
public void setTarefaBatch(byte[] tarefaBatch) {
this.tarefaBatch = tarefaBatch;
}
public String getDiferencaInicioTermino() {
String retorno = "";
if (this.dataHoraTermino != null) {
long diferencaEmMilisegundos = this.dataHoraTermino.getTime() - this.dataHoraInicio.getTime();
long diferencaEmHoras = diferencaEmMilisegundos / (60 * 60 * 1000);
long diferencaEmMinutos = (diferencaEmMilisegundos / (60 * 1000)) % 60;
long diferencaEmSegundos = (diferencaEmMilisegundos / (1000)) % 60;
if (diferencaEmHoras < 10) {
retorno = "0" + diferencaEmHoras;
} else {
retorno = "" + diferencaEmHoras;
}
if (diferencaEmMinutos < 10) {
retorno = retorno + ":0" + diferencaEmMinutos;
} else {
retorno = retorno + ":" + diferencaEmMinutos;
}
if (diferencaEmSegundos < 10) {
retorno = retorno + ":0" + diferencaEmSegundos;
} else {
retorno = retorno + ":" + diferencaEmSegundos;
}
}
return retorno;
}
public void finalizador() {
logger.info("Entrou no finalizador do processo");
try {
SistemaParametro sistemaParametros = getControladorUtil().pesquisarParametrosDoSistema();
TarefaBatch tarefaBatch = (TarefaBatch) IoUtil.transformarBytesParaObjeto(this.tarefaBatch);
System.out.println("Entrou na Funcionalidade: " + this.processoFuncionalidade.getFuncionalidade().getId() + "-"
+ this.processoFuncionalidade.getFuncionalidade().getDescricao());
switch (this.processoFuncionalidade.getFuncionalidade().getId()) {
case Funcionalidade.GERAR_DADOS_PARA_LEITURA:
Integer anoMesFaturamentoGrupoLeitura = (Integer) tarefaBatch.getParametro("anoMesFaturamentoGrupo");
Integer idFaturamentoGrupo = (Integer) tarefaBatch.getParametro("idFaturamentoGrupo");
// atualiza a data e a hora da realiza��o da atividade com a
// data e
// a hora correntes
getControladorFaturamento().atualizarDataHoraRealizacaoAtividade(FaturamentoAtividade.GERAR_ARQUIVO_LEITURA, anoMesFaturamentoGrupoLeitura,
idFaturamentoGrupo);
break;
case Funcionalidade.FATURAR_GRUPO_FATURAMENTO:
FaturamentoGrupo faturamentoGrupo = (FaturamentoGrupo) tarefaBatch.getParametro("faturamentoGrupo");
Integer atividade = (Integer) tarefaBatch.getParametro("atividade");
System.out.println("**********************ENTROU PARA ATUALIZAR ANOMES: " + faturamentoGrupo.getAnoMesReferencia() + " ********************");
/*
* Caso a atividade que esteja sendo executada, corresponda a
* faturar grupo, atualiza o ano/m�s de refer�ncia do
* faturamento para o m�s seguinte.
*/
if (atividade == FaturamentoAtividade.FATURAR_GRUPO.intValue()) {
getControladorFaturamento().atualizarAnoMesReferenciaFaturamentoGrupo(faturamentoGrupo, faturamentoGrupo.getAnoMesReferencia(), atividade);
}
break;
case Funcionalidade.CONSISTIR_LEITURAS_E_CALCULAR_CONSUMOS:
FaturamentoGrupo faturamentoGrupoConsistirLeituras = (FaturamentoGrupo) tarefaBatch.getParametro("faturamentoGrupo");
System.out.println("**********************ENTROU PARA ATUALIZAR DATAHORA REALIZA��O DA ATIVIDADE: "
+ faturamentoGrupoConsistirLeituras.getId().toString() + "********************");
getControladorFaturamento().atualizarDataHoraRealizacaoAtividade(FaturamentoAtividade.CONSISTIR_LEITURAS_E_CALCULAR_CONSUMOS,
faturamentoGrupoConsistirLeituras.getAnoMesReferencia(), faturamentoGrupoConsistirLeituras.getId());
break;
case Funcionalidade.GERAR_HISTORICO_PARA_ENCERRAR_FATURAMENTO_MES:
/**
* Item 12 do batch de encerrar faturamento do m�s.
*/
// recupera o ano/m�s de refer�ncia do faturamento
int anoMesFaturamentoSistemaParametro = sistemaParametros.getAnoMesFaturamento();
getControladorFaturamento().atualizarAnoMesFaturamento(anoMesFaturamentoSistemaParametro);
break;
case Funcionalidade.GERAR_HISTORICO_PARA_ENCERRAR_ARRECADACAO_MES:
/**
* Item 11 do batch de encerrar arrecada��o do m�s.
*/
// recupera o ano/m�s de refer�ncia da arrecada��o
int anoMesArrecadacaoSistemaParametro = sistemaParametros.getAnoMesArrecadacao();
getControladorArrecadacao().atualizarAnoMesArrecadacao(anoMesArrecadacaoSistemaParametro);
break;
case Funcionalidade.GERAR_RESUMO_DEVEDORES_DUVIDOSOS:
Integer anoMesReferenciaContabil = (Integer) tarefaBatch.getParametro("anoMesReferenciaContabil");
ParametrosDevedoresDuvidosos parametrosDevedoresDuvidosos = getControladorFinanceiro().pesquisarParametrosDevedoresDuvidosos(
anoMesReferenciaContabil);
parametrosDevedoresDuvidosos.setDataProcessamento(new Date());
this.getControladorUtil().atualizar(parametrosDevedoresDuvidosos);
System.out.println("ENTROU PARA ATUALIZAR ANOMES: " + anoMesReferenciaContabil);
break;
case Funcionalidade.GERAR_DADOS_DIARIOS_ARRECADACAO:
sistemaParametros.setDataHoraDadosDiariosArrecadacao(new Date());
System.out.println("**********************ENTROU PARA ATUALIZAR DATAHORA DA GERA��O DOS DADOS********************");
getControladorUtil().atualizar(sistemaParametros);
break;
case Funcionalidade.INSERIR_RESUMO_ACOES_COBRANCA_CRONOGRAMA:
sistemaParametros.setDataHoraResumoAcoesCobranca(new Date());
System.out.println("**********************ENTROU PARA ATUALIZAR DATAHORA DO RESUMO DE A��ES DE COBRAN�A ********************");
getControladorUtil().atualizar(sistemaParametros);
break;
case Funcionalidade.GERAR_RESUMO_DIARIO_NEGATIVACAO:
// sistemaParametro =
// this.getControladorUtil().pesquisarParametrosDoSistema();
// Integer numeroExecucao =
// sistemaParametro.getNumeroExecucaoResumoNegativacao() + 1;
//
// // [UC0688] Gerar Resumo Di�rio da Negativa��o.
// //-------------------------------------------------------------------------------------------
// // Alterado por : Yara Taciane - data : 08/07/2008
// // Analista : F�tima Sampaio
// //-------------------------------------------------------------------------------------------
//
// //O sistema atualiza o n�mero da execu��o do resumo da
// negativa��o na tabela SISTEMA_PARAMETROS mais um).
// sistemaParametro.setNumeroExecucaoResumoNegativacao(numeroExecucao);
// sistemaParametro.setUltimaAlteracao(new Date());
// this.getControladorUtil().atualizarSistemaParametro(sistemaParametro);
// System.out.println(" Fim --- > altualizado Sistema Parametro = "
// + sistemaParametro.getNumeroExecucaoResumoNegativacao());
// //-------------------------------------------------------------------------------------------
//
// System.out.println("**********************ENTROU GERAR MOV. DE EXCLUS�O NEGATIVADORES********************");
// Collection coll =
// getControladorSpcSerasa().consultarNegativadoresParaExclusaoMovimento();
// Integer[] idNegat = new Integer[coll.size()] ;
// Iterator it = coll.iterator();
// int i = 0;
// while(it.hasNext()){
// Negativador negativador = (Negativador)it.next();
// idNegat[i]= negativador.getId();
// i++;
// }
// Collection collRetorno =
// getControladorSpcSerasa().gerarMovimentoExclusaoNegativacao(idNegat);
// if(collRetorno != null){
// System.out.println("---> retornou da Exclus�o <----");
// }
System.out.println(" Fim do Resumo Di�rio! ");
break;
case Funcionalidade.EXECUTAR_COMANDO_DE_NEGATIVACAO:
NegativacaoComando comando = (NegativacaoComando) tarefaBatch.getParametro("nComando");
Negativador negativador = (Negativador) tarefaBatch.getParametro("neg");
Object[] dadosInclusaoNegativacao = null;
Integer quantidadeInclusaoItemNegativacao = null;
if (comando.getIndicadorSimulacao() == NegativacaoComando.NAO_SIMULACAO) {
// [SB0012] - Gerar Arquivo TXT para envio ao negativador
dadosInclusaoNegativacao = getControladorSpcSerasa().pesquisarQuantidadeInclusaoNegativacao(comando.getId());
quantidadeInclusaoItemNegativacao = getControladorSpcSerasa().pesquisarQuantidadeInclusaoItemNegativacao(comando.getId());
Integer qtdRegistro = (Integer) dadosInclusaoNegativacao[2] + 1;
FiltroNegativadorMovimento filtroNegativadorMovimento = new FiltroNegativadorMovimento();
filtroNegativadorMovimento.adicionarParametro(new ParametroSimples(FiltroNegativadorMovimento.ID, (Integer) dadosInclusaoNegativacao[3]));
filtroNegativadorMovimento.adicionarCaminhoParaCarregamentoEntidade(FiltroNegativadorMovimento.NEGATIVADOR);
filtroNegativadorMovimento.adicionarCaminhoParaCarregamentoEntidade(FiltroNegativadorMovimento.NEGATIVACAO_COMANDO);
Collection colecaoNegativadorMovimento = getControladorUtil().pesquisar(filtroNegativadorMovimento, NegativadorMovimento.class.getName());
NegativadorMovimento negativadorMovimento = null;
if (colecaoNegativadorMovimento != null && !colecaoNegativadorMovimento.isEmpty()) {
negativadorMovimento = (NegativadorMovimento) colecaoNegativadorMovimento.iterator().next();
}
this.getControladorSpcSerasa().gerarArquivoNegativacao(negativadorMovimento, true);
NegativadorContrato contrato = getControladorSpcSerasa().consultarNegativadorContratoVigente(comando.getNegativador().getId());
contrato.setNumeroSequencialEnvio(negativadorMovimento.getNumeroSequencialEnvio());
if (contrato.getNumeroInclusoesEnviadas() != null) {
contrato.setNumeroInclusoesEnviadas(contrato.getNumeroInclusoesEnviadas() + (Integer) dadosInclusaoNegativacao[0]);
} else {
contrato.setNumeroInclusoesEnviadas((Integer) dadosInclusaoNegativacao[0]);
}
getControladorUtil().atualizar(contrato);
negativadorMovimento.setNumeroRegistrosEnvio(qtdRegistro);
negativadorMovimento.setValorTotalEnvio((BigDecimal) dadosInclusaoNegativacao[1]);
getControladorUtil().atualizar(negativadorMovimento);
} else {
dadosInclusaoNegativacao = getControladorSpcSerasa().pesquisarQuantidadeInclusaoNegativacaoSimulacao(comando.getId());
quantidadeInclusaoItemNegativacao = (Integer) dadosInclusaoNegativacao[2];
}
comando.setDataHoraRealizacao(new Date());
comando.setQuantidadeInclusoes((Integer) dadosInclusaoNegativacao[0]);
comando.setValorDebito((BigDecimal) dadosInclusaoNegativacao[1]);
comando.setQuantidadeItensIncluidos(quantidadeInclusaoItemNegativacao);
comando.setUltimaAlteracao(new Date());
getControladorUtil().atualizar(comando);
NegativacaoComando.resetQuantidadeImoveisJaIncluidos();
NegativadorMovimentoReg.resetNumeroProximoRegistro();
logger.info("******************** FIM EXECUTAR COMANDO NEGATIVA��O ********************");
break;
case Funcionalidade.GERAR_MOVIMENTO_EXTENSAO_CONTAS_COBRANCA_POR_EMPRESA:
Collection colecaoComandoEmpresaCobrancaContaExtensao = (Collection) tarefaBatch.getParametro("colecaoComandoEmpresaCobrancaContaExtensao");
if (colecaoComandoEmpresaCobrancaContaExtensao != null && !colecaoComandoEmpresaCobrancaContaExtensao.isEmpty()) {
Iterator it = colecaoComandoEmpresaCobrancaContaExtensao.iterator();
while (it.hasNext()) {
ComandoEmpresaCobrancaContaExtensao comandoEmpresaCobrancaContaExtensao = (ComandoEmpresaCobrancaContaExtensao) it.next();
comandoEmpresaCobrancaContaExtensao.setDataExecucao(new Date());
comandoEmpresaCobrancaContaExtensao.setUltimaAlteracao(new Date());
getControladorUtil().atualizar(comandoEmpresaCobrancaContaExtensao);
}
}
break;
}
System.out.println("Saiu do finalizador ");
// Caso ocorra erro com o finalizador seta a funcionalidadeIniciada para CONCLUIDA_COM_ERRO
} catch (ControladorException ex) {
this.funcionalidadeSituacao.setId(FuncionalidadeSituacao.CONCLUIDA_COM_ERRO);
} catch (IOException ex) {
this.funcionalidadeSituacao.setId(FuncionalidadeSituacao.CONCLUIDA_COM_ERRO);
} catch (ClassNotFoundException ex) {
this.funcionalidadeSituacao.setId(FuncionalidadeSituacao.CONCLUIDA_COM_ERRO);
}
}
private ControladorArrecadacaoLocal getControladorArrecadacao() {
ControladorArrecadacaoLocalHome localHome = null;
ControladorArrecadacaoLocal local = null;
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorArrecadacaoLocalHome) locator.getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_ARRECADACAO_SEJB);
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
private ControladorFaturamentoLocal getControladorFaturamento() {
ControladorFaturamentoLocalHome localHome = null;
ControladorFaturamentoLocal local = null;
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorFaturamentoLocalHome) locator.getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_FATURAMENTO_SEJB);
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
private ControladorUtilLocal getControladorUtil() {
ControladorUtilLocalHome localHome = null;
ControladorUtilLocal local = null;
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorUtilLocalHome) locator.getLocalHome(ConstantesJNDI.CONTROLADOR_UTIL_SEJB);
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
private ControladorFinanceiroLocal getControladorFinanceiro() {
ControladorFinanceiroLocalHome localHome = null;
ControladorFinanceiroLocal local = null;
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorFinanceiroLocalHome) locator.getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_FINANCEIRO_SEJB);
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
private ControladorSpcSerasaLocal getControladorSpcSerasa() {
ControladorSpcSerasaLocalHome localHome = null;
ControladorSpcSerasaLocal local = null;
ServiceLocator locator = null;
try {
locator = ServiceLocator.getInstancia();
localHome = (ControladorSpcSerasaLocalHome) locator.getLocalHome(ConstantesJNDI.CONTROLADOR_SPC_SERASA_SEJB);
local = localHome.create();
return local;
} catch (CreateException e) {
throw new SistemaException(e);
} catch (ServiceLocatorException e) {
throw new SistemaException(e);
}
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FuncionalidadeIniciada other = (FuncionalidadeIniciada) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}