/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package db.providers; import db.Dblocal; import db.entidades.Area; import db.entidades.Medida; import db.entidades.PlanoActuacao; import db.entidades.PostoTrabalho; import db.entidades.Risco; import db.entidades.Valor; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; /** * * @author lluis */ public class RelatoriosDataProvider extends GenericDataProvider { Dblocal dblocal = new Dblocal(); public RelatoriosDataProvider() throws Exception { dblocal.connect(); } public PlanoActuacao getFullPlano(PlanoActuacao plano, Integer relatorioId) { try { plano = getAreasByPlano(plano, relatorioId); } catch(Exception ex) { ex.printStackTrace(); } return plano; } private PlanoActuacao getAreasByPlano(PlanoActuacao plano, Integer relatorioId) throws Exception { Statement st = dblocal.createStatement(); String sql = "select distinct area_id, hs_relatorio_area.description as descricao from hs_relatorio_posto "; sql += "inner join hs_relatorio_posto_medida on hs_relatorio_posto_medida.posto_id = hs_relatorio_posto.id "; sql += "inner join hs_relatorio_medida on hs_relatorio_medida.id = hs_relatorio_posto_medida.medida_id "; sql += "inner join hs_relatorio_risco on hs_relatorio_risco.id = hs_relatorio_medida.risco_id "; sql += "inner join hs_relatorio on hs_relatorio.id = hs_relatorio_risco.relatorio_id "; sql += "inner join hs_relatorio_area on hs_relatorio_area.id = area_id "; sql += "where hs_relatorio.id = " + relatorioId + " "; sql += "order by area_id "; System.out.println("AREAS BY PLANO SQL : " + sql); ResultSet rs = st.executeQuery(sql); List areas = new ArrayList(); if(rs.isBeforeFirst()) { rs.first(); do { Area a = new Area(); a.setId(new Integer( rs.getInt("area_id") )); a.setDescricao(rs.getString("descricao")); try { a.setRiscos(getRiscosByArea(a)); } catch(Exception ex) { a.setRiscos(null); } areas.add(a); }while(rs.next()); plano.setAreas(areas); } return plano; } private List getRiscosByArea(Area a) throws Exception { Statement st = dblocal.createStatement(); String sql = "select distinct hs_relatorio_risco.id, hs_relatorio_risco.description as descricao from hs_relatorio_posto "; sql += "inner join hs_relatorio_posto_medida on hs_relatorio_posto_medida.posto_id = hs_relatorio_posto.id "; sql += "inner join hs_relatorio_medida on hs_relatorio_medida.id = hs_relatorio_posto_medida.medida_id "; sql += "inner join hs_relatorio_risco on hs_relatorio_risco.id = hs_relatorio_medida.risco_id "; sql += "inner join hs_relatorio on hs_relatorio.id = hs_relatorio_risco.relatorio_id "; sql += "inner join hs_relatorio_area on hs_relatorio_area.id = area_id "; sql += "where area_id = " + a.getId() + " "; sql += "order by hs_relatorio_risco.id "; System.out.println("RISCOS BY AREA SQL : " + sql); ResultSet rs = st.executeQuery(sql); List riscos = new ArrayList(); if(rs.isBeforeFirst()) { rs.first(); do { Risco r = new Risco(); r.setId(new Integer( rs.getInt("id") )); r.setDescricao(rs.getString("descricao")); r.setValores(getValoresByRisco(r, a)); riscos.add(r); }while(rs.next()); } return riscos; } private List getValoresByRisco(Risco r, Area a) throws Exception { Statement st = dblocal.createStatement(); String sql = "select valor from "; sql += "(select distinct hs_relatorio_posto_risco.risco_id, "; sql += "case hs_relatorio_posto_risco.valor_qualitativo_id isnull when true then hs_relatorio_posto_risco.probabilidade * hs_relatorio_posto_risco.severidade "; sql += "else hs_relatorio_posto_risco.valor_qualitativo_id "; sql += "end as valor "; sql += "from hs_relatorio_posto "; sql += "inner join hs_relatorio_posto_medida on hs_relatorio_posto_medida.posto_id = hs_relatorio_posto.id "; sql += "inner join hs_relatorio_medida on hs_relatorio_medida.id = hs_relatorio_posto_medida.medida_id "; sql += "inner join hs_relatorio_risco on hs_relatorio_risco.id = hs_relatorio_medida.risco_id "; sql += "inner join hs_relatorio_posto_risco on (hs_relatorio_posto_risco.posto_id = hs_relatorio_posto.id and hs_relatorio_posto_risco.risco_id = hs_relatorio_risco.id) "; sql += "inner join hs_relatorio on hs_relatorio.id = hs_relatorio_risco.relatorio_id "; sql += "inner join hs_relatorio_area on hs_relatorio_area.id = area_id "; sql += "where hs_relatorio_posto_risco.risco_id = " + r.getId() + " and area_id = " + a.getId() + ") subquery "; sql += "order by subquery.valor"; System.out.println("VALORES BY RISCO : " + sql); ResultSet rs = st.executeQuery(sql); List valores = new ArrayList(); if(rs.isBeforeFirst()) { rs.first(); do { Valor v = new Valor(); Object oValor = rs.getObject("valor"); if(oValor == null) { v.setValor(null); } else { v.setValor((Integer) oValor); } //int valor = rs.getInt("valor"); //v.setValor(new Integer(valor)); v.setMedidas(getMedidasByValor(v, r, a)); valores.add(v); }while(rs.next()); } return valores; } private List getMedidasByValor(Valor v, Risco r, Area a) throws Exception { Statement st = dblocal.createStatement(); String sql = "select distinct medida_id, valor, descricao from "; sql += "( select distinct hs_relatorio_posto_medida.medida_id, hs_relatorio_posto_risco.risco_id, hs_relatorio_medida.description as descricao, "; sql += "case when hs_relatorio_posto_risco.valor_qualitativo_id isnull and hs_relatorio_posto_risco.probabilidade isnull and hs_relatorio_posto_risco.severidade isnull then null "; sql += "when hs_relatorio_posto_risco.valor_qualitativo_id isnull then hs_relatorio_posto_risco.probabilidade * hs_relatorio_posto_risco.severidade "; sql += "else hs_relatorio_posto_risco.valor_qualitativo_id "; sql += "end as valor "; sql += "from hs_relatorio_posto "; sql += "inner join hs_relatorio_posto_medida on hs_relatorio_posto_medida.posto_id = hs_relatorio_posto.id "; sql += "inner join hs_relatorio_medida on hs_relatorio_medida.id = hs_relatorio_posto_medida.medida_id "; sql += "inner join hs_relatorio_risco on hs_relatorio_risco.id = hs_relatorio_medida.risco_id "; sql += "inner join hs_relatorio_posto_risco on (hs_relatorio_posto_risco.posto_id = hs_relatorio_posto.id and hs_relatorio_posto_risco.risco_id = hs_relatorio_risco.id) "; sql += "inner join hs_relatorio on hs_relatorio.id = hs_relatorio_risco.relatorio_id "; sql += "inner join hs_relatorio_area on hs_relatorio_area.id = area_id "; sql += "where hs_relatorio_posto_risco.risco_id = " + r.getId() + " and area_id = " + a.getId() + " and hs_relatorio_posto_medida.is_plano_actuacao = true" + ") subquery "; //sql += "where hs_relatorio_posto_risco.risco_id = " + r.getId() + " and area_id = " + a.getId() + ") subquery "; //sql += "where valor = " + v.getValor() + " "; sql += "order by subquery.medida_id, valor"; System.out.println("MEDIDAS BY VALOR SQL : " + sql); ResultSet rs = st.executeQuery(sql); List medidas = new ArrayList(); if(rs.isBeforeFirst()) { rs.first(); do { Medida m = new Medida(); //int valor = rs.getInt("valor"); //m.setValor(new Integer(valor)); m.setId(new Integer( rs.getInt("medida_id") )); m.setDescricao(rs.getString("descricao")); m.setPostos(getPostosByMedidaAndValor(m, v, a)); medidas.add(m); }while(rs.next()); } return medidas; } private List getPostosByMedidaAndValor(Medida m, Valor v, Area a) throws Exception { Statement st = dblocal.createStatement(); String sql = "select subquery.posto_id, valor, descricao from "; sql += "(select hs_relatorio_posto_medida.posto_id, hs_relatorio_posto.description as descricao, "; sql += "case when hs_relatorio_posto_risco.valor_qualitativo_id isnull and hs_relatorio_posto_risco.probabilidade isnull and hs_relatorio_posto_risco.severidade isnull then null "; sql += "when hs_relatorio_posto_risco.valor_qualitativo_id isnull then hs_relatorio_posto_risco.probabilidade * hs_relatorio_posto_risco.severidade "; sql += "else hs_relatorio_posto_risco.valor_qualitativo_id "; sql += "end as valor "; sql += "from hs_relatorio_posto_medida "; sql += "inner join hs_relatorio_posto_risco on hs_relatorio_posto_risco.posto_id = hs_relatorio_posto_medida.posto_id "; sql += "inner join hs_relatorio_posto on hs_relatorio_posto.id = hs_relatorio_posto_medida.posto_id "; sql += "inner join hs_relatorio_area on hs_relatorio_area.id = area_id "; sql += "where medida_id = " + m.getId() + " and area_id = " + a.getId() + ") subquery "; //sql += "where valor = " + v.getValor(); System.out.println("POSTOS BY MEDIDA SQL : " + sql); ResultSet rs = st.executeQuery(sql); List postos = new ArrayList(); if(rs.isBeforeFirst()) { rs.first(); do { PostoTrabalho p = new PostoTrabalho(); p.setId(new Integer( rs.getInt("posto_id") )); p.setDescricao(rs.getString("descricao")); postos.add(p); }while(rs.next()); } return postos; } public String getEmpresaNome(Integer empresa_id) throws Exception { Statement st = dblocal.createStatement(); String sql ="SELECT designacao_social FROM empresas WHERE id = " + empresa_id; ResultSet rslocal = st.executeQuery(sql); rslocal.first(); String nome = rslocal.getString("designacao_social"); return nome; } }