Ver código fonte

增加按小题和大题统计的逻辑代码

luoshi 6 anos atrás
pai
commit
c729af800d

+ 46 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/QuestionGroup.java

@@ -0,0 +1,46 @@
+package cn.com.qmth.stmms.biz.report.utils;
+
+public class QuestionGroup {
+
+    private int number;
+
+    private double totalScore;
+
+    private double fullScore;
+
+    public QuestionGroup(int number) {
+        this.number = number;
+    }
+
+    public void incrTotalScore(double score) {
+        totalScore += score;
+    }
+
+    public void incrFullScore(double score) {
+        fullScore += score;
+    }
+
+    public int getNumber() {
+        return number;
+    }
+
+    public void setNumber(int number) {
+        this.number = number;
+    }
+
+    public double getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(double totalScore) {
+        this.totalScore = totalScore;
+    }
+
+    public double getFullScore() {
+        return fullScore;
+    }
+
+    public void setFullScore(double fullScore) {
+        this.fullScore = fullScore;
+    }
+}

+ 35 - 8
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectGroupModule.java

@@ -1,13 +1,18 @@
 package cn.com.qmth.stmms.biz.report.utils.module;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectQuestionService;
 import cn.com.qmth.stmms.biz.report.utils.Module;
+import cn.com.qmth.stmms.biz.report.utils.QuestionGroup;
 import cn.com.qmth.stmms.biz.report.utils.ReportContext;
 import cn.com.qmth.stmms.biz.report.utils.unit.BaseCalculatorUnit;
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.biz.utils.SpringContextHolder;
 
 public class SubjectGroupModule implements Module {
@@ -16,19 +21,41 @@ public class SubjectGroupModule implements Module {
 
     private ReportContext context;
 
-    public SubjectGroupModule(ReportContext context) {
-        this.units = new HashMap<String, BaseCalculatorUnit>();
-        this.context = context;
-    }
-
     public void process(ExamStudent student) {
         if (student.isUpload() && !student.isAbsent() && !student.isBreach() && student.getSubject() != null) {
-
+            double totalScore = student.getTotalScore();
+            // 遍历客观题
+            process(student.getScoreList(true), student.getObjectiveQuestionList(), student.getSubjectCode(),
+                    totalScore, true);
+            // 遍历主观题
+            process(student.getScoreList(false), student.getObjectiveQuestionList(), student.getSubjectCode(),
+                    totalScore, false);
         }
     }
 
-    public String getKey(ExamStudent student) {
-        return student.getSubjectCode();
+    private void process(List<ScoreItem> scoreList, List<ExamQuestion> questionList, String subjectCode,
+            double totalScore, boolean objective) {
+        if (scoreList == null || questionList == null) {
+            return;
+        }
+        Map<Integer, QuestionGroup> map = new HashMap<Integer, QuestionGroup>();
+        int scoreCount = scoreList.size();
+        for (int i = 0; i < questionList.size(); i++) {
+            ExamQuestion question = questionList.get(i);
+            ScoreItem item = scoreCount > i ? scoreList.get(i) : null;
+            QuestionGroup group = map.get(question.getMainNumber());
+            if (group == null) {
+                group = new QuestionGroup(question.getMainNumber());
+                map.put(question.getMainNumber(), group);
+            }
+            group.incrTotalScore(item != null ? item.getScore() : 0);
+            group.incrFullScore(question.getTotalScore());
+        }
+        for (Entry<Integer, QuestionGroup> entry : map.entrySet()) {
+            QuestionGroup group = entry.getValue();
+            findUnit(subjectCode + "\t" + objective + "\t" + entry.getKey()).process(group.getTotalScore(),
+                    group.getFullScore(), totalScore);
+        }
     }
 
     public void save() {

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectModule.java

@@ -31,7 +31,7 @@ public class SubjectModule implements Module {
         if (subject != null) {
             String key = getKey(student);
             if (student.isUpload() && !student.isAbsent() && !student.isBreach()) {
-                findUnit(key).processScore(student.getTotalScore(), subject.getTotalScore(), student.getTotalScore());
+                findUnit(key).process(student.getTotalScore(), subject.getTotalScore(), student.getTotalScore());
             }
             findCounter(key).process(student);
         }

+ 15 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectQuestionModule.java

@@ -4,6 +4,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
+
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectQuestionService;
@@ -26,24 +28,31 @@ public class SubjectQuestionModule implements Module {
 
     public void process(ExamStudent student) {
         if (student.isUpload() && !student.isAbsent() && !student.isBreach() && student.getSubject() != null) {
+            double totalScore = student.getTotalScore();
             // 遍历客观题
-            process(student.getScoreList(true), student.getObjectiveQuestionList(), true);
+            process(student.getScoreList(true), student.getObjectiveQuestionList(), totalScore);
             // 遍历主观题
-            process(student.getScoreList(false), student.getObjectiveQuestionList(), false);
+            process(student.getScoreList(false), student.getObjectiveQuestionList(), totalScore);
         }
     }
 
-    private void process(List<ScoreItem> scoreList, List<ExamQuestion> questionList, boolean objective) {
+    private void process(List<ScoreItem> scoreList, List<ExamQuestion> questionList, double totalScore) {
         if (scoreList == null || questionList == null) {
             return;
         }
+        int scoreCount = scoreList.size();
         for (int i = 0; i < questionList.size(); i++) {
-
+            ExamQuestion question = questionList.get(i);
+            ScoreItem item = scoreCount > i ? scoreList.get(i) : null;
+            double score = item != null ? item.getScore() : 0;
+            findUnit(getKey(question)).process(score, question.getTotalScore(), totalScore);
         }
     }
 
-    public String getKey(ExamStudent student) {
-        return student.getSubjectCode();
+    public String getKey(ExamQuestion question) {
+        return question.getSubjectCode() + "\t" + question.isObjective() + "\t"
+                + StringUtils.trimToEmpty(question.getPaperType()) + "\t" + question.getMainNumber() + "\t"
+                + question.getSubNumber();
     }
 
     public void save() {

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/unit/BaseCalculatorUnit.java

@@ -48,7 +48,7 @@ public class BaseCalculatorUnit {
         minScore = Double.MAX_VALUE;
     }
 
-    public void processScore(Double score, Double fullScore, Double totalScore) {
+    public void process(Double score, Double fullScore, Double totalScore) {
         if (score == null || fullScore == null || totalScore == null) {
             return;
         }