Merge pull request 'fixes bug #AL-2143' (#37) from AL-2143 into master

Reviewed-on: http://18.235.188.113:3000/adm/ModelWeb/pulls/37
Reviewed-by: fabio <fabio.faria@rjconsultores.com.br>
Reviewed-by: Gleison da Cruz <gleison.cruz@totvs.com.br>
master
pinheiro 2023-03-16 12:43:22 +00:00
commit 7aaae1d429
2 changed files with 212 additions and 209 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId> <groupId>br.com.rjconsultores</groupId>
<artifactId>ModelWeb</artifactId> <artifactId>ModelWeb</artifactId>
<version>1.0.39</version> <version>1.0.40</version>
<distributionManagement> <distributionManagement>
<repository> <repository>
<id>rj-releases</id> <id>rj-releases</id>

View File

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