ting.yin 6 anos atrás
pai
commit
3418bfef98

+ 69 - 71
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectQuestionServiceImpl.java

@@ -1,7 +1,11 @@
 package cn.com.qmth.stmms.biz.report.service.impl;
 
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -26,6 +30,7 @@ import cn.com.qmth.stmms.biz.report.model.ReportSubjectQuestion;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectQuestionService;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
 
 /**
  * 客、主观题分析 service 实现
@@ -82,88 +87,81 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
 
     @Override
     public void saveReportSubjectQuestionData(Integer examId, String subjectCode, Boolean objective) {
+        Map<String,List<ExamQuestion>> map = new HashMap<String, List<ExamQuestion>>();
         ExamSubject subject = examSubjectDao.findByExamIdAndCode(examId, subjectCode);
-        List<ExamQuestion> examQuestionObjectiveList = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, objective);
+        if(objective){
+            List<ExamQuestion> examQuestionList = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, objective);
+            Set<String> paperTypeSet = new HashSet<String>();
+            for (ExamQuestion examQuestion : examQuestionList) {
+                paperTypeSet.add(examQuestion.getPaperType());
+            }
+            for (String paperType : paperTypeSet) {
+                List<ExamQuestion> oList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId, subjectCode, objective, paperType);
+                map.put(subjectCode+"_"+paperType, oList);
+            }
+        }else{
+            List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, objective);
+            map.put(subjectCode, sList);
+        }
 
         List<ExamStudent> examStudentList = examStudentDao.findByExamIdAndSubjectCodeAndUploadTimeNotNullAndAbsent(examId, subjectCode, false);
 
         Integer studentCount = examStudentList.size();
-
-        for (int i = 0; i < examQuestionObjectiveList.size(); i++) {
-            ExamQuestion question = examQuestionObjectiveList.get(i);
-            if (question.getTotalScore().doubleValue() > 0) {
-                ReportSubjectQuestion reportSubjectQuestion = new ReportSubjectQuestion();
-                //得分人数
-                Integer scoreCount = 0;
-                //满分人数
-                Integer fullScoreCount = 0;
-                //考生题目得分汇总
-                Double sumScore = 0d;
-                //题目总分汇总
-                //Double questionSumScore = DoubleUtil.mul(question.getTotalScore(), studentCount);
-                //方差
-                Double variance = 0d;
-
-                for (int j = 0; j < studentCount; j++) {
-                    ExamStudent student = examStudentList.get(j);
-                    if(question.getPaperType()!=null && !question.getPaperType().equalsIgnoreCase(student.getPaperType())){
-                        continue;
-                    }
-                    Double score = 0d;
-                    if (objective) {
-                        if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
-                            //客观题
-                            String[] objectiveAnswers = student.getObjectiveScoreList().split(";");
-                            score = Double.parseDouble(objectiveAnswers[i].split(":")[1]);
+        for(String key:map.keySet()){
+            List<ExamQuestion> examQuestionList = map.get(key);
+            for (int i = 0; i < examQuestionList.size(); i++) {
+                ExamQuestion question = examQuestionList.get(i);
+                if (question.getTotalScore().doubleValue() > 0) {
+                    ReportSubjectQuestion reportSubjectQuestion = new ReportSubjectQuestion();
+                    //得分人数
+                    Integer scoreCount = 0;
+                    //满分人数
+                    Integer fullScoreCount = 0;
+                    //考生题目得分汇总
+                    Double sumScore = 0d;
+                    //题目总分汇总
+                    //Double questionSumScore = DoubleUtil.mul(question.getTotalScore(), studentCount);
+                    //方差
+                    Double variance = 0d;
+                    
+                    for (int j = 0; j < studentCount; j++) {
+                        ExamStudent student = examStudentList.get(j);
+                        if(question.getPaperType()!=null && !question.getPaperType().equalsIgnoreCase(student.getPaperType())){
+                            continue;
                         }
-                    } else {
-                        if (StringUtils.isNotBlank(student.getSubjectiveScoreList())) {
-                            //主观题
-                            String[] subjectiveAnswers = student.getSubjectiveScoreList().split(";");
-                            score = Double.parseDouble(subjectiveAnswers[i]);
+                        List<ScoreItem> scoreItems = student.getScoreList(objective);
+                        double score = scoreItems.get(i).getScore();
+                        sumScore = DoubleUtil.sum(sumScore, score);
+                        if (score > 0) {
+                            scoreCount++;
                         }
-                    }
-                    sumScore = DoubleUtil.sum(sumScore, score);
-                    if (score > 0) {
-                        scoreCount++;
-                    }
-                    if (score.doubleValue() == question.getTotalScore().doubleValue()) {
-                        fullScoreCount++;
-                    }
-                }
-                Double avgScore = DoubleUtil.div(sumScore, examStudentList.size(), 2);
-                for (int j = 0; j < studentCount; j++) {
-                    ExamStudent student = examStudentList.get(j);
-                    if(question.getPaperType()!=null && !question.getPaperType().equalsIgnoreCase(student.getPaperType())){
-                        continue;
-                    }
-                    Double score = 0d;
-                    if (objective) {
-                        if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
-                            //客观题
-                            String[] objectiveAnswers = student.getObjectiveScoreList().split(";");
-                            score = Double.parseDouble(objectiveAnswers[i].split(":")[1]);
+                        if (score == question.getTotalScore().doubleValue()) {
+                            fullScoreCount++;
                         }
-                    } else {
-                        if (StringUtils.isNotBlank(student.getSubjectiveScoreList())) {
-                            //主观题
-                            String[] subjectiveAnswers = student.getSubjectiveScoreList().split(";");
-                            score = Double.parseDouble(subjectiveAnswers[i]);
+                    }
+                    Double avgScore = DoubleUtil.div(sumScore, examStudentList.size(), 2);
+                    for (int j = 0; j < studentCount; j++) {
+                        ExamStudent student = examStudentList.get(j);
+                        if(question.getPaperType()!=null && !question.getPaperType().equalsIgnoreCase(student.getPaperType())){
+                            continue;
                         }
+                        List<ScoreItem> scoreItems = student.getScoreList(objective);
+                        double score = scoreItems.get(i).getScore();
+                        variance = DoubleUtil.sum(variance, DoubleUtil.mul(DoubleUtil.sub(score, avgScore), DoubleUtil.sub(score, avgScore)));
                     }
-                    variance = DoubleUtil.sum(variance, DoubleUtil.mul(DoubleUtil.sub(score, avgScore), DoubleUtil.sub(score, avgScore)));
+                    reportSubjectQuestion.setExamId(examId);
+                    reportSubjectQuestion.setSubjectCode(subjectCode);
+                    reportSubjectQuestion.setSubjectName(subject.getName());
+                    reportSubjectQuestion.setObjective(objective);
+                    reportSubjectQuestion.setQuestionName(question.getMainTitle() + "_" + question.getMainNumber()+ "_"+question.getSubNumber());
+                    reportSubjectQuestion.setTotalScore(question.getTotalScore());
+                    reportSubjectQuestion.setAvgScore(avgScore);
+                    reportSubjectQuestion.setScoreRate(DoubleUtil.div(avgScore, question.getTotalScore(), 2));
+                    reportSubjectQuestion.setSd(studentCount==0?0:DoubleUtil.format(Math.sqrt(variance / studentCount), "0.00"));
+                    reportSubjectQuestion.setFullScoreRate(DoubleUtil.div(fullScoreCount, studentCount, 2));
+                    reportSubjectQuestion.setPaperType(question.getPaperType());
+                    reportSubjectQuestionDao.save(reportSubjectQuestion);
                 }
-                reportSubjectQuestion.setExamId(examId);
-                reportSubjectQuestion.setSubjectCode(subjectCode);
-                reportSubjectQuestion.setSubjectName(subject.getName());
-                reportSubjectQuestion.setObjective(objective);
-                reportSubjectQuestion.setQuestionName(question.getMainTitle() + "_" + (i + 1));
-                reportSubjectQuestion.setTotalScore(question.getTotalScore());
-                reportSubjectQuestion.setAvgScore(avgScore);
-                reportSubjectQuestion.setScoreRate(DoubleUtil.div(avgScore, question.getTotalScore(), 2));
-                reportSubjectQuestion.setSd(studentCount==0?0:DoubleUtil.format(Math.sqrt(variance / studentCount), "0.00"));
-                reportSubjectQuestion.setFullScoreRate(DoubleUtil.div(fullScoreCount, studentCount, 2));
-                reportSubjectQuestionDao.save(reportSubjectQuestion);
             }
         }
 

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectGroup.jsp

@@ -66,7 +66,7 @@
     <tbody>
     <c:forEach items="${list}" var="group">
         <tr>
-            <td>${group.groupName}</td>
+            <td>${group.groupName}_${group.groupNumber }</td>
             <td>${group.totalScore}</td>
             <td>${group.maxScore}</td>
             <td>${group.minScore}</td>

+ 6 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectQuestion.jsp

@@ -53,6 +53,9 @@
     <thead>
     <tr>
         <th>题目名称</th>
+        <c:if test="${query.objective}">
+        <th>试卷类型</th>
+        </c:if>
         <th>单题分数</th>
         <th>单题平均分</th>
         <th>单题标准差</th>
@@ -64,6 +67,9 @@
     <c:forEach items="${list}" var="question">
         <tr>
             <td>${question.questionName}</td>
+            <c:if test="${query.objective}">
+            <td>${question.paperType}</td>
+            </c:if>
             <td>${question.totalScore}</td>
             <td>${question.avgScore}</td>
             <td>${question.sd}</td>