wangliang 2 лет назад
Родитель
Сommit
c531988806

+ 4 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/CommonServiceImpl.java

@@ -92,6 +92,10 @@ public class CommonServiceImpl implements CommonService {
                 return;
             }
 
+            Long timestamp = System.currentTimeMillis();
+            ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.PERSISTED, timestamp);
+            ExamRecordCacheUtil.setUpdateTime(recordId, timestamp);
+
             log.info("start persisted,recordId:" + recordId);
             examRecordService.saveDataByCache(recordId);
             this.deleteExamStudentCache(recordId, studentId);

+ 58 - 174
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -378,55 +378,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
                     .get(RedisKeyHelper.studentPaperStructKey(recordId));
 
             //保存考试记录
-            TOeExamRecord er = null;
-            Map<String, Object> record = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
-            Long timestamp = System.currentTimeMillis();
-            if (!CollectionUtils.isEmpty(record)) {
-                ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.PERSISTED, timestamp);
-                ExamRecordCacheUtil.setUpdateTime(recordId, timestamp);
-                Object o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.status.getCode());
-                if (Objects.nonNull(o) && o instanceof ExamStatusBean) {
-                    record.put(ExamRecordFieldEnum.status.getCode(), ((ExamStatusBean) o).getExamRecordStatusEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode());
-                if (Objects.nonNull(o) && o instanceof ClientWebsocketStatusBean) {
-                    record.put(ExamRecordFieldEnum.client_websocket_status.getCode(), ((ClientWebsocketStatusBean) o).getWebsocketStatusEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_first_websocket_status.getCode());
-                if (Objects.nonNull(o) && o instanceof MobileWebsocketStatusBean) {
-                    record.put(ExamRecordFieldEnum.mobile_first_websocket_status.getCode(), ((MobileWebsocketStatusBean) o).getWebsocketStatusEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_second_websocket_status.getCode());
-                if (Objects.nonNull(o) && o instanceof MobileWebsocketStatusBean) {
-                    record.put(ExamRecordFieldEnum.mobile_second_websocket_status.getCode(), ((MobileWebsocketStatusBean) o).getWebsocketStatusEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.camera_monitor_status.getCode());
-                if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
-                    record.put(ExamRecordFieldEnum.camera_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.screen_monitor_status.getCode());
-                if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
-                    record.put(ExamRecordFieldEnum.screen_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_first_monitor_status.getCode());
-                if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
-                    record.put(ExamRecordFieldEnum.mobile_first_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_second_monitor_status.getCode());
-                if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
-                    record.put(ExamRecordFieldEnum.mobile_second_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
-                }
-                o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.breach_status.getCode());
-                if (Objects.nonNull(o) && o instanceof BreachStatusBean) {
-                    record.put(ExamRecordFieldEnum.breach_status.getCode(), ((BreachStatusBean) o).getStatus());
-                }
-                Gson gson = new Gson();
-                er = gson.fromJson(gson.toJson(record), TOeExamRecord.class);
-            } else {
+            TOeExamRecord er = this.getCacheExamRecord(recordId);
+            if (Objects.isNull(er)) {
                 er = SystemConstant.getExamRecord(recordId);
+                er.setStatus(ExamRecordStatusEnum.PERSISTED);
+                er.setUpdateTime(System.currentTimeMillis());
             }
-            er.setStatus(ExamRecordStatusEnum.PERSISTED);
-            er.setUpdateTime(timestamp);
             if (struct != null) {
                 er.setPaperStructPath(structFilePath);
             }
@@ -460,6 +417,58 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         }
     }
 
+    /**
+     * 从缓存里获取考试记录
+     *
+     * @param recordId
+     * @return
+     */
+    private TOeExamRecord getCacheExamRecord(Long recordId) {
+        TOeExamRecord er = null;
+        Map<String, Object> record = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
+        if (!CollectionUtils.isEmpty(record)) {
+            Object o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.status.getCode());
+            if (Objects.nonNull(o) && o instanceof ExamStatusBean) {
+                record.put(ExamRecordFieldEnum.status.getCode(), ((ExamStatusBean) o).getExamRecordStatusEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode());
+            if (Objects.nonNull(o) && o instanceof ClientWebsocketStatusBean) {
+                record.put(ExamRecordFieldEnum.client_websocket_status.getCode(), ((ClientWebsocketStatusBean) o).getWebsocketStatusEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_first_websocket_status.getCode());
+            if (Objects.nonNull(o) && o instanceof MobileWebsocketStatusBean) {
+                record.put(ExamRecordFieldEnum.mobile_first_websocket_status.getCode(), ((MobileWebsocketStatusBean) o).getWebsocketStatusEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_second_websocket_status.getCode());
+            if (Objects.nonNull(o) && o instanceof MobileWebsocketStatusBean) {
+                record.put(ExamRecordFieldEnum.mobile_second_websocket_status.getCode(), ((MobileWebsocketStatusBean) o).getWebsocketStatusEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.camera_monitor_status.getCode());
+            if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
+                record.put(ExamRecordFieldEnum.camera_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.screen_monitor_status.getCode());
+            if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
+                record.put(ExamRecordFieldEnum.screen_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_first_monitor_status.getCode());
+            if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
+                record.put(ExamRecordFieldEnum.mobile_first_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_second_monitor_status.getCode());
+            if (Objects.nonNull(o) && o instanceof MonitorStatusBean) {
+                record.put(ExamRecordFieldEnum.mobile_second_monitor_status.getCode(), ((MonitorStatusBean) o).getMonitorStatusSourceEnum());
+            }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.breach_status.getCode());
+            if (Objects.nonNull(o) && o instanceof BreachStatusBean) {
+                record.put(ExamRecordFieldEnum.breach_status.getCode(), ((BreachStatusBean) o).getStatus());
+            }
+            Gson gson = new Gson();
+            er = gson.fromJson(gson.toJson(record), TOeExamRecord.class);
+        }
+        return er;
+    }
+
     @Override
     public void saveFaceVerify(ExamTypeEnum type, Long recordId, Long entryAuthenticationId,
                                VerifyExceptionEnum entryAuthenticationResult) {
@@ -493,133 +502,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
     public void examRecordDataSave(Long recordId) {
         ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
         if (Objects.nonNull(examRecordStatusEnum) && examRecordStatusEnum != ExamRecordStatusEnum.PERSISTED) {
-            Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-            Long paperId = ExamRecordCacheUtil.getPaperId(recordId);
-            Long firstStartTime = ExamRecordCacheUtil.getFirstStartTime(recordId);
-            Integer durationSeconds = ExamRecordCacheUtil.getDurationSeconds(recordId);
-            Double objectiveScore = ExamRecordCacheUtil.getObjectiveScore(recordId);
-            Long examId = ExamRecordCacheUtil.getExamId(recordId);
-            Long finishTime = ExamRecordCacheUtil.getFinishTime(recordId);
-            FinishTypeEnum finishTypeEnum = ExamRecordCacheUtil.getFinishType(recordId);
-            Long clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
-            Integer alreadyBreakCount = ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
-            Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
-            Long lastBreakTime = ExamRecordCacheUtil.getLastBreakTime(recordId);
-            Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
-            Integer warningCount = ExamRecordCacheUtil.getWarningCount(recordId);
-            Integer breachStatus = ExamRecordCacheUtil.getBreachStatus(recordId);
-            Integer inProcessLivenessVerifyCount = ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId);
-            String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-            WebsocketStatusEnum websocketStatusEnum = ExamRecordCacheUtil.getClientWebsocketStatus(recordId);
-            Long lastStartTime = ExamRecordCacheUtil.getLastStartTime(recordId);
-            Integer paperDownLoad = ExamRecordCacheUtil.getPaperDownload(recordId);
-            Long startTime = ExamRecordCacheUtil.getStartTime(recordId);
-            Long endTime = ExamRecordCacheUtil.getEndTime(recordId);
-            Integer openingSeconds = ExamRecordCacheUtil.getOpeningSeconds(recordId);
-            Integer minDurationSeconds = ExamRecordCacheUtil.getMinDurationSeconds(recordId);
-            Integer maxDurationSeconds = ExamRecordCacheUtil.getMaxDurationSeconds(recordId);
-            Integer forceFinish = ExamRecordCacheUtil.getForceFinish(recordId);
-            Integer hasAnswerFile = ExamRecordCacheUtil.getHasAnswerFile(recordId);
-            Integer cameraPhotoUpload = ExamRecordCacheUtil.getCameraPhotoUpload(recordId);
-            Integer mobilePhotoUpload = ExamRecordCacheUtil.getMobilePhotoUpload(recordId);
-            String entryAuthenticationPolicy = ExamRecordCacheUtil.getEntryAuthenticationPolicy(recordId);
-            Integer inProcessFaceStrangerIgnore = ExamRecordCacheUtil.getInProcessFaceStrangerIgnore(recordId);
-            String inProcessLivenessFixedRange = ExamRecordCacheUtil.getInProcessLivenessFixedRange(recordId);
-            String inProcessLivenessJudgePolicy = ExamRecordCacheUtil.getInProcessLivenessJudgePolicy(recordId);
-            String monitorVideoSource = ExamRecordCacheUtil.getMonitorVideoSource(recordId);
-            String monitorRecord = ExamRecordCacheUtil.getMonitorRecord(recordId);
-            Integer inProcessRealnessVerifyStatus = ExamRecordCacheUtil.getInProcessRealnessVerifyStatus(recordId);
-            Integer inProcessLivenessVerifyStatus = ExamRecordCacheUtil.getInProcessLivenessVerifyStatus(recordId);
-            Integer inProcessFaceVerifyStatus = ExamRecordCacheUtil.getInProcessFaceVerifyStatus(recordId);
-            Long firstPrepareTime = ExamRecordCacheUtil.getFirstPrepareTime(recordId);
-            Long lastPrepareTime = ExamRecordCacheUtil.getLastPrepareTime(recordId);
-            String clientCurrentIp = ExamRecordCacheUtil.getClientCurrentIp(recordId);
-            String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
-            Double answerProgress = ExamRecordCacheUtil.getAnswerProgress(recordId);
-            ReviewResultEnum reviewResultEnum = ExamRecordCacheUtil.getReviewResult(recordId);
-            String paperStructPath = ExamRecordCacheUtil.getPaperStructPath(recordId);
-            Integer paperStructUpload = ExamRecordCacheUtil.getPaperStructUpload(recordId);
-            Integer serialNumber = ExamRecordCacheUtil.getSerialNumber(recordId);
-            VerifyExceptionEnum verifyExceptionEnum = ExamRecordCacheUtil.getEntryAuthenticationResult(recordId);
-            Long entryAuthenticationId = ExamRecordCacheUtil.getEntryAuthenticationId(recordId);
-            ScoreStatusEnum scoreStatusEnum = ExamRecordCacheUtil.getScoreStatus(recordId);
-            String mobileFirstWebsocketId = ExamRecordCacheUtil.getMobileFirstWebsocketId(recordId);
-            WebsocketStatusEnum mobileFirstWebsocketStatus = ExamRecordCacheUtil.getMobileFirstWebsocketStatus(recordId);
-            String mobileSecondWebsocketId = ExamRecordCacheUtil.getMobileSecondWebsocketId(recordId);
-            WebsocketStatusEnum mobileSecondWebsocketStatus = ExamRecordCacheUtil.getMobileSecondWebsocketStatus(recordId);
-
-            MonitorStatusSourceEnum cameraMonitorStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_CAMERA);
-            MonitorStatusSourceEnum screenMonitorStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_SCREEN);
-            MonitorStatusSourceEnum mobileFirstMonitorStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.MOBILE_FIRST);
-            MonitorStatusSourceEnum mobileSecondMonitorStatus = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.MOBILE_SECOND);
-            Long updateTime = ExamRecordCacheUtil.getUpdateTime(recordId);
-
-            TOeExamRecord er = new TOeExamRecord();
-            er.setId(recordId);
-            er.setExamId(examId);
-            er.setExamActivityId(examActivityId);
-            er.setExamStudentId(examStudentId);
-            er.setPaperId(paperId);
-            er.setStatus(examRecordStatusEnum);
-            er.setFirstPrepareTime(firstPrepareTime);
-            er.setFirstStartTime(firstStartTime);
-            er.setLastBreakTime(lastBreakTime);
-            er.setLastPrepareTime(lastPrepareTime);
-            er.setLastStartTime(lastStartTime);
-            er.setAlreadyBreakCount(alreadyBreakCount);
-            er.setClientCurrentIp(clientCurrentIp);
-            er.setClientWebsocketStatus(websocketStatusEnum);
-            er.setClientWebsocketId(clientWebsocketId);
-            er.setClientLastSyncTime(clientLastSyncTime);
-            er.setMobileFirstWebsocketId(mobileFirstWebsocketId);
-            er.setMobileFirstWebsocketStatus(mobileFirstWebsocketStatus);
-            er.setMobileSecondWebsocketId(mobileSecondWebsocketId);
-            er.setMobileSecondWebsocketStatus(mobileSecondWebsocketStatus);
-            er.setAnswerProgress(answerProgress);
-            er.setDurationSeconds(durationSeconds);
-            er.setFinishTime(finishTime);
-            er.setFinishType(finishTypeEnum);
-            er.setWarningCount(warningCount);
-            er.setReviewResult(reviewResultEnum);
-            er.setObjectiveScore(objectiveScore);
-            er.setPaperDownload(paperDownLoad);
-            er.setBreachStatus(breachStatus);
-            er.setPaperStructPath(paperStructPath);
-            er.setPaperStructUpload(paperStructUpload);
-            er.setSerialNumber(serialNumber);
-            er.setLastBreakId(breakId);
-            er.setEntryAuthenticationResult(verifyExceptionEnum);
-            er.setEntryAuthenticationId(entryAuthenticationId);
-            er.setInProcessFaceVerifyStatus(inProcessFaceVerifyStatus);
-            er.setInProcessLivenessVerifyStatus(inProcessLivenessVerifyStatus);
-            er.setInProcessLivenessVerifyCount(inProcessLivenessVerifyCount);
-            er.setMonitorKey(monitorKey);
-            er.setScoreStatus(scoreStatusEnum);
-            er.setStartTime(startTime);
-            er.setEndTime(endTime);
-            er.setOpeningSeconds(openingSeconds);
-            er.setMinDurationSeconds(minDurationSeconds);
-            er.setMaxDurationSeconds(maxDurationSeconds);
-            er.setForceFinish(forceFinish);
-            er.setHasAnswerFile(hasAnswerFile);
-            er.setInProcessRealnessVerifyStatus(inProcessRealnessVerifyStatus);
-            er.setCameraPhotoUpload(cameraPhotoUpload);
-            er.setMobilePhotoUpload(mobilePhotoUpload);
-            er.setEntryAuthenticationPolicy(EntryAuthenticationPolicyEnum.valueOf(entryAuthenticationPolicy));
-            er.setInProcessFaceStrangerIgnore(inProcessFaceStrangerIgnore);
-            er.setInProcessLivenessFixedRange(inProcessLivenessFixedRange);
-            er.setInProcessLivenessJudgePolicy(InProcessLivenessJudgePolicyEnum.valueOf(inProcessLivenessJudgePolicy));
-            er.setMonitorVideoSource(monitorVideoSource);
-            er.setMonitorRecord(monitorRecord);
-            er.setCameraMonitorStatus(cameraMonitorStatus);
-            er.setScreenMonitorStatus(screenMonitorStatus);
-            er.setMobileFirstMonitorStatus(mobileFirstMonitorStatus);
-            er.setMobileSecondMonitorStatus(mobileSecondMonitorStatus);
-            er.setUpdateTime(updateTime);
-            examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
-            if (Objects.nonNull(examRecordStatusEnum) && examRecordStatusEnum != ExamRecordStatusEnum.PERSISTED) {
-                this.saveOrUpdate(er);
-            }
+            TOeExamRecord er = this.getCacheExamRecord(recordId);
+            this.saveOrUpdate(er);
         }
     }