Ver Fonte

得分率的优化

nikang há 6 anos atrás
pai
commit
bc2a918d76

+ 30 - 28
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -109,34 +109,36 @@ public class ScoreCalculateThread implements Runnable {
 		List<ExamSubject> examSubjects = subjectService.list(exam.getId());
 		for (ExamSubject examSubject : examSubjects) {
 			Set<String> campusNameList = campusNameMap.get(examSubject.getCode());
-			for (String campusName : campusNameList) {
-				List<ExamQuestion> questions = this.findQuestionList(examSubject.getCode(), false);
-				Long count = studentService.countByExamIdAndSubjectCodeAndCampus(exam.getId(),examSubject.getCode(), campusName, true,false);
-				for (ExamQuestion examQuestion : questions) {
-					ScoreRate scoreRate = scoreRateService.findOne(exam.getId(), examSubject.getCode(), campusName,false, examQuestion.getMainNumber(),examQuestion.getSubNumber());
-					if (scoreRate == null) {
-						scoreRate = new ScoreRate();
-						scoreRate.setExamId(exam.getId());
-						scoreRate.setCampusName(campusName);
-						scoreRate.setSubjectCode(examSubject.getCode());
-						scoreRate.setMainNumber(examQuestion.getMainNumber());
-						scoreRate.setSubNumber(examQuestion.getSubNumber());
-						scoreRate.setObjective(examQuestion.isObjective());
-						scoreRate.setMainTitle(examQuestion.getMainTitle());
-						scoreRate.setTotalScore(examQuestion.getTotalScore());
-					}
-					String key = getKey(examSubject.getCode(), campusName,examQuestion.getQuestionNumber());
-					BigDecimal bg = new BigDecimal(scoreRateMap.get(key) * 1.00 / count);
-					double avgScore = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-					if(scoreRate.getAvgScore()==null || scoreRate.getAvgScore()!=avgScore){
-						scoreRate.setAvgScore(avgScore);
-					}
-					if(scoreRate.getTotalScore()!=examQuestion.getTotalScore()){
-						scoreRate.setTotalScore(examQuestion.getTotalScore());
-					}
-					scoreRateService.save(scoreRate);
-				}
-			}
+			if(campusNameList != null){
+                for (String campusName : campusNameList) {
+                    List<ExamQuestion> questions = this.findQuestionList(examSubject.getCode(), false);
+                    Long count = studentService.countByExamIdAndSubjectCodeAndCampus(exam.getId(),examSubject.getCode(), campusName, true,false);
+                    for (ExamQuestion examQuestion : questions) {
+                        ScoreRate scoreRate = scoreRateService.findOne(exam.getId(), examSubject.getCode(), campusName,false, examQuestion.getMainNumber(),examQuestion.getSubNumber());
+                        if (scoreRate == null) {
+                            scoreRate = new ScoreRate();
+                            scoreRate.setExamId(exam.getId());
+                            scoreRate.setCampusName(campusName);
+                            scoreRate.setSubjectCode(examSubject.getCode());
+                            scoreRate.setMainNumber(examQuestion.getMainNumber());
+                            scoreRate.setSubNumber(examQuestion.getSubNumber());
+                            scoreRate.setObjective(examQuestion.isObjective());
+                            scoreRate.setMainTitle(examQuestion.getMainTitle());
+                            scoreRate.setTotalScore(examQuestion.getTotalScore());
+                        }
+                        String key = getKey(examSubject.getCode(), campusName,examQuestion.getQuestionNumber());
+                        BigDecimal bg = new BigDecimal(scoreRateMap.get(key) * 1.00 / count);
+                        double avgScore = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                        if(scoreRate.getAvgScore()==null || scoreRate.getAvgScore()!=avgScore){
+                            scoreRate.setAvgScore(avgScore);
+                        }
+                        if(scoreRate.getTotalScore()!=examQuestion.getTotalScore()){
+                            scoreRate.setTotalScore(examQuestion.getTotalScore());
+                        }
+                        scoreRateService.save(scoreRate);
+                    }
+                }
+            }
 		}
 	}