1
0
Prechádzať zdrojové kódy

优化区分度难度计算;修复主观题查询

ting.yin 6 rokov pred
rodič
commit
d304609908

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/query/ReportSubjectQuery.java

@@ -31,6 +31,8 @@ public class ReportSubjectQuery extends BaseQuery<ReportSubject> {
 
     private String paperType;
 
+    private Boolean nullPaperType;
+
     public Integer getExamId() {
         return examId;
     }
@@ -111,4 +113,12 @@ public class ReportSubjectQuery extends BaseQuery<ReportSubject> {
         this.paperType = paperType;
     }
 
+    public Boolean getNullPaperType() {
+        return nullPaperType;
+    }
+
+    public void setNullPaperType(Boolean nullPaperType) {
+        this.nullPaperType = nullPaperType;
+    }
+
 }

+ 9 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectClassGroupServiceImpl.java

@@ -50,7 +50,12 @@ public class ReportSubjectClassGroupServiceImpl extends BaseQueryService<ReportS
         query.setClassName(className);
         query.setObjective(objective);
         query.setGroupNumber(groupNumber);
-        query.setPaperType(paperType);
+        if (objective) {
+            query.setPaperType(paperType);
+            if (paperType == null) {
+                query.setNullPaperType(true);
+            }
+        }
         List<ReportSubjectClassGroup> list = findByQuery(query);
         return list.isEmpty() ? null : list.get(0);
     }
@@ -84,6 +89,9 @@ public class ReportSubjectClassGroupServiceImpl extends BaseQueryService<ReportS
                                 && StringUtils.isNotBlank(query.getPaperType())) {
                             predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
                         }
+                        if (query.getNullPaperType() != null && query.getNullPaperType().booleanValue()) {
+                            predicates.add(cb.isNull(root.get("paperType")));
+                        }
                         return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates
                                 .toArray(new Predicate[predicates.size()]));
                     }

+ 9 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectGroupServiceImpl.java

@@ -67,6 +67,9 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
                         && StringUtils.isNotBlank(query.getPaperType())) {
                     predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
                 }
+                if (query.getNullPaperType() != null && query.getNullPaperType().booleanValue()) {
+                    predicates.add(cb.isNull(root.get("paperType")));
+                }
                 return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
                         .size()]));
             }
@@ -87,7 +90,12 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
         query.setSubjectCode(subjectCode);
         query.setObjective(objective);
         query.setGroupNumber(mainNumber);
-        query.setPaperType(paperType);
+        if(objective){
+            query.setPaperType(paperType);
+            if(paperType==null){
+                query.setNullPaperType(true);
+            }
+        }
         List<ReportSubjectGroup> list = findByQuery(query);
         return list.isEmpty() ? null : list.get(0);
     }

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

@@ -77,6 +77,9 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
                                 && StringUtils.isNotBlank(query.getPaperType())) {
                             predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
                         }
+                        if (query.getNullPaperType() != null && query.getNullPaperType().booleanValue()) {
+                            predicates.add(cb.isNull(root.get("paperType")));
+                        }
                         return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates
                                 .toArray(new Predicate[predicates.size()]));
                     }

+ 0 - 18
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/ReportContext.java

@@ -1,11 +1,9 @@
 package cn.com.qmth.stmms.biz.report.utils;
 
 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 org.apache.commons.lang.StringUtils;
 
@@ -45,8 +43,6 @@ public class ReportContext {
 
     private Map<String, ExamQuestion> groupMap;
 
-    private Map<String, Set<String>> paperTypeMap;
-
     private SasConfigItem sasConfigItem;
 
     public ReportContext(Exam exam) {
@@ -55,7 +51,6 @@ public class ReportContext {
         this.subjectMap = new HashMap<String, ExamSubject>();
         this.questionMap = new HashMap<String, ExamQuestion>();
         this.groupMap = new HashMap<String, ExamQuestion>();
-        this.paperTypeMap = new HashMap<String, Set<String>>();
         // 以下modules创建有顺序
         this.sasConfigItem = SpringContextHolder.getBean(SasConfigItem.class);
         this.modules.add(new SubjectModule(this));
@@ -111,15 +106,6 @@ public class ReportContext {
                 groupMap.put(groupKey, question);
             }
         }
-        Set<String> paparTypeSet = paperTypeMap.get(student.getSubjectCode());
-        if (paparTypeSet == null) {
-            paparTypeSet = new HashSet<String>();
-        }
-        String paperType = StringUtils.trimToNull(student.getPaperType());
-        if (paperType != null) {
-            paparTypeSet.add(paperType);
-        }
-        paperTypeMap.put(student.getSubjectCode(), paparTypeSet);
     }
 
     private String getQuestionKey(ExamQuestion question) {
@@ -204,8 +190,4 @@ public class ReportContext {
     public Double getLowValueConfig() {
         return sasConfigItem.getHighValue();
     }
-
-    public Set<String> getPaperType(String subjectCode) {
-        return paperTypeMap.get(subjectCode);
-    }
 }

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

@@ -1,8 +1,8 @@
 package cn.com.qmth.stmms.biz.report.utils.module;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
@@ -79,10 +79,10 @@ public class SubjectModule implements Module {
                 subject.setPassCount(0);
                 subject.setPassRate(0d);
             }
-            Set<String> paperTypeSet = context.getPaperType(subjectCode);
+            List<String> paperTypes = questionService.getPaperTypeWitnNull(context.getExamId(), subjectCode);
             String paperType = null;
-            if (paperTypeSet != null && paperTypeSet.size() > 0) {
-                paperType = paperTypeSet.iterator().next();
+            if (paperTypes.size() > 0) {
+                paperType = paperTypes.get(0);
             }
             ExamQuestionSearchQuery query = new ExamQuestionSearchQuery();
             query.setExamId(context.getExamId());
@@ -91,9 +91,9 @@ public class SubjectModule implements Module {
             query.setTotalScoreGt(0d);
             long subjectiveCcount = questionService.countByQuery(query);
             query.setObjective(true);
-            if(paperType==null){
+            if (paperType == null) {
                 query.setNullPaperType(true);
-            }else{
+            } else {
                 query.setPaperType(paperType);
             }
             long ObjectiveCcount = questionService.countByQuery(query);

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

@@ -14,6 +14,7 @@ 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.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.report.model.ReportSubject;
 import cn.com.qmth.stmms.biz.report.model.ReportSubjectGroup;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectGroupService;
@@ -57,6 +58,9 @@ public class SubjectQuestionLevelModule implements Module {
 
     @Override
     public void process(ExamStudent student) {
+        if (!student.isUpload() || student.isAbsent()) {
+            return;
+        }
         String key = student.getSubjectCode() + "\t" + StringUtils.trimToEmpty(student.getPaperType());
         List<ExamQuestion> olist = objectiveQuestions.get(key);
         if (olist == null) {
@@ -77,6 +81,7 @@ public class SubjectQuestionLevelModule implements Module {
         beforeSave();
         ReportSubjectService subjectService = SpringContextHolder.getBean(ReportSubjectService.class);
         ReportSubjectGroupService groupService = SpringContextHolder.getBean(ReportSubjectGroupService.class);
+        ExamQuestionService questionService = SpringContextHolder.getBean(ExamQuestionService.class);
         for (String key : this.difficulityLevels.keySet()) {
             String s[] = key.split("\t");
             String subjectCode = s[0];
@@ -128,12 +133,19 @@ public class SubjectQuestionLevelModule implements Module {
                 }
             }
             if (s.length == 1 || s.length == 2) {
+                if (s.length == 2) {
+                    String paperType = StringUtils.trimToNull(s[1]);
+                    List<String> paperTypes = questionService.getPaperTypeWitnNull(context.getExamId(), subjectCode);
+                    if(!contains(paperTypes,paperType)){
+                        return;
+                    }
+                }
                 ReportSubject r = subjectService.findOne(context.getExamId(), subjectCode);
                 r.setDifficulityLevel(difficulityLevel.toString());
                 r.setDiscriminationLevel(discriminationLevel.toString());
                 subjectService.save(r);
             }
-            if (s.length >= 4 ) {
+            if (s.length >= 4) {
                 Boolean objective = Boolean.parseBoolean(s[1]);
                 String paperType = StringUtils.trimToNull(s[2]);
                 Integer mainNumber = Integer.parseInt(s[3]);
@@ -146,6 +158,24 @@ public class SubjectQuestionLevelModule implements Module {
         }
     }
 
+    private boolean contains(List<String> paperTypes, String paperType) {
+        if (paperType == null) {
+            if (paperTypes.contains(paperType)) {
+                // null卷型
+                return true;
+            } else {
+                return false;
+            }
+        }
+        paperTypes.remove(null);
+        for (String s : paperTypes) {
+            if (paperType.equalsIgnoreCase(s)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     protected void beforeSave() {
         // paperType集合
         Map<String, Set<String>> paperTypes = new HashMap<String, Set<String>>();

+ 3 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/report/ReportController.java

@@ -134,7 +134,7 @@ public class ReportController {
             List<ReportSubjectGroup> objectiveGroup = groupService.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(
                     examId, subjectCode, true, paperType);
             List<ReportSubjectGroup> subjectiveGroup = groupService.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(
-                    examId, subjectCode, false, paperType);
+                    examId, subjectCode, false, null);
             subjectGroups.addAll(objectiveGroup);
             subjectGroups.addAll(subjectiveGroup);
             result.accumulate("basic_paper", getPaperJson(reportSubject));
@@ -423,7 +423,7 @@ public class ReportController {
                     .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, true, paperType,
                             reportSubjectClass.getClassName());
             List<ReportSubjectClassGroup> classGroupsListS = classGroupService
-                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, false, paperType,
+                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, false, null,
                             reportSubjectClass.getClassName());
             classGroupsList.addAll(classGroupsListO);
             classGroupsList.addAll(classGroupsListS);
@@ -497,7 +497,7 @@ public class ReportController {
                     .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, true, paperType,
                             reportSubjectClass.getClassName());
             List<ReportSubjectClassGroup> classGroupsListS = classGroupService
-                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, false, paperType,
+                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, false, null,
                             reportSubjectClass.getClassName());
             classGroupsList.addAll(classGroupsListO);
             classGroupsList.addAll(classGroupsListS);