Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.com.themist.verificador.checks;
- import java.sql.Timestamp;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.GregorianCalendar;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.log4j.Logger;
- import org.hibernate.Criteria;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.criterion.Projections;
- import org.hibernate.criterion.Restrictions;
- import br.com.aplic.entidades.admin.ConfigGerencialWeb;
- import br.com.aplic.entidades.admin.Empresa;
- import br.com.aplic.entidades.bo.ConciliacaoValoresVendedorBO;
- import br.com.aplic.entidades.distribuidor.Cargo;
- import br.com.aplic.entidades.distribuidor.Deposito;
- import br.com.aplic.entidades.distribuidor.Funcionario;
- import br.com.aplic.entidades.distribuidor.FuncionarioLog;
- import br.com.aplic.entidades.distribuidor.LoteVendaFisica;
- import br.com.aplic.entidades.distribuidor.NotaPromissoriaGerada;
- import br.com.aplic.entidades.empresa.EmpresaOutrasConfiguracoes;
- import br.com.aplic.entidades.empresa.UsuarioGerencial;
- import br.com.aplic.entidades.empresa.Vendedor;
- import br.com.aplic.utils.DataUtil;
- import br.com.aplic.utils.EmailAppsware;
- import br.com.aplic.utils.EmailAppswareUtils;
- import br.com.aplic.utils.FormatadorUtil;
- import br.com.aplic.utils.Utils;
- import br.com.themist.banco.ConexaoBanco;
- import br.com.themist.dao.admin.ConfigGerencialwebDAO;
- import br.com.themist.verificador.Verificavel;
- import br.com.themist.verificador.checks.support.InputSupportGeneric;
- public class ChecaBloqueioFuncionario implements Verificavel {
- private static final Logger logger = Logger.getLogger(ChecaBloqueioFuncionario.class);
- private static Map<Long, Calendar> mapaEmpresaDataExecucao = new HashMap<Long, Calendar>();
- @SuppressWarnings({ "unchecked", "unused" })
- @Override
- public void run() {
- while (true) {
- Session sessaoAdmin = null;
- try {
- sessaoAdmin = ConexaoBanco.getInstance().getSessaoAdmin();
- sessaoAdmin.beginTransaction();
- ConfigGerencialwebDAO configEmpresaDao = new ConfigGerencialwebDAO(sessaoAdmin);
- Criteria ct = sessaoAdmin.createCriteria(ConfigGerencialWeb.class);
- ct.add(Restrictions.isNull(ConfigGerencialWeb.strDthExclusao));
- ct.add(Restrictions.eq(ConfigGerencialWeb.strNomSchema, "n2"));
- List<ConfigGerencialWeb> listaConfigEmpresa = ct.list();
- logger.info("VERIFICANDO FUNCIONARIOS INADIMPLENTES");
- for (ConfigGerencialWeb configEmpresa : listaConfigEmpresa) {
- ct = sessaoAdmin.createCriteria(Empresa.class);
- ct.add(Restrictions.eq(Empresa.strConfigGerencialWeb, configEmpresa));
- ct.add(Restrictions.isNull(Empresa.strDthExclusao));
- List<Empresa> listEmpresa = ct.list();
- for (Empresa empresa : listEmpresa) {
- ct = sessaoAdmin.createCriteria(EmpresaOutrasConfiguracoes.class);
- ct.add(Restrictions.eq(EmpresaOutrasConfiguracoes.strEmpresa, empresa));
- EmpresaOutrasConfiguracoes configuracoes = (EmpresaOutrasConfiguracoes)ct.uniqueResult();
- Calendar horaAtual = new GregorianCalendar();
- Calendar horaEmpresa = getCalenUltSync(empresa.getId(), horaAtual);
- if (horaEmpresa != null && horaAtual.before(horaEmpresa)) {
- continue;
- } else if((configuracoes.getDthCheckBloqueioFuncionario() != null &&
- DataUtil.getPrimeiraHoraDia(configuracoes.getDthCheckBloqueioFuncionario().getTime()).equals(DataUtil.getPrimeiraHoraDia(horaAtual.getTime())))){
- continue;
- } else {
- Calendar horaBloqueio = horaAtual;
- if (configuracoes != null && configuracoes.getHrBloqueioFuncionario() != null){
- Calendar horaBloqueioEmpresa = configuracoes.getHrBloqueioFuncionario();
- horaBloqueioEmpresa.set(Calendar.DAY_OF_MONTH, horaBloqueio.get(Calendar.DAY_OF_MONTH));
- horaBloqueioEmpresa.set(Calendar.MONTH, horaBloqueio.get(Calendar.MONTH));
- horaBloqueioEmpresa.set(Calendar.YEAR, horaBloqueio.get(Calendar.YEAR));
- if (horaBloqueio.before(horaBloqueioEmpresa)) {
- continue;
- }
- } else {
- if (horaBloqueio.get(Calendar.HOUR_OF_DAY) < 9) {
- continue;
- }
- }
- logger.info("ConfigEmpresa: " + configEmpresa.getNomSchema()+" / Empresa: "+empresa.getId()+":"+empresa.getNomEmpresa());
- setCalenUltSync(horaBloqueio, empresa.getId());
- iniciaCheck(empresa);
- Session sessao = null;
- try {
- sessao = ConexaoBanco.getInstance().getSessao("aplic");
- sessao.beginTransaction();
- Query query = sessao.createQuery("update EmpresaOutrasConfiguracoes set "+EmpresaOutrasConfiguracoes.strDthCheckBloqueioFuncionario+" = :dthCalendar where "+EmpresaOutrasConfiguracoes.strId+" = :id");
- query.setLong("id", configuracoes.getId());
- query.setCalendar("dthCalendar", horaBloqueio);
- query.executeUpdate();
- sessao.getTransaction().commit();
- } finally {
- Utils.closeSession(sessao);
- }
- logger.info("FIM ConfigEmpresa: " + configEmpresa.getNomSchema()+" / Empresa: "+empresa.getId()+":"+empresa.getNomEmpresa());
- }
- }
- }
- } catch (Exception e ) {
- logger.error(e.getMessage(), e);
- } finally {
- Utils.closeSession(sessaoAdmin);
- logger.info("FIM INATIVIDADE");
- try {
- sessaoAdmin = null;
- Thread.sleep(10* InputSupportGeneric.MINUTO);
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- break;
- }
- }
- }
- }
- @SuppressWarnings("unchecked")
- private void iniciaCheck(Empresa empresa) {
- Session sessao = null;
- try {
- sessao = ConexaoBanco.getInstance().getSessao(empresa.getConfigGerencialWeb().getNomSchema());
- sessao.beginTransaction();
- Calendar c = Calendar.getInstance();
- //Se for Segunda, Sábado ou Domingo não rodar o processo de bloqueio.
- if (c.get(Calendar.DAY_OF_WEEK) == 1 || c.get(Calendar.DAY_OF_WEEK) == 2 || c.get(Calendar.DAY_OF_WEEK) == 7) {
- return;
- }
- if (c.get(Calendar.DAY_OF_WEEK) == 3) {
- c.add(Calendar.DAY_OF_MONTH, -4);
- } else {
- c.add(Calendar.DAY_OF_MONTH, -2);
- }
- Date dataD2 = DataUtil.getUltimaHoraDia(c.getTime());
- Criteria ct = sessao.createCriteria(Vendedor.class);
- ct.createAlias(Vendedor.strFuncionario, Vendedor.strFuncionario);
- ct.createAlias(Vendedor.strFuncionario+"."+Funcionario.strCargo, Funcionario.strCargo);
- ct.add(Restrictions.eq(Vendedor.strFuncionario + "." + Funcionario.strIndStatus, Funcionario.STATUS_ATIVO));
- ct.add(Restrictions.isNull(Vendedor.strDthExclusao));
- ct.add(Restrictions.eq(Funcionario.strCargo+"."+Cargo.strSglCargo, Cargo.CARGO_VENDEDOR));
- // ct.setMaxResults(5);
- List<Vendedor> listVendedor = ct.list();
- StringBuilder sb = new StringBuilder();
- 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?");
- sb.append(System.getProperty("line.separator"));
- try {
- int i = 0;
- Long vlrMinimoParaBloqueio = 1000l;
- for (Vendedor vendedor : listVendedor) {
- i++;
- logger.info("Posicao: "+i+" de "+ listVendedor.size()+"... Iniciando check: "+vendedor.getFuncionario().getId()+ " | "+vendedor.getFuncionario().getNomFuncionario());
- ConciliacaoValoresVendedorBO.conciliaValorEmAbertoVendedor(sessao, vendedor.getFuncionario());
- Long vlrNpsEmAbertoEParcial = retornaValorNPEmAberto(sessao, vendedor);
- Long vlrSaldoVendasEmAberto = retornaSaldoAberto(sessao, dataD2, false, vendedor);
- Long vlrSaldoDepositoDisponivel = retornaValorSaldoDeposito(sessao, vendedor);
- Long vlrSaldoTotal = vlrNpsEmAbertoEParcial + vlrSaldoVendasEmAberto;
- String dscSituacao = "Ok";
- if (vlrSaldoTotal < 0) {
- dscSituacao = "Crédito Disponível";
- } else if (vlrSaldoTotal > 0) {
- dscSituacao = "Devedor";
- }
- sb.append(vendedor.getFuncionario().getId() + ";" + vendedor.getFuncionario().getNomFuncionario() + ";" + FormatadorUtil.intToReais(vlrSaldoVendasEmAberto, true) + ";" + FormatadorUtil.intToReais(vlrNpsEmAbertoEParcial, true) + ";"+FormatadorUtil.intToReais(vlrSaldoDepositoDisponivel,true)+";" + FormatadorUtil.intToReais(vlrSaldoTotal, true) + ";");
- sb.append(dscSituacao+";");
- if (vlrSaldoTotal > vlrMinimoParaBloqueio) {
- sb.append("Sim");
- if (vendedor.getFuncionario().getIndBloqueadoFinanceiro().equals(Utils.NAO)) {
- vendedor.getFuncionario().setIndBloqueadoFinanceiro(Utils.SIM);
- vendedor.getFuncionario().setDthBloqueio(new Timestamp(new Date().getTime()));
- sessao.merge(vendedor.getFuncionario());
- FuncionarioLog log = new FuncionarioLog();
- log.setFuncionario(vendedor.getFuncionario());
- log.setDthRegistro(new Timestamp(new Date().getTime()));
- 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));
- log.setUsuario(new UsuarioGerencial());
- log.getUsuario().setId(18l);
- sessao.persist(log);
- }
- } else {
- sb.append("Não");
- if (vendedor.getFuncionario().getIndBloqueadoFinanceiro().equals(Utils.SIM)) {
- vendedor.getFuncionario().setIndBloqueadoFinanceiro(Utils.NAO);
- vendedor.getFuncionario().setDthBloqueio(null);
- sessao.merge(vendedor.getFuncionario());
- FuncionarioLog log = new FuncionarioLog();
- log.setFuncionario(vendedor.getFuncionario());
- log.setDthRegistro(new Timestamp(new Date().getTime()));
- 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));
- log.setUsuario(new UsuarioGerencial());
- log.getUsuario().setId(18l);
- sessao.persist(log);
- }
- }
- sb.append(System.getProperty("line.separator"));
- logger.info("Posicao: "+i+" de "+ listVendedor.size()+"... Fim check: "+vendedor.getFuncionario().getId()+ " | "+vendedor.getFuncionario().getNomFuncionario());
- }
- sessao.getTransaction().commit();
- logger.info("Processo concluído com sucesso");
- EmailAppsware email = new EmailAppsware("Em anexo, vendedores bloqueados por inadimplência." , "Relação de Bloqueios - Vendedores: "+DataUtil.strData(new Date()));
- HashMap<String, byte[]> anexo = new HashMap<String, byte[]>();
- anexo.put("relFuncionarioBloqueio.csv", sb.toString().getBytes("ISO-8859-1"));
- email.setAnexos(anexo);
- try {
- email.getDestinatarios().add("jaqueline.coelho@n2.com.br");
- email.getDestinatarios().add("thomas.waluszek@n2.com.br");
- email.getDestinatarios().add("rodrigo.ceolin@n2.com.br");
- email.getDestinatarios().add("rafael@n2.com.br");
- email.getDestinatarios().add("karine.januario@n2.com.br");
- email.getDestinatarios().add("jussara.sousa@n2.com.br");
- email.getDestinatarios().add("elisson@appsware.com.br");
- email.getDestinatarios().add("francisco@appsware.com.br");
- email.getDestinatarios().add("deyvison@appsware.com.br");
- } catch (Exception e ) {
- e.printStackTrace();
- }
- EmailAppswareUtils.enviarEmail(email);
- } catch (Exception e) {
- e.printStackTrace();
- EmailAppswareUtils.enviarEmail(e);
- }
- logger.info("E-mail enviado com sucesso.");
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- } finally {
- Utils.closeSession(sessao);
- }
- }
- public static Long retornaValorSaldoDeposito(Session sessao, Vendedor vendedor) {
- Criteria ct = sessao.createCriteria(Deposito.class);
- ct.createAlias(Deposito.strFuncionario, Deposito.strFuncionario);
- ct.add(Restrictions.isNull(Deposito.strAcertoFinanceiro));
- ct.add(Restrictions.eq(Deposito.strFuncionario+"."+Funcionario.strId, vendedor.getFuncionario().getId()));
- ct.setProjection(Projections.sum(Deposito.strVlrDisponivel));
- Long vlrDisponivel = (Long) ct.uniqueResult();
- return vlrDisponivel == null ? 0l : vlrDisponivel;
- }
- @SuppressWarnings("unchecked")
- public static Long retornaValorNPEmAberto(Session sessao, Vendedor vendedor) {
- long vlrTotal = 0L;
- Criteria ct = sessao.createCriteria(NotaPromissoriaGerada.class, "np");
- ct.add(Restrictions.isNotNull(NotaPromissoriaGerada.strAcertoFinanceiro));
- ct.createAlias(NotaPromissoriaGerada.strContaReceberSet, NotaPromissoriaGerada.strContaReceberSet);
- ct.add(Restrictions.eq(NotaPromissoriaGerada.strFuncionario, vendedor.getFuncionario()));
- ct.add(Restrictions.or(Restrictions.eq(NotaPromissoriaGerada.strIndStatus, NotaPromissoriaGerada.STATUS_TITULO_ABERTO),Restrictions.eq(NotaPromissoriaGerada.strIndStatus, NotaPromissoriaGerada.STATUS_TITULO_PARCIAL)));
- List<NotaPromissoriaGerada> listNpsAbertasEParciais = ct.list();
- for (NotaPromissoriaGerada np : listNpsAbertasEParciais) {
- vlrTotal += np.getVlrAberto();
- }
- return vlrTotal;
- }
- private static Long retornaSaldoAberto(Session sessao, Date dataInicio,boolean apenasUmDia , Vendedor vendedor) {
- Criteria ct = sessao.createCriteria(LoteVendaFisica.class);
- ct.createAlias(LoteVendaFisica.strVendedor, LoteVendaFisica.strVendedor);
- ct.add(Restrictions.eq(LoteVendaFisica.strVendedor, vendedor));
- ct.add(Restrictions.isNull(LoteVendaFisica.strAcertoFinanceiro));
- ct.add(Restrictions.eq(LoteVendaFisica.strIndGeraAcertoFinanceiro, Utils.SIM));
- ct.add(Restrictions.isNull(LoteVendaFisica.strUsuarioEstorno));
- if (apenasUmDia) {
- ct.add(Restrictions.eq(LoteVendaFisica.strDatVenda, dataInicio));
- } else {
- ct.add(Restrictions.le(LoteVendaFisica.strDatVenda, dataInicio));
- }
- ct.setProjection(Projections.sum(LoteVendaFisica.strVlrSaldoAberto));
- Long vlrSaldoAberto = (Long) ct.uniqueResult();
- return vlrSaldoAberto == null ? 0l : vlrSaldoAberto;
- }
- public static void setCalenUltSync(Calendar calenUltSync, Long idEmpresa) {
- mapaEmpresaDataExecucao.put(idEmpresa, calenUltSync);
- }
- public static Calendar getCalenUltSync(Long idEmpresa, Calendar horaAtual) {
- Calendar calenUltSync = mapaEmpresaDataExecucao.get(idEmpresa);
- if (calenUltSync == null) { // && !Verificador.getInstance().isIniciarAgora() (BUG #4814)
- calenUltSync = horaAtual;
- mapaEmpresaDataExecucao.put(idEmpresa, calenUltSync);
- }
- return calenUltSync;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement