|
@@ -19,7 +19,6 @@ 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.TEExamStudent;
|
|
|
import com.qmth.themis.business.entity.TOeExamAnswer;
|
|
|
import com.qmth.themis.business.entity.TOeExamRecord;
|
|
|
import com.qmth.themis.business.entity.TSyncExamStudentScore;
|
|
@@ -30,7 +29,6 @@ import com.qmth.themis.common.contanst.Constants;
|
|
|
import com.qmth.themis.common.enums.ExceptionResultEnum;
|
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
|
import com.qmth.themis.common.util.FileUtil;
|
|
|
-import com.qmth.themis.common.util.GsonUtil;
|
|
|
import com.qmth.themis.common.util.IpUtil;
|
|
|
import com.qmth.themis.common.util.SimpleBeanUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -382,45 +380,50 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
.get(RedisKeyHelper.studentPaperStructKey(recordId));
|
|
|
|
|
|
//保存考试记录
|
|
|
+ TOeExamRecord er = null;
|
|
|
Map<String, Object> record = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
- 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());
|
|
|
+ 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);
|
|
|
+ }else{
|
|
|
+ er = SystemConstant.getExamRecord(recordId);
|
|
|
}
|
|
|
- Gson gson = new Gson();
|
|
|
- TOeExamRecord er = gson.fromJson(gson.toJson(record), TOeExamRecord.class);
|
|
|
er.setStatus(ExamRecordStatusEnum.PERSISTED);
|
|
|
er.setUpdateTime(System.currentTimeMillis());
|
|
|
if (struct != null) {
|
|
@@ -428,6 +431,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
}
|
|
|
er.setPaperStructUpload(1);
|
|
|
saveOrUpdate(er);
|
|
|
+
|
|
|
//保存作答
|
|
|
Map<String, ExamStudentAnswerCacheBean> answerMap = redisUtil
|
|
|
.getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
|
|
@@ -443,7 +447,9 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
examAnswerService.saveOrUpdateBatch(tOeExamAnswerList);
|
|
|
}
|
|
|
//更新考生信息
|
|
|
- teExamStudentService.updateExamStudentByCache(er.getExamStudentId());
|
|
|
+ if (Objects.nonNull(er)) {
|
|
|
+ teExamStudentService.updateExamStudentByCache(er.getExamStudentId());
|
|
|
+ }
|
|
|
//上传个人试卷结构
|
|
|
if (struct != null) {
|
|
|
ossUtil.upload(false, structFilePath, struct.getContent());
|