|
@@ -1,40 +1,82 @@
|
|
package com.qmth.themis.business.service.impl;
|
|
package com.qmth.themis.business.service.impl;
|
|
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.io.InputStream;
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.Collections;
|
|
|
|
+import java.util.Comparator;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Objects;
|
|
|
|
+import java.util.UUID;
|
|
|
|
+
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
+
|
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
|
+import org.springframework.cache.annotation.CacheEvict;
|
|
|
|
+import org.springframework.cache.annotation.CachePut;
|
|
|
|
+import org.springframework.cache.annotation.Cacheable;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
+
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
-import com.qmth.themis.business.bean.exam.*;
|
|
|
|
|
|
+import com.qmth.themis.business.bean.exam.AnswerSubmitBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.AudioLeftPlayCountSubmitBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.ExamFileUploadBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.ExamFinishBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.ExamPrepareBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.ExamResultBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.ExamResumeBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.ExamStartBean;
|
|
|
|
+import com.qmth.themis.business.bean.exam.StudentPaperStructBean;
|
|
import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
|
|
import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
|
|
import com.qmth.themis.business.cache.ExamRecordCacheUtil;
|
|
import com.qmth.themis.business.cache.ExamRecordCacheUtil;
|
|
import com.qmth.themis.business.cache.RedisKeyHelper;
|
|
import com.qmth.themis.business.cache.RedisKeyHelper;
|
|
-import com.qmth.themis.business.cache.bean.*;
|
|
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamCacheBean;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamCourseCacheBean;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamPaperCacheBean;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamStudentAnswerCacheBean;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamStudentPaperStructCacheBean;
|
|
import com.qmth.themis.business.config.SystemConfig;
|
|
import com.qmth.themis.business.config.SystemConfig;
|
|
import com.qmth.themis.business.dao.TEExamMapper;
|
|
import com.qmth.themis.business.dao.TEExamMapper;
|
|
|
|
+import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
|
|
import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
|
|
import com.qmth.themis.business.dto.response.TEExamActivityDto;
|
|
import com.qmth.themis.business.dto.response.TEExamActivityDto;
|
|
import com.qmth.themis.business.dto.response.TEExamDto;
|
|
import com.qmth.themis.business.dto.response.TEExamDto;
|
|
import com.qmth.themis.business.dto.response.TEExamQueryDto;
|
|
import com.qmth.themis.business.dto.response.TEExamQueryDto;
|
|
import com.qmth.themis.business.entity.TEExam;
|
|
import com.qmth.themis.business.entity.TEExam;
|
|
import com.qmth.themis.business.entity.TOeExamRecord;
|
|
import com.qmth.themis.business.entity.TOeExamRecord;
|
|
-import com.qmth.themis.business.enums.*;
|
|
|
|
-import com.qmth.themis.business.service.*;
|
|
|
|
|
|
+import com.qmth.themis.business.enums.EntryAuthenticationPolicyEnum;
|
|
|
|
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
|
|
|
|
+import com.qmth.themis.business.enums.FinishExamResultEnum;
|
|
|
|
+import com.qmth.themis.business.enums.FinishTypeEnum;
|
|
|
|
+import com.qmth.themis.business.enums.HardwareTestEnum;
|
|
|
|
+import com.qmth.themis.business.enums.InvigilateVerifyEnum;
|
|
|
|
+import com.qmth.themis.business.enums.MonitorVideoSourceEnum;
|
|
|
|
+import com.qmth.themis.business.enums.MqEnum;
|
|
|
|
+import com.qmth.themis.business.enums.MqTagEnum;
|
|
|
|
+import com.qmth.themis.business.enums.MqTopicEnum;
|
|
|
|
+import com.qmth.themis.business.enums.ReviewResultEnum;
|
|
|
|
+import com.qmth.themis.business.service.MqDtoService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamActivityService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamCourseService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamPaperService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamStudentService;
|
|
|
|
+import com.qmth.themis.business.service.TOeExamRecordService;
|
|
import com.qmth.themis.business.util.OssUtil;
|
|
import com.qmth.themis.business.util.OssUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
-import org.apache.commons.codec.digest.DigestUtils;
|
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
|
-import org.springframework.cache.annotation.CacheEvict;
|
|
|
|
-import org.springframework.cache.annotation.CachePut;
|
|
|
|
-import org.springframework.cache.annotation.Cacheable;
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
|
-
|
|
|
|
-import javax.annotation.Resource;
|
|
|
|
-import java.io.IOException;
|
|
|
|
-import java.io.InputStream;
|
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
|
-import java.util.*;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
* @Description: 考试批次 服务实现类
|
|
* @Description: 考试批次 服务实现类
|
|
@@ -72,6 +114,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
SystemConfig systemConfig;
|
|
SystemConfig systemConfig;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ MqDtoService mqDtoService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询考试批次
|
|
* 查询考试批次
|
|
@@ -418,8 +463,21 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
ExamRecordCacheUtil.setObjectiveScore(recordId, null);
|
|
ExamRecordCacheUtil.setObjectiveScore(recordId, null);
|
|
AnswerSubmitBean ret = new AnswerSubmitBean();
|
|
AnswerSubmitBean ret = new AnswerSubmitBean();
|
|
ret.setVersion(version);
|
|
ret.setVersion(version);
|
|
|
|
+ // 发消息计算客观分
|
|
|
|
+ calculateObjectiveScore(recordId, mainNumber, subNumber, subIndex);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
+ private void calculateObjectiveScore(Long recordId, Integer mainNumber, Integer subNumber, Integer subIndex) {
|
|
|
|
+ Map<String, Object> transMap = new HashMap<String, Object>();
|
|
|
|
+ transMap.put("recordId", recordId);
|
|
|
|
+ transMap.put("mainNumber", mainNumber);
|
|
|
|
+ transMap.put("subNumber", subNumber);
|
|
|
|
+ transMap.put("subIndex", subIndex);
|
|
|
|
+ // mq发送消息start
|
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.calculateObjectiveScore.name(), transMap,
|
|
|
|
+ MqEnum.EXAM, recordId.toString(), recordId.toString());
|
|
|
|
+ mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* 更新音频剩余播放次数
|
|
* 更新音频剩余播放次数
|
|
@@ -658,9 +716,31 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
TEStudentCacheDto teStudentCacheDto = (TEStudentCacheDto) redisUtil.getStudent(es.getStudentId());
|
|
TEStudentCacheDto teStudentCacheDto = (TEStudentCacheDto) redisUtil.getStudent(es.getStudentId());
|
|
teStudentCacheDto.setUnFinishedRecordId(null);
|
|
teStudentCacheDto.setUnFinishedRecordId(null);
|
|
redisUtil.setStudent(teStudentCacheDto.getId(), teStudentCacheDto);
|
|
redisUtil.setStudent(teStudentCacheDto.getId(), teStudentCacheDto);
|
|
|
|
+ checkToPersisted(recordId);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 检查条件并发送持久化消息
|
|
|
|
+ *
|
|
|
|
+ * @param recordId
|
|
|
|
+ */
|
|
|
|
+ private void checkToPersisted(Long recordId) {
|
|
|
|
+ ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
+ if (!ExamRecordStatusEnum.FINISHED.equals(status)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ Double score = ExamRecordCacheUtil.getObjectiveScore(recordId);
|
|
|
|
+ if (score == null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Map<String, Object> transMap = new HashMap<String, Object>();
|
|
|
|
+ transMap.put("recordId", recordId);
|
|
|
|
+ // mq发送消息start
|
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examRecordPersisted.name(), transMap,
|
|
|
|
+ MqEnum.EXAM, recordId.toString(), recordId.toString());
|
|
|
|
+ mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
|
|
+ }
|
|
@Cacheable(value = "exam", key = "#examId", unless = "#result == null")
|
|
@Cacheable(value = "exam", key = "#examId", unless = "#result == null")
|
|
@Override
|
|
@Override
|
|
public ExamCacheBean getExamCacheBean(Long examId) {
|
|
public ExamCacheBean getExamCacheBean(Long examId) {
|