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