|
@@ -0,0 +1,136 @@
|
|
|
+package cn.com.qmth.print.manage.service.impl;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import cn.com.qmth.print.manage.dao.CheckRecordDao;
|
|
|
+import cn.com.qmth.print.manage.entity.CheckRecordEntity;
|
|
|
+import cn.com.qmth.print.manage.entity.ExamEntity;
|
|
|
+import cn.com.qmth.print.manage.entity.ExamStudentEntity;
|
|
|
+import cn.com.qmth.print.manage.enums.CheckSort;
|
|
|
+import cn.com.qmth.print.manage.enums.GroupType;
|
|
|
+import cn.com.qmth.print.manage.service.CheckRecordService;
|
|
|
+import cn.com.qmth.print.manage.service.ExamService;
|
|
|
+import cn.com.qmth.print.manage.service.ExamStudentService;
|
|
|
+import cn.com.qmth.print.manage.service.query.RecordQuery;
|
|
|
+import cn.com.qmth.print.manage.vo.CheckRecordVo;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.qmth.boot.core.exception.StatusException;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class CheckRecordServiceImpl extends ServiceImpl<CheckRecordDao, CheckRecordEntity> implements
|
|
|
+ CheckRecordService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CheckRecordDao checkRecordDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamStudentService studentService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamService examService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CheckRecordVo start(Long examId, String startNumber) {
|
|
|
+ ExamEntity exam = examService.getById(examId);
|
|
|
+ if (exam == null) {
|
|
|
+ throw new StatusException("找不到考试");
|
|
|
+ }
|
|
|
+ ExamStudentEntity student = studentService.findByExamIdAndExamNumber(examId, startNumber);
|
|
|
+ if (student == null) {
|
|
|
+ throw new StatusException("找不到考生");
|
|
|
+ }
|
|
|
+ String groupName = null;
|
|
|
+ if (GroupType.COURSE.equals(exam.getGroupType())) {
|
|
|
+ groupName = student.getCourseCode();
|
|
|
+ } else if (GroupType.EXAM_SITE.equals(exam.getGroupType())) {
|
|
|
+ groupName = student.getExamSite();
|
|
|
+ } else if (GroupType.EXAM_ROOM.equals(exam.getGroupType())) {
|
|
|
+ groupName = student.getExamRoom();
|
|
|
+ }
|
|
|
+ boolean isAse = CheckSort.ASC.equals(exam.getCheckSort());
|
|
|
+ Long sortNo = studentService.findSortNoByExamIdAndGroupTypeAndSort(examId, exam.getGroupType(), groupName,
|
|
|
+ isAse);
|
|
|
+ if (student.getSortNo().longValue() != sortNo.longValue()) {
|
|
|
+ throw new StatusException("该分组开始考生不正确");
|
|
|
+ }
|
|
|
+ CheckRecordEntity checkRecord = findByGroupTypeAndGroupName(exam.getGroupType(), groupName);
|
|
|
+ checkRecord.setStartNumber(startNumber);
|
|
|
+ checkRecord.setUpdateTime(new Date());
|
|
|
+ saveOrUpdate(checkRecord);
|
|
|
+ return new CheckRecordVo(checkRecord, student);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CheckRecordVo end(Long id, Long examId, String endNumber) {
|
|
|
+ ExamEntity exam = examService.getById(examId);
|
|
|
+ if (exam == null) {
|
|
|
+ throw new StatusException("找不到考试");
|
|
|
+ }
|
|
|
+ ExamStudentEntity student = studentService.findByExamIdAndExamNumber(examId, endNumber);
|
|
|
+ if (student == null) {
|
|
|
+ throw new StatusException("找不到考生");
|
|
|
+ }
|
|
|
+ String groupName = null;
|
|
|
+ if (GroupType.COURSE.equals(exam.getGroupType())) {
|
|
|
+ groupName = student.getCourseCode();
|
|
|
+ } else if (GroupType.EXAM_SITE.equals(exam.getGroupType())) {
|
|
|
+ groupName = student.getExamSite();
|
|
|
+ } else if (GroupType.EXAM_ROOM.equals(exam.getGroupType())) {
|
|
|
+ groupName = student.getExamRoom();
|
|
|
+ }
|
|
|
+ // 开始按考试排序取,结束按逆序取
|
|
|
+ boolean isAse = CheckSort.ASC.equals(exam.getCheckSort());
|
|
|
+ Long sortNo = studentService.findSortNoByExamIdAndGroupTypeAndSort(examId, exam.getGroupType(), groupName,
|
|
|
+ !isAse);
|
|
|
+ if (student.getSortNo().longValue() != sortNo.longValue()) {
|
|
|
+ throw new StatusException("该分组结束考生不正确");
|
|
|
+ }
|
|
|
+ CheckRecordEntity checkRecord = checkRecordDao.selectById(id);
|
|
|
+ checkRecord.setEndNumber(endNumber);
|
|
|
+ checkRecord.setUpdateTime(new Date());
|
|
|
+ saveOrUpdate(checkRecord);
|
|
|
+ return new CheckRecordVo(checkRecord, student);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CheckRecordEntity findByGroupTypeAndGroupName(GroupType type, String groupName) {
|
|
|
+ if (type == null) {
|
|
|
+ throw new StatusException("分组类型不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(groupName)) {
|
|
|
+ throw new StatusException("分组名不能为空");
|
|
|
+ }
|
|
|
+ QueryWrapper<CheckRecordEntity> wrapper = new QueryWrapper<>();
|
|
|
+ LambdaQueryWrapper<CheckRecordEntity> lw = wrapper.lambda();
|
|
|
+ lw.eq(CheckRecordEntity::getGroupType, type);
|
|
|
+ lw.eq(CheckRecordEntity::getGroupName, groupName);
|
|
|
+ CheckRecordEntity entity = this.getOne(wrapper);
|
|
|
+ return entity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<CheckRecordEntity> pageQuery(RecordQuery query) {
|
|
|
+ QueryWrapper<CheckRecordEntity> wrapper = new QueryWrapper<>();
|
|
|
+ LambdaQueryWrapper<CheckRecordEntity> lw = wrapper.lambda();
|
|
|
+ if (query.getStatus() != null) {
|
|
|
+
|
|
|
+ lw.eq(CheckRecordEntity::getStatus, query.getStatus());
|
|
|
+ }
|
|
|
+ if (query.getGroupType() != null) {
|
|
|
+ lw.eq(CheckRecordEntity::getGroupType, query.getGroupType());
|
|
|
+ }
|
|
|
+ lw.eq(CheckRecordEntity::getExamId, query.getExamId());
|
|
|
+ lw.orderByAsc(CheckRecordEntity::getId);
|
|
|
+ Page<CheckRecordEntity> page = new Page<>(query.getPageNumber(), query.getPageSize());
|
|
|
+ return checkRecordDao.selectPage(page, wrapper);
|
|
|
+ }
|
|
|
+}
|