|
@@ -18,6 +18,7 @@ import com.qmth.themis.business.dao.TOeExamRecordMapper;
|
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
|
import com.qmth.themis.business.dto.response.MarkResultDto;
|
|
|
import com.qmth.themis.business.dto.response.TEStudentMonitorRecordDto;
|
|
|
+import com.qmth.themis.business.entity.TIeInvigilateWarnInfo;
|
|
|
import com.qmth.themis.business.entity.TOeExamAnswer;
|
|
|
import com.qmth.themis.business.entity.TOeExamRecord;
|
|
|
import com.qmth.themis.business.entity.TSyncExamStudentScore;
|
|
@@ -124,7 +125,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
er.setObjectiveScore(0.0);
|
|
|
// er.setMonitorKey(String.valueOf(redisUtil.getRedisSequence()));
|
|
|
er.setMonitorKey(String.valueOf(er.getId()));
|
|
|
- er.setAlreadyBreakCount(0);
|
|
|
+// er.setAlreadyBreakCount(0);
|
|
|
er.setStartTime(ac.getStartTime());
|
|
|
er.setEndTime(ac.getFinishTime());
|
|
|
er.setOpeningSeconds(ac.getOpeningSeconds());
|
|
@@ -486,6 +487,22 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
if (Objects.nonNull(o) && o instanceof WarningUnreadBean) {
|
|
|
record.put(ExamRecordFieldEnum.warning_unread.getCode(), ((WarningUnreadBean) o).getNumber());
|
|
|
}
|
|
|
+ o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.warning_multiple_face_count.getCode());
|
|
|
+ if (Objects.nonNull(o) && o instanceof WarningMultipleFaceCountBean) {
|
|
|
+ record.put(ExamRecordFieldEnum.warning_multiple_face_count.getCode(), ((WarningMultipleFaceCountBean) o).getNumber());
|
|
|
+ }
|
|
|
+ o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.exception_count.getCode());
|
|
|
+ if (Objects.nonNull(o) && o instanceof ExceptionCountBean) {
|
|
|
+ record.put(ExamRecordFieldEnum.exception_count.getCode(), ((ExceptionCountBean) o).getNumber());
|
|
|
+ }
|
|
|
+ o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.already_break_count.getCode());
|
|
|
+ if (Objects.nonNull(o) && o instanceof AlreadyBreakCountBean) {
|
|
|
+ record.put(ExamRecordFieldEnum.already_break_count.getCode(), ((AlreadyBreakCountBean) o).getNumber());
|
|
|
+ }
|
|
|
+ o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.in_process_liveness_verify_count.getCode());
|
|
|
+ if (Objects.nonNull(o) && o instanceof InProcessLivenessVerifyCountBean) {
|
|
|
+ record.put(ExamRecordFieldEnum.in_process_liveness_verify_count.getCode(), ((InProcessLivenessVerifyCountBean) o).getNumber());
|
|
|
+ }
|
|
|
er = GsonUtil.fromJson(GsonUtil.toJson(record), TOeExamRecord.class);
|
|
|
}
|
|
|
return er;
|
|
@@ -510,70 +527,117 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
return this.getOne(tOeExamRecordQueryWrapper);
|
|
|
}
|
|
|
|
|
|
+// /**
|
|
|
+// * 根据id更新预警数量
|
|
|
+// *
|
|
|
+// * @param id
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public void updateWarningCount(Long id) {
|
|
|
+// this.baseMapper.updateWarningCount(id);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 根据id更新预警未读数量
|
|
|
+// *
|
|
|
+// * @param id
|
|
|
+// * @param number
|
|
|
+// */
|
|
|
+// @Override
|
|
|
+// public void updateWarningUnread(Long id, Integer number) {
|
|
|
+// this.baseMapper.updateWarningUnread(id, number);
|
|
|
+// }
|
|
|
+
|
|
|
/**
|
|
|
- * 根据id更新预警数量
|
|
|
+ * 更新预警总数
|
|
|
*
|
|
|
* @param id
|
|
|
+ * @param tIeInvigilateWarnInfo
|
|
|
*/
|
|
|
@Override
|
|
|
- public void updateWarningCount(Long id) {
|
|
|
- this.baseMapper.updateWarningCount(id);
|
|
|
+ public void updateWarningCountCache(Long id, TIeInvigilateWarnInfo tIeInvigilateWarnInfo) {
|
|
|
+ Integer warningCount = ExamRecordCacheUtil.getWarningCount(id);
|
|
|
+ ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(id);
|
|
|
+ if (Objects.nonNull(status) && status != ExamRecordStatusEnum.PERSISTED) {
|
|
|
+ long timestamp = System.currentTimeMillis();
|
|
|
+ if (Objects.nonNull(warningCount)) {
|
|
|
+ ExamRecordCacheUtil.setWarningCount(id, warningCount + 1, timestamp);
|
|
|
+ } else {
|
|
|
+ ExamRecordCacheUtil.setWarningCount(id, 1, timestamp);
|
|
|
+ }
|
|
|
+ Integer warningUnread = ExamRecordCacheUtil.getWarningUnread(id);
|
|
|
+ if (Objects.nonNull(warningUnread)) {
|
|
|
+ ExamRecordCacheUtil.setWarningUnread(id, warningUnread + 1, timestamp);
|
|
|
+ } else {
|
|
|
+ ExamRecordCacheUtil.setWarningUnread(id, 1, timestamp);
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(tIeInvigilateWarnInfo) && tIeInvigilateWarnInfo.getType() == VerifyExceptionEnum.FACE_COUNT_ERROR
|
|
|
+ && Objects.equals(tIeInvigilateWarnInfo.getLevel(), "D8")) {
|
|
|
+ this.updateWarningMultipleFaceCountCache(id);
|
|
|
+ }
|
|
|
+ this.sendExamRecordDataSaveMq(id, timestamp);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 根据id更新预警未读数量
|
|
|
+ * 更新预警未读数
|
|
|
*
|
|
|
* @param id
|
|
|
* @param number
|
|
|
*/
|
|
|
@Override
|
|
|
- public void updateWarningUnread(Long id, Integer number) {
|
|
|
- this.baseMapper.updateWarningUnread(id, number);
|
|
|
+ public void updateWarningUnreadCache(Long id, Integer number) {
|
|
|
+ Integer warningUnread = ExamRecordCacheUtil.getWarningUnread(id);
|
|
|
+ ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(id);
|
|
|
+ if (Objects.nonNull(status) && status != ExamRecordStatusEnum.PERSISTED) {
|
|
|
+ long timestamp = System.currentTimeMillis();
|
|
|
+ if (Objects.nonNull(warningUnread) && number.intValue() == 0) {
|
|
|
+ ExamRecordCacheUtil.setWarningUnread(id, number, timestamp);
|
|
|
+ } else if (Objects.nonNull(warningUnread) && number.intValue() > 0) {
|
|
|
+ ExamRecordCacheUtil.setWarningUnread(id, warningUnread - number, timestamp);
|
|
|
+ } else {
|
|
|
+ ExamRecordCacheUtil.setWarningUnread(id, 0, timestamp);
|
|
|
+ }
|
|
|
+ this.sendExamRecordDataSaveMq(id, timestamp);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 更新预警总数
|
|
|
+ * 更新陌生人脸预警总数
|
|
|
*
|
|
|
* @param id
|
|
|
*/
|
|
|
@Override
|
|
|
- public void updateWarningCountCache(Long id) {
|
|
|
- Integer warningCount = ExamRecordCacheUtil.getWarningCount(id);
|
|
|
- long timestamp = System.currentTimeMillis();
|
|
|
- if (Objects.nonNull(warningCount)) {
|
|
|
- ExamRecordCacheUtil.setWarningCount(id, warningCount + 1, timestamp);
|
|
|
- } else {
|
|
|
- ExamRecordCacheUtil.setWarningCount(id, 1, timestamp);
|
|
|
- }
|
|
|
- Integer warningUnread = ExamRecordCacheUtil.getWarningUnread(id);
|
|
|
- if (Objects.nonNull(warningUnread)) {
|
|
|
- ExamRecordCacheUtil.setWarningUnread(id, warningUnread + 1, timestamp);
|
|
|
- } else {
|
|
|
- ExamRecordCacheUtil.setWarningUnread(id, 1, timestamp);
|
|
|
+ public void updateWarningMultipleFaceCountCache(Long id) {
|
|
|
+ Integer warningMultipleFaceCount = ExamRecordCacheUtil.getWarningMultipleFaceCount(id);
|
|
|
+ ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(id);
|
|
|
+ if (Objects.nonNull(status) && status != ExamRecordStatusEnum.PERSISTED) {
|
|
|
+ long timestamp = System.currentTimeMillis();
|
|
|
+ if (Objects.nonNull(warningMultipleFaceCount)) {
|
|
|
+ ExamRecordCacheUtil.setWarningMultipleFaceCount(id, warningMultipleFaceCount + 1, timestamp);
|
|
|
+ } else {
|
|
|
+ ExamRecordCacheUtil.setWarningMultipleFaceCount(id, 1, timestamp);
|
|
|
+ }
|
|
|
}
|
|
|
-// this.sendExamRecordDataUpdateWarningCountMq(id, timestamp);
|
|
|
- this.sendExamRecordDataSaveMq(id, timestamp);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 更新预警未读数
|
|
|
+ * 更新异常数
|
|
|
*
|
|
|
* @param id
|
|
|
- * @param number
|
|
|
*/
|
|
|
@Override
|
|
|
- public void updateWarningUnreadCache(Long id, Integer number) {
|
|
|
- long timestamp = System.currentTimeMillis();
|
|
|
- Integer warningUnread = ExamRecordCacheUtil.getWarningUnread(id);
|
|
|
- if (Objects.nonNull(warningUnread) && number.intValue() == 0) {
|
|
|
- ExamRecordCacheUtil.setWarningUnread(id, number, timestamp);
|
|
|
- } else if (Objects.nonNull(warningUnread) && number.intValue() > 0) {
|
|
|
- ExamRecordCacheUtil.setWarningUnread(id, warningUnread - number, timestamp);
|
|
|
- } else {
|
|
|
- ExamRecordCacheUtil.setWarningUnread(id, 0, timestamp);
|
|
|
+ public void updateExceptionCountCache(Long id) {
|
|
|
+ Integer exceptionCount = ExamRecordCacheUtil.getExceptionCount(id);
|
|
|
+ ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(id);
|
|
|
+ if (Objects.nonNull(status) && status != ExamRecordStatusEnum.PERSISTED) {
|
|
|
+ long timestamp = System.currentTimeMillis();
|
|
|
+ if (Objects.nonNull(exceptionCount)) {
|
|
|
+ ExamRecordCacheUtil.setExceptionCount(id, exceptionCount + 1, timestamp);
|
|
|
+ } else {
|
|
|
+ ExamRecordCacheUtil.setExceptionCount(id, 1, timestamp);
|
|
|
+ }
|
|
|
}
|
|
|
- this.sendExamRecordDataSaveMq(id, timestamp);
|
|
|
-// this.sendExamRecordDataUpdateWarningUnreadMq(id, timestamp, number);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -593,8 +657,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId);
|
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult);
|
|
|
} else if (LivenessTypeEnum.IN_PROCESS.equals(type)) {
|
|
|
- Integer count = ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId);
|
|
|
- ExamRecordCacheUtil.setInProcessLivenessVerifyCount(recordId, (count == null ? 0 : count + 1));
|
|
|
+ Integer count = Objects.isNull(ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId)) ? 0 : ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId);
|
|
|
+ ExamRecordCacheUtil.setInProcessLivenessVerifyCount(recordId, count + 1, System.currentTimeMillis());
|
|
|
}
|
|
|
this.sendExamRecordDataSaveMq(recordId, System.currentTimeMillis());
|
|
|
}
|
|
@@ -1197,6 +1261,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
return tOeExamRecord;
|
|
|
}
|
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Integer i = 0;
|
|
|
+// System.out.println(i++);
|
|
|
+ System.out.println(i + 1);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 设置断点信息
|
|
|
*
|
|
@@ -1211,17 +1281,13 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
SystemConstant.REDIS_LOCK_EXAM_STATUS_TIME_OUT);
|
|
|
if (lock) {
|
|
|
try {
|
|
|
- Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ?
|
|
|
- 0 :
|
|
|
- ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
- alreadyBreakCount++;
|
|
|
-// Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
|
+ Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ? 0 : ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
Long breakId = uidUtil.getId();
|
|
|
Long lastBreakTimeNow = System.currentTimeMillis();
|
|
|
ExamRecordCacheUtil.setLastBreakId(recordId, breakId);
|
|
|
ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, lastBreakTimeNow);
|
|
|
ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTimeNow);
|
|
|
- ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount);
|
|
|
+ ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount + 1, lastBreakTimeNow);
|
|
|
|
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
@@ -1249,7 +1315,6 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
ec.getBreakExpireSeconds();
|
|
|
sendExamBreakMqDelayMsg(breakExpireSeconds, recordId);
|
|
|
//更新场次-考试记录缓存
|
|
|
-// ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId);
|
|
|
} else {
|
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_ALREADY_UPDATE);
|
|
|
}
|
|
@@ -1304,26 +1369,18 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
|
Long lastBreakTime = ExamRecordCacheUtil.getLastBreakTime(recordId);
|
|
|
- Integer breakExpireSeconds = Objects.isNull(ec.getBreakExpireSeconds()) ?
|
|
|
- 0 :
|
|
|
- ec.getBreakExpireSeconds();
|
|
|
- Integer durationSeconds = Objects.isNull(ExamRecordCacheUtil.getDurationSeconds(recordId)) ?
|
|
|
- 0 :
|
|
|
- ExamRecordCacheUtil.getDurationSeconds(recordId);
|
|
|
- Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ?
|
|
|
- 0 :
|
|
|
- ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
+ Integer breakExpireSeconds = Objects.isNull(ec.getBreakExpireSeconds()) ? 0 : ec.getBreakExpireSeconds();
|
|
|
+ Integer durationSeconds = Objects.isNull(ExamRecordCacheUtil.getDurationSeconds(recordId)) ? 0 : ExamRecordCacheUtil.getDurationSeconds(recordId);
|
|
|
+ Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ? 0 : ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
Integer leftBreakResumeCount = ec.getBreakResumeCount() - alreadyBreakCount;
|
|
|
if (Objects.nonNull(lastBreakTime)
|
|
|
&& (System.currentTimeMillis() - lastBreakTime) / 1000 >= breakExpireSeconds) {
|
|
|
finished = true;
|
|
|
- examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(),
|
|
|
- durationSeconds);
|
|
|
+ examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
} else {
|
|
|
- if (leftBreakResumeCount < 0) {
|
|
|
+ if (leftBreakResumeCount <= 0) {
|
|
|
finished = true;
|
|
|
- examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(),
|
|
|
- durationSeconds);
|
|
|
+ examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|