|
@@ -17,7 +17,10 @@ import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
|
|
import com.qmth.themis.business.dto.response.TEExamActivityDto;
|
|
import com.qmth.themis.business.dto.response.TEExamActivityDto;
|
|
import com.qmth.themis.business.dto.response.TEExamDto;
|
|
import com.qmth.themis.business.dto.response.TEExamDto;
|
|
import com.qmth.themis.business.dto.response.TEExamQueryDto;
|
|
import com.qmth.themis.business.dto.response.TEExamQueryDto;
|
|
-import com.qmth.themis.business.entity.*;
|
|
|
|
|
|
+import com.qmth.themis.business.entity.TBSession;
|
|
|
|
+import com.qmth.themis.business.entity.TBTaskHistory;
|
|
|
|
+import com.qmth.themis.business.entity.TEExam;
|
|
|
|
+import com.qmth.themis.business.entity.TOeExamRecord;
|
|
import com.qmth.themis.business.enums.*;
|
|
import com.qmth.themis.business.enums.*;
|
|
import com.qmth.themis.business.service.*;
|
|
import com.qmth.themis.business.service.*;
|
|
import com.qmth.themis.business.util.*;
|
|
import com.qmth.themis.business.util.*;
|
|
@@ -116,7 +119,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public IPage<TEExamQueryDto> examQuery(IPage<Map> iPage, Long userId, Long id, String code, String name,
|
|
public IPage<TEExamQueryDto> examQuery(IPage<Map> iPage, Long userId, Long id, String code, String name,
|
|
- String mode, Integer enable, Long orgId, String type) {
|
|
|
|
|
|
+ String mode, Integer enable, Long orgId, String type) {
|
|
return teExamMapper.examQuery(iPage, userId, id, code, name, mode, enable, orgId, type);
|
|
return teExamMapper.examQuery(iPage, userId, id, code, name, mode, enable, orgId, type);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -280,12 +283,12 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
ExamRecordCacheUtil.setMinDurationSeconds(recordId, examCache.getMinDurationSeconds(), false);
|
|
ExamRecordCacheUtil.setMinDurationSeconds(recordId, examCache.getMinDurationSeconds(), false);
|
|
ExamRecordCacheUtil.setMaxDurationSeconds(recordId, ac.getMaxDurationSeconds(), false);
|
|
ExamRecordCacheUtil.setMaxDurationSeconds(recordId, ac.getMaxDurationSeconds(), false);
|
|
ExamRecordCacheUtil.setForceFinish(recordId, examCache.getForceFinish(), false);
|
|
ExamRecordCacheUtil.setForceFinish(recordId, examCache.getForceFinish(), false);
|
|
- String[] columns = new String[] { ExamRecordFieldEnum.start_time.name(),
|
|
|
|
|
|
+ String[] columns = new String[]{ExamRecordFieldEnum.start_time.name(),
|
|
ExamRecordFieldEnum.end_time.name(), ExamRecordFieldEnum.opening_seconds.name(),
|
|
ExamRecordFieldEnum.end_time.name(), ExamRecordFieldEnum.opening_seconds.name(),
|
|
ExamRecordFieldEnum.min_duration_seconds.name(),
|
|
ExamRecordFieldEnum.min_duration_seconds.name(),
|
|
- ExamRecordFieldEnum.max_duration_seconds.name(), ExamRecordFieldEnum.force_finish.name() };
|
|
|
|
- Object[] values = new Object[] { ac.getStartTime(), ac.getFinishTime(), ac.getOpeningSeconds(),
|
|
|
|
- examCache.getMinDurationSeconds(), ac.getMaxDurationSeconds(), examCache.getForceFinish() };
|
|
|
|
|
|
+ ExamRecordFieldEnum.max_duration_seconds.name(), ExamRecordFieldEnum.force_finish.name()};
|
|
|
|
+ Object[] values = new Object[]{ac.getStartTime(), ac.getFinishTime(), ac.getOpeningSeconds(),
|
|
|
|
+ examCache.getMinDurationSeconds(), ac.getMaxDurationSeconds(), examCache.getForceFinish()};
|
|
toeExamRecordService.dataUpdatesMq(recordId, columns, values);
|
|
toeExamRecordService.dataUpdatesMq(recordId, columns, values);
|
|
return prepare;
|
|
return prepare;
|
|
}
|
|
}
|
|
@@ -426,7 +429,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
if (es.getEnable().intValue() == 0) {
|
|
if (es.getEnable().intValue() == 0) {
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STUDENT_ENABLE);
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STUDENT_ENABLE);
|
|
}
|
|
}
|
|
- Boolean finished = toeExamRecordService.sendExamBreakMsg(recordId, false);
|
|
|
|
|
|
+ Boolean finished = toeExamRecordService.examBreakLogic(recordId, false);
|
|
if (finished) {
|
|
if (finished) {
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -492,14 +495,14 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
if (Objects.isNull(clientCameraStatus) || Objects
|
|
if (Objects.isNull(clientCameraStatus) || Objects
|
|
.equals(MonitorStatusSourceEnum.STOP, clientCameraStatus)) {
|
|
.equals(MonitorStatusSourceEnum.STOP, clientCameraStatus)) {
|
|
switch (strs[i]) {
|
|
switch (strs[i]) {
|
|
- case "CLIENT_CAMERA":
|
|
|
|
- throw new BusinessException(ExceptionResultEnum.CLIENT_CAMERA_OFFLINE);
|
|
|
|
- case "CLIENT_SCREEN":
|
|
|
|
- throw new BusinessException(ExceptionResultEnum.CLIENT_SCREEN_OFFLINE);
|
|
|
|
- case "MOBILE_FIRST":
|
|
|
|
- throw new BusinessException(ExceptionResultEnum.MOBILE_FIRST_OFFLINE);
|
|
|
|
- default:
|
|
|
|
- throw new BusinessException(ExceptionResultEnum.MOBILE_SECOND_OFFLINE);
|
|
|
|
|
|
+ case "CLIENT_CAMERA":
|
|
|
|
+ throw new BusinessException(ExceptionResultEnum.CLIENT_CAMERA_OFFLINE);
|
|
|
|
+ case "CLIENT_SCREEN":
|
|
|
|
+ throw new BusinessException(ExceptionResultEnum.CLIENT_SCREEN_OFFLINE);
|
|
|
|
+ case "MOBILE_FIRST":
|
|
|
|
+ throw new BusinessException(ExceptionResultEnum.MOBILE_FIRST_OFFLINE);
|
|
|
|
+ default:
|
|
|
|
+ throw new BusinessException(ExceptionResultEnum.MOBILE_SECOND_OFFLINE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -522,15 +525,15 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
if (Objects.isNull(firstStartTime)) {
|
|
if (Objects.isNull(firstStartTime)) {
|
|
firstStartTime = System.currentTimeMillis();
|
|
firstStartTime = System.currentTimeMillis();
|
|
ExamRecordCacheUtil.setFirstStartTime(recordId, firstStartTime, false);
|
|
ExamRecordCacheUtil.setFirstStartTime(recordId, firstStartTime, false);
|
|
- columns = new String[] { ExamRecordFieldEnum.first_start_time.name(),
|
|
|
|
- ExamRecordFieldEnum.status.name() };
|
|
|
|
- values = new Object[] { firstStartTime, ExamRecordStatusEnum.ANSWERING };
|
|
|
|
|
|
+ columns = new String[]{ExamRecordFieldEnum.first_start_time.name(),
|
|
|
|
+ ExamRecordFieldEnum.status.name()};
|
|
|
|
+ values = new Object[]{firstStartTime, ExamRecordStatusEnum.ANSWERING};
|
|
} else {
|
|
} else {
|
|
lastStartTime = System.currentTimeMillis();
|
|
lastStartTime = System.currentTimeMillis();
|
|
ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
- columns = new String[] { ExamRecordFieldEnum.last_start_time.name(),
|
|
|
|
- ExamRecordFieldEnum.status.name() };
|
|
|
|
- values = new Object[] { lastStartTime, ExamRecordStatusEnum.ANSWERING };
|
|
|
|
|
|
+ columns = new String[]{ExamRecordFieldEnum.last_start_time.name(),
|
|
|
|
+ ExamRecordFieldEnum.status.name()};
|
|
|
|
+ values = new Object[]{lastStartTime, ExamRecordStatusEnum.ANSWERING};
|
|
}
|
|
}
|
|
Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
|
|
Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
|
|
ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
@@ -560,12 +563,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!lock) {
|
|
if (!lock) {
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
- jsonObject.put("recordId", recordId);
|
|
|
|
- jsonObject.put("method", "start");
|
|
|
|
- jsonObject.put("examStatus", ExamRecordCacheUtil.getStatus(recordId));
|
|
|
|
- TGError tgError = new TGError(jsonObject.toJSONString(), System.currentTimeMillis());
|
|
|
|
- tgErrorService.save(tgError);
|
|
|
|
|
|
+ tgErrorService.saveExamTgError(recordId, "start");
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_UPDATE_ERROR);
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_UPDATE_ERROR);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -656,7 +654,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public AnswerSubmitBean answerSubmit(Long studentId, Long recordId, Integer mainNumber, Integer subNumber,
|
|
public AnswerSubmitBean answerSubmit(Long studentId, Long recordId, Integer mainNumber, Integer subNumber,
|
|
- Integer subIndex, String answer, Long version, Integer durationSeconds) {
|
|
|
|
|
|
+ Integer subIndex, String answer, Long version, Integer durationSeconds) {
|
|
|
|
|
|
// 校验当前登录用户和参数一致性
|
|
// 校验当前登录用户和参数一致性
|
|
if (ExamRecordCacheUtil.getId(recordId) == null) {
|
|
if (ExamRecordCacheUtil.getId(recordId) == null) {
|
|
@@ -752,7 +750,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public AudioLeftPlayCountSubmitBean audioLeftPlayCountSubmit(Long studentId, Long recordId, String key,
|
|
public AudioLeftPlayCountSubmitBean audioLeftPlayCountSubmit(Long studentId, Long recordId, String key,
|
|
- Integer count) {
|
|
|
|
|
|
+ Integer count) {
|
|
|
|
|
|
// 校验当前登录用户和参数一致性
|
|
// 校验当前登录用户和参数一致性
|
|
if (ExamRecordCacheUtil.getId(recordId) == null) {
|
|
if (ExamRecordCacheUtil.getId(recordId) == null) {
|
|
@@ -867,7 +865,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
}
|
|
}
|
|
|
|
|
|
ExamResumeBean ret = null;
|
|
ExamResumeBean ret = null;
|
|
- Boolean finished = toeExamRecordService.sendExamBreakMsg(recordId, false);
|
|
|
|
|
|
+ Boolean finished = toeExamRecordService.examBreakLogic(recordId, false);
|
|
if (finished) {
|
|
if (finished) {
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -907,9 +905,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
Long lastPrepareTime = System.currentTimeMillis();
|
|
Long lastPrepareTime = System.currentTimeMillis();
|
|
ExamRecordCacheUtil.setLastPrepareTime(recordId, lastPrepareTime, false);
|
|
ExamRecordCacheUtil.setLastPrepareTime(recordId, lastPrepareTime, false);
|
|
ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.RESUME_PREPARE, false);
|
|
ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.RESUME_PREPARE, false);
|
|
- String[] columns = new String[] { ExamRecordFieldEnum.last_prepare_time.name(),
|
|
|
|
- ExamRecordFieldEnum.status.name() };
|
|
|
|
- Object[] values = new Object[] { lastPrepareTime, ExamRecordStatusEnum.RESUME_PREPARE };
|
|
|
|
|
|
+ String[] columns = new String[]{ExamRecordFieldEnum.last_prepare_time.name(),
|
|
|
|
+ ExamRecordFieldEnum.status.name()};
|
|
|
|
+ Object[] values = new Object[]{lastPrepareTime, ExamRecordStatusEnum.RESUME_PREPARE};
|
|
ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
|
|
Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
|
|
if (Objects.nonNull(examRecordStatusEnum)
|
|
if (Objects.nonNull(examRecordStatusEnum)
|
|
@@ -938,12 +936,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!lock) {
|
|
if (!lock) {
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
- jsonObject.put("recordId", recordId);
|
|
|
|
- jsonObject.put("method", "resume");
|
|
|
|
- jsonObject.put("examStatus", ExamRecordCacheUtil.getStatus(recordId));
|
|
|
|
- TGError tgError = new TGError(jsonObject.toJSONString(), System.currentTimeMillis());
|
|
|
|
- tgErrorService.save(tgError);
|
|
|
|
|
|
+ tgErrorService.saveExamTgError(recordId, "resume");
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_UPDATE_ERROR);
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_UPDATE_ERROR);
|
|
}
|
|
}
|
|
return ret;
|
|
return ret;
|
|
@@ -1096,11 +1089,11 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
ExamRecordCacheUtil.setDurationSeconds(recordId, durationSeconds, false);
|
|
ExamRecordCacheUtil.setDurationSeconds(recordId, durationSeconds, false);
|
|
ExamRecordCacheUtil.setFinishType(recordId, FinishTypeEnum.valueOf(type), false);
|
|
ExamRecordCacheUtil.setFinishType(recordId, FinishTypeEnum.valueOf(type), false);
|
|
ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.FINISHED, false);
|
|
ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.FINISHED, false);
|
|
- String[] columns = new String[] { ExamRecordFieldEnum.finish_time.name(),
|
|
|
|
|
|
+ String[] columns = new String[]{ExamRecordFieldEnum.finish_time.name(),
|
|
ExamRecordFieldEnum.duration_seconds.name(), ExamRecordFieldEnum.finish_type.name(),
|
|
ExamRecordFieldEnum.duration_seconds.name(), ExamRecordFieldEnum.finish_type.name(),
|
|
- ExamRecordFieldEnum.status.name() };
|
|
|
|
- Object[] values = new Object[] { finishTime, durationSeconds, FinishTypeEnum.valueOf(type),
|
|
|
|
- ExamRecordStatusEnum.FINISHED };
|
|
|
|
|
|
+ ExamRecordFieldEnum.status.name()};
|
|
|
|
+ Object[] values = new Object[]{finishTime, durationSeconds, FinishTypeEnum.valueOf(type),
|
|
|
|
+ ExamRecordStatusEnum.FINISHED};
|
|
ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
if (Objects.nonNull(examRecordStatusEnum)
|
|
if (Objects.nonNull(examRecordStatusEnum)
|
|
&& examRecordStatusEnum == ExamRecordStatusEnum.FINISHED) {
|
|
&& examRecordStatusEnum == ExamRecordStatusEnum.FINISHED) {
|
|
@@ -1125,12 +1118,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!lock) {
|
|
if (!lock) {
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
- jsonObject.put("recordId", recordId);
|
|
|
|
- jsonObject.put("method", "diposeFinish");
|
|
|
|
- jsonObject.put("examStatus", ExamRecordCacheUtil.getStatus(recordId));
|
|
|
|
- TGError tgError = new TGError(jsonObject.toJSONString(), System.currentTimeMillis());
|
|
|
|
- tgErrorService.save(tgError);
|
|
|
|
|
|
+ tgErrorService.saveExamTgError(recordId, "diposeFinish");
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_UPDATE_ERROR);
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_UPDATE_ERROR);
|
|
}
|
|
}
|
|
//更新未完成考试记录id
|
|
//更新未完成考试记录id
|
|
@@ -1302,7 +1290,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public void sendOeLogMessage(SystemOperationEnum systemOperationEnum, Long examStudentId, Long recordId,
|
|
public void sendOeLogMessage(SystemOperationEnum systemOperationEnum, Long examStudentId, Long recordId,
|
|
- MqDto mqDto) {
|
|
|
|
|
|
+ MqDto mqDto) {
|
|
//mq发送消息start
|
|
//mq发送消息start
|
|
Map<String, Object> properties = new HashMap<>();
|
|
Map<String, Object> properties = new HashMap<>();
|
|
properties.put("remark", systemOperationEnum.getCode());
|
|
properties.put("remark", systemOperationEnum.getCode());
|