package br.com.centralit.citgerencial.generateservices.incidentes; import java.math.BigDecimal; import java.sql.Date; import java.sql.Timestamp; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.centralit.citcorpore.util.Enumerados.TipoDate; import br.com.centralit.citgerencial.bean.GerencialGenerateService; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.JdbcEngine; import br.com.citframework.util.Constantes; import br.com.citframework.util.SQLConfig; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilNumbersAndDecimals; @SuppressWarnings({ "rawtypes", "unchecked" }) public class GenerateServiceInicioTratamentoAnalitico extends GerencialGenerateService { public List execute(HashMap parametersValues, Collection paramtersDefinition) throws ParseException { String datainicial = (String) parametersValues.get("PARAM.dataInicial"); String datafinal = (String) parametersValues.get("PARAM.dataFinal"); List parametersValuesBusca = new ArrayList(); List lstRetorno = new ArrayList(); Date datafim = UtilDatas.convertStringToSQLDate(TipoDate.DATE_DEFAULT, datafinal, super.getLanguage(paramtersDefinition)); Date datainicio = UtilDatas.convertStringToSQLDate(TipoDate.DATE_DEFAULT, datainicial, super.getLanguage(paramtersDefinition)); Calendar calendar = Calendar.getInstance(); if(datafim != null){ calendar.setTime(datafim); } calendar.add(GregorianCalendar.DATE, 1); datafim = new java.sql.Date(calendar.getTime().getTime()); StringBuilder sql = new StringBuilder(); sql.append("select "); sql.append("sol.idsolicitacaoservico as valor1, "); sql.append("emp.nome as valor2, "); sql.append("cont.numero as valor3,"); sql.append("sol.datahorasolicitacao as valor4, "); sql.append("sol.datahorafim as valor5, "); sql.append("sol.datahoralimite as valor6, "); sql.append("sol.prazohh as valor7, "); sql.append("sol.prazomm as valor8, "); sql.append("sol.seqreabertura as valor9, "); sql.append("sol.tempoCapturaHH as valor10, "); sql.append("sol.tempoCapturaMM as valor11, "); sql.append("sol.tempoAtrasoHH as valor12, "); sql.append("sol.tempoAtrasoMM as valor13, "); sql.append("sol.tempoAtendimentoHH as valor14, "); sql.append("sol.tempoAtendimentoMM as valor15, "); sql.append("sol.dataHoraCaptura as valor16, "); sql.append("slaACombinar as valor17, "); sql.append("idprioridade as valor18, "); sql.append("sol.situacao as valor19, "); sql.append("sol.prazoCapturaHH as valor20, "); sql.append("sol.prazoCapturaMM as valor21 "); sql.append("from solicitacaoservico sol "); sql.append("inner join execucaosolicitacao es on es.idsolicitacaoservico = sol.idsolicitacaoservico "); sql.append("left outer join empregados emp on emp.idempregado = sol.idsolicitante left outer join servicocontrato serc on serc.idservicocontrato = sol.idservicocontrato "); sql.append("left outer join servico serv on serv.idservico = serc.idservicocontrato left outer join tiposervico tipos ON serv.idtiposervico = tipos.idtiposervico "); sql.append("left outer join contratos cont on cont.idcontrato = serc.idcontrato left outer join tipodemandaservico tpdem on tpdem.idtipodemandaservico = serv.idtipodemandaservico "); sql.append("WHERE UPPER(sol.situacao) = 'FECHADA' "); String classificacao = (String) parametersValues.get("PARAM.classificacao"); if (classificacao != null && !classificacao.equalsIgnoreCase("*")) { sql.append("AND tpdem.classificacao = '" + classificacao + "' "); } sql.append("AND (serc.idservico = ? OR ? = -1) "); sql.append("AND (serc.idcontrato = ? OR ? = -1) "); sql.append("AND (tipos.idtiposervico = ? OR ? = -1) "); sql.append("AND (sol.idprioridade = ? OR ? = -1) "); sql.append("AND (sol.idorigem = ? OR ? = -1) "); sql.append("AND (sol.idunidade = ? OR ? = -1) "); sql.append("AND (sol.datahorasolicitacao BETWEEN ? AND ?) "); JdbcEngine jdbcEngine = new JdbcEngine(Constantes.getValue("DATABASE_ALIAS"), null); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idServico"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idServico"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idContrato"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idContrato"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idTipoServico"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idTipoServico"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idPrioridade"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idPrioridade"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idOrigem"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idOrigem"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idUnidade"))); parametersValuesBusca.add(Integer.parseInt((String) parametersValues.get("PARAM.idUnidade"))); parametersValuesBusca.add(datainicio); parametersValuesBusca.add(datafim); this.acrescentarNaSqlOLimitadorDeRegistros(sql, this.obterValorParametroNumeroMaximoDeRegistros(parametersValues)); sql.append("order by valor4, valor1 "); // HttpServletRequest request = null; try { List listaDados = jdbcEngine.execSQL(sql.toString(), parametersValuesBusca.toArray(), 0); if (listaDados != null && !listaDados.isEmpty()) { for (int i = 0; i < listaDados.size(); i++) { Object[] row = (Object[]) listaDados.get(i); Timestamp dataHoraSol = (Timestamp) row[3]; Timestamp dataHoraFim = (Timestamp) row[4]; String dataHoraFimStr = "--"; if (dataHoraFim != null) { dataHoraFimStr = UtilDatas.convertDateToString(TipoDate.TIMESTAMP_WITH_SECONDS, dataHoraFim, super.getLanguage(paramtersDefinition)); } Timestamp dataHoraLimite = (Timestamp) row[5]; String dataHoraLimiteStr = "--"; if (dataHoraLimite != null) { dataHoraLimiteStr = UtilDatas.convertDateToString(TipoDate.TIMESTAMP_WITH_SECONDS, dataHoraLimite, super.getLanguage(paramtersDefinition)); } Timestamp dataHoraCaptura = (Timestamp) row[15]; String dataHoraCapturaStr = "--"; if (dataHoraCaptura != null) { dataHoraCapturaStr = UtilDatas.convertDateToString(TipoDate.TIMESTAMP_WITH_SECONDS, dataHoraCaptura, super.getLanguage(paramtersDefinition)); } double tempoCapturaDbl = 0; String captura = ""; Integer capturaHH = null; if (BigDecimal.class.isInstance(row[9])) { BigDecimal auxBig = (BigDecimal) row[9]; capturaHH = new Integer(auxBig.intValue()); } else { if (row[9] != null) { capturaHH = Integer.parseInt(row[9].toString()); } } if (capturaHH != null) { tempoCapturaDbl = capturaHH.doubleValue(); } Integer capturaMM = null; if (BigDecimal.class.isInstance(row[10])) { BigDecimal auxBig = (BigDecimal) row[10]; capturaMM = new Integer(auxBig.intValue()); } else { if (row[10] != null) { capturaMM = Integer.parseInt(row[10].toString()); } } if (capturaHH != null && capturaHH.intValue() > 0) { captura = capturaHH + "h"; } if (capturaMM != null && capturaMM.intValue() > 0) { captura += " " + capturaMM + "m"; } if (capturaMM != null) { tempoCapturaDbl += capturaMM.doubleValue() / 60; } Integer prioridade = UtilNumbersAndDecimals.convertToInteger(row[17]); String prioridadeStr = ""; if (prioridade == null) { prioridadeStr = "--"; } else { prioridadeStr = "" + prioridade; } double prazoCapturaDbl = 0; String prazoCaptura = ""; Integer prazoCapturaHH = UtilNumbersAndDecimals.convertToInteger(row[19]); Integer prazoCapturaMM = UtilNumbersAndDecimals.convertToInteger(row[20]); if (prazoCapturaHH != null && prazoCapturaHH.intValue() > 0) { prazoCaptura = prazoCaptura + "h"; prazoCapturaDbl = prazoCapturaHH.doubleValue(); } if (prazoCapturaMM != null && prazoCapturaMM.intValue() > 0) { prazoCaptura += " " + prazoCapturaMM + "m"; prazoCapturaDbl += prazoCapturaMM.doubleValue() / 60; } String noPrazo = "S"; if ((tempoCapturaDbl > prazoCapturaDbl) || (dataHoraCaptura == null && prazoCapturaDbl > 0)) { noPrazo = "N"; } lstRetorno.add(new Object[] { row[0] + "", row[1], row[2], UtilDatas.convertDateToString(TipoDate.TIMESTAMP_WITH_SECONDS, dataHoraSol, super.getLanguage(paramtersDefinition)), dataHoraLimiteStr, dataHoraFimStr, prioridadeStr, dataHoraCapturaStr, prazoCaptura, captura, noPrazo }); } } if (lstRetorno == null || lstRetorno.size() == 0) { lstRetorno = new ArrayList(); /* Desenvolvedor: Rodrigo Pecci - Data: 30/10/2013 - Hor�rio: 14h15min - ID Citsmart: 120770 * Motivo/Coment�rio: Se lstRetorno for null ou vazio, � necess�rio retornar somente um ArrayList vazio. */ //lstRetorno.add(new Object[] { "", "", "", "", "", "", "", "", "", "", "" }); } for (Iterator iterator = paramtersDefinition.iterator(); iterator.hasNext();) { Object parametro = (Object) iterator.next(); if (parametro != null && "org.apache.catalina.connector.RequestFacade".equals(parametro.getClass().getName())) { iterator.remove(); break; } } return lstRetorno; } catch (PersistenceException e) { e.printStackTrace(); return null; } } /** * Retorna o N�mero M�ximo de registros que dever� ser retornado na consulta. * * @param parametros * @return N�mero M�ximo de Registros * @author valdoilo.damasceno */ private Integer obterValorParametroNumeroMaximoDeRegistros(HashMap parametros) { String valor = (String) parametros.get("PARAM.topList"); if (StringUtils.isNotBlank(valor) && !valor.trim().equals("*")) { try { return new Integer(valor); } catch (NumberFormatException e) { return null; } } else { return null; } } /** * Acrescenta no SQL a condi��o para limitar o retorno de registros de acordo com o valor selecionado. * * @param sql * - String SQL. * @param maximoRegistros * - N�mero m�ximo de registros. * @author valdoilo.damasceno */ private void acrescentarNaSqlOLimitadorDeRegistros(StringBuilder sql, Integer maximoRegistros) { String valores = " valor1, valor2, valor3, valor4, valor5, valor6, valor7, valor8, valor9, valor10, valor11, valor12, valor13, valor14, valor15, valor16, valor17, valor18, valor19, valor20, valor21 "; if (maximoRegistros == null) return; if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.ORACLE)) { sql.insert(0, "SELECT " + valores + "FROM ("); sql.insert(sql.length(), ") where rownum <= " + maximoRegistros); } else if (CITCorporeUtil.SGBD_PRINCIPAL.toUpperCase().equals(SQLConfig.SQLSERVER)) { sql.replace(0, 6, " select " + valores + " from (select ROW_NUMBER() OVER(order by (select 1)) rownum, "); sql.append(" ) as teste where rownum between 0 and " + maximoRegistros); } else { sql.append(" LIMIT " + maximoRegistros); } } }