| 
					
				 | 
			
			
				@@ -5,16 +5,10 @@ import com.keao.edu.common.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.common.page.PageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.common.service.impl.BaseServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.common.tenant.TenantContextHolder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.dao.ExamMusicTheoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.dao.ExamOrganizationRelationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.dao.ExaminationBasicDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.dao.MusicTheoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.keao.edu.user.dao.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.user.dto.ExaminationBasicDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.entity.ExamMusicTheory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.entity.ExamOrganizationRelation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.entity.ExaminationBasic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.keao.edu.user.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.user.api.enums.ExamModeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.keao.edu.user.entity.MusicTheory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.user.enums.ExamStatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.user.page.ExaminationQueryInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.keao.edu.user.service.ExaminationBasicService; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -30,157 +24,167 @@ import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, ExaminationBasic> implements ExaminationBasicService{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ExaminationBasicDao examinationBasicDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ExamOrganizationRelationDao examOrganizationRelationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private MusicTheoryDao musicTheoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private ExamMusicTheoryDao examMusicTheoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public BaseDAO<Long, ExaminationBasic> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return examinationBasicDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public ExaminationBasic addExaminationBasic(ExaminationBasic examinationBasic) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(StringUtils.isBlank(examinationBasic.getName())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请填写项目名称"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Objects.isNull(examinationBasic.getExamMode())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请选择考试类型"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(ExamModeEnum.OFFLINE.equals(examinationBasic.getExamMode())&&StringUtils.isBlank(examinationBasic.getExamLocationIdList())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请指定考试地点"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Objects.isNull(examinationBasic.getEnrollStartTime())||Objects.isNull(examinationBasic.getEnrollEndTime())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请指定考试开始与结束时间"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasic.setTenantId(TenantContextHolder.getTenantId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<MusicTheory> musicTheories = musicTheoryDao.getWithTenant(Integer.valueOf(examinationBasic.getTenantId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(CollectionUtils.isEmpty(musicTheories)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请设置乐理"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasic.setStatus(ExamStatusEnum.SETTING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasicDao.insert(examinationBasic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<ExamMusicTheory> examMusicTheories=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (MusicTheory musicTheory : musicTheories) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			ExamMusicTheory emt=new ExamMusicTheory(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			emt.setExaminationBasicId(examinationBasic.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			emt.setTenantId(examinationBasic.getTenantId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			emt.setLevel(musicTheory.getLevel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			emt.setFee(musicTheory.getFee()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			examMusicTheories.add(emt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examMusicTheoryDao.batchInsert(examMusicTheories); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return examinationBasic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void updateExamStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<ExaminationBasic> needUpdateStatusExams = examinationBasicDao.getNeedUpdateStatusExams(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(CollectionUtils.isEmpty(needUpdateStatusExams)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date now=new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (ExaminationBasic needUpdateStatusExam : needUpdateStatusExams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(now.compareTo(needUpdateStatusExam.getEnrollStartTime())>=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				needUpdateStatusExam.setStatus(ExamStatusEnum.APPLYING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(now.compareTo(needUpdateStatusExam.getEnrollEndTime())>=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				needUpdateStatusExam.setStatus(ExamStatusEnum.APPLIED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(now.compareTo(needUpdateStatusExam.getExpectExamStartTime())>=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				needUpdateStatusExam.setStatus(ExamStatusEnum.EXAM_ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasicDao.batchUpdate(needUpdateStatusExams); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public PageInfo<ExaminationBasicDto> findExaminationBasics(ExaminationQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PageInfo<ExaminationBasicDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Map<String, Object> params = new HashMap<String, Object>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<ExaminationBasicDto> dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		int count = examinationBasicDao.countExaminationBasics(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dataList = examinationBasicDao.findExaminationBasics(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Integer> examIds = dataList.stream().map(ExaminationBasicDto::getId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<ExamOrganizationRelation> examOrgans = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(!CollectionUtils.isEmpty(examIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				examOrganizationRelationDao.getWithExams(examIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer, List<ExamOrganizationRelation>> examOrgansMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(!CollectionUtils.isEmpty(examOrgans)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				examOrgansMap = examOrgans.stream().collect(Collectors.groupingBy(ExamOrganizationRelation::getExaminationBasicId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (ExaminationBasicDto examinationBasicDto : dataList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<ExamOrganizationRelation> examOrganizationRelations = examOrgansMap.get(examinationBasicDto.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(CollectionUtils.isEmpty(examOrganizationRelations)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				long totalRegistrationStudentNum = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalRegistrationStudentNum).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				long totalPaymentAmount = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalPaymentAmount).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				examinationBasicDto.setTotalRegistrationStudentNum((int) totalRegistrationStudentNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				examinationBasicDto.setTotalPaymentAmount(new BigDecimal(totalPaymentAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public ExaminationBasicDto getExaminationBasic(Integer examId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Objects.isNull(examId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请指定考级项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ExaminationBasicDto examinationBasic = examinationBasicDao.getExaminationBasic(examId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Objects.isNull(examinationBasic)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("指定的考级项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		List<ExamOrganizationRelation> examOrganizationRelations = examOrganizationRelationDao.getWithExam(examId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(!CollectionUtils.isEmpty(examOrganizationRelations)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			long totalRegistrationStudentNum = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalRegistrationStudentNum).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			long totalPaymentAmount = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalPaymentAmount).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			examinationBasic.setTotalRegistrationStudentNum((int) totalRegistrationStudentNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			examinationBasic.setTotalPaymentAmount(new BigDecimal(totalPaymentAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return examinationBasic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void closeExam(Integer examId, String reason) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Objects.isNull(examId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("请指定考级项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ExaminationBasic examinationBasic = examinationBasicDao.get(examId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Objects.isNull(examinationBasic)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throw new BizException("考级项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(StringUtils.isBlank(reason)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			reason="后台手动关闭"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasic.setMemo(reason); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasic.setStatus(ExamStatusEnum.CLOSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		examinationBasicDao.update(examinationBasic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, ExaminationBasic> implements ExaminationBasicService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ExaminationBasicDao examinationBasicDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ExamOrganizationRelationDao examOrganizationRelationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicTheoryDao musicTheoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ExamMusicTheoryDao examMusicTheoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ExamLocationDao examLocationDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BaseDAO<Long, ExaminationBasic> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return examinationBasicDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ExaminationBasic addExaminationBasic(ExaminationBasic examinationBasic) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(examinationBasic.getName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请填写项目名称"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.isNull(examinationBasic.getExamMode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请选择考试类型"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ExamModeEnum.OFFLINE.equals(examinationBasic.getExamMode()) && StringUtils.isBlank(examinationBasic.getExamLocationIdList())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请指定考试地点"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.isNull(examinationBasic.getEnrollStartTime()) || Objects.isNull(examinationBasic.getEnrollEndTime())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请指定考试开始与结束时间"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasic.setTenantId(TenantContextHolder.getTenantId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicTheory> musicTheories = musicTheoryDao.getWithTenant(Integer.valueOf(examinationBasic.getTenantId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(musicTheories)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请设置乐理"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasic.setStatus(ExamStatusEnum.SETTING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasicDao.insert(examinationBasic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ExamMusicTheory> examMusicTheories = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (MusicTheory musicTheory : musicTheories) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ExamMusicTheory emt = new ExamMusicTheory(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emt.setExaminationBasicId(examinationBasic.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emt.setTenantId(examinationBasic.getTenantId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emt.setLevel(musicTheory.getLevel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emt.setFee(musicTheory.getFee()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            examMusicTheories.add(emt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examMusicTheoryDao.batchInsert(examMusicTheories); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return examinationBasic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateExamStatus() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ExaminationBasic> needUpdateStatusExams = examinationBasicDao.getNeedUpdateStatusExams(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(needUpdateStatusExams)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (ExaminationBasic needUpdateStatusExam : needUpdateStatusExams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (now.compareTo(needUpdateStatusExam.getEnrollStartTime()) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                needUpdateStatusExam.setStatus(ExamStatusEnum.APPLYING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (now.compareTo(needUpdateStatusExam.getEnrollEndTime()) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                needUpdateStatusExam.setStatus(ExamStatusEnum.APPLIED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (now.compareTo(needUpdateStatusExam.getExpectExamStartTime()) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                needUpdateStatusExam.setStatus(ExamStatusEnum.EXAM_ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasicDao.batchUpdate(needUpdateStatusExams); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public PageInfo<ExaminationBasicDto> findExaminationBasics(ExaminationQueryInfo queryInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PageInfo<ExaminationBasicDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> params = new HashMap<String, Object>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MapUtil.populateMap(params, queryInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ExaminationBasicDto> dataList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int count = examinationBasicDao.countExaminationBasics(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pageInfo.setTotal(count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params.put("offset", pageInfo.getOffset()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dataList = examinationBasicDao.findExaminationBasics(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Integer> examIds = dataList.stream().map(ExaminationBasicDto::getId).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ExamOrganizationRelation> examOrgans = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!CollectionUtils.isEmpty(examIds)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                examOrganizationRelationDao.getWithExams(examIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<Integer, List<ExamOrganizationRelation>> examOrgansMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!CollectionUtils.isEmpty(examOrgans)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                examOrgansMap = examOrgans.stream().collect(Collectors.groupingBy(ExamOrganizationRelation::getExaminationBasicId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (ExaminationBasicDto examinationBasicDto : dataList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<ExamOrganizationRelation> examOrganizationRelations = examOrgansMap.get(examinationBasicDto.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (CollectionUtils.isEmpty(examOrganizationRelations)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long totalRegistrationStudentNum = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalRegistrationStudentNum).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                long totalPaymentAmount = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalPaymentAmount).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                examinationBasicDto.setTotalRegistrationStudentNum((int) totalRegistrationStudentNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                examinationBasicDto.setTotalPaymentAmount(new BigDecimal(totalPaymentAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pageInfo.setRows(dataList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ExaminationBasicDto getExaminationBasic(Integer examId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.isNull(examId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请指定考级项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ExaminationBasicDto examinationBasic = examinationBasicDao.getExaminationBasic(examId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.isNull(examinationBasic)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("指定的考级项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ExamOrganizationRelation> examOrganizationRelations = examOrganizationRelationDao.getWithExam(examId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!CollectionUtils.isEmpty(examOrganizationRelations)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            long totalRegistrationStudentNum = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalRegistrationStudentNum).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            long totalPaymentAmount = examOrganizationRelations.stream().map(ExamOrganizationRelation::getTotalPaymentAmount).count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            examinationBasic.setTotalRegistrationStudentNum((int) totalRegistrationStudentNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            examinationBasic.setTotalPaymentAmount(new BigDecimal(totalPaymentAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return examinationBasic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void closeExam(Integer examId, String reason) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.isNull(examId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("请指定考级项目"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ExaminationBasic examinationBasic = examinationBasicDao.get(examId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.isNull(examinationBasic)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("考级项目不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(reason)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            reason = "后台手动关闭"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasic.setMemo(reason); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasic.setStatus(ExamStatusEnum.CLOSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        examinationBasicDao.update(examinationBasic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public ExaminationBasic getInfo(Integer examId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return examinationBasicDao.get(examId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ExaminationBasic examinationBasic = examinationBasicDao.get(examId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (examinationBasic == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BizException("考试项目不存在,请核对"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!StringUtils.isBlank(examinationBasic.getExamLocationIdList())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ExamLocation> examLocations = examLocationDao.getExamLocationByIds(examinationBasic.getExamLocationIdList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            examinationBasic.setExamLocations(examLocations); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return examinationBasic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |