瀏覽代碼

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

luoshi 4 年之前
父節點
當前提交
b180659c63
共有 1 個文件被更改,包括 31 次插入29 次删除
  1. 31 29
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

+ 31 - 29
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -119,7 +119,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);
     }
 
@@ -283,12 +283,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;
             }
@@ -495,14 +495,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);
                     }
                 }
             }
@@ -524,9 +524,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.ANSWERING, false);
         Long lastStartTime = System.currentTimeMillis();
         ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
-        String[] columns = new String[]{ExamRecordFieldEnum.first_start_time.name(),
-                ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_start_time.name()};
-        Object[] values = new Object[]{firstStartTime, ExamRecordStatusEnum.ANSWERING, lastStartTime};
+        String[] columns = new String[] { ExamRecordFieldEnum.first_start_time.name(),
+                ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_start_time.name() };
+        Object[] values = new Object[] { firstStartTime, ExamRecordStatusEnum.ANSWERING, lastStartTime };
         toeExamRecordService.dataUpdatesMq(recordId, columns, values);
         //更新场次-考试记录缓存
         ExamActivityRecordCacheUtil.setExamRecordStatus(activityId, recordId,
@@ -612,7 +612,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) {
@@ -708,7 +708,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) {
@@ -857,9 +857,9 @@ 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 };
         toeExamRecordService.dataUpdatesMq(recordId, columns, values);
         //更新场次-考试记录缓存
         ExamActivityRecordCacheUtil.setExamRecordStatus(es.getExamActivityId(), recordId,
@@ -1009,11 +1009,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,
@@ -1100,12 +1100,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);
             }
@@ -1116,6 +1116,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));
@@ -1126,11 +1127,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) {//有预警
@@ -1186,7 +1188,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());