Przeglądaj źródła

Merge branch 'dev_xuwenjin' of http://git.qmth.com.cn/luoshi/stmms-ft into dev_xuwenjin

luoshi 6 lat temu
rodzic
commit
d5c357b1af

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubject.java

@@ -104,7 +104,7 @@ public class ReportSubject implements Serializable {
     /**
      * 实考人数
      */
-    @ExcelField(title = "实考代码", align = 2, sort = 110)
+    @ExcelField(title = "实考人数", align = 2, sort = 110)
     @Column(name = "reality_count")
     private Integer realityCount;
 

+ 15 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubjectGroup.java

@@ -63,7 +63,7 @@ public class ReportSubjectGroup implements Serializable {
     @ExcelField(title = "大题号", align = 2, sort = 40)
     @Column(name = "group_number")
     private Integer groupNumber;
-    
+
     /**
      * 最高分
      */
@@ -127,6 +127,12 @@ public class ReportSubjectGroup implements Serializable {
     @Column(name = "full_count")
     private Integer fullCount;
 
+    /**
+     * 是否客观
+     */
+    @Column(name = "objective")
+    private Boolean objective;
+
     public Integer getId() {
         return id;
     }
@@ -239,14 +245,20 @@ public class ReportSubjectGroup implements Serializable {
         this.scoreRate = scoreRate;
     }
 
-    
     public Integer getGroupNumber() {
         return groupNumber;
     }
 
-    
     public void setGroupNumber(Integer groupNumber) {
         this.groupNumber = groupNumber;
     }
 
+    public Boolean getObjective() {
+        return objective;
+    }
+
+    public void setObjective(Boolean objective) {
+        this.objective = objective;
+    }
+
 }

+ 36 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubjectQuestion.java

@@ -57,45 +57,59 @@ public class ReportSubjectQuestion implements Serializable {
     @Column(name = "question_Name", length = 128)
     private String questionName;
 
+    /**
+     * 大题号
+     */
+    @ExcelField(title = "大题号", align = 2, sort = 40)
+    @Column(name = "main_number", nullable = false)
+    private Integer mainNumber;
+
+    /**
+     * 小题号
+     */
+    @ExcelField(title = "小题号", align = 2, sort = 50)
+    @Column(name = "sub_number", nullable = false)
+    private Integer subNumber;
+
     /**
      * 总分
      */
-    @ExcelField(title = "总分", align = 2, sort = 40)
+    @ExcelField(title = "总分", align = 2, sort = 60)
     @Column(name = "total_score")
     private Double totalScore;
 
     /**
      * 平均分
      */
-    @ExcelField(title = "平均分", align = 2, sort = 50)
+    @ExcelField(title = "平均分", align = 2, sort = 70)
     @Column(name = "avg_score")
     private Double avgScore;
 
     /**
      * 标准差
      */
-    @ExcelField(title = "标准差", align = 2, sort = 60)
+    @ExcelField(title = "标准差", align = 2, sort = 80)
     @Column(name = "sd")
     private Double sd;
 
     /**
      * 得分率
      */
-    @ExcelField(title = "得分率", align = 2, sort = 70)
+    @ExcelField(title = "得分率", align = 2, sort = 90)
     @Column(name = "score_rate")
     private Double scoreRate;
 
     /**
      * 满分率
      */
-    @ExcelField(title = "满分率", align = 2, sort = 80)
+    @ExcelField(title = "满分率", align = 2, sort = 100)
     @Column(name = "full_score_rate")
     private Double fullScoreRate;
 
     /**
      * 卷型
      */
-    @ExcelField(title = "卷型", align = 2, sort = 80)
+    @ExcelField(title = "卷型", align = 2, sort = 110)
     @Column(name = "paper_type", nullable = true, length = 32)
     private String paperType;
 
@@ -201,4 +215,20 @@ public class ReportSubjectQuestion implements Serializable {
         this.paperType = paperType;
     }
 
+    public Integer getMainNumber() {
+        return mainNumber;
+    }
+
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+
+    public Integer getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(Integer subNumber) {
+        this.subNumber = subNumber;
+    }
+
 }

+ 71 - 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,83 @@ 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());
+                    reportSubjectQuestion.setMainNumber(question.getMainNumber());
+                    reportSubjectQuestion.setSubNumber(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>