|
@@ -122,7 +122,7 @@ public class MqLogicServiceImpl implements MqLogicService {
|
|
if (tag.contains(MqTagEnum.USER.name())) {
|
|
if (tag.contains(MqTagEnum.USER.name())) {
|
|
teUserLogService.saveUserLogInfo(mqDto.getTimestamp(), mqDto.getObjId(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
|
|
teUserLogService.saveUserLogInfo(mqDto.getTimestamp(), mqDto.getObjId(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
|
|
} else if (tag.contains(MqTagEnum.STUDENT.name())) {
|
|
} else if (tag.contains(MqTagEnum.STUDENT.name())) {
|
|
- teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
|
|
|
|
|
|
+ teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto), mqDto.getObjId());
|
|
}
|
|
}
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
@@ -210,13 +210,23 @@ public class MqLogicServiceImpl implements MqLogicService {
|
|
Map<String, Object> tranMap = mqDto.getProperties();
|
|
Map<String, Object> tranMap = mqDto.getProperties();
|
|
Long recordId = Long.parseLong(String.valueOf(tranMap.get("recordId")));
|
|
Long recordId = Long.parseLong(String.valueOf(tranMap.get("recordId")));
|
|
Date clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
|
|
Date clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
|
|
- if (Objects.nonNull(clientLastSyncTime) && (System.currentTimeMillis() - clientLastSyncTime.getTime()) / 1000 / 60 >= 2) {//大于等于当前时间,说明未重连或重登录
|
|
|
|
- //是否增加断点记录或者交卷处理统一放登录逻辑里处理,这里只更新考试记录状态为中断
|
|
|
|
- Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
- objectMap.put("status", ExamRecordStatusEnum.BREAK_OFF);
|
|
|
|
- redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
|
|
|
|
|
|
+ Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
+ Integer diff = 0;
|
|
|
|
+ if (Objects.nonNull(clientLastSyncTime)) {//大于等于当前时间,说明未重连或重登录
|
|
|
|
+ Long l = (System.currentTimeMillis() - clientLastSyncTime.getTime()) / 1000 / 60;
|
|
|
|
+ if (l >= 2) {
|
|
|
|
+ diff = l.intValue();
|
|
|
|
+ //是否增加断点记录或者交卷处理统一放登录逻辑里处理,这里只更新考试记录状态为中断
|
|
|
|
+ objectMap.put("status", ExamRecordStatusEnum.BREAK_OFF);
|
|
|
|
+ redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
|
|
|
|
|
|
+ //增加异常日志
|
|
|
|
+ Long examId = Long.parseLong(String.valueOf(objectMap.get("examId")));
|
|
|
|
+ Long examActivityId = Long.parseLong(String.valueOf(objectMap.get("examActivityId")));
|
|
|
|
+ Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
|
+ TIeInvigilateExceptionInfo tIeInvigilateExceptionInfo = new TIeInvigilateExceptionInfo(examId, examActivityId, recordId, examStudentId, ExceptionEnum.NET_TIME_OUT.name(), ExceptionEnum.NET_TIME_OUT, String.valueOf(diff));
|
|
|
|
+ tIeInvigilateExceptionInfoService.saveOrUpdate(tIeInvigilateExceptionInfo);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
Map map = new HashMap();
|
|
Map map = new HashMap();
|
|
map.put(SystemConstant.MQDTO_OBJ, JacksonUtil.parseJson(mqDto));
|
|
map.put(SystemConstant.MQDTO_OBJ, JacksonUtil.parseJson(mqDto));
|
|
@@ -322,47 +332,6 @@ public class MqLogicServiceImpl implements MqLogicService {
|
|
redisUtil.delete(key, mqDto.getId());
|
|
redisUtil.delete(key, mqDto.getId());
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 增加考试断点记录
|
|
|
|
- *
|
|
|
|
- * @param mqDto
|
|
|
|
- * @param key
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- @Transactional
|
|
|
|
- public void execMqExamBreakHistoryLogic(MqDto mqDto, String key) {
|
|
|
|
- ExamStartParamBean examStartParamBean = JacksonUtil.readJson(JacksonUtil.parseJson(mqDto.getBody()), ExamStartParamBean.class);
|
|
|
|
- //更新考试记录
|
|
|
|
- Long recordId = Long.parseLong(mqDto.getObjId());
|
|
|
|
- Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
- //先查询之前的断点记录
|
|
|
|
- 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(RedisKeyHelper.examBreakCacheKey(s.getId()));
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- //增加断点记录
|
|
|
|
- TOeExamBreakHistory tOeExamBreakHistory = new TOeExamBreakHistory(recordId, new Date(), BreakReasonEnum.NET_TIME_OUT, BreakReasonEnum.NET_TIME_OUT.name());
|
|
|
|
- tOeExamBreakHistoryService.save(tOeExamBreakHistory);
|
|
|
|
- redisUtil.setForHash(RedisKeyHelper.examBreakCacheKey(tOeExamBreakHistory.getId()), SimpleBeanUtil.objectToMap(tOeExamBreakHistory));
|
|
|
|
-
|
|
|
|
- objectMap.put("lastBreakId", tOeExamBreakHistory.getId());
|
|
|
|
- redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
|
|
|
|
-
|
|
|
|
- Gson gson = new Gson();
|
|
|
|
- teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), SystemOperationEnum.valueOf(String.valueOf(mqDto.getBody())).getCode(), JacksonUtil.parseJson(mqDto));
|
|
|
|
- mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
- TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
- tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
- tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
- redisUtil.delete(key, mqDto.getId());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void execMqRecordUpdateLogic(MqDto mqDto, String key) {
|
|
public void execMqRecordUpdateLogic(MqDto mqDto, String key) {
|
|
@@ -438,11 +407,11 @@ public class MqLogicServiceImpl implements MqLogicService {
|
|
//更新考试记录
|
|
//更新考试记录
|
|
Long recordId = Long.parseLong(mqDto.getObjId());
|
|
Long recordId = Long.parseLong(mqDto.getObjId());
|
|
Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
- //获取最近断点时间
|
|
|
|
- Date lastBreakTime = (Date) objectMap.get("lastBreakTime");
|
|
|
|
- Integer diff = null;
|
|
|
|
- if (Objects.nonNull(lastBreakTime)) {
|
|
|
|
- Long l = ((System.currentTimeMillis() - lastBreakTime.getTime()) / 1000 / 60);
|
|
|
|
|
|
+ //获取最近同步时间
|
|
|
|
+ Date clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
|
|
|
|
+ Integer diff = 0;
|
|
|
|
+ if (Objects.nonNull(clientLastSyncTime)) {
|
|
|
|
+ Long l = ((System.currentTimeMillis() - clientLastSyncTime.getTime()) / 1000 / 60);
|
|
diff = l.intValue();
|
|
diff = l.intValue();
|
|
}
|
|
}
|
|
//先查询之前的断点记录
|
|
//先查询之前的断点记录
|