|
@@ -10,7 +10,7 @@ import com.qmth.themis.business.entity.TBSession;
|
|
|
import com.qmth.themis.business.entity.TMRocketMessage;
|
|
|
import com.qmth.themis.business.entity.TOeExamBreakHistory;
|
|
|
import com.qmth.themis.business.enums.BreakReasonEnum;
|
|
|
-import com.qmth.themis.business.enums.FinishTypeEnum;
|
|
|
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
|
|
|
import com.qmth.themis.business.enums.MqEnum;
|
|
|
import com.qmth.themis.business.enums.SystemOperationEnum;
|
|
|
import com.qmth.themis.business.service.*;
|
|
@@ -24,6 +24,7 @@ import com.qmth.themis.business.threadPool.MyThreadPool;
|
|
|
import com.qmth.themis.business.util.JacksonUtil;
|
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
|
import com.qmth.themis.mq.dto.MqDto;
|
|
|
+import com.qmth.themis.mq.service.MqDtoService;
|
|
|
import com.qmth.themis.mq.service.MqLogicService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -74,6 +75,7 @@ public class MqLogicServiceImpl implements MqLogicService {
|
|
|
|
|
|
@Resource
|
|
|
TOeLivenessVerifyHistoryService livenessVerifyHistoryService;
|
|
|
+
|
|
|
@Resource
|
|
|
TEExamService teExamService;
|
|
|
|
|
@@ -197,56 +199,10 @@ public class MqLogicServiceImpl implements MqLogicService {
|
|
|
Long recordId = Long.parseLong(String.valueOf(tranMap.get("recordId")));
|
|
|
Date clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
|
|
|
if (Objects.nonNull(clientLastSyncTime) && (System.currentTimeMillis() - clientLastSyncTime.getTime()) / 1000 / 60 >= 2) {//大于等于当前时间,说明未重连或重登录
|
|
|
- String deviceId = String.valueOf(tranMap.get("deviceId"));
|
|
|
- String ip = String.valueOf(tranMap.get("ip"));
|
|
|
- Long updateTime = Long.parseLong(String.valueOf(tranMap.get("updateTime")));
|
|
|
- Date date = new Date();
|
|
|
- date.setTime(updateTime);
|
|
|
-// TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(recordId);
|
|
|
+ //是否增加断点记录或者交卷处理统一放登录逻辑里处理,这里只更新考试记录状态为中断
|
|
|
Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
-// Integer breakCount = tOeExamRecord.getLeftBreakResumeCount();
|
|
|
- Integer leftBreakResumeCount = ExamRecordCacheUtil.getLeftBreakResumeCount(recordId);
|
|
|
- Long examId = Long.parseLong(String.valueOf(objectMap.get("examId")));
|
|
|
- Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
- Integer durationSeconds = Integer.parseInt(String.valueOf(objectMap.get("durationSeconds")));
|
|
|
-// 获取考试缓存
|
|
|
-// ExamCacheBean ec = teExamService.getExamCacheBean(examId);
|
|
|
- if (Objects.isNull(leftBreakResumeCount) || leftBreakResumeCount <= 0) {
|
|
|
-// tOeExamRecordService.updateById(tOeExamRecord);
|
|
|
- teExamService.finish(examStudentId, recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
- }
|
|
|
-// else {//否则断点次数减1
|
|
|
-// leftBreakResumeCount--;
|
|
|
-// //如果断点次数超过了考试整体断点次数,也强制交卷
|
|
|
-// if (leftBreakResumeCount > ec.getBreakResumeCount()) {
|
|
|
-// teExamService.finish(examStudentId, recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
-// } else {
|
|
|
-// //先查询之前的断点记录
|
|
|
-// QueryWrapper<TOeExamBreakHistory> tOeExamBreakHistoryQueryWrapper = new QueryWrapper<>();
|
|
|
-// tOeExamBreakHistoryQueryWrapper.lambda().eq(TOeExamBreakHistory::getExamRecordId, recordId);
|
|
|
-// List<TOeExamBreakHistory> tOeExamBreakHistoryList = tOeExamBreakHistoryService.list(tOeExamBreakHistoryQueryWrapper);
|
|
|
-// //删除历史断点缓存
|
|
|
-// if (Objects.nonNull(tOeExamBreakHistoryList) && tOeExamBreakHistoryList.size() > 0) {
|
|
|
-// tOeExamBreakHistoryList.forEach(s -> {
|
|
|
-// redisUtil.delete(SystemConstant.EXAM_BREAK + String.valueOf(s.getId()));
|
|
|
-// });
|
|
|
-// }
|
|
|
-// //增加断点记录
|
|
|
-// TOeExamBreakHistory tOeExamBreakHistory = new TOeExamBreakHistory(recordId, new Date(), BreakReasonEnum.NET_TIME_OUT, BreakReasonEnum.NET_TIME_OUT.name());
|
|
|
-// tOeExamBreakHistoryService.save(tOeExamBreakHistory);
|
|
|
-// redisUtil.set(SystemConstant.EXAM_BREAK + String.valueOf(tOeExamBreakHistory.getId()), tOeExamBreakHistory);
|
|
|
-// //更新考试记录状态
|
|
|
-//// tOeExamRecord.setClientCurrentIp(ip);
|
|
|
-//// tOeExamRecord.setClientWebsocketId(deviceId);
|
|
|
-//// tOeExamRecord.setClientWebsocketStatus(WebsocketStatusEnum.UN_ONLINE.ordinal());
|
|
|
-//// tOeExamRecord.setClientLastSyncTime(date);
|
|
|
-//// tOeExamRecord.setLastBreakId(tOeExamBreakHistory.getId());
|
|
|
-//// tOeExamRecord.setLastBreakTime(tOeExamBreakHistory.getBreakTime());
|
|
|
-//// tOeExamRecord.setLeftBreakResumeCount(breakCount);
|
|
|
-//// tOeExamRecord.setStatus(ExamRecordStatusEnum.bREAK_OFF);
|
|
|
-// }
|
|
|
-//// tOeExamRecordService.updateById(tOeExamRecord);
|
|
|
-// }
|
|
|
+ objectMap.put("status", ExamRecordStatusEnum.bREAK_OFF.name());
|
|
|
+ redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
|
|
|
}
|
|
|
teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
|
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|