|  | @@ -2,25 +2,36 @@ package com.keao.edu.user.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import com.keao.edu.common.dal.BaseDAO;
 | 
	
		
			
				|  |  |  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.ExamOrganizationRelationDao;
 | 
	
		
			
				|  |  |  import com.keao.edu.user.dao.ExaminationBasicDao;
 | 
	
		
			
				|  |  | +import com.keao.edu.user.dto.ExaminationBasicDto;
 | 
	
		
			
				|  |  | +import com.keao.edu.user.entity.ExamOrganizationRelation;
 | 
	
		
			
				|  |  |  import com.keao.edu.user.entity.ExaminationBasic;
 | 
	
		
			
				|  |  |  import com.keao.edu.user.enums.ExamModeEnum;
 | 
	
		
			
				|  |  |  import com.keao.edu.user.enums.ExamStatusEnum;
 | 
	
		
			
				|  |  | +import com.keao.edu.user.page.ExaminationQueryInfo;
 | 
	
		
			
				|  |  |  import com.keao.edu.user.service.ExaminationBasicService;
 | 
	
		
			
				|  |  | +import com.keao.edu.util.collection.MapUtil;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.apache.poi.ss.formula.functions.T;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  |  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;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	public BaseDAO<Long, ExaminationBasic> getDAO() {
 | 
	
	
		
			
				|  | @@ -69,6 +80,58 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@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 = 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("请指定考级项目");
 |