Browse Source

修复小题难度/区分度等级计算模块,小题重复计数的bug

luoshi 6 years ago
parent
commit
c89585de7f

+ 7 - 7
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectClassQuestionLevelModule.java

@@ -7,8 +7,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringUtils;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
@@ -23,6 +21,7 @@ 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.report.utils.unit.QuestionCounter;
 import cn.com.qmth.stmms.biz.utils.SpringContextHolder;
+import net.sf.json.JSONObject;
 
 /**
  * 按科目+班级维度统计小题难度等级与区分度等级
@@ -52,11 +51,11 @@ public class SubjectClassQuestionLevelModule extends SubjectQuestionLevelModule
     }
 
     @Override
-    protected void beforeSave() {
-        for (Entry<String, List<ExamQuestion>> entry : questions.entrySet()) {
+    protected void beforeSave(Map<String, List<ExamQuestion>> questionMap) {
+        for (Entry<String, List<ExamQuestion>> entry : questionMap.entrySet()) {
             String[] s = entry.getKey().split("\t");
             Set<String> classSet = classMap.get(s[0]);
-            if (null==classSet || classSet.isEmpty()) {
+            if (null == classSet || classSet.isEmpty()) {
                 continue;
             }
             for (String className : classSet) {
@@ -143,7 +142,7 @@ public class SubjectClassQuestionLevelModule extends SubjectQuestionLevelModule
             }
             if (s.length == 3) {
                 String className = s[2];
-                ReportSubjectClass r = classService.findOne(context.getExamId(),subjectCode,className);
+                ReportSubjectClass r = classService.findOne(context.getExamId(), subjectCode, className);
                 r.setDifficulityLevel(difficulityLevel.toString());
                 r.setDiscriminationLevel(discriminationLevel.toString());
                 classService.save(r);
@@ -152,7 +151,8 @@ public class SubjectClassQuestionLevelModule extends SubjectQuestionLevelModule
                 String className = s[1];
                 Boolean objective = Boolean.parseBoolean(s[2]);
                 Integer mainNumber = Integer.parseInt(s[4]);
-                ReportSubjectClassGroup r = groupService.findOne(context.getExamId(),subjectCode,className,objective,mainNumber);
+                ReportSubjectClassGroup r = groupService.findOne(context.getExamId(), subjectCode, className, objective,
+                        mainNumber);
                 r.setDifficulityLevel(difficulityLevel.toString());
                 r.setDiscriminationLevel(discriminationLevel.toString());
                 groupService.save(r);

+ 27 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectQuestionLevelModule.java

@@ -6,8 +6,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringUtils;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
@@ -23,6 +21,7 @@ import cn.com.qmth.stmms.biz.report.utils.unit.BaseCalculatorUnit;
 import cn.com.qmth.stmms.biz.report.utils.unit.LevelRange;
 import cn.com.qmth.stmms.biz.report.utils.unit.QuestionCounter;
 import cn.com.qmth.stmms.biz.utils.SpringContextHolder;
+import net.sf.json.JSONObject;
 
 /**
  * 按科目统计全样本小题难度等级与区分度等级
@@ -36,7 +35,9 @@ public class SubjectQuestionLevelModule implements Module {
 
     protected QuestionCalculatorProvider provider;
 
-    protected Map<String, List<ExamQuestion>> questions;
+    protected Map<String, List<ExamQuestion>> objectiveQuestions;
+
+    protected Map<String, List<ExamQuestion>> subjectiveQuestions;
 
     protected Map<String, QuestionCounter> difficulityLevels, discriminationLevels;
 
@@ -45,7 +46,8 @@ public class SubjectQuestionLevelModule implements Module {
     public SubjectQuestionLevelModule(ReportContext context, QuestionCalculatorProvider provider) {
         this.context = context;
         this.provider = provider;
-        this.questions = new HashMap<String, List<ExamQuestion>>();
+        this.objectiveQuestions = new HashMap<String, List<ExamQuestion>>();
+        this.subjectiveQuestions = new HashMap<String, List<ExamQuestion>>();
         this.difficulityLevels = new HashMap<String, QuestionCounter>();
         this.discriminationLevels = new HashMap<String, QuestionCounter>();
         this.difficulityLevelConfig = context.getDifficulityLevelConfig();
@@ -54,13 +56,20 @@ public class SubjectQuestionLevelModule implements Module {
 
     @Override
     public void process(ExamStudent student) {
+        // 添加客观题列表
         String key = student.getSubjectCode() + "\t" + StringUtils.trimToEmpty(student.getPaperType());
-        List<ExamQuestion> list = questions.get(key);
-        if (list == null) {
-            list = new ArrayList<ExamQuestion>();
-            questions.put(key, list);
-            list.addAll(student.getObjectiveQuestionList());
-            list.addAll(student.getSubjectiveQuestionList());
+        List<ExamQuestion> olist = objectiveQuestions.get(key);
+        if (olist == null) {
+            olist = new ArrayList<ExamQuestion>();
+            objectiveQuestions.put(key, olist);
+            olist.addAll(student.getObjectiveQuestionList());
+        }
+        // 添加主观题列表
+        List<ExamQuestion> slist = subjectiveQuestions.get(student.getSubjectCode());
+        if (slist == null) {
+            slist = new ArrayList<ExamQuestion>();
+            subjectiveQuestions.put(student.getSubjectCode(), slist);
+            slist.addAll(student.getSubjectiveQuestionList());
         }
     }
 
@@ -137,7 +146,14 @@ public class SubjectQuestionLevelModule implements Module {
     }
 
     protected void beforeSave() {
-        for (Entry<String, List<ExamQuestion>> entry : questions.entrySet()) {
+        // 客观题预处理
+        beforeSave(objectiveQuestions);
+        // 主观题预处理
+        beforeSave(subjectiveQuestions);
+    }
+
+    protected void beforeSave(Map<String, List<ExamQuestion>> questionMap) {
+        for (Entry<String, List<ExamQuestion>> entry : questionMap.entrySet()) {
             String key = entry.getKey();
             for (ExamQuestion question : entry.getValue()) {
                 if (question.getTotalScore() == null || question.getTotalScore() == 0) {