Exemplo n.º 1
0
  @SuppressWarnings("unchecked")
  public List<Map<String, Object>> getEstadistiquesProfessorQuestionarisByAssignatura(
      int codiAssignatura) {
    String strQuery =
        "select qst "
            + ", (" // nota mitja de tots els alumnes de l'assignatura actual
            + "select avg(rq.nota) "
            + "from RespostaQuestionari rq "
            + "where rq.alumne.codi in ("
            + "select alu.codi "
            + "from Alumne alu "
            + "where alu.assignatura.codi = ass.codi"
            + ") "
            + "and rq.questionari.codi = qst.codi"
            + ") "
            + ", ((" // temps de resposta mig de tots els alumnes de l'assignatura actual
            + "select avg(rq.tempsResposta) "
            + "from RespostaQuestionari rq "
            + "where rq.alumne.codi in ("
            + "select alu.codi "
            + "from Alumne alu "
            + "where alu.assignatura.codi = ass.codi"
            + ") "
            + "and rq.questionari.codi = qst.codi"
            + ")/1000) "
            + "from RespostaQuestionari rsq "
            + "inner join rsq.questionari qst "
            + "inner join rsq.assignador.assignatura ass "
            + "where rsq.contestat = :contestat "
            + "and rsq.corregit = :corregit "
            + "and ass.codi = :assignatura "
            + "order by qst";

    Query q = em.createQuery(strQuery);
    q.setParameter("contestat", Boolean.TRUE);
    q.setParameter("corregit", Boolean.TRUE);
    q.setParameter("assignatura", codiAssignatura);
    List<Object[]> llistaArrayObjectes = q.getResultList();

    List<Map<String, Object>> estadistiquesProfessor =
        new ArrayList<Map<String, Object>>(llistaArrayObjectes.size());
    for (Object[] arrayObjectes : llistaArrayObjectes) {
      Questionari questionari = (Questionari) arrayObjectes[0];
      Float notaMitjaAss = parsejaFloat(arrayObjectes[1]);
      Float tempsRespostaMigAss = parsejaFloat(arrayObjectes[2]);

      // El temps de resposta mig i la nota mitja del qüestionari a nivell de tot Egradus
      // el trobarem directament a questionari.getNotaMitja() i questionari.getTempsRespostaMig();

      Map<String, Object> liniaEstadistiquesProfessor = new HashMap<String, Object>();
      liniaEstadistiquesProfessor.put(EstadistiquesDao.QUESTIONARI_CODI, questionari.getCodi());
      liniaEstadistiquesProfessor.put(EstadistiquesDao.QUESTIONARI_NOM, questionari.getNom());
      liniaEstadistiquesProfessor.put(
          EstadistiquesDao.QUESTIONARI_DESCRIPCIO, questionari.getDescripcio());
      liniaEstadistiquesProfessor.put(EstadistiquesDao.NOTA_MITJA_ASSIGNATURA, notaMitjaAss);
      liniaEstadistiquesProfessor.put(
          EstadistiquesDao.NOTA_MITJA_EGRADUS, questionari.getNotaMitja());
      liniaEstadistiquesProfessor.put(
          EstadistiquesDao.TEMPS_RESPOSTA_MIG_ASSIGNATURA, tempsRespostaMigAss);
      liniaEstadistiquesProfessor.put(
          EstadistiquesDao.TEMPS_RESPOSTA_MIG_EGRADUS,
          (Float) (questionari.getTempsRespostaMig().floatValue() / 1000));

      estadistiquesProfessor.add(liniaEstadistiquesProfessor);
    }

    // Agrupam les estadístiques anteriors per Questionari de manera explícita, (ja que JPQL no dóna
    // suport a realitzar funcions d'agrupació sobre subqueries). Per això ens ajudarem d'un mètode
    // privat 'agrupaEstadistiquesPer()'
    Set<String> keysPerAgrupar = new HashSet<String>();
    keysPerAgrupar.add(EstadistiquesDao.NOTA_MITJA_ASSIGNATURA);
    keysPerAgrupar.add(EstadistiquesDao.NOTA_MITJA_EGRADUS);
    keysPerAgrupar.add(EstadistiquesDao.TEMPS_RESPOSTA_MIG_ASSIGNATURA);
    keysPerAgrupar.add(EstadistiquesDao.TEMPS_RESPOSTA_MIG_EGRADUS);
    estadistiquesProfessor =
        agrupaEstadistiquesPer(
            estadistiquesProfessor,
            EstadistiquesDao.QUESTIONARI_CODI,
            EstadistiquesDao.NUM_CONTESTACIONS,
            keysPerAgrupar);

    return estadistiquesProfessor;
  }
Exemplo n.º 2
0
  @SuppressWarnings("unchecked")
  public List<Map<String, Object>> getRespostesQuestionari(Alumne alumne) {
    String strQuery =
        "select qst "
            + ", rsq.codi "
            + ", rsq.nota "
            + ", rsq.tempsResposta "
            + ", rsq.dataContestacioFi "
            + ", rsq.dataCorreccio "
            + ", ("
            + "select avg(rq.nota) "
            + "from RespostaQuestionari rq "
            + "where rq.alumne.codi in ("
            + "select alu.codi "
            + "from Alumne alu "
            + "where alu.assignatura.codi = ("
            + "select alu2.assignatura.codi "
            + "from Alumne alu2 "
            + "where alu2.codi = rsq.alumne.codi"
            + ")"
            + ") "
            + "and rq.questionari.codi = rsq.questionari.codi"
            + ") "
            + ", (("
            + "select avg(rq.tempsResposta) "
            + "from RespostaQuestionari rq "
            + "where rq.alumne.codi in ("
            + "select alu.codi "
            + "from Alumne alu "
            + "where alu.assignatura.codi = ("
            + "select alu2.assignatura.codi "
            + "from Alumne alu2 "
            + "where alu2.codi = rsq.alumne.codi"
            + ")"
            + ") "
            + "and rq.questionari.codi = rsq.questionari.codi"
            + ")/1000) "
            + "from RespostaQuestionari rsq "
            + "inner join rsq.questionari qst "
            + "where rsq.contestat = :contestat "
            + "and rsq.corregit = :corregit "
            + "and rsq.anonim = :anonim "
            + "and rsq.alumne = :alumne "
            + "order by rsq.dataCorreccio";

    Query q = em.createQuery(strQuery);
    q.setParameter("contestat", Boolean.TRUE);
    q.setParameter("corregit", Boolean.TRUE);
    q.setParameter("anonim", Boolean.FALSE);
    q.setParameter("alumne", alumne);

    List<Object[]> llistaArrayObjectes = q.getResultList();

    List<Map<String, Object>> estadistiquesAlumne =
        new ArrayList<Map<String, Object>>(llistaArrayObjectes.size());
    for (Object[] arrayObjectes : llistaArrayObjectes) {
      Questionari questionari = (Questionari) arrayObjectes[0];
      Integer codiRq = (Integer) arrayObjectes[1];
      Float nota = parsejaFloat(arrayObjectes[2]);
      Float tempsResposta = (Float) (parsejaLong(arrayObjectes[3]).floatValue() / 1000);
      Date dataContestacioFi = (Date) arrayObjectes[4];
      Date dataCorreccio = (Date) arrayObjectes[5];
      Float notaMitjaAss = parsejaFloat(arrayObjectes[6]);
      Float tempsRespostaMigAss = parsejaFloat(arrayObjectes[7]);

      Map<String, Object> liniaEstadistiquesAlumne = new HashMap<String, Object>();
      liniaEstadistiquesAlumne.put(EstadistiquesDao.QUESTIONARI_CODI_RQ, codiRq);
      liniaEstadistiquesAlumne.put(EstadistiquesDao.QUESTIONARI_CODI, questionari.getCodi());
      liniaEstadistiquesAlumne.put(EstadistiquesDao.QUESTIONARI_NOM, questionari.getNom());
      liniaEstadistiquesAlumne.put(
          EstadistiquesDao.QUESTIONARI_DESCRIPCIO, questionari.getDescripcio());
      liniaEstadistiquesAlumne.put(EstadistiquesDao.NOTA, nota);
      liniaEstadistiquesAlumne.put(EstadistiquesDao.NOTA_MITJA_ASSIGNATURA, notaMitjaAss);
      liniaEstadistiquesAlumne.put(EstadistiquesDao.NOTA_MITJA_EGRADUS, questionari.getNotaMitja());
      liniaEstadistiquesAlumne.put(EstadistiquesDao.TEMPS_RESPOSTA, tempsResposta);
      liniaEstadistiquesAlumne.put(
          EstadistiquesDao.TEMPS_RESPOSTA_MIG_ASSIGNATURA, tempsRespostaMigAss);
      liniaEstadistiquesAlumne.put(
          EstadistiquesDao.TEMPS_RESPOSTA_MIG_EGRADUS,
          (Float) (questionari.getTempsRespostaMig().floatValue() / 1000));
      liniaEstadistiquesAlumne.put(EstadistiquesDao.DATA_CONTESTACIO_FI, dataContestacioFi);
      liniaEstadistiquesAlumne.put(EstadistiquesDao.DATA_CORRECCIO, dataCorreccio);

      estadistiquesAlumne.add(liniaEstadistiquesAlumne);
    }

    return estadistiquesAlumne;
  }