|
@@ -14,6 +14,7 @@ import com.qmth.themis.business.cache.bean.ExamCourseCacheBean;
|
|
|
import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
|
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
|
import com.qmth.themis.business.dto.AuthDto;
|
|
|
+import com.qmth.themis.business.dto.MqDto;
|
|
|
import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
|
|
|
import com.qmth.themis.business.dto.response.TEExamActivityDto;
|
|
|
import com.qmth.themis.business.dto.response.TEExamDto;
|
|
@@ -37,10 +38,6 @@ import com.qmth.themis.common.signature.SignatureType;
|
|
|
import com.qmth.themis.common.util.AesUtil;
|
|
|
import com.qmth.themis.common.util.Result;
|
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
|
-import com.qmth.themis.business.dto.MqDto;
|
|
|
-import com.qmth.themis.business.enums.MqTagEnum;
|
|
|
-import com.qmth.themis.business.enums.MqTopicEnum;
|
|
|
-import com.qmth.themis.business.service.MqDtoService;
|
|
|
import io.swagger.annotations.*;
|
|
|
import org.apache.commons.lang3.RandomStringUtils;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
@@ -199,6 +196,10 @@ public class TEStudentController {
|
|
|
Long recordId = teStudentCacheDto.getUnFinishedRecordId();
|
|
|
//获取考试记录缓存
|
|
|
Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
+ String status = String.valueOf(objectMap.get("status"));
|
|
|
+ if (Objects.isNull(status)) {
|
|
|
+ throw new BusinessException("考试状态不能为空");
|
|
|
+ }
|
|
|
Long examIdMap = Long.parseLong(String.valueOf(objectMap.get("examId")));
|
|
|
Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
Long examActivityId = Long.parseLong(String.valueOf(objectMap.get("examActivityId")));
|
|
@@ -217,40 +218,40 @@ public class TEStudentController {
|
|
|
//获取剩余断点次数
|
|
|
Integer leftBreakResumeCount = Objects.isNull(ExamRecordCacheUtil.getLeftBreakResumeCount(recordId)) ? 0 : ExamRecordCacheUtil.getLeftBreakResumeCount(recordId);
|
|
|
//如果断点时间大于整体断点时间,则强制交卷
|
|
|
- if (Objects.nonNull(clientLastSyncTime) && (System.currentTimeMillis() - clientLastSyncTime.getTime() / 1000) > ec.getBreakExpireSeconds()) {
|
|
|
- teExamService.finish(teStudentCacheDto.getId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
- List<TEExamDto> list = teExamService.getWaitingExam(teStudent.getId(), examId, orgId);
|
|
|
- if (Objects.nonNull(list) && list.size() > 0) {
|
|
|
- map.put("waiting", list);
|
|
|
- }
|
|
|
- } else {//否则断点次数减1
|
|
|
- leftBreakResumeCount--;
|
|
|
- leftBreakResumeCount = leftBreakResumeCount <= 0 ? 0 : leftBreakResumeCount;
|
|
|
- //如果断点次数为0,也强制交卷
|
|
|
- if (leftBreakResumeCount <= 0) {
|
|
|
+ if (Objects.equals(status, ExamRecordStatusEnum.ANSWERING.name())) {
|
|
|
+ if (Objects.nonNull(clientLastSyncTime) && (System.currentTimeMillis() - clientLastSyncTime.getTime() / 1000) > ec.getBreakExpireSeconds()) {
|
|
|
teExamService.finish(teStudentCacheDto.getId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
List<TEExamDto> list = teExamService.getWaitingExam(teStudent.getId(), examId, orgId);
|
|
|
if (Objects.nonNull(list) && list.size() > 0) {
|
|
|
map.put("waiting", list);
|
|
|
}
|
|
|
- } else {
|
|
|
- //更新考试记录
|
|
|
- objectMap.put("status", ExamRecordStatusEnum.RESUME_PREPARE.name());
|
|
|
- objectMap.put("lastBreakTime", new Date());
|
|
|
- objectMap.put("leftBreakResumeCount", leftBreakResumeCount);
|
|
|
- objectMap.put("lastStartTime", new Date());
|
|
|
+ } else {//否则断点次数减1
|
|
|
+ leftBreakResumeCount--;
|
|
|
+ leftBreakResumeCount = leftBreakResumeCount <= 0 ? 0 : leftBreakResumeCount;
|
|
|
+ //如果断点次数为0,也强制交卷
|
|
|
+ if (leftBreakResumeCount <= 0) {
|
|
|
+ teExamService.finish(teStudentCacheDto.getId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
+ List<TEExamDto> list = teExamService.getWaitingExam(teStudent.getId(), examId, orgId);
|
|
|
+ if (Objects.nonNull(list) && list.size() > 0) {
|
|
|
+ map.put("waiting", list);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //更新考试记录
|
|
|
+ objectMap.put("status", ExamRecordStatusEnum.RESUME_PREPARE.name());
|
|
|
+ objectMap.put("lastBreakTime", new Date());
|
|
|
+ objectMap.put("leftBreakResumeCount", leftBreakResumeCount);
|
|
|
+ objectMap.put("lastStartTime", new Date());
|
|
|
|
|
|
- //发送mq,增加断点次数记录
|
|
|
- MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examBreakHistory.name(), JacksonUtil.parseJson(objectMap), MqEnum.EXAM_BREAK, String.valueOf(recordId), "增加断点记录");
|
|
|
- mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
|
- ExamCourseCacheBean examCourseCacheBean = teExamCourseService.getExamCourseCacheBean(ec.getId(), examStudentCacheBean.getCourseCode());
|
|
|
- TEExamActivityDto teExamActivityDto = new TEExamActivityDto(ec, examActivityCacheBean, examStudentCacheBean, examStudentId, examCourseCacheBean);
|
|
|
- Gson gson = new Gson();
|
|
|
- ExamActivityUnFinishBean examActivityUnFinishBean = gson.fromJson(gson.toJson(teExamActivityDto), ExamActivityUnFinishBean.class);
|
|
|
- examActivityUnFinishBean.setRecordId(recordId);
|
|
|
- ExamUnFinishBean examUnFinishBean = new ExamUnFinishBean(ec.getId(), ec.getName(), ec.getPreNotice(), ec.getPreNoticeStaySeconds(), ec.getPostNotice(), examActivityUnFinishBean);
|
|
|
- map.put("unFinished", examUnFinishBean);
|
|
|
+ //发送mq,增加断点次数记录
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.examBreakHistory.name(), JacksonUtil.parseJson(objectMap), MqEnum.EXAM_BREAK, String.valueOf(recordId), "增加断点记录");
|
|
|
+ mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
|
+ ExamUnFinishBean examUnFinishBean = this.unFinishCommon(recordId, ec, examStudentCacheBean, examActivityCacheBean, examStudentId);
|
|
|
+ map.put("unFinished", examUnFinishBean);
|
|
|
+ }
|
|
|
}
|
|
|
+ } else {
|
|
|
+ ExamUnFinishBean examUnFinishBean = this.unFinishCommon(recordId, ec, examStudentCacheBean, examActivityCacheBean, examStudentId);
|
|
|
+ map.put("unFinished", examUnFinishBean);
|
|
|
}
|
|
|
}
|
|
|
//获取全局考试配置
|
|
@@ -292,4 +293,23 @@ public class TEStudentController {
|
|
|
//mq发送消息end
|
|
|
return ResultUtil.ok(JacksonUtil.parseJson(SystemConstant.SUCCESS));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 未完成公用
|
|
|
+ *
|
|
|
+ * @param recordId
|
|
|
+ * @param ec
|
|
|
+ * @param examStudentCacheBean
|
|
|
+ * @param examActivityCacheBean
|
|
|
+ * @param examStudentId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ExamUnFinishBean unFinishCommon(Long recordId, ExamCacheBean ec, ExamStudentCacheBean examStudentCacheBean, ExamActivityCacheBean examActivityCacheBean, Long examStudentId) {
|
|
|
+ ExamCourseCacheBean examCourseCacheBean = teExamCourseService.getExamCourseCacheBean(ec.getId(), examStudentCacheBean.getCourseCode());
|
|
|
+ TEExamActivityDto teExamActivityDto = new TEExamActivityDto(ec, examActivityCacheBean, examStudentCacheBean, examStudentId, examCourseCacheBean);
|
|
|
+ Gson gson = new Gson();
|
|
|
+ ExamActivityUnFinishBean examActivityUnFinishBean = gson.fromJson(gson.toJson(teExamActivityDto), ExamActivityUnFinishBean.class);
|
|
|
+ examActivityUnFinishBean.setRecordId(recordId);
|
|
|
+ return new ExamUnFinishBean(ec.getId(), ec.getName(), ec.getPreNotice(), ec.getPreNoticeStaySeconds(), ec.getPostNotice(), examActivityUnFinishBean);
|
|
|
+ }
|
|
|
}
|