Advertisement
Guest User

sss

a guest
Nov 11th, 2018
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.33 KB | None | 0 0
  1. package br.com.themist.verificador.checks;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.InputStream;
  5. import java.sql.Timestamp;
  6. import java.text.Format;
  7. import java.text.SimpleDateFormat;
  8. import java.util.ArrayList;
  9. import java.util.Calendar;
  10. import java.util.Date;
  11. import java.util.HashMap;
  12. import java.util.HashSet;
  13. import java.util.List;
  14. import java.util.Map.Entry;
  15. import java.util.Scanner;
  16. import java.util.Set;
  17.  
  18. import org.apache.log4j.Logger;
  19. import org.hibernate.Criteria;
  20. import org.hibernate.Session;
  21. import org.hibernate.criterion.Criterion;
  22. import org.hibernate.criterion.Order;
  23. import org.hibernate.criterion.Projections;
  24. import org.hibernate.criterion.Restrictions;
  25. import org.jboleto.JBoleto;
  26. import org.jboleto.JBoletoBean;
  27. import org.jboleto.PDFGeneratorCell;
  28. import org.json.JSONArray;
  29. import org.json.JSONObject;
  30.  
  31. import br.com.aplic.DAO.empresas.LogViewBancoDAOGeral;
  32. import br.com.aplic.entidades.admin.ConfigGerencialWeb;
  33. import br.com.aplic.entidades.admin.Empresa;
  34. import br.com.aplic.entidades.admin.Marca;
  35. import br.com.aplic.entidades.admin.integracao.Integrador;
  36. import br.com.aplic.entidades.distribuidor.LogViewBanco;
  37. import br.com.aplic.entidades.distribuidor.MarcaDistribuidor;
  38. import br.com.aplic.entidades.distribuidor.ProdutoCategoriaDistribuidor;
  39. import br.com.aplic.entidades.distribuidor.ProdutoDistribuidor;
  40. import br.com.aplic.entidades.distribuidor.RegionalMarcaDistribuidor;
  41. import br.com.aplic.entidades.distribuidor.Titulo;
  42. import br.com.aplic.entidades.distribuidor.integracao.PontoVendaCobrancaIntegracaoRepasse;
  43. import br.com.aplic.entidades.empresa.BoletoGerado;
  44. import br.com.aplic.entidades.empresa.CicloVenda;
  45. import br.com.aplic.entidades.empresa.CicloVendaControleEnvio;
  46. import br.com.aplic.entidades.empresa.CicloVendaFaturamentoNotaFiscal;
  47. import br.com.aplic.entidades.empresa.CicloVendaFaturamentoNotaFiscalAutorizacao;
  48. import br.com.aplic.entidades.empresa.CicloVendaRepasse;
  49. import br.com.aplic.entidades.empresa.FaturamentoEtico;
  50. import br.com.aplic.entidades.empresa.FaturamentoEticoArquivo;
  51. import br.com.aplic.entidades.empresa.PontoVenda;
  52. import br.com.aplic.entidades.empresa.TituloCicloVenda;
  53. import br.com.aplic.entidades.empresa.UsuarioGerencial;
  54. import br.com.aplic.entidades.empresa.Venda;
  55. import br.com.aplic.entidades.integracao.financeiro.CicloVendaBO;
  56. import br.com.aplic.exceptions.RestricaoException;
  57. import br.com.aplic.notafiscaletico.AncoraEmail;
  58. import br.com.aplic.relatorios.datasource.CicloVendaRepasseDS;
  59. import br.com.aplic.relatorios.util.DataSourcePadrao;
  60. import br.com.aplic.utils.DataUtil;
  61. import br.com.aplic.utils.EmailAppswareSession;
  62. import br.com.aplic.utils.FormatadorUtil;
  63. import br.com.aplic.utils.Utils;
  64. import br.com.themist.banco.ConexaoBanco;
  65. import br.com.themist.verificador.Verificavel;
  66.  
  67. @SuppressWarnings("unchecked")
  68. public class ChecaEnvioEmailCobrancaFaturamento implements Verificavel {
  69.  
  70. private static final Logger logger = Logger.getLogger(ChecaEnvioEmailCobrancaFaturamento.class);
  71.  
  72. private static final String SCHEMA_A_EXECUTAR_N2 = "n2";
  73.  
  74. private HashMap<String, EmailAppswareSession> sessoesEmails = new HashMap<String, EmailAppswareSession>();
  75.  
  76. static {
  77.  
  78. }
  79.  
  80. public void run() {
  81.  
  82. while (true) {
  83.  
  84. Session sessaoAdmin = null;
  85. // SEGUNDOS!!!
  86. long timeSleep = 30000L;
  87. try {
  88. Calendar atual = Calendar.getInstance();
  89. atual = Utils.zerarHoras(atual.getTime());
  90.  
  91. logger.info("INICIOU CHECK ENVIO EMAIL_COBRANCA_FATURAMENTO");
  92.  
  93. sessaoAdmin = ConexaoBanco.getInstance().getSessaoAdmin();
  94.  
  95. Criteria ct = sessaoAdmin.createCriteria(ConfigGerencialWeb.class);
  96. ct.add(Restrictions.eq(ConfigGerencialWeb.strNomSchema, SCHEMA_A_EXECUTAR_N2));
  97. ct.add(Restrictions.isNull(ConfigGerencialWeb.strDthExclusao));
  98.  
  99. List<ConfigGerencialWeb> listaConfigs = ct.list();
  100. for (ConfigGerencialWeb configGerencialWeb : listaConfigs) {
  101. Session sessaoEmpresa = ConexaoBanco.getInstance().getSessao(configGerencialWeb.getNomSchema());
  102.  
  103. Date data = null;
  104.  
  105. try {
  106.  
  107. LogViewBanco logViewBanco = new LogViewBancoDAOGeral(sessaoEmpresa).consultarUnqFiltro(LogViewBanco.strNomProcesso, ChecaEnvioEmailCobrancaFaturamento.class.toString());
  108.  
  109. timeSleep = logViewBanco.getQtdSegundosLoop();
  110.  
  111. data = DataUtil.adicionarMilesimos(logViewBanco.getDthValidacao(), logViewBanco.getQtdSegundosLoop().intValue());
  112.  
  113. // if (data != null && data.after(new Date())) {
  114. // logger.info("Processo de Envio EMAIL_COBRANCA_FATURAMENTO, data ultima execução: " + DataUtil.strDataHora(logViewBanco.getDthValidacao()) + ", data da próxima execução: " + DataUtil.strDataHora(data));
  115. // continue;
  116. // } else {
  117. enviarEmailCobrancaFatInit(sessaoEmpresa);
  118. // }
  119.  
  120. sessaoEmpresa.beginTransaction();
  121. logViewBanco.setDthValidacao(new Timestamp(new Date().getTime()));
  122. sessaoEmpresa.merge(logViewBanco);
  123. sessaoEmpresa.getTransaction().commit();
  124. } catch (Exception e) {
  125. e.printStackTrace();
  126. sessaoEmpresa.getTransaction().rollback();
  127. } finally {
  128. Utils.closeSession(sessaoEmpresa);
  129. }
  130. }
  131. } catch (Exception e) {
  132. e.printStackTrace();
  133. sessaoAdmin.getTransaction().rollback();
  134. } finally {
  135.  
  136. logger.info("FIM CHECK EMAIL_COBRANCA_FATURAMENTO");
  137.  
  138. Utils.closeSession(sessaoAdmin);
  139.  
  140. try {
  141. sessaoAdmin = null;
  142. Thread.sleep(timeSleep);
  143. } catch (InterruptedException e) {
  144. logger.error(e.getMessage(), e);
  145. break;
  146. }
  147. }
  148.  
  149. }
  150. }
  151.  
  152. public void enviarEmailCobrancaFatInit(Session sessao) throws Exception {
  153. Criteria ct = sessao.createCriteria(CicloVendaControleEnvio.class);
  154. // ct.createCriteria(CicloVendaControleEnvio.strCicloVenda).createCriteria(CicloVenda.strPontoVenda).createCriteria(PontoVenda.strCliente);
  155. // ct.add(Restrictions.eq(CicloVendaControleEnvio.strCicloVenda +
  156. // "." +
  157. // CicloVenda.strId, idCicloVenda));
  158. // Criterion crt1 = Restrictions.in(CicloVendaControleEnvio.strIndStatus, new String[] { CicloVendaControleEnvio.IND_STATUS_PENDENTE, CicloVendaControleEnvio.IND_STATUS_PENDENTE_FATURAMENTO });
  159. // Criterion crt2 = Restrictions.and(Restrictions.in(CicloVendaControleEnvio.strIndStatus, new String[] { CicloVendaControleEnvio.IND_STATUS_ERRO }), Restrictions.between(CicloVendaControleEnvio.strDthCadastro, DataUtil.getPrimeiraHoraDia(DataUtil.adicionarDias(new Date(), -5)), DataUtil.getUltimaHoraDia(new Date())));
  160. // ct.add(Restrictions.or(crt1, crt2));
  161. ct.add(Restrictions.isNull(CicloVendaControleEnvio.strDthEnvio));
  162. // OU nunca foi enviada (null) ou já tentou a mais de 4 horas (ai tenta
  163. // novamente)
  164. ct.add(Restrictions.in(CicloVendaControleEnvio.strIndStatus, new String[] { CicloVendaControleEnvio.IND_STATUS_PENDENTE, CicloVendaControleEnvio.IND_STATUS_PENDENTE_FATURAMENTO }));
  165. ct.add(Restrictions.ge(CicloVendaControleEnvio.strDthCadastro, DataUtil.getPrimeiraHoraDia(DataUtil.adicionarDias(new Date(), -2))));
  166. // ct.add(Restrictions.or(Restrictions.isNull(CicloVendaControleEnvio.strDthUltimoProcessamento), Restrictions.le(CicloVendaControleEnvio.strDthUltimoProcessamento, DataUtil.adicionarHoras(new Date(), -60))));
  167. // Depois de 5 dias tentando... desiste...
  168. // ct.add(Restrictions.le(CicloVendaControleEnvio.strQtdErro, 30));
  169. ct.addOrder(Order.asc(CicloVendaControleEnvio.strId));
  170. // ct.add(Restrictions.eq(CicloVendaControleEnvio.strId, 27400l));
  171. List<CicloVendaControleEnvio> cicloVendaEnvios = ct.list();
  172.  
  173. if (!cicloVendaEnvios.isEmpty()) {
  174. logger.info("INICIANDO O ENVIO DE EMAIL_COBRANCA_FATURAMENTO para " + cicloVendaEnvios.size() + " PDVs!");
  175. enviarEmailCobrancaFat(cicloVendaEnvios, sessao);
  176. } else {
  177. logger.info("SEM EMAIL_COBRANCA_FATURAMENTO para ser Enviado!");
  178. }
  179. }
  180.  
  181. public void enviarEmailCobrancaFat(List<CicloVendaControleEnvio> cicloVendaEnvios, Session sessao) throws Exception {
  182. try {
  183. for (CicloVendaControleEnvio cicloVendaControleEnvio : cicloVendaEnvios) {
  184.  
  185. Criteria ct = sessao.createCriteria(CicloVendaControleEnvio.class);
  186. ct.createCriteria(CicloVendaControleEnvio.strCicloVenda).createCriteria(CicloVenda.strPontoVenda).createCriteria(PontoVenda.strCliente);
  187. // ct.add(Restrictions.eq(CicloVendaControleEnvio.strCicloVenda
  188. // + "." +
  189. // CicloVenda.strId, idCicloVenda));
  190. ct.add(Restrictions.eq(CicloVendaControleEnvio.strId, cicloVendaControleEnvio.getId()));
  191. cicloVendaControleEnvio = (CicloVendaControleEnvio) ct.uniqueResult();
  192.  
  193. cicloVendaControleEnvio.setDthUltimoProcessamento(new Timestamp(new Date().getTime()));
  194.  
  195. try {
  196. CicloVenda cicloVenda = cicloVendaControleEnvio.getCicloVenda();
  197.  
  198. Integrador integrador = null;
  199.  
  200. if (cicloVenda.getIntegradorEmpresa() != null) {
  201. integrador = cicloVenda.getIntegradorEmpresa().getIntegrador();
  202. }
  203.  
  204. ct = sessao.createCriteria(TituloCicloVenda.class);
  205. ct.createAlias(TituloCicloVenda.strTitulo,TituloCicloVenda.strTitulo);
  206. ct.add(Restrictions.ne(TituloCicloVenda.strTitulo+"."+Titulo.strIndStatus, Titulo.STATUS_TITULO_NEGOCIADO));
  207. ct.add(Restrictions.eq(TituloCicloVenda.strCobranca + "." + CicloVenda.strId, cicloVenda.getId()));
  208. List<TituloCicloVenda> tituloCicloVendaSet = ct.list();
  209.  
  210. List<Titulo> titulosGerados = new ArrayList<Titulo>();
  211. for (TituloCicloVenda tituloCicloVenda : tituloCicloVendaSet) {
  212. Titulo bol = tituloCicloVenda.getTitulo();
  213. titulosGerados.add(bol);
  214. }
  215.  
  216. ct = sessao.createCriteria(TituloCicloVenda.class);
  217. ct.createCriteria(TituloCicloVenda.strTitulo);
  218. ct.add(Restrictions.in(TituloCicloVenda.strTitulo, titulosGerados));
  219. List<TituloCicloVenda> tituloCicloVendaSetGrupoCobranca = ct.list();
  220.  
  221. List<CicloVenda> cicloVendaGrupoList = new ArrayList<CicloVenda>();
  222. for (TituloCicloVenda tituloCicloVenda : tituloCicloVendaSetGrupoCobranca) {
  223. cicloVendaGrupoList.add(tituloCicloVenda.getCobranca());
  224. }
  225.  
  226. Set<String> emails = new HashSet<String>();
  227.  
  228. PontoVenda pontoVendaCiclo = cicloVenda.getPontoVenda();
  229.  
  230. PontoVenda pontoVenda = null;
  231.  
  232. if (pontoVendaCiclo.getGrupoCobranca() != null) {
  233. pontoVenda = pontoVendaCiclo.getGrupoCobranca().getPontoVendaResposavel();
  234. } else {
  235. pontoVenda = pontoVendaCiclo;
  236. }
  237.  
  238. if (pontoVenda.getTxtEmail() != null && !pontoVenda.getTxtEmail().trim().isEmpty() && pontoVenda.getTxtEmail().contains("@")) {
  239. emails.add(pontoVenda.getTxtEmail().trim());
  240. }
  241.  
  242. if (pontoVenda.getCliente().getTxtEmailCliente() != null && !pontoVenda.getCliente().getTxtEmailCliente().trim().isEmpty() && pontoVenda.getCliente().getTxtEmailCliente().contains("@")) {
  243. emails.add(pontoVenda.getCliente().getTxtEmailCliente().trim());
  244. }
  245.  
  246. if (emails.isEmpty()) {
  247. throw new RestricaoException("[EMAIL] Ponto de venda [" + pontoVenda.getId() + " - " + pontoVenda.getNomPontoVenda() + "] sem E-mail cadastrado!!!");
  248. }
  249.  
  250. Empresa empresa = pontoVenda.getEmpresa();
  251.  
  252. // TODO Tratar Grupo Cobranca
  253. ct = sessao.createCriteria(CicloVendaFaturamentoNotaFiscal.class);
  254. ct.createAlias(CicloVendaFaturamentoNotaFiscal.strCicloVenda, CicloVendaFaturamentoNotaFiscal.strCicloVenda);
  255. ct.createAlias(CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strPontoVenda, CicloVenda.strPontoVenda);
  256. ct.add(Restrictions.eq(CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strId, cicloVenda.getId()));
  257. CicloVendaFaturamentoNotaFiscal cicloVendaFaturamentoNotaFiscal = (CicloVendaFaturamentoNotaFiscal) ct.uniqueResult();
  258.  
  259. ct = sessao.createCriteria(CicloVendaFaturamentoNotaFiscalAutorizacao.class);
  260. ct.createAlias(CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal, CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal);
  261. ct.createAlias(CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal + "." + CicloVendaFaturamentoNotaFiscal.strCicloVenda, CicloVendaFaturamentoNotaFiscal.strCicloVenda);
  262. ct.createAlias(CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal + "." + CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strPontoVenda, CicloVenda.strPontoVenda);
  263. ct.add(Restrictions.eq(CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strId, cicloVenda.getId()));
  264. ct.add(Restrictions.eq(CicloVendaFaturamentoNotaFiscalAutorizacao.strIndStatusEtico, CicloVendaFaturamentoNotaFiscalAutorizacao.IND_STATUS_CONCLUIDO));
  265.  
  266. CicloVendaFaturamentoNotaFiscalAutorizacao autorizacao = (CicloVendaFaturamentoNotaFiscalAutorizacao) ct.uniqueResult();
  267.  
  268. if (cicloVendaFaturamentoNotaFiscal != null) {
  269. if (autorizacao == null || !autorizacao.getIndStatusEtico().equals(CicloVendaFaturamentoNotaFiscalAutorizacao.IND_STATUS_CONCLUIDO)) {
  270. throw new RestricaoException("[FATURAMENTO] Ponto de venda [" + pontoVenda.getId() + " - " + pontoVenda.getNomPontoVenda() + "] ainda não teve seu ciclo faturado !!!");
  271. }
  272. }
  273.  
  274. FaturamentoEticoArquivo faturamentoArquivo = null;
  275.  
  276. byte[] arquivoDanfe = null;
  277.  
  278. if (autorizacao != null) {
  279. ct = sessao.createCriteria(FaturamentoEticoArquivo.class);
  280. ct.createAlias(FaturamentoEticoArquivo.strFaturamentoEtico, FaturamentoEticoArquivo.strFaturamentoEtico);
  281. ct.add(Restrictions.eq(FaturamentoEticoArquivo.strFaturamentoEtico + "." + FaturamentoEtico.strCicloVendaFaturamentoNotaFiscalAutorizacao, autorizacao));
  282. faturamentoArquivo = (FaturamentoEticoArquivo) ct.uniqueResult();
  283.  
  284. empresa = faturamentoArquivo.getFaturamentoEtico().getEmpresa();
  285.  
  286. arquivoDanfe = CicloVendaBO.geraDanfe(sessao, autorizacao);
  287. }
  288.  
  289. StringBuilder sbAssuntoEmail = new StringBuilder();
  290.  
  291. String tituloPrefixo = "";
  292.  
  293. InputStream is = null;
  294.  
  295. List<Object[]> produtosRepasse = null;
  296. ct = sessao.createCriteria(CicloVendaRepasse.class);
  297. ct.add(Restrictions.eq(CicloVendaRepasse.strCicloVenda, cicloVenda));
  298. ct.setProjection(Projections.projectionList() //
  299. .add(Projections.sum(CicloVendaRepasse.strQtdVendaDia)) // 0
  300. .add(Projections.sum(CicloVendaRepasse.strVlrCobrarDia)) // 1
  301. .add(Projections.groupProperty(CicloVendaRepasse.strNomProduto)) // 3
  302. );
  303.  
  304. ct.addOrder(Order.asc(CicloVendaRepasse.strNomProduto));
  305.  
  306. produtosRepasse = ct.list();
  307.  
  308. if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
  309.  
  310. ct = sessao.createCriteria(PontoVendaCobrancaIntegracaoRepasse.class);
  311. ct.add(Restrictions.eq(PontoVendaCobrancaIntegracaoRepasse.strPontoVenda + "." + PontoVenda.strId, cicloVenda.getPontoVenda().getId()));
  312. ct.setMaxResults(1);
  313. PontoVendaCobrancaIntegracaoRepasse pic = (PontoVendaCobrancaIntegracaoRepasse) ct.uniqueResult();
  314.  
  315. if (pic != null && pic.getTxtJsonEmailEnvio() != null && !pic.getTxtJsonEmailEnvio().trim().isEmpty()) {
  316. JSONObject jsonObject = new JSONObject(pic.getTxtJsonEmailEnvio());
  317. JSONArray jsonArray = new JSONArray(jsonObject.getString("email"));
  318.  
  319. for (int i = 0; i < jsonArray.length(); i++) {
  320. emails.add(jsonArray.getString(i));
  321. }
  322. }
  323.  
  324. }
  325.  
  326. if (autorizacao != null && faturamentoArquivo != null) {
  327. if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
  328. tituloPrefixo = "[REPASSE] ";
  329.  
  330. }
  331. tituloPrefixo += "Cobrança do Ciclo de Vendas Nº " + cicloVenda.getId() + " e NFe Nº" + faturamentoArquivo.getNumDocumentoFiscal() + ". Cliente : " + pontoVenda.getNomPontoVenda();
  332. is = AncoraEmail.class.getResourceAsStream("modelo_email_nfe_cobranca.html");
  333. } else {
  334. tituloPrefixo = "Cobrança do Ciclo de Vendas Nº " + cicloVenda.getId() + ". Cliente : " + pontoVenda.getNomPontoVenda();
  335. is = AncoraEmail.class.getResourceAsStream("modelo_email_cobranca.html");
  336. }
  337. // faturamentoArquivo.getDthFaturamento()
  338. sbAssuntoEmail.append(tituloPrefixo + " - Emitida por: " + empresa.getNomRazaoSocial() + " (" + FormatadorUtil.formatCpfCnpj(empresa.getNumCpfCnpj()) + ") - Data da emissão: " + DataUtil.dataHoraExtenso(cicloVenda.getDthGeracao()));
  339.  
  340. String mensagem = "";
  341. HashMap<String, byte[]> anexos = new HashMap<String, byte[]>();
  342.  
  343. Scanner sc = new Scanner(is, "UTF-8");
  344. StringBuilder sb = new StringBuilder();
  345.  
  346. while (sc.hasNextLine()) {
  347. sb.append(sc.nextLine());
  348. }
  349.  
  350. List<Object[]> produtos = null;
  351.  
  352. StringBuilder sbTabela = new StringBuilder();
  353. Double vlrTotal = 0D;
  354.  
  355. if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
  356. produtos = produtosRepasse;
  357.  
  358. CicloVendaRepasseDS cicloVendaRepasseDS = new CicloVendaRepasseDS();
  359.  
  360. cicloVendaRepasseDS.setNomArquivoJasper("cicloVendaRepasseRel");
  361. cicloVendaRepasseDS.setCicloVenda(cicloVenda);
  362. cicloVendaRepasseDS.setTitulo(titulosGerados.get(0));
  363. cicloVendaRepasseDS.executarQuery(sessao);
  364.  
  365. UsuarioGerencial usuarioGerencial = (UsuarioGerencial) sessao.get(UsuarioGerencial.class, 18L);
  366.  
  367. byte[] detalhamentoRepasse = cicloVendaRepasseDS.downloadRelatorioReturnIS(DataSourcePadrao.TIPO_PDF, "cobranca_repasse", sessao, usuarioGerencial, cicloVenda.getIntegradorEmpresa().getEmpresa());
  368.  
  369. Format format = new SimpleDateFormat("ddMMyyyy");
  370. String datInicioFormatada = format.format(cicloVenda.getDatInicioCobranca());
  371. String datFimFormatada = format.format(cicloVenda.getDatFimCobranca());
  372. String datGeracaoFormatada = format.format(new Date());
  373. String nomArquivo = titulosGerados.get(0).getNumTitulo() + "_" + cicloVenda.getIntegradorEmpresa().getEmpresa().getId() + "_" + datInicioFormatada + "_" + datFimFormatada + "_" + datGeracaoFormatada + ".pdf";
  374.  
  375. anexos.put(nomArquivo, detalhamentoRepasse);
  376.  
  377. for (Object[] produto : produtos) {
  378. // Double qtdProduto = new Double((Long) produto[0]);
  379. // Double vlrUnitario = new
  380. // Double(produto.getVlrUnitario());
  381.  
  382. Double vlrVenda = new Double((Long) produto[1]) / 100.0d;
  383.  
  384. sbTabela.append("<tr style=\"font-size:12px;\">");
  385. sbTabela.append("<td style=\"text-align:left\">").append(produto[2]).append("</td>");
  386. sbTabela.append("<td style=\"text-align:right\">").append(produto[0]).append("</td>");
  387. sbTabela.append("<td style=\"text-align:right\">").append(FormatadorUtil.intToReais(vlrVenda, true)).append("</td>");
  388. sbTabela.append("</tr>");
  389.  
  390. vlrTotal += vlrVenda;
  391. }
  392.  
  393. } else {
  394. ct = sessao.createCriteria(Venda.class);
  395. ct.add(Restrictions.in(Venda.strCobrancaVinculada, cicloVendaGrupoList));
  396. ct.createAlias(Venda.strProdutoDistribuidor, Venda.strProdutoDistribuidor);
  397. ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strProdutoCategoriaDistribuidor, ProdutoDistribuidor.strProdutoCategoriaDistribuidor);
  398. ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor, ProdutoDistribuidor.strRegionalMarcaDistribuidor);
  399. ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor + "." + RegionalMarcaDistribuidor.strMarcaDistribuidor, RegionalMarcaDistribuidor.strMarcaDistribuidor);
  400. ct.setProjection(Projections.projectionList() //
  401. .add(Projections.count(Venda.strId)) // 0
  402. .add(Projections.sum(Venda.strVlrVendaAbatidoReal)) // 1
  403. .add(Projections.groupProperty(ProdutoDistribuidor.strProdutoCategoriaDistribuidor + "." + ProdutoCategoriaDistribuidor.strId)) // 2
  404. .add(Projections.groupProperty(ProdutoDistribuidor.strProdutoCategoriaDistribuidor + "." + ProdutoCategoriaDistribuidor.strNomCategoria)) // 3
  405. .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strId)) // 4
  406. .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca)) // 5
  407. .add(Projections.groupProperty(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto)) // 6
  408. );
  409. ct.add(Restrictions.ne(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca, Marca.NOM_MARCA_PHOENIX));
  410. ct.addOrder(Order.asc(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca));
  411. ct.addOrder(Order.asc(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto));
  412.  
  413. produtos = ct.list();
  414.  
  415. ct = sessao.createCriteria(Venda.class);
  416. ct.add(Restrictions.in(Venda.strCobrancaVinculada, cicloVendaGrupoList));
  417. ct.createAlias(Venda.strProdutoDistribuidor, Venda.strProdutoDistribuidor);
  418. ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strProdutoCategoriaDistribuidor, ProdutoDistribuidor.strProdutoCategoriaDistribuidor);
  419. ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor, ProdutoDistribuidor.strRegionalMarcaDistribuidor);
  420. ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor + "." + RegionalMarcaDistribuidor.strMarcaDistribuidor, RegionalMarcaDistribuidor.strMarcaDistribuidor);
  421. ct.setProjection(Projections.projectionList() //
  422. .add(Projections.count(Venda.strId)) // 0
  423. .add(Projections.sum(Venda.strVlrVendaAbatidoReal)) // 1
  424. .add(Projections.groupProperty(ProdutoDistribuidor.strProdutoCategoriaDistribuidor + "." + ProdutoCategoriaDistribuidor.strId)) // 2
  425. .add(Projections.groupProperty(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strNomProduto)) // 3
  426. .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strId)) // 4
  427. .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca)) // 5
  428. .add(Projections.groupProperty(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto)) // 6
  429. );
  430. ct.add(Restrictions.eq(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca, Marca.NOM_MARCA_PHOENIX));
  431.  
  432. ct.addOrder(Order.asc(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca));
  433. ct.addOrder(Order.asc(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto));
  434.  
  435. List<Object[]> produtosPhoe = ct.list();
  436. if (produtosPhoe != null) {
  437. produtos.addAll(produtosPhoe);
  438. }
  439.  
  440. for (Object[] produto : produtos) {
  441. // Double qtdProduto = new Double((Long) produto[0]);
  442. // Double vlrUnitario = new
  443. // Double(produto.getVlrUnitario());
  444.  
  445. Double vlrVenda = (Double) produto[1];
  446. Long vlrProduto = (Long) produto[6];
  447.  
  448. sbTabela.append("<tr style=\"font-size:12px;\">");
  449. if (produto[5].equals(Marca.NOM_MARCA_PHOENIX)) {
  450. sbTabela.append("<td style=\"text-align:left\">").append(produto[3]).append("</td>");
  451. } else {
  452. sbTabela.append("<td style=\"text-align:left\">").append(produto[5] + " " + produto[3] + " " + FormatadorUtil.intToReais(vlrProduto, true)).append("</td>");
  453. }
  454. sbTabela.append("<td style=\"text-align:right\">").append(produto[0]).append("</td>");
  455. sbTabela.append("<td style=\"text-align:right\">").append(FormatadorUtil.intToReais(vlrVenda, true)).append("</td>");
  456. sbTabela.append("</tr>");
  457.  
  458. vlrTotal += vlrVenda;
  459. }
  460. }
  461.  
  462. boolean temCobranca = false;
  463.  
  464. String vencimento = "";
  465.  
  466. if (cicloVenda.getIdRV() == null && cicloVenda.getIdTendencia() == null) {
  467.  
  468. ByteArrayOutputStream baosBoleto = new ByteArrayOutputStream();
  469.  
  470. for (Titulo titulo : titulosGerados) {
  471.  
  472. BoletoGerado bol = titulo.getBoletoGerado();
  473.  
  474. if (bol != null && (bol.getIndStatus().equals(Titulo.STATUS_TITULO_ABERTO) || bol.getIndStatus().equals(Titulo.STATUS_TITULO_PARCIAL))) {
  475.  
  476. JBoletoBean boletoBean = new JBoletoBean();
  477. boletoBean.criarBoleto(bol, pontoVenda);
  478.  
  479. PDFGeneratorCell generator = new PDFGeneratorCell(boletoBean, Integer.parseInt(bol.getConfigBoletoBanco().getTipoBoleto().getId().toString()));
  480. JBoleto jBoleto = new JBoleto(generator, boletoBean, Integer.parseInt(bol.getConfigBoletoBanco().getTipoBoleto().getId().toString()));
  481. jBoleto.addBoleto();
  482.  
  483. jBoleto.closeBoleto(baosBoleto, null);
  484.  
  485. byte[] bytes = baosBoleto.toByteArray();
  486.  
  487. anexos.put("boleto_" + bol.getNumTitulo() + ".pdf", bytes);
  488. vencimento = bol.getDatVencimentoFormatada();
  489. temCobranca = true;
  490. }
  491. }
  492. }
  493.  
  494. mensagem = sb.toString();
  495.  
  496. String tabela = sbTabela.toString();
  497.  
  498. String periodo = cicloVenda.getDatInicioCobrancaFormatado() + " até " + cicloVenda.getDatFimCobrancaFormatado();
  499.  
  500. String prefixo = "Segue abaixo o detalhamento da sua Cobrança referente ao período <b>" + periodo + "</b>.";
  501.  
  502. String sufixo = "<b> Caso já tenha realizado o pagamento, favor desconsiderar!</b>";
  503.  
  504. if (temCobranca) {
  505. mensagem = mensagem.replace("#titulo", autorizacao != null ? "Detalhamento de Cobrança e Faturamento" : "Detalhamento de Cobrança");
  506. // mensagem = mensagem.replace("#corpo_email",
  507. // autorizacao != null ? "Segue em
  508. // anexo sua cobrança com o vencimento atualizado sem
  509. // juros para o dia
  510. // 12/07/2018, DANFE e XML da nota fiscal eletrônica
  511. // emitida contra o seu
  512. // estabelecimento" : "Segue em anexo sua cobrança com o
  513. // vencimento atualizado
  514. // sem juros para o dia 12/07/2018 e em anexo o boleto
  515. // para que possa ser
  516. // efetuado o pagamento.");
  517. mensagem = mensagem.replace("#corpo_email", autorizacao != null ? prefixo + " Em anexo o Boleto com o vencimento em <b>" + vencimento + "</b>, DANFE e XML da nota fiscal eletrônica emitida contra o seu estabelecimento." + sufixo : prefixo + " Em anexo o Boleto com o vencimento em <b>" + vencimento + "</b>, para que possa ser efetuado o pagamento." + sufixo);
  518. } else {
  519. mensagem = mensagem.replace("#titulo", autorizacao != null ? "Detalhamento de Faturamento" : "Detalhamento de Cobrança");
  520. mensagem = mensagem.replace("#corpo_email", autorizacao != null ? prefixo + " Em anexo consta o DANFE e XML da nota fiscal eletrônica emitida contra o seu estabelecimento." : "Segue abaixo o detalhamento da sua Cobrança referente ao período <b>" + periodo + "</b>.");
  521. }
  522.  
  523. mensagem = mensagem.replace("#razao_social_destinatario", pontoVenda.getNomRazaoSocial());
  524. mensagem = mensagem.replace("#lista_produtos", tabela);
  525. mensagem = mensagem.replace("#vlr_total", FormatadorUtil.intToReais(vlrTotal, true));
  526. mensagem = mensagem.replace("#dat_aprovacao", autorizacao != null ? "Data da aprovação da emissão: " + autorizacao.getDthAutorizacaoFormatado() : "Cobrança gerada em : " + cicloVenda.getDthGeracaoFormatada());
  527. mensagem = mensagem.replace("#num_nota", faturamentoArquivo != null ? faturamentoArquivo.getNumDocumentoFiscal() : "-");
  528. mensagem = mensagem.replace("#num_chave", faturamentoArquivo != null ? faturamentoArquivo.getNumChaveAcesso() : "-");
  529. mensagem = mensagem.replace("#razao_social_emitente", empresa.getNomRazaoSocial());
  530. mensagem = mensagem.replace("#num_cnpj_emitente", FormatadorUtil.formatCpfCnpj(empresa.getNumCpfCnpj()));
  531. mensagem = mensagem.replace("#num_cnpj_destinatario", FormatadorUtil.formatCpfCnpj(pontoVenda.getNumCpfCnpj()));
  532. mensagem = mensagem.replace("#dat_emissao", faturamentoArquivo != null ? DataUtil.dataHoraExtenso(faturamentoArquivo.getDthFaturamento()) : "-");
  533.  
  534. if (arquivoDanfe != null && autorizacao != null) {
  535. anexos.put(faturamentoArquivo.getNumChaveAcesso() + ".pdf", arquivoDanfe);
  536. anexos.put(faturamentoArquivo.getNumChaveAcesso() + ".xml", autorizacao.getArquivoRetornoXml());
  537. }
  538.  
  539. EmailAppswareSession email = null;
  540.  
  541. if (integrador != null && integrador.getNomIntegrador().equals(Integrador.INTEGRADOR_SE_SULCARD)) {
  542. String emailRemetente = "n2.boleto@n2.com.br";
  543.  
  544. if (getSessoesEmails().containsKey(emailRemetente)) {
  545. email = getSessoesEmails().get(emailRemetente);
  546. } else {
  547. email = new EmailAppswareSession(emailRemetente, "adminn20618");
  548. getSessoesEmails().put(emailRemetente, email);
  549. }
  550.  
  551. } else {
  552.  
  553. String emailRemetente = "nfe@n2.com.br";
  554.  
  555. if (getSessoesEmails().containsKey(emailRemetente)) {
  556. email = getSessoesEmails().get(emailRemetente);
  557. } else {
  558. email = new EmailAppswareSession(emailRemetente, "1234@mudar");
  559. getSessoesEmails().put(emailRemetente, email);
  560. }
  561.  
  562. }
  563.  
  564. email.limpar();
  565.  
  566. HashSet<String> emailsBCC = new HashSet<String>();
  567.  
  568. if (autorizacao != null) {
  569. if (integrador != null && integrador.getNomIntegrador().equals(Integrador.INTEGRADOR_SE_SULCARD)) {
  570. emailsBCC.add("nfe.boleto@n2.com.br");
  571. email.setReplyTo("nfe.boleto@n2.com.br");
  572. } else {
  573.  
  574. emailsBCC.add("nfe.auto@n2.com.br");
  575. if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
  576. emailsBCC.add("compras@n2.com.br");
  577. }
  578.  
  579. email.setReplyTo("nfe.auto@n2.com.br");
  580. }
  581. } else {
  582. emailsBCC.add("boleto.auto@n2.com.br");
  583. email.setReplyTo("boleto.auto@n2.com.br");
  584. }
  585.  
  586. // emailsBCC = new HashSet<String>();
  587. // emails = new HashSet<String>();
  588. // emails.add("francisco@appsware.com.br");
  589. // email.setReplyTo("francisco@appsware.com.br");
  590.  
  591. List<String> destinatarios = new ArrayList<>();
  592. StringBuilder sbDestinatarios = new StringBuilder();
  593. for (String emailStr : emails) {
  594. destinatarios.add(emailStr);
  595. sbDestinatarios.append(emailStr).append(", ");
  596. }
  597.  
  598. List<String> destinatariosBCC = new ArrayList<>();
  599. for (String emailStr : emailsBCC) {
  600. destinatariosBCC.add(emailStr);
  601. }
  602.  
  603. email.setDestinatariosBCC(destinatariosBCC);
  604. email.setDestinatarios(destinatarios);
  605.  
  606. if (!anexos.isEmpty()) {
  607. email.setAnexos(anexos);
  608. }
  609.  
  610. email.enviarEmail(mensagem, sbAssuntoEmail.toString());
  611.  
  612. email.limpar();
  613.  
  614. if (sbDestinatarios != null && sbDestinatarios.length() > 0) {
  615. sbDestinatarios.delete(sbDestinatarios.length() - 2, sbDestinatarios.length());
  616.  
  617. cicloVendaControleEnvio.setIndStatus(cicloVendaControleEnvio.getIndStatus().equals(CicloVendaControleEnvio.IND_STATUS_PENDENTE_FATURAMENTO) ? CicloVendaControleEnvio.IND_STATUS_OK_FATURAMENTO : CicloVendaControleEnvio.IND_STATUS_OK);
  618. cicloVendaControleEnvio.setDthEnvio(new Timestamp(new Date().getTime()));
  619. cicloVendaControleEnvio.setTxtEmailEnviado(mensagem);
  620. cicloVendaControleEnvio.setTxtJsonEnvio("Anexos :: " + anexos.size());
  621. cicloVendaControleEnvio.setTxtStatus("Email enviado com sucesso para o(s) destinatário: " + sbDestinatarios.toString());
  622. sessao.beginTransaction();
  623. sessao.merge(cicloVendaControleEnvio);
  624. sessao.getTransaction().commit();
  625.  
  626. logger.info("EMAIL_COBRANCA_FATURAMENTO enviado com sucesso para o(s) destinatário: " + sbDestinatarios.toString());
  627. }
  628.  
  629. sc.close();
  630.  
  631. Thread.sleep(DataUtil.SEGUNDO * 10);
  632. } catch (RestricaoException e) {
  633. cicloVendaControleEnvio.setTxtStatus(e.getMessage());
  634. cicloVendaControleEnvio.setQtdErro(cicloVendaControleEnvio.getQtdErro() + 1);
  635. sessao.beginTransaction();
  636. sessao.merge(cicloVendaControleEnvio);
  637. sessao.getTransaction().commit();
  638. e.printStackTrace();
  639. } catch (Exception e) {
  640. // cicloVendaControleEnvio.setIndStatus(CicloVendaControleEnvio.IND_STATUS_ERRO);
  641. cicloVendaControleEnvio.setTxtStatus(e.getMessage());
  642. cicloVendaControleEnvio.setQtdErro(cicloVendaControleEnvio.getQtdErro() + 1);
  643. sessao.beginTransaction();
  644. sessao.merge(cicloVendaControleEnvio);
  645. sessao.getTransaction().commit();
  646. e.printStackTrace();
  647. }
  648. }
  649.  
  650. } catch (Exception e) {
  651. e.printStackTrace();
  652. } finally {
  653. for (Entry<String, EmailAppswareSession> es : getSessoesEmails().entrySet()) {
  654. es.getValue().fechar();
  655. }
  656. }
  657.  
  658. }
  659.  
  660. public HashMap<String, EmailAppswareSession> getSessoesEmails() {
  661. return sessoesEmails;
  662. }
  663.  
  664. public void setSessoesEmails(HashMap<String, EmailAppswareSession> sessoesEmails) {
  665. this.sessoesEmails = sessoesEmails;
  666. }
  667.  
  668. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement