|  | @@ -1,26 +1,30 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.LessonExaminationDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.StudentLessonExaminationDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.StudentLessonExaminationDetailDao;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dao.SysConfigDao;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dto.*;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.LessonExaminationSubmitDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.StudentLessonExaminationSaveDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.LessonExamination;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.StudentLessonExamination;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.LessonExaminationService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.service.StudentLessonExaminationService;
 | 
	
		
			
				|  |  | +import com.ym.mec.common.exception.BizException;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.page.PageInfo;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.collection.MapUtil;
 | 
	
		
			
				|  |  |  import com.ym.mec.util.date.DateUtil;
 | 
	
		
			
				|  |  | -import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.slf4j.Logger;
 | 
	
		
			
				|  |  |  import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import java.math.BigDecimal;
 | 
	
		
			
				|  |  | -import java.math.RoundingMode;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
	
		
			
				|  | @@ -34,26 +38,31 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private final static Logger log = LoggerFactory.getLogger(StudentLessonExaminationServiceImpl.class);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private LessonExaminationDao lessonExaminationDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public StudentLessonExaminationDao getDao() {
 | 
	
		
			
				|  |  |          return this.baseMapper;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  | -    private SysConfigDao sysConfigDao;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  | -    private StudentLessonExaminationDetailDao studentLessonExaminationDetailDao;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -    public void save(Long lessonExaminationId, String[] studentIds) {
 | 
	
		
			
				|  |  | +    public void save(Long lessonExaminationId, List<StudentLessonExaminationSaveDto> studentLessonExaminationSaveDtos) {
 | 
	
		
			
				|  |  |          List<StudentLessonExamination> studentLessonExaminations = new ArrayList<>();
 | 
	
		
			
				|  |  | -        for (String studentId : studentIds) {
 | 
	
		
			
				|  |  | -            StudentLessonExamination studentLessonExamination = new StudentLessonExamination();
 | 
	
		
			
				|  |  | -            studentLessonExamination.setLessonExaminationId(lessonExaminationId);
 | 
	
		
			
				|  |  | -            studentLessonExamination.setUserId(Integer.parseInt(studentId));
 | 
	
		
			
				|  |  | -            studentLessonExaminations.add(studentLessonExamination);
 | 
	
		
			
				|  |  | +        for (StudentLessonExaminationSaveDto dto : studentLessonExaminationSaveDtos) {
 | 
	
		
			
				|  |  | +            String[] studentIds = dto.getStudentIds().split(",");
 | 
	
		
			
				|  |  | +            for (String studentId : studentIds) {
 | 
	
		
			
				|  |  | +                StudentLessonExamination studentLessonExamination = new StudentLessonExamination();
 | 
	
		
			
				|  |  | +                studentLessonExamination.setLessonExaminationId(lessonExaminationId);
 | 
	
		
			
				|  |  | +                studentLessonExamination.setUserId(Integer.parseInt(studentId));
 | 
	
		
			
				|  |  | +                studentLessonExamination.setSubjectId(dto.getSubjectId());
 | 
	
		
			
				|  |  | +                studentLessonExaminations.add(studentLessonExamination);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          baseMapper.insertBatch(studentLessonExaminations);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -79,7 +88,54 @@ public class StudentLessonExaminationServiceImpl extends ServiceImpl<StudentLess
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void submit(LessonExaminationSubmitDto submitDto) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        Long studentLessonExaminationDetailId = submitDto.getStudentLessonExaminationDetailId();
 | 
	
		
			
				|  |  | +        StudentLessonExaminationDetail detail = studentLessonExaminationDetailService.getById(studentLessonExaminationDetailId);
 | 
	
		
			
				|  |  | +        if(Objects.isNull(detail)){
 | 
	
		
			
				|  |  | +            throw new BizException("训练内容不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Long lessonExaminationId = detail.getLessonExaminationId();
 | 
	
		
			
				|  |  | +        Integer userId = detail.getUserId();
 | 
	
		
			
				|  |  | +        LessonExamination lessonExamination = lessonExaminationDao.selectById(lessonExaminationId);
 | 
	
		
			
				|  |  | +        if(Objects.isNull(lessonExamination)){
 | 
	
		
			
				|  |  | +            throw new BizException("训练内容不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Date now = new Date();
 | 
	
		
			
				|  |  | +        Date expireDate = DateUtil.stringToDate(lessonExamination.getExpireDate(), DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  | +        if(DateUtil.daysBetween(now,expireDate) < 0){
 | 
	
		
			
				|  |  | +            throw new BizException("训练已截止");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        StudentLessonExamination studentLessonExamination = this.lambdaQuery().eq(StudentLessonExamination::getLessonExaminationId, lessonExaminationId)
 | 
	
		
			
				|  |  | +                .eq(StudentLessonExamination::getUserId, userId).one();
 | 
	
		
			
				|  |  | +        studentLessonExamination.setTrainingTime(now);
 | 
	
		
			
				|  |  | +        this.updateById(studentLessonExamination);
 | 
	
		
			
				|  |  | +        detail.setTrainingTime(now);
 | 
	
		
			
				|  |  | +        if(detail.getTrainingTime() == null){
 | 
	
		
			
				|  |  | +            //训练人数加一
 | 
	
		
			
				|  |  | +            lessonExaminationDao.updateTrainingNum(lessonExaminationId);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //是否达标
 | 
	
		
			
				|  |  | +        if(submitDto.getScore() >= detail.getStandardScore()){
 | 
	
		
			
				|  |  | +            if(!detail.getStandardFlag()){
 | 
	
		
			
				|  |  | +                //达标人数加一
 | 
	
		
			
				|  |  | +                lessonExaminationDao.updateStandardNum(lessonExaminationId);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            detail.setStandardFlag(true);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //训练分数是否比上一次高
 | 
	
		
			
				|  |  | +        Boolean flag = submitDto.getScore() > detail.getTrainingScore();
 | 
	
		
			
				|  |  | +        if(flag){
 | 
	
		
			
				|  |  | +            detail.setTrainingScore(submitDto.getScore());
 | 
	
		
			
				|  |  | +            //计算分数
 | 
	
		
			
				|  |  | +            Double actualScore = detail.getTrainingScore() * 1D / detail.getStandardScore() * detail.getAvgScore();
 | 
	
		
			
				|  |  | +            //更新分数
 | 
	
		
			
				|  |  | +            detail.setActualAvgScore(actualScore.intValue() > detail.getAvgScore() ? detail.getAvgScore():actualScore.intValue());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //更新详情
 | 
	
		
			
				|  |  | +        studentLessonExaminationDetailService.updateById(detail);
 | 
	
		
			
				|  |  | +        //更新总分
 | 
	
		
			
				|  |  | +        if(flag){
 | 
	
		
			
				|  |  | +            baseMapper.updateTrainingScore(lessonExaminationId,userId);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 |