Selaa lähdekoodia

修复高低分段临界值问题

ting.yin 6 vuotta sitten
vanhempi
commit
a70905573f

+ 12 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -141,5 +141,17 @@ public interface ExamStudentDao
 
     @Query("select s.className from ExamStudent s where s.examId=?1 and s.subjectCode=?2 group by s.className")
     public List<String> findDistinctClassName(Integer examId, String subjectCode);
+    
+    @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score desc limit ?3 ",nativeQuery = true)
+    public List<Double> findHighCountTotalSocreByExamIdAndSubjectCode(Integer examId, String subjectCode,int highCount);
+
+    @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score asc limit ?3 ",nativeQuery = true)
+    public List<Double> findLowCountTotalSocreByExamIdAndSubjectCode(Integer examId, String subjectCode, int lowCount);
+    
+    @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.class_name=?3 and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score desc limit ?4 ",nativeQuery = true)
+    public List<Double> findHighCountTotalSocreByExamIdAndSubjectCodeAndClass(Integer examId, String subjectCode,String className,int highCount);
+
+    @Query(value = "select s.objective_score+s.subjective_score from eb_exam_student s where s.exam_id=?1 and s.subject_code=?2 and s.class_name=?3 and s.is_absent=false and s.is_breach=false order by s.objective_score+s.subjective_score asc limit ?4 ",nativeQuery = true)
+    public List<Double> findLowCountTotalSocreByExamIdAndSubjectCodeAndClass(Integer examId, String subjectCode,String className, int lowCount);
 
 }

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

@@ -1,12 +1,14 @@
 package cn.com.qmth.stmms.biz.report.utils.module;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import net.sf.json.JSONObject;
 
 import org.apache.commons.lang.StringUtils;
 
+import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.report.model.ReportSubjectClass;
 import cn.com.qmth.stmms.biz.report.service.ReportSubjectClassService;
@@ -45,9 +47,14 @@ public class SubjectClassRangeModule implements Module {
                 String subjectCode = s[0];
                 String className = s[1];
                 ReportSubjectClass r = service.findOne(this.context.getExamId(), subjectCode, className);
+                ExamStudentDao studentDao = SpringContextHolder.getBean(ExamStudentDao.class);
                 JSONObject rangeLevel = new JSONObject();
-                rangeLevel.accumulate("highScore", counter.countGeAndLt(100 - context.getHighValueConfig(), null));
-                rangeLevel.accumulate("lowScore", counter.countGeAndLt(null, context.getLowValueConfig()));
+                double highCount = Math.ceil(context.getHighValueConfig() * r.getRealityCount() * 0.01);
+                double lowCount = Math.ceil(context.getLowValueConfig() * r.getRealityCount() * 0.01);
+                List<Double> highScore = studentDao.findHighCountTotalSocreByExamIdAndSubjectCodeAndClass(context.getExamId(), subjectCode,className, (int)highCount);
+                List<Double> lowScore = studentDao.findLowCountTotalSocreByExamIdAndSubjectCodeAndClass(context.getExamId(), subjectCode,className, (int)lowCount);
+                rangeLevel.accumulate("highScore", highScore.isEmpty()?0:highScore.get(highScore.size()-1));
+                rangeLevel.accumulate("lowScore", lowScore.isEmpty()?0:lowScore.get(lowScore.size()-1));
                 r.setRangeLevel(rangeLevel.toString());
 
                 JSONObject scoreRange = new JSONObject();

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

@@ -1,9 +1,11 @@
 package cn.com.qmth.stmms.biz.report.utils.module;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import net.sf.json.JSONObject;
+import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.report.model.ReportSubject;
 import cn.com.qmth.stmms.biz.report.model.ReportSubjectRange;
@@ -64,12 +66,15 @@ public class SubjectRangeModule implements Module {
             service.save(subjectRange);
 
             ReportSubjectService subjectService = SpringContextHolder.getBean(ReportSubjectService.class);
-//            ExamStudentService studentService = SpringContextHolder.getBean(ExamStudentService.class);
+            ExamStudentDao studentDao = SpringContextHolder.getBean(ExamStudentDao.class);
             ReportSubject subject = subjectService.findOne(this.context.getExamId(), subjectCode);
             JSONObject rangeLevel = new JSONObject();
-
-            rangeLevel.accumulate("highScore", counter.countGeAndLt(100 - context.getHighValueConfig(), null));
-            rangeLevel.accumulate("lowScore", counter.countGeAndLt(null, context.getLowValueConfig()));
+            double highCount = Math.ceil(context.getHighValueConfig() * subject.getRealityCount() * 0.01);
+            double lowCount = Math.ceil(context.getLowValueConfig() * subject.getRealityCount() * 0.01);
+            List<Double> highScore = studentDao.findHighCountTotalSocreByExamIdAndSubjectCode(context.getExamId(), subjectCode, (int)highCount);
+            List<Double> lowScore = studentDao.findLowCountTotalSocreByExamIdAndSubjectCode(context.getExamId(), subjectCode, (int)lowCount);
+            rangeLevel.accumulate("highScore", highScore.isEmpty()?0:highScore.get(highScore.size()-1));
+            rangeLevel.accumulate("lowScore", lowScore.isEmpty()?0:lowScore.get(lowScore.size()-1));
             subject.setRangeLevel(rangeLevel.toString());
 
             JSONObject scoreRange = new JSONObject();