فهرست منبع

考试结束后获取交卷信息接口可能出现的空指针bugfix

luoshi 4 سال پیش
والد
کامیت
da25403477
1فایلهای تغییر یافته به همراه38 افزوده شده و 34 حذف شده
  1. 38 34
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

+ 38 - 34
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -113,7 +113,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
      */
     @Override
     public IPage<TEExamQueryDto> examQuery(IPage<Map> iPage, Long userId, Long id, String code, String name,
-                                           String mode, Integer enable, Long orgId, String type) {
+            String mode, Integer enable, Long orgId, String type) {
         return teExamMapper.examQuery(iPage, userId, id, code, name, mode, enable, orgId, type);
     }
 
@@ -277,12 +277,12 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                 ExamRecordCacheUtil.setMinDurationSeconds(recordId, examCache.getMinDurationSeconds(), false);
                 ExamRecordCacheUtil.setMaxDurationSeconds(recordId, ac.getMaxDurationSeconds(), false);
                 ExamRecordCacheUtil.setForceFinish(recordId, examCache.getForceFinish(), false);
-                String[] columns = new String[]{ExamRecordFieldEnum.start_time.name(),
+                String[] columns = new String[] { ExamRecordFieldEnum.start_time.name(),
                         ExamRecordFieldEnum.end_time.name(), ExamRecordFieldEnum.opening_seconds.name(),
                         ExamRecordFieldEnum.min_duration_seconds.name(),
-                        ExamRecordFieldEnum.max_duration_seconds.name(), ExamRecordFieldEnum.force_finish.name()};
-                Object[] values = new Object[]{ac.getStartTime(), ac.getFinishTime(), ac.getOpeningSeconds(),
-                        examCache.getMinDurationSeconds(), ac.getMaxDurationSeconds(), examCache.getForceFinish()};
+                        ExamRecordFieldEnum.max_duration_seconds.name(), ExamRecordFieldEnum.force_finish.name() };
+                Object[] values = new Object[] { ac.getStartTime(), ac.getFinishTime(), ac.getOpeningSeconds(),
+                        examCache.getMinDurationSeconds(), ac.getMaxDurationSeconds(), examCache.getForceFinish() };
                 toeExamRecordService.dataUpdatesMq(recordId, columns, values);
                 return prepare;
             }
@@ -489,14 +489,14 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                 if (Objects.isNull(clientCameraStatus) || Objects
                         .equals(MonitorStatusSourceEnum.STOP, clientCameraStatus)) {
                     switch (strs[i]) {
-                        case "CLIENT_CAMERA":
-                            throw new BusinessException(ExceptionResultEnum.CLIENT_CAMERA_OFFLINE);
-                        case "CLIENT_SCREEN":
-                            throw new BusinessException(ExceptionResultEnum.CLIENT_SCREEN_OFFLINE);
-                        case "MOBILE_FIRST":
-                            throw new BusinessException(ExceptionResultEnum.MOBILE_FIRST_OFFLINE);
-                        default:
-                            throw new BusinessException(ExceptionResultEnum.MOBILE_SECOND_OFFLINE);
+                    case "CLIENT_CAMERA":
+                        throw new BusinessException(ExceptionResultEnum.CLIENT_CAMERA_OFFLINE);
+                    case "CLIENT_SCREEN":
+                        throw new BusinessException(ExceptionResultEnum.CLIENT_SCREEN_OFFLINE);
+                    case "MOBILE_FIRST":
+                        throw new BusinessException(ExceptionResultEnum.MOBILE_FIRST_OFFLINE);
+                    default:
+                        throw new BusinessException(ExceptionResultEnum.MOBILE_SECOND_OFFLINE);
                     }
                 }
             }
@@ -519,19 +519,20 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                     if (Objects.isNull(firstStartTime)) {
                         firstStartTime = System.currentTimeMillis();
                         ExamRecordCacheUtil.setFirstStartTime(recordId, firstStartTime, false);
-                        columns = new String[]{ExamRecordFieldEnum.first_start_time.name(),
-                                ExamRecordFieldEnum.status.name()};
-                        values = new Object[]{firstStartTime, ExamRecordStatusEnum.ANSWERING};
+                        columns = new String[] { ExamRecordFieldEnum.first_start_time.name(),
+                                ExamRecordFieldEnum.status.name() };
+                        values = new Object[] { firstStartTime, ExamRecordStatusEnum.ANSWERING };
                     } else {
                         lastStartTime = System.currentTimeMillis();
                         ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
-                        columns = new String[]{ExamRecordFieldEnum.last_start_time.name(),
-                                ExamRecordFieldEnum.status.name()};
-                        values = new Object[]{lastStartTime, ExamRecordStatusEnum.ANSWERING};
+                        columns = new String[] { ExamRecordFieldEnum.last_start_time.name(),
+                                ExamRecordFieldEnum.status.name() };
+                        values = new Object[] { lastStartTime, ExamRecordStatusEnum.ANSWERING };
                     }
                     Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
                     ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
-                    if (Objects.nonNull(examRecordStatusEnum) && examRecordStatusEnum == ExamRecordStatusEnum.ANSWERING) {
+                    if (Objects.nonNull(examRecordStatusEnum)
+                            && examRecordStatusEnum == ExamRecordStatusEnum.ANSWERING) {
                         if (Objects.nonNull(breakId) && Objects.nonNull(lastStartTime)) {
                             ExamBreakCacheUtil.setStartTime(breakId, lastStartTime, true);
                         }
@@ -652,7 +653,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
      */
     @Override
     public AnswerSubmitBean answerSubmit(Long studentId, Long recordId, Integer mainNumber, Integer subNumber,
-                                         Integer subIndex, String answer, Long version, Integer durationSeconds) {
+            Integer subIndex, String answer, Long version, Integer durationSeconds) {
 
         // 校验当前登录用户和参数一致性
         if (ExamRecordCacheUtil.getId(recordId) == null) {
@@ -748,7 +749,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
      */
     @Override
     public AudioLeftPlayCountSubmitBean audioLeftPlayCountSubmit(Long studentId, Long recordId, String key,
-                                                                 Integer count) {
+            Integer count) {
 
         // 校验当前登录用户和参数一致性
         if (ExamRecordCacheUtil.getId(recordId) == null) {
@@ -903,12 +904,13 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                     Long lastPrepareTime = System.currentTimeMillis();
                     ExamRecordCacheUtil.setLastPrepareTime(recordId, lastPrepareTime, false);
                     ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.RESUME_PREPARE, false);
-                    String[] columns = new String[]{ExamRecordFieldEnum.last_prepare_time.name(),
-                            ExamRecordFieldEnum.status.name()};
-                    Object[] values = new Object[]{lastPrepareTime, ExamRecordStatusEnum.RESUME_PREPARE};
+                    String[] columns = new String[] { ExamRecordFieldEnum.last_prepare_time.name(),
+                            ExamRecordFieldEnum.status.name() };
+                    Object[] values = new Object[] { lastPrepareTime, ExamRecordStatusEnum.RESUME_PREPARE };
                     ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
                     Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
-                    if (Objects.nonNull(examRecordStatusEnum) && examRecordStatusEnum == ExamRecordStatusEnum.RESUME_PREPARE) {
+                    if (Objects.nonNull(examRecordStatusEnum)
+                            && examRecordStatusEnum == ExamRecordStatusEnum.RESUME_PREPARE) {
                         if (Objects.nonNull(breakId)) {
                             ExamBreakCacheUtil.setPrepareTime(breakId, lastPrepareTime, true);
                         }
@@ -1091,11 +1093,11 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                     ExamRecordCacheUtil.setDurationSeconds(recordId, durationSeconds, false);
                     ExamRecordCacheUtil.setFinishType(recordId, FinishTypeEnum.valueOf(type), false);
                     ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.FINISHED, false);
-                    String[] columns = new String[]{ExamRecordFieldEnum.finish_time.name(),
+                    String[] columns = new String[] { ExamRecordFieldEnum.finish_time.name(),
                             ExamRecordFieldEnum.duration_seconds.name(), ExamRecordFieldEnum.finish_type.name(),
-                            ExamRecordFieldEnum.status.name()};
-                    Object[] values = new Object[]{finishTime, durationSeconds, FinishTypeEnum.valueOf(type),
-                            ExamRecordStatusEnum.FINISHED};
+                            ExamRecordFieldEnum.status.name() };
+                    Object[] values = new Object[] { finishTime, durationSeconds, FinishTypeEnum.valueOf(type),
+                            ExamRecordStatusEnum.FINISHED };
                     toeExamRecordService.dataUpdatesMq(recordId, columns, values);
                     //更新场次-考试记录缓存
                     ExamActivityRecordCacheUtil.setExamRecordStatus(es.getExamActivityId(), recordId,
@@ -1205,12 +1207,12 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
     @Override
     public ExamResultBean result(Long recordId) {
         ExamResultBean ret = new ExamResultBean();
-        TOeExamRecord er = null;
         Integer warningCount = null;
         Integer breachStatus = null;
         Integer hasAnswerFile = null;
+        Long examId = null;
         if (ExamRecordCacheUtil.getId(recordId) == null) {
-            er = toeExamRecordService.getById(recordId);
+            TOeExamRecord er = toeExamRecordService.getById(recordId);
             if (er == null) {
                 throw new BusinessException(ExceptionResultEnum.NOT_FOUND_EXAM_RECORD);
             }
@@ -1221,6 +1223,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
             warningCount = er.getWarningCount();
             breachStatus = er.getBreachStatus();
             hasAnswerFile = er.getHasAnswerFile();
+            examId = er.getExamId();
         } else {
             ret.setDurationSeconds(ExamRecordCacheUtil.getDurationSeconds(recordId));
             ret.setFinishTime(ExamRecordCacheUtil.getFinishTime(recordId));
@@ -1231,11 +1234,12 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
             hasAnswerFile = Objects.nonNull(ExamRecordCacheUtil.getHasAnswerFile(recordId)) ?
                     ExamRecordCacheUtil.getHasAnswerFile(recordId) :
                     0;
+            examId = ExamRecordCacheUtil.getExamId(recordId);
         }
 
         //页面结果
         if (hasAnswerFile.intValue() == 1) {
-            ExamCacheBean exam = getExamCacheBeanNative(er.getExamId());
+            ExamCacheBean exam = getExamCacheBeanNative(examId);
             if (exam.getShowObjectiveScore() != null && exam.getShowObjectiveScore().intValue() == 1) {//实时出分
                 if (InvigilateVerifyEnum.NOW.equals(exam.getInvigilateVerify())) {//实时审核
                     if (warningCount != null && warningCount.intValue() > 0) {//有预警
@@ -1291,7 +1295,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
      */
     @Override
     public void sendOeLogMessage(SystemOperationEnum systemOperationEnum, Long examStudentId, Long recordId,
-                                 MqDto mqDto) {
+            MqDto mqDto) {
         //mq发送消息start
         Map<String, Object> properties = new HashMap<>();
         properties.put("remark", systemOperationEnum.getCode());