Browse Source

Merge branch 'dev'
1

wangliang 4 năm trước cách đây
mục cha
commit
199b486956

+ 8 - 0
themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java

@@ -378,4 +378,12 @@ public class ExamRecordCacheUtil {
             examRecordService.dataUpdateMq(recordId, ExamRecordFieldEnum.last_prepare_time.name(), date, 1);
         }
     }
+
+    public static void setExamFinalFinishTime(Long recordId, Date date) {
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), "finalFinishTime", date);
+    }
+
+    public static Date getExamFinalFinishTime(Long recordId) {
+        return (Date) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "finalFinishTime");
+    }
 }

+ 16 - 5
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -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;
     }
 

+ 0 - 4
themis-exam/src/main/java/com/qmth/themis/exam/api/TIeInvigilateCallMobileController.java

@@ -9,7 +9,6 @@ import com.qmth.themis.business.dto.WebsocketDto;
 import com.qmth.themis.business.entity.TIeExamInvigilateCallLog;
 import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.MqDtoService;
-import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
@@ -46,9 +45,6 @@ import java.util.concurrent.ConcurrentHashMap;
 public class TIeInvigilateCallMobileController {
     private final static Logger log = LoggerFactory.getLogger(TIeInvigilateCallMobileController.class);
 
-    @Resource
-    RedisUtil redisUtil;
-
     @Resource
     MqDtoService mqDtoService;