Explorar el Código

完善成绩分析保存逻辑

ting.yin hace 6 años
padre
commit
de975dede3
Se han modificado 15 ficheros con 299 adiciones y 78 borrados
  1. 3 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectTeacherClassService.java
  2. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectTeacherService.java
  3. 58 38
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectTeacherClassServiceImpl.java
  4. 36 20
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectTeacherServiceImpl.java
  5. 44 5
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/ReportContext.java
  6. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectClassModule.java
  7. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectCollegeModule.java
  8. 32 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectGroupModule.java
  9. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectModule.java
  10. 29 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectQuestionModule.java
  11. 28 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectRangeModule.java
  12. 31 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectTeacherClassModule.java
  13. 29 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectTeacherModule.java
  14. 3 3
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/unit/BaseCalculatorUnit.java
  15. 1 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

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

@@ -20,5 +20,8 @@ public interface ReportSubjectTeacherClassService {
     void saveReportSubjectTeacherClassData(Integer examId, String subjectCode);
 
     ReportSubjectTeacherClass save(ReportSubjectTeacherClass r);
+    
+    void updateRelativeAvgScore(Integer examId);
+    
 
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectTeacherService.java

@@ -21,4 +21,6 @@ public interface ReportSubjectTeacherService {
 
     ReportSubjectTeacher save(ReportSubjectTeacher r);
 
+    void updateRelativeAvgScore(Integer examId);
+
 }

+ 58 - 38
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectTeacherClassServiceImpl.java

@@ -1,5 +1,19 @@
 package cn.com.qmth.stmms.biz.report.service.impl;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamSubjectDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
@@ -10,20 +24,6 @@ import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherClassService;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
 
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import java.util.LinkedList;
-import java.util.List;
-
 /**
  * 课程老师班级成绩 分析service实现
  *
@@ -31,7 +31,8 @@ import java.util.List;
  * @date 2019-04-17
  */
 @Service
-public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<ReportSubjectTeacherClass> implements ReportSubjectTeacherClassService {
+public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<ReportSubjectTeacherClass> implements
+        ReportSubjectTeacherClassService {
 
     @Autowired
     private ReportSubjectTeacherClassDao reportSubjectTeacherClassDao;
@@ -50,25 +51,27 @@ public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<Repor
 
     @Override
     public List<ReportSubjectTeacherClass> findByQuery(final ReportSubjectQuery query) {
-        List<ReportSubjectTeacherClass> result = reportSubjectTeacherClassDao.findAll(new Specification<ReportSubjectTeacherClass>() {
-
-            @Override
-            public Predicate toPredicate(Root<ReportSubjectTeacherClass> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
-                List<Predicate> predicates = new LinkedList<Predicate>();
-
-                if (query.getExamId() != null) {
-                    predicates.add(cb.equal(root.get("examId"), query.getExamId()));
-                }
-                if (StringUtils.isNotBlank(query.getSubjectCode())) {
-                    predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
-                }
-                if (StringUtils.isNotBlank(query.getTeacherName())) {
-                    predicates.add(cb.equal(root.get("teacherName"), query.getTeacherName()));
-                }
-                return predicates.isEmpty() ? cb.conjunction()
-                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
-            }
-        });
+        List<ReportSubjectTeacherClass> result = reportSubjectTeacherClassDao
+                .findAll(new Specification<ReportSubjectTeacherClass>() {
+
+                    @Override
+                    public Predicate toPredicate(Root<ReportSubjectTeacherClass> root, CriteriaQuery<?> cQuery,
+                            CriteriaBuilder cb) {
+                        List<Predicate> predicates = new LinkedList<Predicate>();
+
+                        if (query.getExamId() != null) {
+                            predicates.add(cb.equal(root.get("examId"), query.getExamId()));
+                        }
+                        if (StringUtils.isNotBlank(query.getSubjectCode())) {
+                            predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
+                        }
+                        if (StringUtils.isNotBlank(query.getTeacherName())) {
+                            predicates.add(cb.equal(root.get("teacherName"), query.getTeacherName()));
+                        }
+                        return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates
+                                .toArray(new Predicate[predicates.size()]));
+                    }
+                });
 
         return result;
     }
@@ -76,7 +79,8 @@ public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<Repor
     @Override
     public void saveReportSubjectTeacherClassData(Integer examId, String subjectCode) {
         ExamSubject examSubject = examSubjectDao.findByExamIdAndCode(examId, subjectCode);
-        List<Object[]> reportSubjectTeacherClassList = reportSubjectTeacherClassDao.queryReportSubjectTeacherClassData(examId, subjectCode);
+        List<Object[]> reportSubjectTeacherClassList = reportSubjectTeacherClassDao.queryReportSubjectTeacherClassData(
+                examId, subjectCode);
         Double subjectAvgScore = reportSubjectDao.querySubjectAvgScore(examId, subjectCode);
         for (Object[] rs : reportSubjectTeacherClassList) {
             ReportSubjectTeacherClass teacherClass = new ReportSubjectTeacherClass();
@@ -91,9 +95,11 @@ public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<Repor
             teacherClass.setMaxScore(Double.parseDouble(rs[5].toString()));
             teacherClass.setMinScore(Double.parseDouble(rs[6].toString()));
             teacherClass.setPassRate(DoubleUtil.div(teacherClass.getPassCount(), teacherClass.getRealityCount(), 2));
-            teacherClass.setExcellentRate(DoubleUtil.div(teacherClass.getExcellentCount(), teacherClass.getRealityCount(), 2));
-            teacherClass.setAvgScore(DoubleUtil.format(Double.parseDouble(rs[7].toString()),"0.00"));
-            teacherClass.setRelativeAvgScore(DoubleUtil.format(Double.parseDouble(rs[7].toString()) - subjectAvgScore,"0.00"));
+            teacherClass.setExcellentRate(DoubleUtil.div(teacherClass.getExcellentCount(),
+                    teacherClass.getRealityCount(), 2));
+            teacherClass.setAvgScore(DoubleUtil.format(Double.parseDouble(rs[7].toString()), "0.00"));
+            teacherClass.setRelativeAvgScore(DoubleUtil.format(Double.parseDouble(rs[7].toString()) - subjectAvgScore,
+                    "0.00"));
             reportSubjectTeacherClassDao.save(teacherClass);
         }
     }
@@ -103,4 +109,18 @@ public class ReportSubjectTeacherClassServiceImpl extends BaseQueryService<Repor
         return reportSubjectTeacherClassDao.save(r);
     }
 
+    @Override
+    public void updateRelativeAvgScore(Integer examId) {
+        ReportSubjectQuery query = new ReportSubjectQuery();
+        query.setExamId(examId);
+        query.setPageNumber(1);
+        query.setPageSize(Integer.MAX_VALUE);
+        List<ReportSubjectTeacherClass> list = findByQuery(query);
+        for (ReportSubjectTeacherClass reportSubjectTeacherClass : list) {
+            Double subjectAvgScore = reportSubjectDao.querySubjectAvgScore(examId,
+                    reportSubjectTeacherClass.getSubjectCode());
+            reportSubjectTeacherClass.setRelativeAvgScore(reportSubjectTeacherClass.getAvgScore() - subjectAvgScore);
+            reportSubjectTeacherClassDao.save(reportSubjectTeacherClass);
+        }
+    }
 }

+ 36 - 20
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectTeacherServiceImpl.java

@@ -1,5 +1,19 @@
 package cn.com.qmth.stmms.biz.report.service.impl;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamSubjectDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
@@ -10,20 +24,6 @@ import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherService;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
 
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import java.util.LinkedList;
-import java.util.List;
-
 /**
  * 课程学院分析 service实现
  *
@@ -31,7 +31,8 @@ import java.util.List;
  * @date 2019-04-16 09:43
  */
 @Service
-public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubjectTeacher> implements ReportSubjectTeacherService {
+public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubjectTeacher> implements
+        ReportSubjectTeacherService {
 
     @Autowired
     private ReportSubjectTeacherDao reportSubjectTeacherDao;
@@ -65,8 +66,8 @@ public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubj
                 if (StringUtils.isNotBlank(query.getTeacherName())) {
                     predicates.add(cb.equal(root.get("teacherName"), query.getTeacherName()));
                 }
-                return predicates.isEmpty() ? cb.conjunction()
-                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
+                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
+                        .size()]));
             }
         });
         return result;
@@ -75,7 +76,8 @@ public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubj
     @Override
     public void saveReportSubjectTeacherData(Integer examId, String subjectCode) {
         ExamSubject examSubject = examSubjectDao.findByExamIdAndCode(examId, subjectCode);
-        List<Object[]> reportSubjectTeacherList = reportSubjectTeacherDao.queryReportSubjectTeacherData(examId, subjectCode);
+        List<Object[]> reportSubjectTeacherList = reportSubjectTeacherDao.queryReportSubjectTeacherData(examId,
+                subjectCode);
         Double subjectAvgScore = reportSubjectDao.querySubjectAvgScore(examId, subjectCode);
         for (Object[] rs : reportSubjectTeacherList) {
             ReportSubjectTeacher subject = new ReportSubjectTeacher();
@@ -90,8 +92,9 @@ public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubj
             subject.setMinScore(Double.parseDouble(rs[5].toString()));
             subject.setPassRate(DoubleUtil.div(subject.getPassCount(), subject.getRealityCount(), 2));
             subject.setExcellentRate(DoubleUtil.div(subject.getExcellentCount(), subject.getRealityCount(), 2));
-            subject.setAvgScore(DoubleUtil.format(Double.parseDouble(rs[6].toString()),"0.00"));
-            subject.setRelativeAvgScore(DoubleUtil.format(Double.parseDouble(rs[6].toString()) - subjectAvgScore,"0.00"));
+            subject.setAvgScore(DoubleUtil.format(Double.parseDouble(rs[6].toString()), "0.00"));
+            subject.setRelativeAvgScore(DoubleUtil.format(Double.parseDouble(rs[6].toString()) - subjectAvgScore,
+                    "0.00"));
             reportSubjectTeacherDao.save(subject);
         }
     }
@@ -101,4 +104,17 @@ public class ReportSubjectTeacherServiceImpl extends BaseQueryService<ReportSubj
         return reportSubjectTeacherDao.save(r);
     }
 
+    @Override
+    public void updateRelativeAvgScore(Integer examId) {
+        ReportSubjectQuery query = new ReportSubjectQuery();
+        query.setExamId(examId);
+        query.setPageNumber(1);
+        query.setPageSize(Integer.MAX_VALUE);
+        List<ReportSubjectTeacher> list = findByQuery(query);
+        for (ReportSubjectTeacher teacher : list) {
+            Double subjectAvgScore = reportSubjectDao.querySubjectAvgScore(examId, teacher.getSubjectCode());
+            teacher.setRelativeAvgScore(teacher.getAvgScore() - subjectAvgScore);
+            reportSubjectTeacherDao.save(teacher);
+        }
+    }
 }

+ 44 - 5
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/ReportContext.java

@@ -5,8 +5,14 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
+
 import cn.com.qmth.stmms.biz.exam.model.Exam;
+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.model.ExamSubject;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherClassService;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherService;
 import cn.com.qmth.stmms.biz.report.utils.module.SubjectClassModule;
 import cn.com.qmth.stmms.biz.report.utils.module.SubjectCollegeModule;
 import cn.com.qmth.stmms.biz.report.utils.module.SubjectGroupModule;
@@ -15,6 +21,7 @@ import cn.com.qmth.stmms.biz.report.utils.module.SubjectQuestionModule;
 import cn.com.qmth.stmms.biz.report.utils.module.SubjectRangeModule;
 import cn.com.qmth.stmms.biz.report.utils.module.SubjectTeacherClassModule;
 import cn.com.qmth.stmms.biz.report.utils.module.SubjectTeacherModule;
+import cn.com.qmth.stmms.biz.utils.SpringContextHolder;
 
 public class ReportContext {
 
@@ -22,7 +29,9 @@ public class ReportContext {
 
     private List<Module> modules;
 
-    private Map<String, String> subjectMap;
+    private Map<String, ExamSubject> subjectMap;
+    
+    private Map<String, ExamQuestion> questionMap;
 
     public ReportContext(Exam exam) {
         this.exam = exam;
@@ -36,22 +45,48 @@ public class ReportContext {
         this.modules.add(new SubjectTeacherClassModule(this));
         this.modules.add(new SubjectQuestionModule(this));
         this.modules.add(new SubjectGroupModule(this));
-        this.modules.add(new SubjectRangeModule(this));
 
-        this.subjectMap = new HashMap<String, String>();
+        this.subjectMap = new HashMap<String, ExamSubject>();
+        this.questionMap = new HashMap<String, ExamQuestion>();
     }
 
     public void process(ExamStudent student) {
         for (Module module : modules) {
-            subjectMap.put(student.getSubjectCode(), student.getSubjectName());
+            putMap(student);
             module.process(student);
         }
     }
 
+    private void putMap(ExamStudent student) {
+        subjectMap.put(student.getSubjectCode(), student.getSubject());
+        for (ExamQuestion question : student.getObjectiveQuestionList()) {
+            String key = getQuestionKey(question);
+            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);
+            }
+        }
+    }
+    
+    private String getQuestionKey(ExamQuestion question) {
+        return question.getSubjectCode() + "\t" + question.isObjective() + "\t"
+                + StringUtils.trimToEmpty(question.getPaperType()) + "\t" + question.getMainNumber() + "\t"
+                + question.getSubNumber();
+    }
+
     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);
+        teacherClassService.updateRelativeAvgScore(this.getExamId());
     }
 
     public Double getPassScore() {
@@ -70,7 +105,11 @@ public class ReportContext {
         return exam.getId();
     }
 
-    public String getSubjectName(String subjectCode) {
+    public ExamSubject getSubject(String subjectCode) {
         return subjectMap.get(subjectCode);
     }
+    
+    public ExamQuestion getExamQuestion(String key) {
+        return questionMap.get(key);
+    }
 }

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

@@ -31,7 +31,7 @@ public class SubjectClassModule extends SubjectModule implements Module {
                 ReportSubjectClass r = new ReportSubjectClass();
                 r.setExamId(this.context.getExamId());
                 r.setSubjectCode(subjectCode);
-                r.setSubjectName(this.context.getSubjectName(subjectCode));
+                r.setSubjectName(context.getSubject(subjectCode).getName());
                 r.setClassName(className);
                 r.setAvgScore(unit.avgScore);
                 r.setMaxScore(unit.maxScore);

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

@@ -31,7 +31,7 @@ public class SubjectCollegeModule extends SubjectModule implements Module {
                 ReportSubjectCollege r = new ReportSubjectCollege();
                 r.setExamId(this.context.getExamId());
                 r.setSubjectCode(subjectCode);
-                r.setSubjectName(this.context.getSubjectName(subjectCode));
+                r.setSubjectName(context.getSubject(subjectCode).getName());
                 r.setCollegeName(collegeName);
                 r.setAvgScore(unit.avgScore);
                 r.setMaxScore(unit.maxScore);

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

@@ -7,7 +7,8 @@ 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.model.ReportSubjectGroup;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectGroupService;
 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;
@@ -22,8 +23,8 @@ public class SubjectGroupModule implements Module {
     private ReportContext context;
 
     public SubjectGroupModule(ReportContext context) {
-        this.context = context;
         this.units = new HashMap<String, BaseCalculatorUnit>();
+        this.context = context;
     }
 
     public void process(ExamStudent student) {
@@ -33,7 +34,7 @@ public class SubjectGroupModule implements Module {
             process(student.getScoreList(true), student.getObjectiveQuestionList(), student.getSubjectCode(),
                     totalScore, true);
             // 遍历主观题
-            process(student.getScoreList(false), student.getObjectiveQuestionList(), student.getSubjectCode(),
+            process(student.getScoreList(false), student.getSubjectiveQuestionList(), student.getSubjectCode(),
                     totalScore, false);
         }
     }
@@ -64,7 +65,34 @@ public class SubjectGroupModule implements Module {
     }
 
     public void save() {
-        ReportSubjectQuestionService service = SpringContextHolder.getBean(ReportSubjectQuestionService.class);
+        ReportSubjectGroupService service = SpringContextHolder.getBean(ReportSubjectGroupService.class);
+        for (String key : this.units.keySet()) {
+            String s[] = key.split("\t");
+            if (s.length > 2) {
+                String subjectCode = s[0];
+                Boolean objective = Boolean.parseBoolean(s[1]);
+                Integer mainNumber = Integer.parseInt(s[2]);
+                BaseCalculatorUnit unit = units.get(key);
+                ReportSubjectGroup reportSubjectGroup = new ReportSubjectGroup();
+                reportSubjectGroup.setExamId(this.context.getExamId());
+                reportSubjectGroup.setSubjectCode(subjectCode);
+                reportSubjectGroup.setSubjectName(context.getSubject(subjectCode).getName());
+                reportSubjectGroup.setGroupName(context.getExamQuestion(key).getMainTitle());
+                reportSubjectGroup.setGroupNumber(mainNumber);
+                reportSubjectGroup.setMaxScore(unit.maxScore);
+                reportSubjectGroup.setMinScore(unit.minScore);
+                reportSubjectGroup.setAvgScore(unit.avgScore);
+                reportSubjectGroup.setTotalScore(unit.fullScore);
+                reportSubjectGroup.setStdev(unit.stdev);
+                reportSubjectGroup.setCoefficient(unit.coefficient);
+                reportSubjectGroup.setScoreRate(unit.difficulty);
+                reportSubjectGroup.setZeroCount(unit.zeroCount);
+                reportSubjectGroup.setFullCount(unit.fullCount);
+                reportSubjectGroup.setObjective(objective);
+                service.save(reportSubjectGroup);
+
+            }
+        }
     }
 
     private BaseCalculatorUnit findUnit(String key) {

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

@@ -50,7 +50,7 @@ public class SubjectModule implements Module {
             ReportSubject subject = new ReportSubject();
             subject.setExamId(this.context.getExamId());
             subject.setSubjectCode(subjectCode);
-            subject.setSubjectName(this.context.getSubjectName(subjectCode));
+            subject.setSubjectName(context.getSubject(subjectCode).getName());
             subject.setTotalCount(counter.totalCount);
             subject.setAbsentCount(counter.absentCount);
             subject.setBreachCount(counter.breachCount);

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

@@ -8,6 +8,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.report.model.ReportSubjectQuestion;
 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.ReportContext;
@@ -32,7 +33,7 @@ public class SubjectQuestionModule implements Module {
             // 遍历客观题
             process(student.getScoreList(true), student.getObjectiveQuestionList(), totalScore);
             // 遍历主观题
-            process(student.getScoreList(false), student.getObjectiveQuestionList(), totalScore);
+            process(student.getScoreList(false), student.getSubjectiveQuestionList(), totalScore);
         }
     }
 
@@ -57,6 +58,33 @@ public class SubjectQuestionModule implements Module {
 
     public void save() {
         ReportSubjectQuestionService service = SpringContextHolder.getBean(ReportSubjectQuestionService.class);
+        for (String key : this.units.keySet()) {
+            String s[] = key.split("\t");
+            if (s.length > 4) {
+                String subjectCode = s[0];
+                Boolean objective = Boolean.parseBoolean(s[1]);
+                String paperType = StringUtils.trimToNull(s[2]);
+                Integer mainNumber = Integer.parseInt(s[3]);
+                Integer subNumber = Integer.parseInt(s[4]);
+                BaseCalculatorUnit unit = units.get(key);
+                ReportSubjectQuestion reportSubjectQuestion = new ReportSubjectQuestion();
+                reportSubjectQuestion.setExamId(this.context.getExamId());
+                reportSubjectQuestion.setSubjectCode(subjectCode);
+                reportSubjectQuestion.setSubjectName(context.getSubject(subjectCode).getName());
+                reportSubjectQuestion.setObjective(objective);
+                reportSubjectQuestion.setQuestionName(context.getExamQuestion(key).getMainTitle());
+                reportSubjectQuestion.setMainNumber(mainNumber);
+                reportSubjectQuestion.setSubNumber(subNumber);
+                reportSubjectQuestion.setTotalScore(unit.fullScore);
+                reportSubjectQuestion.setAvgScore(unit.avgScore);
+                reportSubjectQuestion.setScoreRate(unit.difficulty);
+                reportSubjectQuestion.setStdev(unit.stdev);
+                reportSubjectQuestion.setFullScoreRate(unit.fullScoreRate);
+                reportSubjectQuestion.setPaperType(paperType);
+                service.save(reportSubjectQuestion);
+                
+            }
+        }
     }
 
     private BaseCalculatorUnit findUnit(String key) {

+ 28 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/utils/module/SubjectRangeModule.java

@@ -4,6 +4,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.report.model.ReportSubjectRange;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectRangeService;
 import cn.com.qmth.stmms.biz.report.utils.Module;
 import cn.com.qmth.stmms.biz.report.utils.ReportContext;
@@ -33,6 +34,33 @@ public class SubjectRangeModule implements Module {
 
     public void save() {
         ReportSubjectRangeService service = SpringContextHolder.getBean(ReportSubjectRangeService.class);
+        for (String subjectCode : this.counters.keySet()) {
+            RangeCounter counter = counters.get(subjectCode);
+            ReportSubjectRange subjectRange = new ReportSubjectRange();
+            subjectRange.setExamId(this.context.getExamId());
+            subjectRange.setSubjectCode(subjectCode);
+            subjectRange.setSubjectName(context.getSubject(subjectCode).getName());
+            subjectRange.setLevel(context.getSubject(subjectCode).getLevel());
+            subjectRange.setCount0_49(counter.countGeAndLt(0d, 50d));
+            subjectRange.setCount50_59(counter.countGeAndLt(50d, 60d));
+            subjectRange.setCount60_69(counter.countGeAndLt(60d, 70d));
+            subjectRange.setCount70_79(counter.countGeAndLt(70d, 80d));
+            subjectRange.setCount80_89(counter.countGeAndLt(80d, 90d));
+            subjectRange.setCount90_100(counter.countGeAndLt(90d, 100d));
+            subjectRange.setLt60(counter.countGeAndLt(0d, 60d));
+            subjectRange.setMte60(counter.countGeAndLt(60d, null));
+            subjectRange.setTotalCount(counter.totalCount);
+            subjectRange.setPercent0_49(counter.countGeAndLt(0d, 50d) / counter.totalCount);
+            subjectRange.setPercent50_59(counter.countGeAndLt(50d, 60d) / counter.totalCount);
+            subjectRange.setPercent60_69(counter.countGeAndLt(60d, 70d) / counter.totalCount);
+            subjectRange.setPercent70_79(counter.countGeAndLt(70d, 80d) / counter.totalCount);
+            subjectRange.setPercent80_89(counter.countGeAndLt(80d, 90d) / counter.totalCount);
+            subjectRange.setPercent90_100(counter.countGeAndLt(90d, 100d) / counter.totalCount);
+            subjectRange.setPercent_lt60(counter.countGeAndLt(0d, 60d) / counter.totalCount);
+            subjectRange.setPercent_mte60(counter.countGeAndLt(60d, null) / counter.totalCount);
+            service.save(subjectRange);
+        }
+
     }
 
     private RangeCounter findCounter(String key) {

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

@@ -3,9 +3,12 @@ package cn.com.qmth.stmms.biz.report.utils.module;
 import org.apache.commons.lang.StringUtils;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectClassService;
+import cn.com.qmth.stmms.biz.report.model.ReportSubjectTeacherClass;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherClassService;
 import cn.com.qmth.stmms.biz.report.utils.Module;
 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.BaseCounter;
 import cn.com.qmth.stmms.biz.utils.SpringContextHolder;
 
 public class SubjectTeacherClassModule extends SubjectModule implements Module {
@@ -20,7 +23,33 @@ public class SubjectTeacherClassModule extends SubjectModule implements Module {
     }
 
     public void save() {
-        ReportSubjectClassService service = SpringContextHolder.getBean(ReportSubjectClassService.class);
+        for (String key : this.units.keySet()) {
+            String s[] = key.split("\t");
+            if (s.length > 2) {
+                String subjectCode = s[0];
+                String teacherName = s[1];
+                String className = s[2];
+                BaseCalculatorUnit unit = units.get(key);
+                BaseCounter counter = counters.get(key);
+                ReportSubjectTeacherClassService service = SpringContextHolder.getBean(ReportSubjectTeacherClassService.class);
+                ReportSubjectTeacherClass teacherClass = new ReportSubjectTeacherClass();
+                teacherClass.setExamId(this.context.getExamId());
+                teacherClass.setSubjectCode(subjectCode);
+                teacherClass.setSubjectName(context.getSubject(subjectCode).getName());
+                teacherClass.setTeacherName(teacherName);
+                teacherClass.setClassName(className);
+                teacherClass.setRealityCount(counter.realityCount);
+                teacherClass.setPassCount(unit.passCount);
+                teacherClass.setExcellentCount(unit.excellentCount);
+                teacherClass.setMaxScore(unit.maxScore);
+                teacherClass.setMinScore(unit.minScore);
+                teacherClass.setPassRate(unit.passRate);
+                teacherClass.setExcellentRate(unit.excellentRate);
+                teacherClass.setAvgScore(unit.avgScore);
+                service.save(teacherClass);
+            }
+        }
+        
     }
 
 }

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

@@ -3,9 +3,12 @@ package cn.com.qmth.stmms.biz.report.utils.module;
 import org.apache.commons.lang.StringUtils;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectClassService;
+import cn.com.qmth.stmms.biz.report.model.ReportSubjectTeacher;
+import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherService;
 import cn.com.qmth.stmms.biz.report.utils.Module;
 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.BaseCounter;
 import cn.com.qmth.stmms.biz.utils.SpringContextHolder;
 
 public class SubjectTeacherModule extends SubjectModule implements Module {
@@ -19,7 +22,31 @@ public class SubjectTeacherModule extends SubjectModule implements Module {
     }
 
     public void save() {
-        ReportSubjectClassService service = SpringContextHolder.getBean(ReportSubjectClassService.class);
+        ReportSubjectTeacherService service = SpringContextHolder.getBean(ReportSubjectTeacherService.class);
+
+        for (String key : this.units.keySet()) {
+            BaseCalculatorUnit unit = units.get(key);
+            BaseCounter counter = counters.get(key);
+            String s[] = key.split("\t");
+            if (s.length > 1) {
+                String subjectCode = s[0];
+                String teacherName = s[1];
+                ReportSubjectTeacher subject = new ReportSubjectTeacher();
+                subject.setExamId(this.context.getExamId());
+                subject.setSubjectCode(subjectCode);
+                subject.setSubjectName(context.getSubject(subjectCode).getName());
+                subject.setTeacherName(teacherName);
+                subject.setRealityCount(counter.realityCount);
+                subject.setPassCount(unit.passCount);
+                subject.setExcellentCount(unit.excellentCount);
+                subject.setMaxScore(unit.maxScore);
+                subject.setMinScore(unit.minScore);
+                subject.setPassRate(unit.passRate);
+                subject.setExcellentRate(unit.excellentRate);
+                subject.setAvgScore(unit.avgScore);
+                service.save(subject);
+            }
+        }
     }
 
 }

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

@@ -48,7 +48,7 @@ public class BaseCalculatorUnit {
 
     public double discrimination;
     
-    public double scoreRate;
+    public double fullScoreRate;
     
     public BaseCalculatorUnit() {
         minScore = Double.MAX_VALUE;
@@ -95,8 +95,8 @@ public class BaseCalculatorUnit {
         passRate = passCount / count;
         // 优秀率
         excellentRate = excellentCount / count;
-        // 分率
-        scoreRate = avgScore / fullCount;
+        // 分率
+        fullScoreRate = fullCount / count;
     }
 
     @Override

+ 1 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -74,6 +74,7 @@ public class ScoreCalculateThread implements Runnable {
         this.reportService = reportService;
         this.examService = examService;
         this.subjectService = subjectService;
+        this.groupService = groupService;
         this.objectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.subjectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.subjectMap = new HashMap<String, ExamSubject>();