|
@@ -7,10 +7,10 @@ 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.admin.*;
|
|
import com.qmth.themis.business.bean.admin.*;
|
|
import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
|
|
import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
|
|
|
|
+import com.qmth.themis.business.cache.ExamBreakCacheUtil;
|
|
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.*;
|
|
-import com.qmth.themis.business.constant.SpringContextHolder;
|
|
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
import com.qmth.themis.business.dao.TOeExamRecordMapper;
|
|
import com.qmth.themis.business.dao.TOeExamRecordMapper;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
@@ -1037,69 +1037,68 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
Long lastBreakTimeNow = System.currentTimeMillis();
|
|
Long lastBreakTimeNow = System.currentTimeMillis();
|
|
ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTimeNow, false);
|
|
ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTimeNow, false);
|
|
ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
|
|
ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
|
|
- Long lastStartTime = System.currentTimeMillis();
|
|
|
|
- ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
|
|
String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(),
|
|
String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(),
|
|
ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(),
|
|
ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(),
|
|
- ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name()};
|
|
|
|
|
|
+ ExamRecordFieldEnum.already_break_count.name()};
|
|
Object[] values = new Object[]{breakId, ExamRecordStatusEnum.BREAK_OFF, lastBreakTimeNow,
|
|
Object[] values = new Object[]{breakId, ExamRecordStatusEnum.BREAK_OFF, lastBreakTimeNow,
|
|
- alreadyBreakCount, lastStartTime};
|
|
|
|
- TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
|
|
|
|
- tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
|
|
|
|
- //考试断点异常原因 发送mq start
|
|
|
|
- MqDto mqDtoBreak = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_BREAK.name(),
|
|
|
|
- ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId),
|
|
|
|
- String.valueOf(recordId));
|
|
|
|
- MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
|
|
|
|
- mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
|
|
|
|
- //考试断点异常原因 发送mq end
|
|
|
|
-
|
|
|
|
- Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
|
- ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
|
|
- Integer breakExpireSeconds = Objects.isNull(ec.getBreakExpireSeconds()) ?
|
|
|
|
- 0 :
|
|
|
|
- ec.getBreakExpireSeconds();
|
|
|
|
- if (breakExpireSeconds.intValue() > 0) {
|
|
|
|
- List<String> list = SystemConstant.mqDelayLevelList.subList(5, 15);
|
|
|
|
- String level = null;
|
|
|
|
- if (breakExpireSeconds.intValue() <= 60) {
|
|
|
|
- level = "1m";
|
|
|
|
- } else {
|
|
|
|
- Integer time = breakExpireSeconds.intValue() / 60;
|
|
|
|
- if (time.intValue() >= 30) {
|
|
|
|
- level = "30m";
|
|
|
|
|
|
+ alreadyBreakCount};
|
|
|
|
+ ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
+ if (Objects.nonNull(examRecordStatusEnum) && examRecordStatusEnum == ExamRecordStatusEnum.BREAK_OFF) {
|
|
|
|
+ this.dataUpdatesMq(recordId, columns, values);
|
|
|
|
+ //考试断点异常原因 发送mq start
|
|
|
|
+ MqDto mqDtoBreak = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_BREAK.name(),
|
|
|
|
+ ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId),
|
|
|
|
+ String.valueOf(recordId));
|
|
|
|
+ mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
|
|
|
|
+ //考试断点异常原因 发送mq end
|
|
|
|
+
|
|
|
|
+ Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
|
+ ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
|
|
+ Integer breakExpireSeconds = Objects.isNull(ec.getBreakExpireSeconds()) ?
|
|
|
|
+ 0 :
|
|
|
|
+ ec.getBreakExpireSeconds();
|
|
|
|
+ if (breakExpireSeconds.intValue() > 0) {
|
|
|
|
+ List<String> list = SystemConstant.mqDelayLevelList.subList(5, 15);
|
|
|
|
+ String level = null;
|
|
|
|
+ if (breakExpireSeconds.intValue() <= 60) {
|
|
|
|
+ level = "1m";
|
|
} else {
|
|
} else {
|
|
- for (String s : list) {
|
|
|
|
- Integer value = Integer.parseInt(s.substring(0, s.length() - 1));
|
|
|
|
- if (time.intValue() <= value.intValue()) {
|
|
|
|
- level = value + "m";
|
|
|
|
- break;
|
|
|
|
|
|
+ Integer time = breakExpireSeconds.intValue() / 60;
|
|
|
|
+ if (time.intValue() >= 30) {
|
|
|
|
+ level = "30m";
|
|
|
|
+ } else {
|
|
|
|
+ for (String s : list) {
|
|
|
|
+ Integer value = Integer.parseInt(s.substring(0, s.length() - 1));
|
|
|
|
+ if (time.intValue() <= value.intValue()) {
|
|
|
|
+ level = value + "m";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ Map<String, Object> tranMap = new HashMap<>();
|
|
|
|
+ Integer time = SystemConstant.mqDelayLevel.get(level);
|
|
|
|
+ LocalDateTime dt = LocalDateTime.now();
|
|
|
|
+ if (level.contains("m")) {
|
|
|
|
+ dt = dt.plusMinutes(Long.parseLong(level.replace("m", "")));
|
|
|
|
+ } else {
|
|
|
|
+ dt = dt.plusSeconds(Long.parseLong(level.replace("s", "")));
|
|
|
|
+ }
|
|
|
|
+ tranMap.put("recordId", recordId);
|
|
|
|
+ tranMap.put("timeOut", time);
|
|
|
|
+ tranMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
|
|
|
|
+ //考试断点延时消息 发送mq start
|
|
|
|
+ MqDto mqDtoBreakDelay = new MqDto(mqUtil.getMqGroupDomain().getTopic(),
|
|
|
|
+ MqTagEnum.EXAM_BREAK_DELAY.name(), MqTagEnum.EXAM_BREAK_DELAY, MqTagEnum.EXAM_BREAK_DELAY,
|
|
|
|
+ String.valueOf(recordId), tranMap, String.valueOf(recordId));
|
|
|
|
+ mqDtoService.assembleSendAsyncDelayMsg(mqDtoBreakDelay);
|
|
|
|
+ //考试断点延时消息 发送mq end
|
|
}
|
|
}
|
|
- Map<String, Object> tranMap = new HashMap<>();
|
|
|
|
- Integer time = SystemConstant.mqDelayLevel.get(level);
|
|
|
|
- LocalDateTime dt = LocalDateTime.now();
|
|
|
|
- if (level.contains("m")) {
|
|
|
|
- dt = dt.plusMinutes(Long.parseLong(level.replace("m", "")));
|
|
|
|
- } else {
|
|
|
|
- dt = dt.plusSeconds(Long.parseLong(level.replace("s", "")));
|
|
|
|
- }
|
|
|
|
- tranMap.put("recordId", recordId);
|
|
|
|
- tranMap.put("timeOut", time);
|
|
|
|
- tranMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
|
|
|
|
- //考试断点延时消息 发送mq start
|
|
|
|
- MqDto mqDtoBreakDelay = new MqDto(mqUtil.getMqGroupDomain().getTopic(),
|
|
|
|
- MqTagEnum.EXAM_BREAK_DELAY.name(), MqTagEnum.EXAM_BREAK_DELAY, MqTagEnum.EXAM_BREAK_DELAY,
|
|
|
|
- String.valueOf(recordId), tranMap, String.valueOf(recordId));
|
|
|
|
- mqDtoService.assembleSendAsyncDelayMsg(mqDtoBreakDelay);
|
|
|
|
- //考试断点延时消息 发送mq end
|
|
|
|
|
|
+ //更新场次-考试记录缓存
|
|
|
|
+ ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId,
|
|
|
|
+ new ExamActivityRecordCacheBean(ExamRecordCacheUtil.getExamStudentId(recordId),
|
|
|
|
+ ExamRecordCacheUtil.getStatus(recordId)));
|
|
}
|
|
}
|
|
- //更新场次-考试记录缓存
|
|
|
|
- ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId,
|
|
|
|
- new ExamActivityRecordCacheBean(ExamRecordCacheUtil.getExamStudentId(recordId),
|
|
|
|
- ExamRecordCacheUtil.getStatus(recordId)));
|
|
|
|
break;
|
|
break;
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("请求出错", e);
|
|
log.error("请求出错", e);
|