Sfoglia il codice sorgente

修复大题小题分析排序问题及优秀率及格率问题

ting.yin 6 anni fa
parent
commit
a4af374d84

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

@@ -22,6 +22,10 @@ public class ReportSubjectQuery extends BaseQuery {
 
     private int groupNumber;
 
+    private Integer mainNumber;
+
+    private Integer subNumber;
+
     private Boolean objective;
 
     public Integer getExamId() {
@@ -79,4 +83,21 @@ public class ReportSubjectQuery extends BaseQuery {
     public void setObjective(Boolean objective) {
         this.objective = objective;
     }
+
+    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;
+    }
+
 }

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

@@ -14,6 +14,8 @@ import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -67,8 +69,8 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
 
     @Override
     public List<ReportSubjectGroup> findByQuery(final ReportSubjectQuery query) {
+        query.setSort(new Sort(Direction.ASC, "groupNumber"));
         List<ReportSubjectGroup> result = reportSubjectGroupDao.findAll(new Specification<ReportSubjectGroup>() {
-
             @Override
             public Predicate toPredicate(Root<ReportSubjectGroup> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
                 List<Predicate> predicates = new LinkedList<Predicate>();

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

@@ -14,6 +14,8 @@ import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -67,6 +69,7 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
 
     @Override
     public List<ReportSubjectQuestion> findByQuery(final ReportSubjectQuery query) {
+        query.setSort(new Sort(Direction.ASC, "mainNumber", "subNumber"));
         List<ReportSubjectQuestion> result = reportSubjectQuestionDao.findAll(new Specification<ReportSubjectQuestion>() {
             @Override
             public Predicate toPredicate(Root<ReportSubjectQuestion> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {

+ 24 - 8
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/ReportContext.java

@@ -30,9 +30,11 @@ public class ReportContext {
     private List<Module> modules;
 
     private Map<String, ExamSubject> subjectMap;
-    
+
     private Map<String, ExamQuestion> questionMap;
 
+    private Map<String, ExamQuestion> groupMap;
+
     public ReportContext(Exam exam) {
         this.exam = exam;
         this.modules = new LinkedList<Module>();
@@ -48,6 +50,7 @@ public class ReportContext {
 
         this.subjectMap = new HashMap<String, ExamSubject>();
         this.questionMap = new HashMap<String, ExamQuestion>();
+        this.groupMap = new HashMap<String, ExamQuestion>();
     }
 
     public void process(ExamStudent student) {
@@ -61,31 +64,40 @@ public class ReportContext {
         subjectMap.put(student.getSubjectCode(), student.getSubject());
         for (ExamQuestion question : student.getObjectiveQuestionList()) {
             String key = getQuestionKey(question);
-            if(questionMap.get(key)==null){
+            if (questionMap.get(key) == null) {
                 questionMap.put(key, question);
             }
         }
         for (ExamQuestion question : student.getSubjectiveQuestionList()) {
-            String key = getQuestionKey(question);
-            if(questionMap.get(key)==null){
-                questionMap.put(key, question);
+            String questionKey = getQuestionKey(question);
+            if (questionMap.get(questionKey) == null) {
+                questionMap.put(questionKey, question);
+            }
+            String groupKey = getGroupKey(question);
+            if (groupMap.get(groupKey) == null) {
+                groupMap.put(groupKey, question);
             }
         }
     }
-    
+
     private String getQuestionKey(ExamQuestion question) {
         return question.getSubjectCode() + "\t" + question.isObjective() + "\t"
                 + StringUtils.trimToEmpty(question.getPaperType()) + "\t" + question.getMainNumber() + "\t"
                 + question.getSubNumber();
     }
 
+    private String getGroupKey(ExamQuestion question) {
+        return question.getSubjectCode() + "\t" + question.isObjective() + "\t" + question.getMainNumber();
+    }
+
     public void save() {
         for (Module module : modules) {
             module.save();
         }
         ReportSubjectTeacherService teacherService = SpringContextHolder.getBean(ReportSubjectTeacherService.class);
         teacherService.updateRelativeAvgScore(this.getExamId());
-        ReportSubjectTeacherClassService teacherClassService = SpringContextHolder.getBean(ReportSubjectTeacherClassService.class);
+        ReportSubjectTeacherClassService teacherClassService = SpringContextHolder
+                .getBean(ReportSubjectTeacherClassService.class);
         teacherClassService.updateRelativeAvgScore(this.getExamId());
     }
 
@@ -108,8 +120,12 @@ public class ReportContext {
     public ExamSubject getSubject(String subjectCode) {
         return subjectMap.get(subjectCode);
     }
-    
+
     public ExamQuestion getExamQuestion(String key) {
         return questionMap.get(key);
     }
+    
+    public ExamQuestion getGroup(String key) {
+        return groupMap.get(key);
+    }
 }

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

@@ -83,7 +83,7 @@ public class SubjectGroupModule implements Module {
                 reportSubjectGroup.setExamId(this.context.getExamId());
                 reportSubjectGroup.setSubjectCode(subjectCode);
                 reportSubjectGroup.setSubjectName(context.getSubject(subjectCode).getName());
-                reportSubjectGroup.setGroupName(context.getExamQuestion(key).getMainTitle());
+                reportSubjectGroup.setGroupName(context.getGroup(key).getMainTitle());
                 reportSubjectGroup.setGroupNumber(mainNumber);
                 reportSubjectGroup.setMaxScore(unit.maxScore);
                 reportSubjectGroup.setMinScore(unit.minScore);

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

@@ -92,11 +92,11 @@ public class BaseCalculatorUnit {
         discrimination = (aggScore - sumScore * sumTotalScore / count) / Math.sqrt(
                 (sumScore2 - sumScore * sumScore / count) * (sumTotalScore2 - sumTotalScore * sumTotalScore / count));
         // 及格率
-        passRate = passCount / count;
+        passRate = passCount * 1.0 / count;
         // 优秀率
-        excellentRate = excellentCount / count;
+        excellentRate = excellentCount * 1.0 / count;
         // 满分率
-        fullScoreRate = fullCount / count;
+        fullScoreRate = fullCount * 1.0 / count;
     }
 
     @Override