소스 검색

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

zhangjie 6 년 전
부모
커밋
285d1d23d3

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

@@ -141,9 +141,9 @@ public class ReportSubject implements Serializable {
     private String discriminationLevel;
 
     /**
-     * 高低分段统计
+     * 一分一段分段统计
      */
-    @Column(name = "score_range", nullable = true)
+    @Column(name = "score_range", nullable = true, columnDefinition = "text")
     private String scoreRange;
 
     /**

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/model/ReportSubjectClass.java

@@ -143,9 +143,9 @@ public class ReportSubjectClass implements Serializable {
     private String discriminationLevel;
 
     /**
-     * 高低分段统计
+     * 一分一段分段统计
      */
-    @Column(name = "score_range", nullable = true)
+    @Column(name = "score_range", nullable = true,columnDefinition = "text")
     private String scoreRange;
 
     /**

+ 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 - 3
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);
     }
@@ -80,9 +85,10 @@ public class ReportSubjectClassGroupServiceImpl extends BaseQueryService<ReportS
                         if (query.getObjective() != null) {
                             predicates.add(cb.equal(root.get("objective"), query.getObjective()));
                         }
-                        if (query.getObjective() != null && query.getObjective()
-                                && StringUtils.isNotBlank(query.getPaperType())) {
+                        if (StringUtils.isNotBlank(query.getPaperType())) {
                             predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
+                        } else 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 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectGroupServiceImpl.java

@@ -63,9 +63,10 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
                 if (query.getGroupNumber() > 0) {
                     predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
                 }
-                if (query.getObjective() != null && query.getObjective()
-                        && StringUtils.isNotBlank(query.getPaperType())) {
+                if (StringUtils.isNotBlank(query.getPaperType())) {
                     predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
+                } else 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 +88,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);

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

@@ -44,6 +44,8 @@ public class SubjectQuestionLevelModule implements Module {
 
     protected LevelRange[] difficulityLevelConfig, discriminationLevelConfig;
 
+    protected Map<String, Set<String>> paperTypes;
+
     public SubjectQuestionLevelModule(ReportContext context, QuestionCalculatorProvider provider) {
         this.context = context;
         this.provider = provider;
@@ -53,10 +55,14 @@ public class SubjectQuestionLevelModule implements Module {
         this.discriminationLevels = new HashMap<String, QuestionCounter>();
         this.difficulityLevelConfig = context.getDifficulityLevelConfig();
         this.discriminationLevelConfig = context.getDiscriminationLevelConfig();
+        this.paperTypes = new HashMap<String, Set<String>>();
     }
 
     @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,10 +83,11 @@ public class SubjectQuestionLevelModule implements Module {
         beforeSave();
         ReportSubjectService subjectService = SpringContextHolder.getBean(ReportSubjectService.class);
         ReportSubjectGroupService groupService = SpringContextHolder.getBean(ReportSubjectGroupService.class);
-        for (String key : this.difficulityLevels.keySet()) {
+        for (Entry<String, QuestionCounter> entry : difficulityLevels.entrySet()) {
+            String key = entry.getKey();
             String s[] = key.split("\t");
             String subjectCode = s[0];
-            QuestionCounter difficulityCounter = difficulityLevels.get(key);
+            QuestionCounter difficulityCounter = entry.getValue();
             QuestionCounter discriminationCounter = discriminationLevels.get(key);
             JSONObject difficulityLevel = new JSONObject();
             for (int i = 0; i < difficulityCounter.levelCount; i++) {
@@ -128,12 +135,19 @@ public class SubjectQuestionLevelModule implements Module {
                 }
             }
             if (s.length == 1 || s.length == 2) {
+                if (s.length == 2) {
+                    String paperType = StringUtils.trimToNull(s[1]);
+                    Set<String> paperTypes = this.paperTypes.get(subjectCode);
+                    if (paperType != null && !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,9 +160,17 @@ public class SubjectQuestionLevelModule implements Module {
         }
     }
 
+    private boolean contains(Set<String> paperTypes, String paperType) {
+        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>>();
+
         // 遍历客观题
         for (Entry<String, List<ExamQuestion>> entry : objectiveQuestions.entrySet()) {
             String[] keys = entry.getKey().split("\t");

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

@@ -1,10 +1,12 @@
 package cn.com.qmth.stmms.biz.report.utils.module;
 
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 
 import net.sf.json.JSONObject;
 
@@ -106,9 +108,16 @@ public class SubjectQuestionOptionModule implements Module {
         for (String subjectCode : optionMap.keySet()) {
             ReportSubject r = subjectService.findOne(this.context.getExamId(), subjectCode);
             Set<String> options = optionMap.get(subjectCode);
-            
             options.remove(ANSWER);
-            r.setOptions(StringUtils.join(options, ANSWER_SPLIT));
+            Set<String> sortSet = new TreeSet<String>(new Comparator<String>() {
+
+                @Override
+                public int compare(String o1, String o2) {
+                    return o1.compareTo(o2);
+                }
+            });
+            sortSet.addAll(options);
+            r.setOptions(StringUtils.join(sortSet, ANSWER_SPLIT));
             subjectService.save(r);
         }
     }

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

@@ -29,7 +29,10 @@ public class OptionCounter {
             }
         } else {
             // 单一选项
-            incr(answer);
+            // 单选中选项个数为多个不计算
+            if (answer.length() == 1) {
+                incr(answer);
+            }
         }
     }
 

+ 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);

+ 12 - 16
stmms-web/src/main/webapp/static/mark-new/css/style.css

@@ -806,17 +806,12 @@ i,em {
 .center-content .header {
 	background: #5d6d7d;
 	color: #fff;
-	height: 21px;
-	padding: 10px;
+	padding: 0 10px;
 }
 
 .center-content .header .text {
-	color: #fff;
-	font-size: 16px;
-	font-weight: bold;
-	text-overflow: ellipsis;
-	white-space: nowrap;
 	float: left;
+    padding: 10px 0;
 }
 
 .center-content .header .text i {
@@ -834,12 +829,12 @@ i,em {
 }
 
 .center-content .header .btn {
-	background: #cbd0d3;
-	padding: 3px 6px 3px 6px;
-	margin: -3px 2px 2px 1px;
-	color: #4b555e;
-	font-weight: bold;
-	float: left;
+    background: #cbd0d3;
+    padding: 3px 6px 3px 6px;
+    margin: 0px 3px 0 0;   
+    color: #4b555e;
+    font-weight: bold;
+    float: left;
 }
 /*.center-content .header .fraction{ font-size:36px; font-family:Arial, Helvetica, sans-serif; font-weight:bold; color:#008f58; text-align:right; float:right;}
 */
@@ -849,9 +844,10 @@ i,em {
 }
 
 .center-content .tips {
-	word-wrap: break-word;
-	text-align: left;
-	float: right;
+    word-wrap: break-word;
+    text-align: left;
+    float: right;
+    margin-top: 6px;
 }
 /*.center-content .tips .help{ width:25%;color:#fff; padding:0 5px 0 5px; float:left;}
 */

+ 14 - 18
stmms-web/src/main/webapp/static/mark-track/css/style.css

@@ -832,19 +832,14 @@ i,em {
 }
 
 .center-content .header {
-	background: #5d6d7d;
-	color: #fff;
-	height: 21px;
-	padding: 10px;
+    background: #5d6d7d;
+    color: #fff;
+    padding: 0 10px;
 }
 
 .center-content .header .text {
-	color: #fff;
-	font-size: 16px;
-	font-weight: bold;
-	text-overflow: ellipsis;
-	white-space: nowrap;
 	float: left;
+    padding: 10px 0;
 }
 
 .center-content .header .text i {
@@ -862,12 +857,12 @@ i,em {
 }
 
 .center-content .header .btn {
-	background: #cbd0d3;
-	padding: 3px 6px 3px 6px;
-	margin: -3px 2px 2px 1px;
-	color: #4b555e;
-	font-weight: bold;
-	float: left;
+    background: #cbd0d3;
+    padding: 3px 6px 3px 6px;
+    margin: 0px 3px 0 0;   
+    color: #4b555e;
+    font-weight: bold;
+    float: left;
 }
 /*.center-content .header .fraction{ font-size:36px; font-family:Arial, Helvetica, sans-serif; font-weight:bold; color:#008f58; text-align:right; float:right;}
 */
@@ -877,9 +872,10 @@ i,em {
 }
 
 .center-content .tips {
-	word-wrap: break-word;
-	text-align: left;
-	float: right;
+    word-wrap: break-word;
+    text-align: left;
+    float: right;
+    margin-top: 6px;
 }
 /*.center-content .tips .help{ width:25%;color:#fff; padding:0 5px 0 5px; float:left;}
 */