Przeglądaj źródła

Merge branch 'dev'
1

wangliang 4 lat temu
rodzic
commit
08b095db87

+ 34 - 36
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -233,7 +233,7 @@ public class MqLogicServiceImpl implements MqLogicService {
         Date clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
         ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
         WebsocketStatusEnum websocketStatusEnum = ExamRecordCacheUtil.getClientWebsocketStatus(recordId);
-        if (Objects.nonNull(websocketStatusEnum) && !Objects.equals(websocketStatusEnum, WebsocketStatusEnum.ON_LINE) && (!Objects.equals(status, ExamRecordStatusEnum.BREAK_OFF) || !Objects.equals(status, ExamRecordStatusEnum.FINISHED) || !Objects.equals(status, ExamRecordStatusEnum.PERSISTED))) {
+        if (Objects.nonNull(websocketStatusEnum) && !Objects.equals(websocketStatusEnum, WebsocketStatusEnum.ON_LINE) && (!Objects.equals(status, ExamRecordStatusEnum.FIRST_PREPARE) || !Objects.equals(status, ExamRecordStatusEnum.FINISHED) || !Objects.equals(status, ExamRecordStatusEnum.PERSISTED))) {
             Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
             if (Objects.nonNull(objectMap)) {
                 Integer diff = 0;
@@ -250,42 +250,40 @@ public class MqLogicServiceImpl implements MqLogicService {
                 ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
                 ExamCacheBean ec = teExamService.getExamCacheBean(examId);//考试缓存
                 Long breakId = null;
-                if (!Objects.equals(status, ExamRecordStatusEnum.FIRST_PREPARE)|| !Objects.equals(status, ExamRecordStatusEnum.FINISHED) || !Objects.equals(status, ExamRecordStatusEnum.PERSISTED)) {
-                    //增加断点记录,获取剩余断点次数
-                    Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ? 0 : ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
-                    Integer leftBreakResumeCount = ec.getBreakResumeCount() - alreadyBreakCount;
-                    if (leftBreakResumeCount < 0) {
-                        Integer durationSeconds = Objects.isNull(ExamRecordCacheUtil.getDurationSeconds(recordId)) ? 0 : ExamRecordCacheUtil.getDurationSeconds(recordId);
-                        teExamService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
-                    } else {
-                        alreadyBreakCount++;
-                        breakId = Constants.idGen.next();
-                        ExamRecordCacheUtil.setLastBreakId(recordId, breakId, false);
-                        ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, false);
-                        Date lastBreakTime = new Date();
-                        ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTime, false);
-                        ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
-                        Date lastStartTime = new Date();
-                        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, lastBreakTime, alreadyBreakCount, lastStartTime};
-                        examRecordService.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.assembleSendOneWayMsg(mqDtoBreak);
-                        //考试断点异常原因 发送mq end
-                    }
-                    //增加异常日志
-                    TIeInvigilateExceptionInfo tIeInvigilateExceptionInfo = new TIeInvigilateExceptionInfo(examId, examActivityId, recordId, examStudentId, ExceptionEnum.NET_TIME_OUT.getCode(), ExceptionEnum.NET_TIME_OUT, diff);
-                    tIeInvigilateExceptionInfoService.saveOrUpdate(tIeInvigilateExceptionInfo);
-                    TEExamStudentLog teExamStudentLog = new TEExamStudentLog(SystemOperationEnum.BREAK_OFF.name(), SystemOperationEnum.BREAK_OFF.getCode(), SystemOperationEnum.BREAK_OFF.getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, breakId);
-                    teExamStudentLogService.save(teExamStudentLog);
-
-                    //发送移动端监考退出考试mq消息 start
-                    MqDto mqDtoExamStop = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STOP.name(), recordId, MqTagEnum.EXAM_STOP, String.valueOf(recordId), String.valueOf(recordId));
-                    mqDtoService.assembleSendOneWayMsg(mqDtoExamStop);
-                    //发送移动端监考退出考试mq消息 end
+                //增加断点记录,获取剩余断点次数
+                Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ? 0 : ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
+                Integer leftBreakResumeCount = ec.getBreakResumeCount() - alreadyBreakCount;
+                if (leftBreakResumeCount < 0) {
+                    Integer durationSeconds = Objects.isNull(ExamRecordCacheUtil.getDurationSeconds(recordId)) ? 0 : ExamRecordCacheUtil.getDurationSeconds(recordId);
+                    teExamService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
+                } else {
+                    alreadyBreakCount++;
+                    breakId = Constants.idGen.next();
+                    ExamRecordCacheUtil.setLastBreakId(recordId, breakId, false);
+                    ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, false);
+                    Date lastBreakTime = new Date();
+                    ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTime, false);
+                    ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
+                    Date lastStartTime = new Date();
+                    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, lastBreakTime, alreadyBreakCount, lastStartTime};
+                    examRecordService.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.assembleSendOneWayMsg(mqDtoBreak);
+                    //考试断点异常原因 发送mq end
                 }
+                //增加异常日志
+                TIeInvigilateExceptionInfo tIeInvigilateExceptionInfo = new TIeInvigilateExceptionInfo(examId, examActivityId, recordId, examStudentId, ExceptionEnum.NET_TIME_OUT.getCode(), ExceptionEnum.NET_TIME_OUT, diff);
+                tIeInvigilateExceptionInfoService.saveOrUpdate(tIeInvigilateExceptionInfo);
+                TEExamStudentLog teExamStudentLog = new TEExamStudentLog(SystemOperationEnum.BREAK_OFF.name(), SystemOperationEnum.BREAK_OFF.getCode(), SystemOperationEnum.BREAK_OFF.getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, breakId);
+                teExamStudentLogService.save(teExamStudentLog);
+
+                //发送移动端监考退出考试mq消息 start
+                MqDto mqDtoExamStop = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STOP.name(), recordId, MqTagEnum.EXAM_STOP, String.valueOf(recordId), String.valueOf(recordId));
+                mqDtoService.assembleSendOneWayMsg(mqDtoExamStop);
+                //发送移动端监考退出考试mq消息 end
             }
         }
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);

+ 1 - 1
themis-task/src/main/java/com/qmth/themis/task/listener/service/impl/MqTaskLogicServiceImpl.java

@@ -82,7 +82,7 @@ public class MqTaskLogicServiceImpl implements MqTaskLogicService {
                     Date finishTime = teExamActivity.getFinishTime();
                     Calendar calendar = Calendar.getInstance();
                     calendar.setTime(finishTime);
-                    calendar.add(Calendar.SECOND, 30);
+//                    calendar.add(Calendar.SECOND, 30);
                     if (calendar.getTime().getTime() > System.currentTimeMillis()) {
                         int year = calendar.get(Calendar.YEAR);//获取年份
                         int month = calendar.get(Calendar.MONTH) + 1;//获取月份