Joburgess 5 lat temu
rodzic
commit
f52813e73b

+ 9 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/StudentExamResultDao.java

@@ -96,4 +96,13 @@ public interface StudentExamResultDao extends BaseDAO<Long, StudentExamResult> {
      * @return int
      */
     int updateRegistAvgScore(@Param("results") List<StudentExamResult> results);
+
+    /**
+     * @describe 获取指定考场的学员考试结果
+     * @author Joburgess
+     * @date 2020.08.03
+     * @param examRoomId:
+     * @return java.util.List<com.keao.edu.user.entity.StudentExamResult>
+     */
+    List<StudentExamResult> getWithExamRoom(@Param("examRoomId") Long examRoomId);
 }

+ 9 - 10
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/StudentExamResultServiceImpl.java

@@ -124,7 +124,7 @@ public class StudentExamResultServiceImpl extends BaseServiceImpl<Long, StudentE
 			throw new BizException("考试结果不存在");
 		}
 		if(Objects.isNull(oldStudentExamResult.getAvgScore())){
-			throw new BizException("考试结果暂不可编辑");
+			throw new BizException("考试未结束");
 		}
 		ExaminationBasic examinationBasic = examinationBasicDao.get(oldStudentExamResult.getExaminationBasicId().longValue());
 		if(Objects.isNull(examinationBasic)){
@@ -170,25 +170,24 @@ public class StudentExamResultServiceImpl extends BaseServiceImpl<Long, StudentE
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void calculateStudentExamAvgScore(Long examRoomId) {
-		List<ExamReview> examReviews = examReviewDao.getWithExamRoom(examRoomId);
-		if(CollectionUtils.isEmpty(examReviews)){
+		List<StudentExamResult> studentExamResults = studentExamResultDao.getWithExamRoom(examRoomId);
+		if(CollectionUtils.isEmpty(studentExamResults)){
 			return;
 		}
+		List<ExamReview> examReviews = examReviewDao.getWithExamRoom(examRoomId);
 		Map<Long, List<ExamReview>> registReviewMap = examReviews.stream().collect(Collectors.groupingBy(ExamReview::getExamRegistrationId));
-		List<StudentExamResult> needUpdateStudentExamResult = new ArrayList<>();
-		for (Map.Entry<Long, List<ExamReview>> registReviewEntry : registReviewMap.entrySet()) {
-			List<ExamReview> reviews = registReviewEntry.getValue().stream().filter(e->Objects.nonNull(e.getEvaluationResult())).collect(Collectors.toList());
+		for (StudentExamResult studentExamResult : studentExamResults) {
+			List<ExamReview> reviews = registReviewMap.get(studentExamResult.getExamRegistrationId());
 			if(CollectionUtils.isEmpty(reviews)){
+				studentExamResult.setAvgScore((float) 0);
 				continue;
 			}
-			StudentExamResult studentExamResult=new StudentExamResult();
-			studentExamResult.setExamRegistrationId(registReviewEntry.getKey());
+			reviews = reviews.stream().filter(e->Objects.nonNull(e.getEvaluationResult())).collect(Collectors.toList());
 			long totalScore = reviews.stream().mapToLong(ExamReview::getEvaluationResult).sum();
 			BigDecimal avgScore = new BigDecimal(totalScore).divide(new BigDecimal(reviews.size()), 2, BigDecimal.ROUND_CEILING);
 			studentExamResult.setAvgScore(avgScore.floatValue());
-			needUpdateStudentExamResult.add(studentExamResult);
 		}
-		studentExamResultDao.updateRegistAvgScore(needUpdateStudentExamResult);
+		studentExamResultDao.updateRegistAvgScore(studentExamResults);
 	}
 
 	@Override

+ 3 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/StudentExamResultMapper.xml

@@ -286,4 +286,7 @@
     <select id="findByRoomIdAndUserId" resultMap="StudentExamResult">
 		SELECT * FROM student_exam_result WHERE exam_room_id_ = #{roomId} AND student_id_ = #{userId} LIMIT 1
 	</select>
+    <select id="getWithExamRoom" resultMap="StudentExamResult">
+		SELECT * FROM student_exam_result WHERE exam_room_id_=#{examRoomId}
+    </select>
 </mapper>