diff --git a/pom.xml b/pom.xml index a64f6f6c7..0bbb47112 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 br.com.rjconsultores ModelWeb - 1.0.39 + 1.0.40 rj-releases diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ContingenciaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ContingenciaServiceImpl.java index 25940fcd5..a92d468df 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/ContingenciaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/ContingenciaServiceImpl.java @@ -1,208 +1,211 @@ -package com.rjconsultores.ventaboletos.service.impl; - -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - -import javax.mail.AuthenticationFailedException; -import javax.mail.SendFailedException; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.log4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.rjconsultores.ventaboletos.constantes.Constantes; -import com.rjconsultores.ventaboletos.dao.LogHistoricoContingenciaDAO; -import com.rjconsultores.ventaboletos.entidad.Constante; -import com.rjconsultores.ventaboletos.entidad.EmpresaEmail; -import com.rjconsultores.ventaboletos.entidad.EmpresaEmailConfig; -import com.rjconsultores.ventaboletos.entidad.LogHistoricoContingencia; -import com.rjconsultores.ventaboletos.enums.EAmbienteContingencia; -import com.rjconsultores.ventaboletos.enums.EStatusContingencia; -import com.rjconsultores.ventaboletos.exception.BusinessException; -import com.rjconsultores.ventaboletos.rest.ContingenciaClienteRest; -import com.rjconsultores.ventaboletos.service.ConstanteService; -import com.rjconsultores.ventaboletos.service.ContingenciaService; -import com.rjconsultores.ventaboletos.service.EmpresaEmailConfigService; -import com.rjconsultores.ventaboletos.service.EmpresaEmailService; -import com.rjconsultores.ventaboletos.utilerias.SendMail; -import com.rjconsultores.ventaboletos.utilerias.StringHelper; -import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; -import com.rjconsultores.ventaboletos.utilerias.SendMail.AuthType; - -/** - * @author vjcor - * - */ -@Service("contingenciaService") -public class ContingenciaServiceImpl implements ContingenciaService { - - private static final String EMAIL_COPIA_OCULTA = "suportesco@rjconsultores.com.br"; - - private static Logger log = Logger.getLogger(ContingenciaServiceImpl.class); - - @Autowired - private LogHistoricoContingenciaDAO histContingenciaDAO; - - @Autowired - private EmpresaEmailService empresaEmailService; - - @Autowired - private EmpresaEmailConfigService empresaEmailConfigService; - - @Autowired - private ConstanteService constanteService; - - public List buscarHistorico(Integer empresaID, Integer estadoID) { - return histContingenciaDAO.buscarHistorico(empresaID, estadoID); - } - - @Transactional - public LogHistoricoContingencia salvarHistoricoContingencia(LogHistoricoContingencia historicoCont) throws BusinessException, SendFailedException, AuthenticationFailedException{ - historicoCont.setUsuario(UsuarioLogado.getUsuarioLogado()); - historicoCont.setDataHora(Calendar.getInstance().getTime()); - - if (historicoCont.getEmpresa() == null) { - throw new BusinessException("N�o � poss�vel salvar sem a empresa"); - } - - if (historicoCont.getEstado() == null) { - throw new BusinessException("N�o � poss�vel salvar sem o estado referente"); - } - - if (historicoCont.getMotivo() == null) { - throw new BusinessException("N�o � poss�vel salvar sem o motivo referente"); - } - - try { - Integer retorno = definirStatusContingencia(historicoCont); - - if (retorno == null) { - throw new BusinessException(" entre em contato com o administrador do sistema."); - } - - if (EStatusContingencia.CONTINGENCIA.equals(getStatusContingencia(historicoCont))) { - enviaEmail(historicoCont); - } - } catch (SendFailedException e2 ) { - setMotivoNaoTrocaStatus(historicoCont, e2); - histContingenciaDAO.suscribir(historicoCont); - throw e2; - }catch (AuthenticationFailedException e2) { - setMotivoNaoTrocaStatus(historicoCont, e2); - histContingenciaDAO.suscribir(historicoCont); - throw e2; - } - - return histContingenciaDAO.suscribir(historicoCont); - } - - private void setMotivoNaoTrocaStatus(LogHistoricoContingencia historicoCont, Exception e) { - log.error(String.format("Erro no envio de e-mail de conting�ncia da empresa %s para o estado %s.", historicoCont.getEmpresa().getEmpresaId(),historicoCont.getEstado()), e); - - String motivo = historicoCont.getMotivo(); - motivo = motivo.concat("**Problema no envio de E-mail de notifica��o. Favor checar."); - - historicoCont.setMotivo(motivo); - } - - private Integer definirStatusContingencia(LogHistoricoContingencia historicoCont) { - - Integer statusEnviado = Integer.valueOf(historicoCont.getStatus()); - - List constantesContig = constanteService.buscarPorNomeConstanteLike(Constantes.BPE_URL_CONTIG); - if (CollectionUtils.isEmpty(constantesContig)) { - Constante constanteBPeURL = constanteService.buscarPorNomeConstante(Constantes.BPE_URL); - constantesContig.add(constanteBPeURL); - } - - HashMap retornos = new HashMap(); - - for (Constante constante : constantesContig) { - - try { - String url = constante.getValorconstante(); - Integer retorno = ContingenciaClienteRest.getInstance().consultar(url, historicoCont.getEstado().getCveestado(), historicoCont.getAmbiente().toString(), StringHelper.retornaSomenteNumeros(historicoCont.getEmpresa().getCnpj())); - retornos.put(constante, retorno); - } catch (Exception e) { - log.error("", e); - } - } - - for (Entry entry : retornos.entrySet()) { - if (entry.getValue() == null || (entry.getValue() != null && entry.getValue().equals(statusEnviado))) { - log.info("O Servidor:" + entry.getKey().getValorconstante() + "enviou: " + statusEnviado + " recebeu " + entry.getValue()); - return null; - } - } - - for (Constante constante : constantesContig) { - - try { - String bpeURL = constante.getValorconstante(); - - Integer retorno = ContingenciaClienteRest.getInstance().definir(bpeURL, historicoCont.getEstado().getCveestado(), - historicoCont.getAmbiente().toString(), StringHelper.retornaSomenteNumeros(historicoCont.getEmpresa().getCnpj()), - Integer.valueOf(historicoCont.getStatus())); - - log.info("Servidor:" + bpeURL + " status:" + retorno); - - } catch (Exception e) { - log.error("", e); - } - } - - return statusEnviado; - - } - - private EStatusContingencia getStatusContingencia(LogHistoricoContingencia historicoCont) { - return EStatusContingencia.getStatusContingencia(Integer.valueOf(historicoCont.getStatus())); - } - - private void enviaEmail(LogHistoricoContingencia historicoCont) throws SendFailedException, AuthenticationFailedException { - - EmpresaEmail empresaEmail = empresaEmailService.buscarPorEmpresa(historicoCont.getEmpresa()); - EmpresaEmailConfig empresaEmailConfig = empresaEmailConfigService.buscarPorEmpresa(historicoCont.getEmpresa()); - - if (empresaEmail != null && empresaEmailConfig != null && - empresaEmailConfig.getIndAutenticacao() != null && empresaEmail.getEmailDe() != null && - empresaEmailConfig.getTipoAutorizacao() != null && empresaEmailConfig.getSmtp() != null && - empresaEmailConfig.getSenha() != null && empresaEmailConfig.getSmtpPorta() != null && - empresaEmailConfig.getSmtpEmail() != null && empresaEmail.getDestinatario() != null) { - - SendMail mail = new SendMail(); - mail.setAuth(empresaEmailConfig.getIndAutenticacao()); - if (StringUtils.isNotEmpty(empresaEmailConfig.getTipoAutorizacao())) { - mail.setAuthType(AuthType.valueOf(empresaEmailConfig.getTipoAutorizacao())); - } - mail.setEmailFrom(empresaEmail.getEmailDe()); - mail.setSmtpHost(empresaEmailConfig.getSmtp()); - mail.setSmtpPassword(empresaEmailConfig.getSenha()); - mail.setSmtpPort(empresaEmailConfig.getSmtpPorta()); - mail.setSmtpUser(empresaEmailConfig.getSmtpEmail()); - mail.setSubject("Conting�ncia Off-line BP-e"); - mail.setText(getMensagem(historicoCont)); - mail.setEmailTo(empresaEmail.getDestinatario()); - mail.setEmailToCO(EMAIL_COPIA_OCULTA); - mail.send(); - } - } - - private String getMensagem(LogHistoricoContingencia historicoContingencia) { - StringBuilder mensagem = new StringBuilder(); - mensagem.append(String.format("A empresa %s est� com a emiss�o do BP-e em conting�ncia off-line para a UF %s no ambiente de %s. ", - historicoContingencia.getEmpresa().getNombempresa(), historicoContingencia.getEstado().getCveestado(), - EAmbienteContingencia.getAmbienteContingencia(historicoContingencia.getAmbiente()).getDescricao())); - mensagem.append("A emiss�o em conting�ncia deve ser tratada como exce��o, sendo que a regra deve ser a emiss�o com autoriza��o em tempo real."); - mensagem.append("O Fisco poder� solicitar esclarecimentos, e at� mesmo restringir ao contribuinte a utiliza��o da modalidade de conting�ncia off-line, caso seja identificado que o emissor do BP-e utiliza a conting�ncia em demasia e sem justificativa aceit�vel, quando comparado a outros contribuintes em situa��o similar."); - mensagem.append("Na utiliza��o de conting�ncia off-line, o contribuinte assume o risco de perda da informa��o dos "); - mensagem.append("BP-e emitidos em conting�ncia, at� que os mesmos constem da base de dados do Fisco."); - return mensagem.toString(); - } - -} +package com.rjconsultores.ventaboletos.service.impl; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import javax.mail.AuthenticationFailedException; +import javax.mail.SendFailedException; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.rjconsultores.ventaboletos.constantes.Constantes; +import com.rjconsultores.ventaboletos.dao.LogHistoricoContingenciaDAO; +import com.rjconsultores.ventaboletos.entidad.Constante; +import com.rjconsultores.ventaboletos.entidad.EmpresaEmail; +import com.rjconsultores.ventaboletos.entidad.EmpresaEmailConfig; +import com.rjconsultores.ventaboletos.entidad.LogHistoricoContingencia; +import com.rjconsultores.ventaboletos.enums.EAmbienteContingencia; +import com.rjconsultores.ventaboletos.enums.EStatusContingencia; +import com.rjconsultores.ventaboletos.exception.BusinessException; +import com.rjconsultores.ventaboletos.rest.ContingenciaClienteRest; +import com.rjconsultores.ventaboletos.service.ConstanteService; +import com.rjconsultores.ventaboletos.service.ContingenciaService; +import com.rjconsultores.ventaboletos.service.EmpresaEmailConfigService; +import com.rjconsultores.ventaboletos.service.EmpresaEmailService; +import com.rjconsultores.ventaboletos.utilerias.SendMail; +import com.rjconsultores.ventaboletos.utilerias.StringHelper; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.utilerias.SendMail.AuthType; + +/** + * @author vjcor + * + */ +@Service("contingenciaService") +public class ContingenciaServiceImpl implements ContingenciaService { + + private static final String EMAIL_SUPORTE_SCO_RJCONSULTORES = "EMAIL_SUPORTE_SCO_RJCONSULTORES"; + + private static Logger log = Logger.getLogger(ContingenciaServiceImpl.class); + + @Autowired + private LogHistoricoContingenciaDAO histContingenciaDAO; + + @Autowired + private EmpresaEmailService empresaEmailService; + + @Autowired + private EmpresaEmailConfigService empresaEmailConfigService; + + @Autowired + private ConstanteService constanteService; + + public List buscarHistorico(Integer empresaID, Integer estadoID) { + return histContingenciaDAO.buscarHistorico(empresaID, estadoID); + } + + @Transactional + public LogHistoricoContingencia salvarHistoricoContingencia(LogHistoricoContingencia historicoCont) throws BusinessException, SendFailedException, AuthenticationFailedException{ + historicoCont.setUsuario(UsuarioLogado.getUsuarioLogado()); + historicoCont.setDataHora(Calendar.getInstance().getTime()); + + if (historicoCont.getEmpresa() == null) { + throw new BusinessException("N�o � poss�vel salvar sem a empresa"); + } + + if (historicoCont.getEstado() == null) { + throw new BusinessException("N�o � poss�vel salvar sem o estado referente"); + } + + if (historicoCont.getMotivo() == null) { + throw new BusinessException("N�o � poss�vel salvar sem o motivo referente"); + } + + try { + Integer retorno = definirStatusContingencia(historicoCont); + + if (retorno == null) { + throw new BusinessException(" entre em contato com o administrador do sistema."); + } + + if (EStatusContingencia.CONTINGENCIA.equals(getStatusContingencia(historicoCont))) { + enviaEmail(historicoCont); + } + } catch (SendFailedException e2 ) { + setMotivoNaoTrocaStatus(historicoCont, e2); + histContingenciaDAO.suscribir(historicoCont); + throw e2; + }catch (AuthenticationFailedException e2) { + setMotivoNaoTrocaStatus(historicoCont, e2); + histContingenciaDAO.suscribir(historicoCont); + throw e2; + } + + return histContingenciaDAO.suscribir(historicoCont); + } + + private void setMotivoNaoTrocaStatus(LogHistoricoContingencia historicoCont, Exception e) { + log.error(String.format("Erro no envio de e-mail de conting�ncia da empresa %s para o estado %s.", historicoCont.getEmpresa().getEmpresaId(),historicoCont.getEstado()), e); + + String motivo = historicoCont.getMotivo(); + motivo = motivo.concat("**Problema no envio de E-mail de notifica��o. Favor checar."); + + historicoCont.setMotivo(motivo); + } + + private Integer definirStatusContingencia(LogHistoricoContingencia historicoCont) { + + Integer statusEnviado = Integer.valueOf(historicoCont.getStatus()); + + List constantesContig = constanteService.buscarPorNomeConstanteLike(Constantes.BPE_URL_CONTIG); + if (CollectionUtils.isEmpty(constantesContig)) { + Constante constanteBPeURL = constanteService.buscarPorNomeConstante(Constantes.BPE_URL); + constantesContig.add(constanteBPeURL); + } + + HashMap retornos = new HashMap(); + + for (Constante constante : constantesContig) { + + try { + String url = constante.getValorconstante(); + Integer retorno = ContingenciaClienteRest.getInstance().consultar(url, historicoCont.getEstado().getCveestado(), historicoCont.getAmbiente().toString(), StringHelper.retornaSomenteNumeros(historicoCont.getEmpresa().getCnpj())); + retornos.put(constante, retorno); + } catch (Exception e) { + log.error("", e); + } + } + + for (Entry entry : retornos.entrySet()) { + if (entry.getValue() == null || (entry.getValue() != null && entry.getValue().equals(statusEnviado))) { + log.info("O Servidor:" + entry.getKey().getValorconstante() + "enviou: " + statusEnviado + " recebeu " + entry.getValue()); + return null; + } + } + + for (Constante constante : constantesContig) { + + try { + String bpeURL = constante.getValorconstante(); + + Integer retorno = ContingenciaClienteRest.getInstance().definir(bpeURL, historicoCont.getEstado().getCveestado(), + historicoCont.getAmbiente().toString(), StringHelper.retornaSomenteNumeros(historicoCont.getEmpresa().getCnpj()), + Integer.valueOf(historicoCont.getStatus())); + + log.info("Servidor:" + bpeURL + " status:" + retorno); + + } catch (Exception e) { + log.error("", e); + } + } + + return statusEnviado; + + } + + private EStatusContingencia getStatusContingencia(LogHistoricoContingencia historicoCont) { + return EStatusContingencia.getStatusContingencia(Integer.valueOf(historicoCont.getStatus())); + } + + private void enviaEmail(LogHistoricoContingencia historicoCont) throws SendFailedException, AuthenticationFailedException { + + EmpresaEmail empresaEmail = empresaEmailService.buscarPorEmpresa(historicoCont.getEmpresa()); + EmpresaEmailConfig empresaEmailConfig = empresaEmailConfigService.buscarPorEmpresa(historicoCont.getEmpresa()); + Constante emailSuporRJConstante = constanteService.buscarPorNomeConstante(EMAIL_SUPORTE_SCO_RJCONSULTORES); + String emailSuporRJ = emailSuporRJConstante !=null ? emailSuporRJConstante.getValorconstante() : null; + if (empresaEmail != null && empresaEmailConfig != null && + empresaEmailConfig.getIndAutenticacao() != null && empresaEmail.getEmailDe() != null && + empresaEmailConfig.getTipoAutorizacao() != null && empresaEmailConfig.getSmtp() != null && + empresaEmailConfig.getSenha() != null && empresaEmailConfig.getSmtpPorta() != null && + empresaEmailConfig.getSmtpEmail() != null && empresaEmail.getDestinatario() != null) { + + SendMail mail = new SendMail(); + mail.setAuth(empresaEmailConfig.getIndAutenticacao()); + if (StringUtils.isNotEmpty(empresaEmailConfig.getTipoAutorizacao())) { + mail.setAuthType(AuthType.valueOf(empresaEmailConfig.getTipoAutorizacao())); + } + mail.setEmailFrom(empresaEmail.getEmailDe()); + mail.setSmtpHost(empresaEmailConfig.getSmtp()); + mail.setSmtpPassword(empresaEmailConfig.getSenha()); + mail.setSmtpPort(empresaEmailConfig.getSmtpPorta()); + mail.setSmtpUser(empresaEmailConfig.getSmtpEmail()); + mail.setSubject("Conting�ncia Off-line BP-e"); + mail.setText(getMensagem(historicoCont)); + mail.setEmailTo(empresaEmail.getDestinatario()); + if(StringUtils.isNotBlank(emailSuporRJ)) { + mail.setEmailToCO(emailSuporRJ); + } + mail.send(); + } + } + + private String getMensagem(LogHistoricoContingencia historicoContingencia) { + StringBuilder mensagem = new StringBuilder(); + mensagem.append(String.format("A empresa %s est� com a emiss�o do BP-e em conting�ncia off-line para a UF %s no ambiente de %s. ", + historicoContingencia.getEmpresa().getNombempresa(), historicoContingencia.getEstado().getCveestado(), + EAmbienteContingencia.getAmbienteContingencia(historicoContingencia.getAmbiente()).getDescricao())); + mensagem.append("A emiss�o em conting�ncia deve ser tratada como exce��o, sendo que a regra deve ser a emiss�o com autoriza��o em tempo real."); + mensagem.append("O Fisco poder� solicitar esclarecimentos, e at� mesmo restringir ao contribuinte a utiliza��o da modalidade de conting�ncia off-line, caso seja identificado que o emissor do BP-e utiliza a conting�ncia em demasia e sem justificativa aceit�vel, quando comparado a outros contribuintes em situa��o similar."); + mensagem.append("Na utiliza��o de conting�ncia off-line, o contribuinte assume o risco de perda da informa��o dos "); + mensagem.append("BP-e emitidos em conting�ncia, at� que os mesmos constem da base de dados do Fisco."); + return mensagem.toString(); + } + +}