|
@@ -387,23 +387,23 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
|
}
|
|
|
|
|
|
WebsocketStatusEnum websocketStatusEnum = ExamRecordCacheUtil.getClientWebsocketStatus(recordId);
|
|
|
- if (Objects.isNull(websocketStatusEnum) || Objects.equals(WebsocketStatusEnum.OFF_LINE, websocketStatusEnum)) {
|
|
|
+ if (Objects.nonNull(websocketStatusEnum) && Objects.equals(WebsocketStatusEnum.OFF_LINE, websocketStatusEnum)) {
|
|
|
throw new BusinessException("客户端网络离线");
|
|
|
}
|
|
|
MonitorStatusSourceEnum clientCameraStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_CAMERA.name());
|
|
|
- if (Objects.nonNull(clientCameraStatus) || Objects.equals(MonitorStatusSourceEnum.STOP, clientCameraStatus)) {
|
|
|
+ if (Objects.nonNull(clientCameraStatus) && Objects.equals(MonitorStatusSourceEnum.STOP, clientCameraStatus)) {
|
|
|
throw new BusinessException("客户端摄像头离线");
|
|
|
}
|
|
|
MonitorStatusSourceEnum clientScreenStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_SCREEN.name());
|
|
|
- if (Objects.nonNull(clientScreenStatus) || Objects.equals(MonitorStatusSourceEnum.STOP, clientScreenStatus)) {
|
|
|
+ if (Objects.nonNull(clientScreenStatus) && Objects.equals(MonitorStatusSourceEnum.STOP, clientScreenStatus)) {
|
|
|
throw new BusinessException("客户端屏幕离线");
|
|
|
}
|
|
|
MonitorStatusSourceEnum mobileFirstStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.MOBILE_FIRST.name());
|
|
|
- if (Objects.nonNull(mobileFirstStatus) || Objects.equals(MonitorStatusSourceEnum.STOP, mobileFirstStatus)) {
|
|
|
+ if (Objects.nonNull(mobileFirstStatus) && Objects.equals(MonitorStatusSourceEnum.STOP, mobileFirstStatus)) {
|
|
|
throw new BusinessException("移动端第一机位离线");
|
|
|
}
|
|
|
MonitorStatusSourceEnum mobileSecondStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.MOBILE_SECOND.name());
|
|
|
- if (Objects.nonNull(mobileSecondStatus) || Objects.equals(MonitorStatusSourceEnum.STOP, mobileSecondStatus)) {
|
|
|
+ if (Objects.nonNull(mobileSecondStatus) && Objects.equals(MonitorStatusSourceEnum.STOP, mobileSecondStatus)) {
|
|
|
throw new BusinessException("移动端第二机位离线");
|
|
|
}
|
|
|
|
|
@@ -441,6 +441,17 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
|
toeExamRecordService.dataUpdatesMq(recordId, columns, values);
|
|
|
//更新场次-考试记录缓存
|
|
|
ExamActivityRecordCacheUtil.setExamRecordStatus(activityId, recordId, ExamRecordCacheUtil.getStatus(recordId));
|
|
|
+
|
|
|
+ //非强制交卷,换算最终交卷时间并生成一次性延时任务
|
|
|
+ if (Objects.nonNull(exam.getForceFinish()) && exam.getForceFinish().intValue() == 0) {
|
|
|
+ Date date = ExamRecordCacheUtil.getExamFinalFinishTime(recordId);
|
|
|
+ if (Objects.isNull(date)) {
|
|
|
+ Date finishTime = Objects.nonNull(ac.getFinishTime()) ? ac.getFinishTime() : exam.getEndTime();
|
|
|
+ Integer breakResumeCount = exam.getBreakResumeCount();
|
|
|
+ Long l = (finishTime.getTime() / 1000 + (breakResumeCount * breakExpireSeconds) + (breakResumeCount * 180)) * 1000;
|
|
|
+ Date finalFinishTime = new Date(l);
|
|
|
+ }
|
|
|
+ }
|
|
|
return ret;
|
|
|
}
|
|
|
|