Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.95 KB | None | 0 0
  1. package br.com.themist.verificador.checks;
  2.  
  3. import java.sql.Timestamp;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.GregorianCalendar;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import org.apache.log4j.Logger;
  12. import org.hibernate.Criteria;
  13. import org.hibernate.Query;
  14. import org.hibernate.Session;
  15. import org.hibernate.criterion.Projections;
  16. import org.hibernate.criterion.Restrictions;
  17.  
  18. import br.com.aplic.entidades.admin.ConfigGerencialWeb;
  19. import br.com.aplic.entidades.admin.Empresa;
  20. import br.com.aplic.entidades.bo.ConciliacaoValoresVendedorBO;
  21. import br.com.aplic.entidades.distribuidor.Cargo;
  22. import br.com.aplic.entidades.distribuidor.Deposito;
  23. import br.com.aplic.entidades.distribuidor.Funcionario;
  24. import br.com.aplic.entidades.distribuidor.FuncionarioLog;
  25. import br.com.aplic.entidades.distribuidor.LoteVendaFisica;
  26. import br.com.aplic.entidades.distribuidor.NotaPromissoriaGerada;
  27. import br.com.aplic.entidades.empresa.EmpresaOutrasConfiguracoes;
  28. import br.com.aplic.entidades.empresa.UsuarioGerencial;
  29. import br.com.aplic.entidades.empresa.Vendedor;
  30. import br.com.aplic.utils.DataUtil;
  31. import br.com.aplic.utils.EmailAppsware;
  32. import br.com.aplic.utils.EmailAppswareUtils;
  33. import br.com.aplic.utils.FormatadorUtil;
  34. import br.com.aplic.utils.Utils;
  35. import br.com.themist.banco.ConexaoBanco;
  36. import br.com.themist.dao.admin.ConfigGerencialwebDAO;
  37. import br.com.themist.verificador.Verificavel;
  38. import br.com.themist.verificador.checks.support.InputSupportGeneric;
  39.  
  40. public class ChecaBloqueioFuncionario implements Verificavel {
  41.  
  42. private static final Logger logger = Logger.getLogger(ChecaBloqueioFuncionario.class);
  43.  
  44. private static Map<Long, Calendar> mapaEmpresaDataExecucao = new HashMap<Long, Calendar>();
  45.  
  46. @SuppressWarnings({ "unchecked", "unused" })
  47. @Override
  48. public void run() {
  49.  
  50. while (true) {
  51.  
  52. Session sessaoAdmin = null;
  53.  
  54. try {
  55. sessaoAdmin = ConexaoBanco.getInstance().getSessaoAdmin();
  56.  
  57. sessaoAdmin.beginTransaction();
  58.  
  59. ConfigGerencialwebDAO configEmpresaDao = new ConfigGerencialwebDAO(sessaoAdmin);
  60.  
  61. Criteria ct = sessaoAdmin.createCriteria(ConfigGerencialWeb.class);
  62.  
  63. ct.add(Restrictions.isNull(ConfigGerencialWeb.strDthExclusao));
  64. ct.add(Restrictions.eq(ConfigGerencialWeb.strNomSchema, "n2"));
  65.  
  66. List<ConfigGerencialWeb> listaConfigEmpresa = ct.list();
  67.  
  68. logger.info("VERIFICANDO FUNCIONARIOS INADIMPLENTES");
  69.  
  70. for (ConfigGerencialWeb configEmpresa : listaConfigEmpresa) {
  71.  
  72. ct = sessaoAdmin.createCriteria(Empresa.class);
  73.  
  74. ct.add(Restrictions.eq(Empresa.strConfigGerencialWeb, configEmpresa));
  75. ct.add(Restrictions.isNull(Empresa.strDthExclusao));
  76.  
  77. List<Empresa> listEmpresa = ct.list();
  78.  
  79. for (Empresa empresa : listEmpresa) {
  80.  
  81. ct = sessaoAdmin.createCriteria(EmpresaOutrasConfiguracoes.class);
  82.  
  83. ct.add(Restrictions.eq(EmpresaOutrasConfiguracoes.strEmpresa, empresa));
  84.  
  85. EmpresaOutrasConfiguracoes configuracoes = (EmpresaOutrasConfiguracoes)ct.uniqueResult();
  86.  
  87. Calendar horaAtual = new GregorianCalendar();
  88.  
  89. Calendar horaEmpresa = getCalenUltSync(empresa.getId(), horaAtual);
  90.  
  91. if (horaEmpresa != null && horaAtual.before(horaEmpresa)) {
  92. continue;
  93.  
  94. } else if((configuracoes.getDthCheckBloqueioFuncionario() != null &&
  95. DataUtil.getPrimeiraHoraDia(configuracoes.getDthCheckBloqueioFuncionario().getTime()).equals(DataUtil.getPrimeiraHoraDia(horaAtual.getTime())))){
  96. continue;
  97.  
  98. } else {
  99.  
  100. Calendar horaBloqueio = horaAtual;
  101.  
  102. if (configuracoes != null && configuracoes.getHrBloqueioFuncionario() != null){
  103.  
  104. Calendar horaBloqueioEmpresa = configuracoes.getHrBloqueioFuncionario();
  105.  
  106. horaBloqueioEmpresa.set(Calendar.DAY_OF_MONTH, horaBloqueio.get(Calendar.DAY_OF_MONTH));
  107. horaBloqueioEmpresa.set(Calendar.MONTH, horaBloqueio.get(Calendar.MONTH));
  108. horaBloqueioEmpresa.set(Calendar.YEAR, horaBloqueio.get(Calendar.YEAR));
  109.  
  110. if (horaBloqueio.before(horaBloqueioEmpresa)) {
  111. continue;
  112. }
  113. } else {
  114.  
  115. if (horaBloqueio.get(Calendar.HOUR_OF_DAY) < 9) {
  116. continue;
  117. }
  118. }
  119.  
  120. logger.info("ConfigEmpresa: " + configEmpresa.getNomSchema()+" / Empresa: "+empresa.getId()+":"+empresa.getNomEmpresa());
  121.  
  122. setCalenUltSync(horaBloqueio, empresa.getId());
  123.  
  124. iniciaCheck(empresa);
  125.  
  126. Session sessao = null;
  127. try {
  128. sessao = ConexaoBanco.getInstance().getSessao("aplic");
  129.  
  130. sessao.beginTransaction();
  131.  
  132. Query query = sessao.createQuery("update EmpresaOutrasConfiguracoes set "+EmpresaOutrasConfiguracoes.strDthCheckBloqueioFuncionario+" = :dthCalendar where "+EmpresaOutrasConfiguracoes.strId+" = :id");
  133. query.setLong("id", configuracoes.getId());
  134. query.setCalendar("dthCalendar", horaBloqueio);
  135. query.executeUpdate();
  136.  
  137. sessao.getTransaction().commit();
  138. } finally {
  139. Utils.closeSession(sessao);
  140. }
  141.  
  142. logger.info("FIM ConfigEmpresa: " + configEmpresa.getNomSchema()+" / Empresa: "+empresa.getId()+":"+empresa.getNomEmpresa());
  143.  
  144. }
  145. }
  146. }
  147.  
  148. } catch (Exception e ) {
  149. logger.error(e.getMessage(), e);
  150. } finally {
  151. Utils.closeSession(sessaoAdmin);
  152.  
  153. logger.info("FIM INATIVIDADE");
  154.  
  155. try {
  156. sessaoAdmin = null;
  157. Thread.sleep(10* InputSupportGeneric.MINUTO);
  158. } catch (InterruptedException e) {
  159. logger.error(e.getMessage(), e);
  160. break;
  161. }
  162. }
  163.  
  164. }
  165.  
  166. }
  167.  
  168. @SuppressWarnings("unchecked")
  169. private void iniciaCheck(Empresa empresa) {
  170.  
  171. Session sessao = null;
  172.  
  173. try {
  174. sessao = ConexaoBanco.getInstance().getSessao(empresa.getConfigGerencialWeb().getNomSchema());
  175. sessao.beginTransaction();
  176.  
  177. Calendar c = Calendar.getInstance();
  178.  
  179. //Se for Segunda, Sábado ou Domingo não rodar o processo de bloqueio.
  180. if (c.get(Calendar.DAY_OF_WEEK) == 1 || c.get(Calendar.DAY_OF_WEEK) == 2 || c.get(Calendar.DAY_OF_WEEK) == 7) {
  181. return;
  182. }
  183.  
  184. if (c.get(Calendar.DAY_OF_WEEK) == 3) {
  185. c.add(Calendar.DAY_OF_MONTH, -4);
  186. } else {
  187. c.add(Calendar.DAY_OF_MONTH, -2);
  188. }
  189.  
  190. Date dataD2 = DataUtil.getUltimaHoraDia(c.getTime());
  191.  
  192.  
  193. Criteria ct = sessao.createCriteria(Vendedor.class);
  194.  
  195. ct.createAlias(Vendedor.strFuncionario, Vendedor.strFuncionario);
  196. ct.createAlias(Vendedor.strFuncionario+"."+Funcionario.strCargo, Funcionario.strCargo);
  197. ct.add(Restrictions.eq(Vendedor.strFuncionario + "." + Funcionario.strIndStatus, Funcionario.STATUS_ATIVO));
  198. ct.add(Restrictions.isNull(Vendedor.strDthExclusao));
  199. ct.add(Restrictions.eq(Funcionario.strCargo+"."+Cargo.strSglCargo, Cargo.CARGO_VENDEDOR));
  200. // ct.setMaxResults(5);
  201. List<Vendedor> listVendedor = ct.list();
  202.  
  203.  
  204. StringBuilder sb = new StringBuilder();
  205. sb.append("Código;Vendedor;Valor Vendas Não Pagas (D-2) Vendido;Valor NP's Em Aberto;Valor Depósito Disponível;Saldo;Situação;Bloqueado?");
  206. sb.append(System.getProperty("line.separator"));
  207.  
  208. try {
  209. int i = 0;
  210. Long vlrMinimoParaBloqueio = 1000l;
  211.  
  212. for (Vendedor vendedor : listVendedor) {
  213. i++;
  214. logger.info("Posicao: "+i+" de "+ listVendedor.size()+"... Iniciando check: "+vendedor.getFuncionario().getId()+ " | "+vendedor.getFuncionario().getNomFuncionario());
  215.  
  216. ConciliacaoValoresVendedorBO.conciliaValorEmAbertoVendedor(sessao, vendedor.getFuncionario());
  217.  
  218. Long vlrNpsEmAbertoEParcial = retornaValorNPEmAberto(sessao, vendedor);
  219.  
  220. Long vlrSaldoVendasEmAberto = retornaSaldoAberto(sessao, dataD2, false, vendedor);
  221.  
  222. Long vlrSaldoDepositoDisponivel = retornaValorSaldoDeposito(sessao, vendedor);
  223.  
  224. Long vlrSaldoTotal = vlrNpsEmAbertoEParcial + vlrSaldoVendasEmAberto;
  225.  
  226. String dscSituacao = "Ok";
  227.  
  228. if (vlrSaldoTotal < 0) {
  229. dscSituacao = "Crédito Disponível";
  230. } else if (vlrSaldoTotal > 0) {
  231. dscSituacao = "Devedor";
  232. }
  233.  
  234. sb.append(vendedor.getFuncionario().getId() + ";" + vendedor.getFuncionario().getNomFuncionario() + ";" + FormatadorUtil.intToReais(vlrSaldoVendasEmAberto, true) + ";" + FormatadorUtil.intToReais(vlrNpsEmAbertoEParcial, true) + ";"+FormatadorUtil.intToReais(vlrSaldoDepositoDisponivel,true)+";" + FormatadorUtil.intToReais(vlrSaldoTotal, true) + ";");
  235. sb.append(dscSituacao+";");
  236.  
  237. if (vlrSaldoTotal > vlrMinimoParaBloqueio) {
  238. sb.append("Sim");
  239. if (vendedor.getFuncionario().getIndBloqueadoFinanceiro().equals(Utils.NAO)) {
  240. vendedor.getFuncionario().setIndBloqueadoFinanceiro(Utils.SIM);
  241. vendedor.getFuncionario().setDthBloqueio(new Timestamp(new Date().getTime()));
  242. sessao.merge(vendedor.getFuncionario());
  243.  
  244. FuncionarioLog log = new FuncionarioLog();
  245. log.setFuncionario(vendedor.getFuncionario());
  246. log.setDthRegistro(new Timestamp(new Date().getTime()));
  247. log.setTxtDescricaoLog("Vendedor bloqueado por não pagamento de boleto. Valor Vendas em aberto até o dia: " + DataUtil.strData(dataD2) + " = " + FormatadorUtil.intToReais(vlrSaldoVendasEmAberto, false) + " | Valor de Títulos em aberto : " + DataUtil.strData(new Date()) + " = " + FormatadorUtil.intToReais(vlrNpsEmAbertoEParcial, false));
  248. log.setUsuario(new UsuarioGerencial());
  249. log.getUsuario().setId(18l);
  250. sessao.persist(log);
  251. }
  252.  
  253. } else {
  254. sb.append("Não");
  255. if (vendedor.getFuncionario().getIndBloqueadoFinanceiro().equals(Utils.SIM)) {
  256. vendedor.getFuncionario().setIndBloqueadoFinanceiro(Utils.NAO);
  257. vendedor.getFuncionario().setDthBloqueio(null);
  258. sessao.merge(vendedor.getFuncionario());
  259.  
  260. FuncionarioLog log = new FuncionarioLog();
  261. log.setFuncionario(vendedor.getFuncionario());
  262. log.setDthRegistro(new Timestamp(new Date().getTime()));
  263. log.setTxtDescricaoLog("Vendedor desbloqueado. Valor Vendas em aberto até o dia: " + DataUtil.strData(dataD2) + " = " + FormatadorUtil.intToReais(vlrSaldoVendasEmAberto, false) + " | Valor de Títulos em aberto: " + DataUtil.strData(new Date()) + " = " + FormatadorUtil.intToReais(vlrNpsEmAbertoEParcial, false));
  264. log.setUsuario(new UsuarioGerencial());
  265. log.getUsuario().setId(18l);
  266. sessao.persist(log);
  267.  
  268. }
  269. }
  270. sb.append(System.getProperty("line.separator"));
  271. logger.info("Posicao: "+i+" de "+ listVendedor.size()+"... Fim check: "+vendedor.getFuncionario().getId()+ " | "+vendedor.getFuncionario().getNomFuncionario());
  272. }
  273.  
  274. sessao.getTransaction().commit();
  275.  
  276. logger.info("Processo concluído com sucesso");
  277.  
  278. EmailAppsware email = new EmailAppsware("Em anexo, vendedores bloqueados por inadimplência." , "Relação de Bloqueios - Vendedores: "+DataUtil.strData(new Date()));
  279.  
  280. HashMap<String, byte[]> anexo = new HashMap<String, byte[]>();
  281.  
  282. anexo.put("relFuncionarioBloqueio.csv", sb.toString().getBytes("ISO-8859-1"));
  283.  
  284. email.setAnexos(anexo);
  285. try {
  286. email.getDestinatarios().add("jaqueline.coelho@n2.com.br");
  287. email.getDestinatarios().add("thomas.waluszek@n2.com.br");
  288. email.getDestinatarios().add("rodrigo.ceolin@n2.com.br");
  289. email.getDestinatarios().add("rafael@n2.com.br");
  290. email.getDestinatarios().add("karine.januario@n2.com.br");
  291. email.getDestinatarios().add("jussara.sousa@n2.com.br");
  292.  
  293. email.getDestinatarios().add("elisson@appsware.com.br");
  294. email.getDestinatarios().add("francisco@appsware.com.br");
  295. email.getDestinatarios().add("deyvison@appsware.com.br");
  296. } catch (Exception e ) {
  297. e.printStackTrace();
  298. }
  299.  
  300. EmailAppswareUtils.enviarEmail(email);
  301.  
  302. } catch (Exception e) {
  303. e.printStackTrace();
  304. EmailAppswareUtils.enviarEmail(e);
  305. }
  306.  
  307. logger.info("E-mail enviado com sucesso.");
  308. } catch (Exception e) {
  309. logger.error(e.getMessage(), e);
  310. } finally {
  311. Utils.closeSession(sessao);
  312. }
  313. }
  314.  
  315. public static Long retornaValorSaldoDeposito(Session sessao, Vendedor vendedor) {
  316.  
  317. Criteria ct = sessao.createCriteria(Deposito.class);
  318. ct.createAlias(Deposito.strFuncionario, Deposito.strFuncionario);
  319. ct.add(Restrictions.isNull(Deposito.strAcertoFinanceiro));
  320. ct.add(Restrictions.eq(Deposito.strFuncionario+"."+Funcionario.strId, vendedor.getFuncionario().getId()));
  321. ct.setProjection(Projections.sum(Deposito.strVlrDisponivel));
  322.  
  323. Long vlrDisponivel = (Long) ct.uniqueResult();
  324.  
  325. return vlrDisponivel == null ? 0l : vlrDisponivel;
  326.  
  327. }
  328. @SuppressWarnings("unchecked")
  329. public static Long retornaValorNPEmAberto(Session sessao, Vendedor vendedor) {
  330. long vlrTotal = 0L;
  331.  
  332. Criteria ct = sessao.createCriteria(NotaPromissoriaGerada.class, "np");
  333. ct.add(Restrictions.isNotNull(NotaPromissoriaGerada.strAcertoFinanceiro));
  334. ct.createAlias(NotaPromissoriaGerada.strContaReceberSet, NotaPromissoriaGerada.strContaReceberSet);
  335. ct.add(Restrictions.eq(NotaPromissoriaGerada.strFuncionario, vendedor.getFuncionario()));
  336. ct.add(Restrictions.or(Restrictions.eq(NotaPromissoriaGerada.strIndStatus, NotaPromissoriaGerada.STATUS_TITULO_ABERTO),Restrictions.eq(NotaPromissoriaGerada.strIndStatus, NotaPromissoriaGerada.STATUS_TITULO_PARCIAL)));
  337.  
  338. List<NotaPromissoriaGerada> listNpsAbertasEParciais = ct.list();
  339.  
  340. for (NotaPromissoriaGerada np : listNpsAbertasEParciais) {
  341. vlrTotal += np.getVlrAberto();
  342. }
  343. return vlrTotal;
  344. }
  345.  
  346. private static Long retornaSaldoAberto(Session sessao, Date dataInicio,boolean apenasUmDia , Vendedor vendedor) {
  347. Criteria ct = sessao.createCriteria(LoteVendaFisica.class);
  348. ct.createAlias(LoteVendaFisica.strVendedor, LoteVendaFisica.strVendedor);
  349. ct.add(Restrictions.eq(LoteVendaFisica.strVendedor, vendedor));
  350. ct.add(Restrictions.isNull(LoteVendaFisica.strAcertoFinanceiro));
  351. ct.add(Restrictions.eq(LoteVendaFisica.strIndGeraAcertoFinanceiro, Utils.SIM));
  352. ct.add(Restrictions.isNull(LoteVendaFisica.strUsuarioEstorno));
  353. if (apenasUmDia) {
  354. ct.add(Restrictions.eq(LoteVendaFisica.strDatVenda, dataInicio));
  355. } else {
  356. ct.add(Restrictions.le(LoteVendaFisica.strDatVenda, dataInicio));
  357. }
  358.  
  359. ct.setProjection(Projections.sum(LoteVendaFisica.strVlrSaldoAberto));
  360.  
  361. Long vlrSaldoAberto = (Long) ct.uniqueResult();
  362.  
  363. return vlrSaldoAberto == null ? 0l : vlrSaldoAberto;
  364. }
  365.  
  366.  
  367. public static void setCalenUltSync(Calendar calenUltSync, Long idEmpresa) {
  368. mapaEmpresaDataExecucao.put(idEmpresa, calenUltSync);
  369. }
  370.  
  371. public static Calendar getCalenUltSync(Long idEmpresa, Calendar horaAtual) {
  372.  
  373. Calendar calenUltSync = mapaEmpresaDataExecucao.get(idEmpresa);
  374.  
  375. if (calenUltSync == null) { // && !Verificador.getInstance().isIniciarAgora() (BUG #4814)
  376. calenUltSync = horaAtual;
  377. mapaEmpresaDataExecucao.put(idEmpresa, calenUltSync);
  378. }
  379.  
  380. return calenUltSync;
  381. }
  382.  
  383. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement