|
@@ -143,7 +143,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public Long saveByPrepare(Long examId, Long examActivityId, Long examStudentId, Long paperId,
|
|
|
- Integer serialNumber) {
|
|
|
+ Integer serialNumber) {
|
|
|
ExamActivityCacheBean ac = examActivityService.getExamActivityCacheBean(examActivityId);
|
|
|
ExamCacheBean exam = examService.getExamCacheBean(examId);
|
|
|
TOeExamRecord er = new TOeExamRecord();
|
|
@@ -443,13 +443,13 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
|
|
|
@Override
|
|
|
public void saveFaceVerify(ExamTypeEnum type, Long recordId, Long entryAuthenticationId,
|
|
|
- VerifyExceptionEnum entryAuthenticationResult) {
|
|
|
+ VerifyExceptionEnum entryAuthenticationResult) {
|
|
|
if (ExamTypeEnum.FIRST_START.equals(type)) {
|
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId, false);
|
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult, false);
|
|
|
- String[] columns = new String[] { ExamRecordFieldEnum.entry_authentication_id.name(),
|
|
|
- ExamRecordFieldEnum.entry_authentication_result.name() };
|
|
|
- Object[] values = new Object[] { entryAuthenticationId, entryAuthenticationResult };
|
|
|
+ String[] columns = new String[]{ExamRecordFieldEnum.entry_authentication_id.name(),
|
|
|
+ ExamRecordFieldEnum.entry_authentication_result.name()};
|
|
|
+ Object[] values = new Object[]{entryAuthenticationId, entryAuthenticationResult};
|
|
|
this.dataUpdatesMq(recordId, columns, values);
|
|
|
} else if (ExamTypeEnum.IN_PROCESS.equals(type)) {
|
|
|
|
|
@@ -458,13 +458,13 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
|
|
|
@Override
|
|
|
public void saveLivenessVerify(LivenessTypeEnum type, Long recordId, Long entryAuthenticationId,
|
|
|
- VerifyExceptionEnum entryAuthenticationResult) {
|
|
|
+ VerifyExceptionEnum entryAuthenticationResult) {
|
|
|
if (LivenessTypeEnum.FIRST_START.equals(type)) {
|
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId, false);
|
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult, false);
|
|
|
- String[] columns = new String[] { ExamRecordFieldEnum.entry_authentication_id.name(),
|
|
|
- ExamRecordFieldEnum.entry_authentication_result.name() };
|
|
|
- Object[] values = new Object[] { entryAuthenticationId, entryAuthenticationResult };
|
|
|
+ String[] columns = new String[]{ExamRecordFieldEnum.entry_authentication_id.name(),
|
|
|
+ ExamRecordFieldEnum.entry_authentication_result.name()};
|
|
|
+ Object[] values = new Object[]{entryAuthenticationId, entryAuthenticationResult};
|
|
|
this.dataUpdatesMq(recordId, columns, values);
|
|
|
} else if (LivenessTypeEnum.IN_PROCESS.equals(type)) {
|
|
|
Integer count = ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId);
|
|
@@ -571,9 +571,9 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<InvigilateListBean> invigilatePageList(IPage<Map> iPage, Long examId, Long examActivityId,
|
|
|
- String roomCode, Integer paperDownload, String status, String name, String identity,
|
|
|
- Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, String monitorStatusSource,
|
|
|
- Long userId) {
|
|
|
+ String roomCode, Integer paperDownload, String status, String name, String identity,
|
|
|
+ Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, String monitorStatusSource,
|
|
|
+ Long userId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePageList(iPage, examId, examActivityId, roomCode, paperDownload, status, name, identity,
|
|
|
minWarningCount, maxWarningCount, clientWebsocketStatus, monitorStatusSource, userId);
|
|
@@ -599,8 +599,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<InvigilateListVideoBean> invigilatePageListVideo(IPage<Map> iPage, Long examId, Long examActivityId,
|
|
|
- String roomCode, Integer paperDownload, String status, String name, String identity,
|
|
|
- Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
+ String roomCode, Integer paperDownload, String status, String name, String identity,
|
|
|
+ Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePageListVideo(iPage, examId, examActivityId, roomCode, paperDownload, status, name, identity,
|
|
|
minWarningCount, maxWarningCount, clientWebsocketStatus, userId, orgId);
|
|
@@ -617,7 +617,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public List<InvigilateListVideoBean> invigilatePageListVideoRandom(Long examId, Long userId, Integer randomNum,
|
|
|
- Long orgId) {
|
|
|
+ Long orgId) {
|
|
|
return tOeExamRecordMapper.invigilatePageListVideoRandom(examId, userId, randomNum, orgId);
|
|
|
}
|
|
|
|
|
@@ -644,9 +644,9 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<InvigilateListPatrolBean> invigilatePagePatrolList(IPage<Map> iPage, Long examId, Long examActivityId,
|
|
|
- String roomCode, String status, String name, String identity, Integer minMultipleFaceCount,
|
|
|
- Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount,
|
|
|
- Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
+ String roomCode, String status, String name, String identity, Integer minMultipleFaceCount,
|
|
|
+ Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount,
|
|
|
+ Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePagePatrolList(iPage, examId, examActivityId, roomCode, status, name, identity,
|
|
|
minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount,
|
|
@@ -675,9 +675,9 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<InvigilateListWarningBean> invigilatePageWarningList(IPage<Map> iPage, Long examId,
|
|
|
- Long examActivityId, String roomCode, Integer approveStatus, String name, String identity,
|
|
|
- Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount,
|
|
|
- Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, Long userId, Long orgId) {
|
|
|
+ Long examActivityId, String roomCode, Integer approveStatus, String name, String identity,
|
|
|
+ Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount,
|
|
|
+ Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, Long userId, Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePageWarningList(iPage, examId, examActivityId, roomCode, approveStatus, name, identity,
|
|
|
minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount,
|
|
@@ -705,9 +705,9 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public Integer approveStatusListUpdate(Long examId, Long examActivityId, String roomCode, Integer approveStatus,
|
|
|
- String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount,
|
|
|
- Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount,
|
|
|
- Long userId, Long orgId) {
|
|
|
+ String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount,
|
|
|
+ Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount,
|
|
|
+ Long userId, Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.approveStatusListUpdate(examId, examActivityId, roomCode, approveStatus, name, identity,
|
|
|
minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount,
|
|
@@ -729,8 +729,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<InvigilateListProgressBean> invigilatePageProgressList(IPage<Map> iPage, Long examId,
|
|
|
- Long examActivityId, String roomCode, String courseCode, String name, String identity, Long userId,
|
|
|
- Long orgId) {
|
|
|
+ Long examActivityId, String roomCode, String courseCode, String name, String identity, Long userId,
|
|
|
+ Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePageProgressList(iPage, examId, examActivityId, roomCode, courseCode, name, identity, userId,
|
|
|
orgId);
|
|
@@ -751,7 +751,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public List<InvigilateListProgressExcelBean> invigilatePageProgressListExport(Long examId, Long examActivityId,
|
|
|
- String roomCode, String courseCode, String name, String identity, Long userId, Long orgId) {
|
|
|
+ String roomCode, String courseCode, String name, String identity, Long userId, Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePageProgressListExport(examId, examActivityId, roomCode, courseCode, name, identity, userId,
|
|
|
orgId);
|
|
@@ -782,10 +782,10 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<InvigilateListHistoryBean> invigilatePageListHistory(IPage<Map> iPage, Long examId,
|
|
|
- Long examActivityId, String roomCode, String courseCode, String status, Integer breachStatus,
|
|
|
- String finishType, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount,
|
|
|
- Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount,
|
|
|
- Long userId, Long orgId) {
|
|
|
+ Long examActivityId, String roomCode, String courseCode, String status, Integer breachStatus,
|
|
|
+ String finishType, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount,
|
|
|
+ Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount,
|
|
|
+ Long userId, Long orgId) {
|
|
|
return tOeExamRecordMapper
|
|
|
.invigilatePageListHistory(iPage, examId, examActivityId, roomCode, courseCode, status, breachStatus,
|
|
|
finishType, name, identity, minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount,
|
|
@@ -947,7 +947,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
*/
|
|
|
@Override
|
|
|
public TOeExamRecord findMarkResult(MarkResultDto markResultDto,
|
|
|
- RecordSelectStrategyEnum recordSelectStrategyEnum) {
|
|
|
+ RecordSelectStrategyEnum recordSelectStrategyEnum) {
|
|
|
TOeExamRecord tOeExamRecord = null;
|
|
|
Double sumScore = null;
|
|
|
//客观分最高
|
|
@@ -1012,121 +1012,120 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
* 设置断点信息
|
|
|
*
|
|
|
* @param recordId
|
|
|
- * @param count
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public Boolean setExamBreak(Long recordId, Integer count) {
|
|
|
- boolean lock = redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_STATUS_PREFIX + recordId,
|
|
|
- SystemConstant.REDIS_LOCK_EXAM_STATUS_TIME_OUT);
|
|
|
- if (lock) {
|
|
|
- try {
|
|
|
- Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ?
|
|
|
- 0 :
|
|
|
- ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
- alreadyBreakCount++;
|
|
|
- Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
|
- Long breakId = uidUtil.getId();
|
|
|
- ExamRecordCacheUtil.setLastBreakId(recordId, breakId, false);
|
|
|
- ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, false);
|
|
|
- Long lastBreakTimeNow = System.currentTimeMillis();
|
|
|
- ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTimeNow, false);
|
|
|
- ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
|
|
|
- Long lastStartTime = System.currentTimeMillis();
|
|
|
- ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
|
- String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(),
|
|
|
- ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(),
|
|
|
- ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name()};
|
|
|
- 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(MqTopicEnum.THEMIS_TOPIC.getCode(), 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";
|
|
|
+ public Boolean setExamBreak(Long recordId) {
|
|
|
+ boolean lock = false;
|
|
|
+ for (int i = 0; i < SystemConstant.MAX_EXAM_STATUS_COUNT; i++) {
|
|
|
+ lock = redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_STATUS_PREFIX + recordId,
|
|
|
+ SystemConstant.REDIS_LOCK_EXAM_STATUS_TIME_OUT);
|
|
|
+ if (lock) {
|
|
|
+ try {
|
|
|
+ Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ?
|
|
|
+ 0 :
|
|
|
+ ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
+ alreadyBreakCount++;
|
|
|
+ Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
|
+ Long breakId = uidUtil.getId();
|
|
|
+ ExamRecordCacheUtil.setLastBreakId(recordId, breakId, false);
|
|
|
+ ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, false);
|
|
|
+ Long lastBreakTimeNow = System.currentTimeMillis();
|
|
|
+ ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTimeNow, false);
|
|
|
+ ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
|
|
|
+ Long lastStartTime = System.currentTimeMillis();
|
|
|
+ ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
|
+ String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(),
|
|
|
+ ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(),
|
|
|
+ ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name()};
|
|
|
+ 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(MqTopicEnum.THEMIS_TOPIC.getCode(), 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 {
|
|
|
- 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(MqTopicEnum.THEMIS_TOPIC.getCode(),
|
|
|
+ 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", "")));
|
|
|
+ //更新场次-考试记录缓存
|
|
|
+ ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId,
|
|
|
+ new ExamActivityRecordCacheBean(ExamRecordCacheUtil.getExamStudentId(recordId),
|
|
|
+ ExamRecordCacheUtil.getStatus(recordId)));
|
|
|
+ break;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("请求出错", e);
|
|
|
+ if (e instanceof BusinessException) {
|
|
|
+ throw new BusinessException(e.getMessage());
|
|
|
} else {
|
|
|
- dt = dt.plusSeconds(Long.parseLong(level.replace("s", "")));
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ if (Objects.nonNull(recordId)) {
|
|
|
+ redisUtil.releaseLock(SystemConstant.REDIS_LOCK_EXAM_STATUS_PREFIX + recordId);
|
|
|
}
|
|
|
- tranMap.put("recordId", recordId);
|
|
|
- tranMap.put("timeOut", time);
|
|
|
- tranMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
|
|
|
- //考试断点延时消息 发送mq start
|
|
|
- MqDto mqDtoBreakDelay = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(),
|
|
|
- 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)));
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("请求出错", e);
|
|
|
- if (e instanceof BusinessException) {
|
|
|
- throw new BusinessException(e.getMessage());
|
|
|
- } else {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- } finally {
|
|
|
- if (Objects.nonNull(recordId)) {
|
|
|
- redisUtil.releaseLock(SystemConstant.REDIS_LOCK_EXAM_STATUS_PREFIX + recordId);
|
|
|
}
|
|
|
- }
|
|
|
- } else {
|
|
|
- try {
|
|
|
- Thread.sleep(500);
|
|
|
- } catch (InterruptedException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- if (count >= 20) {
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
- jsonObject.put("recordId", recordId);
|
|
|
- jsonObject.put("method", "setExamBreak");
|
|
|
- jsonObject.put("examStatus", ExamRecordCacheUtil.getStatus(recordId));
|
|
|
- TGError tgError = new TGError(jsonObject.toJSONString(), System.currentTimeMillis());
|
|
|
- tgErrorService.save(tgError);
|
|
|
- return false;
|
|
|
} else {
|
|
|
- count++;
|
|
|
- setExamBreak(recordId, count);
|
|
|
+ try {
|
|
|
+ Thread.sleep(500);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- return true;
|
|
|
+ if (!lock) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.put("recordId", recordId);
|
|
|
+ jsonObject.put("method", "setExamBreak");
|
|
|
+ jsonObject.put("examStatus", ExamRecordCacheUtil.getStatus(recordId));
|
|
|
+ TGError tgError = new TGError(jsonObject.toJSONString(), System.currentTimeMillis());
|
|
|
+ tgErrorService.save(tgError);
|
|
|
+ }
|
|
|
+ return lock;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1140,7 +1139,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
Boolean finished = false;
|
|
|
try {
|
|
|
if (setBreak) {
|
|
|
- this.setExamBreak(recordId, 0);
|
|
|
+ this.setExamBreak(recordId);
|
|
|
}
|
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|