| 
					
				 | 
			
			
				@@ -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 
			 |