|
@@ -48,7 +48,9 @@ import java.util.*;
|
|
* @Date: 2020/6/25
|
|
* @Date: 2020/6/25
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
-public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, TOeExamRecord> implements TOeExamRecordService {
|
|
|
|
|
|
+public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, TOeExamRecord>
|
|
|
|
+ implements TOeExamRecordService {
|
|
|
|
+
|
|
private final static Logger log = LoggerFactory.getLogger(TOeExamRecordServiceImpl.class);
|
|
private final static Logger log = LoggerFactory.getLogger(TOeExamRecordServiceImpl.class);
|
|
|
|
|
|
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
|
|
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
|
|
@@ -133,7 +135,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
@Transactional
|
|
@Transactional
|
|
@Override
|
|
@Override
|
|
public Long saveByPrepare(Long examId, Long examActivityId, Long examStudentId, Long paperId,
|
|
public Long saveByPrepare(Long examId, Long examActivityId, Long examStudentId, Long paperId,
|
|
- Integer serialNumber) {
|
|
|
|
|
|
+ Integer serialNumber) {
|
|
ExamActivityCacheBean ac = examActivityService.getExamActivityCacheBean(examActivityId);
|
|
ExamActivityCacheBean ac = examActivityService.getExamActivityCacheBean(examActivityId);
|
|
ExamCacheBean exam = examService.getExamCacheBean(examId);
|
|
ExamCacheBean exam = examService.getExamCacheBean(examId);
|
|
TOeExamRecord er = new TOeExamRecord();
|
|
TOeExamRecord er = new TOeExamRecord();
|
|
@@ -179,8 +181,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
|
|
|
|
//考生作答缓存
|
|
//考生作答缓存
|
|
- ExamStudentAnswerCacheBean answer = (ExamStudentAnswerCacheBean) redisUtil.get(
|
|
|
|
- RedisKeyHelper.examAnswerKey(recordId), key);
|
|
|
|
|
|
+ ExamStudentAnswerCacheBean answer = (ExamStudentAnswerCacheBean) redisUtil
|
|
|
|
+ .get(RedisKeyHelper.examAnswerKey(recordId), key);
|
|
if (answer == null) {
|
|
if (answer == null) {
|
|
log.error("no ExamStudentAnswerCacheBean for calculateObjectiveScore recordId:" + recordId + " key:" + key);
|
|
log.error("no ExamStudentAnswerCacheBean for calculateObjectiveScore recordId:" + recordId + " key:" + key);
|
|
|
|
|
|
@@ -191,7 +193,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
//整卷客观题标答缓存集合
|
|
//整卷客观题标答缓存集合
|
|
Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(paperId);
|
|
Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(paperId);
|
|
if (map == null || map.size() == 0) {
|
|
if (map == null || map.size() == 0) {
|
|
- log.info("no ObjectiveAnswerCacheBean map for calculateObjectiveScore recordId:" + recordId + " paperId:" + paperId);
|
|
|
|
|
|
+ log.info("no ObjectiveAnswerCacheBean map for calculateObjectiveScore recordId:" + recordId + " paperId:"
|
|
|
|
+ + paperId);
|
|
// 更新分数
|
|
// 更新分数
|
|
answer.setScore(0.0);
|
|
answer.setScore(0.0);
|
|
redisUtil.set(RedisKeyHelper.examAnswerKey(recordId), key, answer);
|
|
redisUtil.set(RedisKeyHelper.examAnswerKey(recordId), key, answer);
|
|
@@ -213,7 +216,6 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
if (cb.getStructType().intValue() == 1) {
|
|
if (cb.getStructType().intValue() == 1) {
|
|
if (checkSingleChoice(answer.getAnswer(), cb.getChoiceAnswer())) {
|
|
if (checkSingleChoice(answer.getAnswer(), cb.getChoiceAnswer())) {
|
|
answer.setScore(cb.getScore());
|
|
answer.setScore(cb.getScore());
|
|
@@ -277,8 +279,9 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
|
|
Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
|
|
if (lock) {
|
|
if (lock) {
|
|
- log.info("calculateTotalObjectiveScore get lock sucss recordId:"+recordId+" key:"+key);
|
|
|
|
- Map<String, ExamStudentAnswerCacheBean> as = redisUtil.getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
|
|
|
|
|
|
+ log.info("calculateTotalObjectiveScore get lock sucss recordId:" + recordId + " key:" + key);
|
|
|
|
+ Map<String, ExamStudentAnswerCacheBean> as = redisUtil
|
|
|
|
+ .getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
|
|
if (as != null && as.size() > 0) {
|
|
if (as != null && as.size() > 0) {
|
|
Double total = 0.0;
|
|
Double total = 0.0;
|
|
for (ExamStudentAnswerCacheBean sa : as.values()) {
|
|
for (ExamStudentAnswerCacheBean sa : as.values()) {
|
|
@@ -286,7 +289,11 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
if (sa.getScore() != null) {//有分值
|
|
if (sa.getScore() != null) {//有分值
|
|
total = total + sa.getScore();
|
|
total = total + sa.getScore();
|
|
} else {
|
|
} else {
|
|
- log.info("calculateTotalObjectiveScore ExamStudentAnswerCacheBean Score is null recordId:"+recordId+" key:"+RedisKeyHelper.examAnswerHashKey(sa.getMainNumber(), sa.getSubNumber(), sa.getSubIndex()));
|
|
|
|
|
|
+ log.info(
|
|
|
|
+ "calculateTotalObjectiveScore ExamStudentAnswerCacheBean Score is null recordId:"
|
|
|
|
+ + recordId + " key:" + RedisKeyHelper
|
|
|
|
+ .examAnswerHashKey(sa.getMainNumber(), sa.getSubNumber(),
|
|
|
|
+ sa.getSubIndex()));
|
|
total = null;
|
|
total = null;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -294,12 +301,13 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
}
|
|
}
|
|
if (total != null) {
|
|
if (total != null) {
|
|
ExamRecordCacheUtil.setObjectiveScore(recordId, total, true);
|
|
ExamRecordCacheUtil.setObjectiveScore(recordId, total, true);
|
|
- }else {
|
|
|
|
- log.info("calculateTotalObjectiveScore total Score is null recordId:"+recordId+" key:"+key);
|
|
|
|
|
|
+ } else {
|
|
|
|
+ log.info("calculateTotalObjectiveScore total Score is null recordId:" + recordId + " key:"
|
|
|
|
+ + key);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }else {
|
|
|
|
- log.info("calculateTotalObjectiveScore get lock faild recordId:"+recordId+" key:"+key);
|
|
|
|
|
|
+ } else {
|
|
|
|
+ log.info("calculateTotalObjectiveScore get lock faild recordId:" + recordId + " key:" + key);
|
|
calculateObjectiveScoreMsg(recordId, mainNumber, subNumber, subIndex);
|
|
calculateObjectiveScoreMsg(recordId, mainNumber, subNumber, subIndex);
|
|
}
|
|
}
|
|
} finally {
|
|
} finally {
|
|
@@ -385,7 +393,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
try {
|
|
try {
|
|
dfile.mkdirs();
|
|
dfile.mkdirs();
|
|
String structFilePath = sdf.format(new Date()) + "/" + uuid() + ".json";
|
|
String structFilePath = sdf.format(new Date()) + "/" + uuid() + ".json";
|
|
- ExamStudentPaperStructCacheBean struct = (ExamStudentPaperStructCacheBean) redisUtil.get(RedisKeyHelper.studentPaperStructKey(recordId));
|
|
|
|
|
|
+ ExamStudentPaperStructCacheBean struct = (ExamStudentPaperStructCacheBean) redisUtil
|
|
|
|
+ .get(RedisKeyHelper.studentPaperStructKey(recordId));
|
|
|
|
|
|
//保存考试记录
|
|
//保存考试记录
|
|
Map<String, Object> record = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
Map<String, Object> record = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
@@ -397,7 +406,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
er.setPaperStructUpload(1);
|
|
er.setPaperStructUpload(1);
|
|
saveOrUpdate(er);
|
|
saveOrUpdate(er);
|
|
//保存作答
|
|
//保存作答
|
|
- Map<String, ExamStudentAnswerCacheBean> answerMap = redisUtil.getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
|
|
|
|
|
|
+ Map<String, ExamStudentAnswerCacheBean> answerMap = redisUtil
|
|
|
|
+ .getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
|
|
for (ExamStudentAnswerCacheBean answerCache : answerMap.values()) {
|
|
for (ExamStudentAnswerCacheBean answerCache : answerMap.values()) {
|
|
TOeExamAnswer answer = new TOeExamAnswer();
|
|
TOeExamAnswer answer = new TOeExamAnswer();
|
|
BeanUtils.copyProperties(answerCache, answer);
|
|
BeanUtils.copyProperties(answerCache, answer);
|
|
@@ -405,16 +415,16 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
answer.setExamRecordId(recordId);
|
|
answer.setExamRecordId(recordId);
|
|
examAnswerService.saveOrUpdate(answer);
|
|
examAnswerService.saveOrUpdate(answer);
|
|
}
|
|
}
|
|
-// //更新考生信息
|
|
|
|
-// ExamStudentCacheBean examStudentCache = examStudentService.getExamStudentCacheBean(er.getExamStudentId());
|
|
|
|
-// TEExamStudent examStudent = new TEExamStudent();
|
|
|
|
-// BeanUtils.copyProperties(examStudentCache, examStudent);
|
|
|
|
-// examStudentService.saveOrUpdate(examStudent);
|
|
|
|
|
|
+ // //更新考生信息
|
|
|
|
+ // ExamStudentCacheBean examStudentCache = examStudentService.getExamStudentCacheBean(er.getExamStudentId());
|
|
|
|
+ // TEExamStudent examStudent = new TEExamStudent();
|
|
|
|
+ // BeanUtils.copyProperties(examStudentCache, examStudent);
|
|
|
|
+ // examStudentService.saveOrUpdate(examStudent);
|
|
//上传个人试卷结构
|
|
//上传个人试卷结构
|
|
if (struct != null) {
|
|
if (struct != null) {
|
|
File structFile = new File(dir + "struct.json");
|
|
File structFile = new File(dir + "struct.json");
|
|
FileUtil.saveAsFile(structFile.getAbsolutePath(), struct.getContent());
|
|
FileUtil.saveAsFile(structFile.getAbsolutePath(), struct.getContent());
|
|
- OssUtil.ossUpload(ossUtil.getAliYunOssPrivateDomain().getMap(), structFilePath, structFile);
|
|
|
|
|
|
+ ossUtil.upload(false, structFilePath, structFile);
|
|
}
|
|
}
|
|
} finally {
|
|
} finally {
|
|
FileUtil.deleteFolder(dir);
|
|
FileUtil.deleteFolder(dir);
|
|
@@ -425,14 +435,15 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
return UUID.randomUUID().toString().replaceAll("-", "");
|
|
return UUID.randomUUID().toString().replaceAll("-", "");
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
- public void saveFaceVerify(ExamTypeEnum type, Long recordId, Long entryAuthenticationId, VerifyExceptionEnum entryAuthenticationResult) {
|
|
|
|
|
|
+ public void saveFaceVerify(ExamTypeEnum type, Long recordId, Long entryAuthenticationId,
|
|
|
|
+ VerifyExceptionEnum entryAuthenticationResult) {
|
|
if (ExamTypeEnum.FIRST_START.equals(type)) {
|
|
if (ExamTypeEnum.FIRST_START.equals(type)) {
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId, false);
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId, false);
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult, false);
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult, false);
|
|
- String[] columns = new String[]{ExamRecordFieldEnum.entry_authentication_id.name(), ExamRecordFieldEnum.entry_authentication_result.name()};
|
|
|
|
- Object[] values = new Object[]{entryAuthenticationId, entryAuthenticationResult};
|
|
|
|
|
|
+ String[] columns = new String[] { ExamRecordFieldEnum.entry_authentication_id.name(),
|
|
|
|
+ ExamRecordFieldEnum.entry_authentication_result.name() };
|
|
|
|
+ Object[] values = new Object[] { entryAuthenticationId, entryAuthenticationResult };
|
|
this.dataUpdatesMq(recordId, columns, values);
|
|
this.dataUpdatesMq(recordId, columns, values);
|
|
} else if (ExamTypeEnum.IN_PROCESS.equals(type)) {
|
|
} else if (ExamTypeEnum.IN_PROCESS.equals(type)) {
|
|
|
|
|
|
@@ -440,12 +451,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void saveLivenessVerify(LivenessTypeEnum type, Long recordId, Long entryAuthenticationId, VerifyExceptionEnum entryAuthenticationResult) {
|
|
|
|
|
|
+ public void saveLivenessVerify(LivenessTypeEnum type, Long recordId, Long entryAuthenticationId,
|
|
|
|
+ VerifyExceptionEnum entryAuthenticationResult) {
|
|
if (LivenessTypeEnum.FIRST_START.equals(type)) {
|
|
if (LivenessTypeEnum.FIRST_START.equals(type)) {
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId, false);
|
|
ExamRecordCacheUtil.setEntryAuthenticationId(recordId, entryAuthenticationId, false);
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult, false);
|
|
ExamRecordCacheUtil.setEntryAuthenticationResult(recordId, entryAuthenticationResult, false);
|
|
- String[] columns = new String[]{ExamRecordFieldEnum.entry_authentication_id.name(), ExamRecordFieldEnum.entry_authentication_result.name()};
|
|
|
|
- Object[] values = new Object[]{entryAuthenticationId, entryAuthenticationResult};
|
|
|
|
|
|
+ String[] columns = new String[] { ExamRecordFieldEnum.entry_authentication_id.name(),
|
|
|
|
+ ExamRecordFieldEnum.entry_authentication_result.name() };
|
|
|
|
+ Object[] values = new Object[] { entryAuthenticationId, entryAuthenticationResult };
|
|
this.dataUpdatesMq(recordId, columns, values);
|
|
this.dataUpdatesMq(recordId, columns, values);
|
|
} else if (LivenessTypeEnum.IN_PROCESS.equals(type)) {
|
|
} else if (LivenessTypeEnum.IN_PROCESS.equals(type)) {
|
|
Integer count = ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId);
|
|
Integer count = ExamRecordCacheUtil.getInProcessLivenessVerifyCount(recordId);
|
|
@@ -460,7 +473,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
transMap.put("colName", colName);
|
|
transMap.put("colName", colName);
|
|
transMap.put("colValue", colValue);
|
|
transMap.put("colValue", colValue);
|
|
//mq发送消息start
|
|
//mq发送消息start
|
|
- MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_RECORD_UPDATE.name(), transMap, MqTagEnum.EXAM_RECORD_UPDATE, recordId.toString(), colName);
|
|
|
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_RECORD_UPDATE.name(), transMap,
|
|
|
|
+ MqTagEnum.EXAM_RECORD_UPDATE, recordId.toString(), colName);
|
|
mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -492,7 +506,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
transMap.put("colNames", colNames);
|
|
transMap.put("colNames", colNames);
|
|
transMap.put("colValues", colValues);
|
|
transMap.put("colValues", colValues);
|
|
//mq发送消息start
|
|
//mq发送消息start
|
|
- MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_RECORD_UPDATE_COLUMNS.name(), transMap, MqTagEnum.EXAM_RECORD_UPDATE_COLUMNS, recordId.toString(), recordId.toString());
|
|
|
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_RECORD_UPDATE_COLUMNS.name(),
|
|
|
|
+ transMap, MqTagEnum.EXAM_RECORD_UPDATE_COLUMNS, recordId.toString(), recordId.toString());
|
|
mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -501,7 +516,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
public void dataInitMq(Map<String, Object> param) {
|
|
public void dataInitMq(Map<String, Object> param) {
|
|
Long id = (Long) param.get("id");
|
|
Long id = (Long) param.get("id");
|
|
//mq发送消息start
|
|
//mq发送消息start
|
|
- MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_RECORD_INIT.name(), param, MqTagEnum.EXAM_RECORD_INIT, id.toString(), id.toString());
|
|
|
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_RECORD_INIT.name(), param,
|
|
|
|
+ MqTagEnum.EXAM_RECORD_INIT, id.toString(), id.toString());
|
|
mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
mqDtoService.assembleSendOneWayMsg(mqDto);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -548,19 +564,13 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public IPage<InvigilateListBean> invigilatePageList(IPage<Map> iPage, Long examId,
|
|
|
|
- Long examActivityId,
|
|
|
|
- String roomCode,
|
|
|
|
- Integer paperDownload,
|
|
|
|
- String status,
|
|
|
|
- String name,
|
|
|
|
- String identity,
|
|
|
|
- Integer minWarningCount,
|
|
|
|
- Integer maxWarningCount,
|
|
|
|
- String clientWebsocketStatus,
|
|
|
|
- String monitorStatusSource,
|
|
|
|
- Long userId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePageList(iPage, examId, examActivityId, roomCode, paperDownload, status, name, identity, minWarningCount, maxWarningCount, clientWebsocketStatus, monitorStatusSource, userId);
|
|
|
|
|
|
+ public IPage<InvigilateListBean> invigilatePageList(IPage<Map> iPage, Long examId, Long examActivityId,
|
|
|
|
+ String roomCode, Integer paperDownload, String status, String name, String identity,
|
|
|
|
+ Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, String monitorStatusSource,
|
|
|
|
+ Long userId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePageList(iPage, examId, examActivityId, roomCode, paperDownload, status, name, identity,
|
|
|
|
+ minWarningCount, maxWarningCount, clientWebsocketStatus, monitorStatusSource, userId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -582,8 +592,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public IPage<InvigilateListVideoBean> invigilatePageListVideo(IPage<Map> iPage, Long examId, Long examActivityId, String roomCode, Integer paperDownload, String status, String name, String identity, Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePageListVideo(iPage, examId, examActivityId, roomCode, paperDownload, status, name, identity, minWarningCount, maxWarningCount, clientWebsocketStatus, userId, orgId);
|
|
|
|
|
|
+ public IPage<InvigilateListVideoBean> invigilatePageListVideo(IPage<Map> iPage, Long examId, Long examActivityId,
|
|
|
|
+ String roomCode, Integer paperDownload, String status, String name, String identity,
|
|
|
|
+ Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePageListVideo(iPage, examId, examActivityId, roomCode, paperDownload, status, name, identity,
|
|
|
|
+ minWarningCount, maxWarningCount, clientWebsocketStatus, userId, orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -596,7 +610,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public List<InvigilateListVideoBean> invigilatePageListVideoRandom(Long examId, Long userId, Integer randomNum, Long orgId) {
|
|
|
|
|
|
+ public List<InvigilateListVideoBean> invigilatePageListVideoRandom(Long examId, Long userId, Integer randomNum,
|
|
|
|
+ Long orgId) {
|
|
return tOeExamRecordMapper.invigilatePageListVideoRandom(examId, userId, randomNum, orgId);
|
|
return tOeExamRecordMapper.invigilatePageListVideoRandom(examId, userId, randomNum, orgId);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -622,8 +637,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public IPage<InvigilateListPatrolBean> invigilatePagePatrolList(IPage<Map> iPage, Long examId, Long examActivityId, String roomCode, String status, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePagePatrolList(iPage, examId, examActivityId, roomCode, status, name, identity, minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount, minWarningCount, maxWarningCount, clientWebsocketStatus, userId, orgId);
|
|
|
|
|
|
+ public IPage<InvigilateListPatrolBean> invigilatePagePatrolList(IPage<Map> iPage, Long examId, Long examActivityId,
|
|
|
|
+ String roomCode, String status, String name, String identity, Integer minMultipleFaceCount,
|
|
|
|
+ Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount,
|
|
|
|
+ Integer maxWarningCount, String clientWebsocketStatus, Long userId, Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePagePatrolList(iPage, examId, examActivityId, roomCode, status, name, identity,
|
|
|
|
+ minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount,
|
|
|
|
+ minWarningCount, maxWarningCount, clientWebsocketStatus, userId, orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -647,8 +668,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public IPage<InvigilateListWarningBean> invigilatePageWarningList(IPage<Map> iPage, Long examId, Long examActivityId, String roomCode, Integer approveStatus, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePageWarningList(iPage, examId, examActivityId, roomCode, approveStatus, name, identity, minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount, minWarningCount, maxWarningCount, userId, orgId);
|
|
|
|
|
|
+ public IPage<InvigilateListWarningBean> invigilatePageWarningList(IPage<Map> iPage, Long examId,
|
|
|
|
+ Long examActivityId, String roomCode, Integer approveStatus, String name, String identity,
|
|
|
|
+ Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount,
|
|
|
|
+ Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, Long userId, Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePageWarningList(iPage, examId, examActivityId, roomCode, approveStatus, name, identity,
|
|
|
|
+ minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount,
|
|
|
|
+ minWarningCount, maxWarningCount, userId, orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -671,8 +698,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public Integer approveStatusListUpdate(Long examId, Long examActivityId, String roomCode, Integer approveStatus, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.approveStatusListUpdate(examId, examActivityId, roomCode, approveStatus, name, identity, minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount, minWarningCount, maxWarningCount, userId, orgId);
|
|
|
|
|
|
+ public Integer approveStatusListUpdate(Long examId, Long examActivityId, String roomCode, Integer approveStatus,
|
|
|
|
+ String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount,
|
|
|
|
+ Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount,
|
|
|
|
+ Long userId, Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .approveStatusListUpdate(examId, examActivityId, roomCode, approveStatus, name, identity,
|
|
|
|
+ minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount,
|
|
|
|
+ minWarningCount, maxWarningCount, userId, orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -689,8 +722,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public IPage<InvigilateListProgressBean> invigilatePageProgressList(IPage<Map> iPage, Long examId, Long examActivityId, String roomCode, String courseCode, String name, String identity, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePageProgressList(iPage, examId, examActivityId, roomCode, courseCode, name, identity, userId, orgId);
|
|
|
|
|
|
+ public IPage<InvigilateListProgressBean> invigilatePageProgressList(IPage<Map> iPage, Long examId,
|
|
|
|
+ Long examActivityId, String roomCode, String courseCode, String name, String identity, Long userId,
|
|
|
|
+ Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePageProgressList(iPage, examId, examActivityId, roomCode, courseCode, name, identity, userId,
|
|
|
|
+ orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -707,8 +744,11 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public List<InvigilateListProgressExcelBean> invigilatePageProgressListExport(Long examId, Long examActivityId, String roomCode, String courseCode, String name, String identity, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePageProgressListExport(examId, examActivityId, roomCode, courseCode, name, identity, userId, orgId);
|
|
|
|
|
|
+ public List<InvigilateListProgressExcelBean> invigilatePageProgressListExport(Long examId, Long examActivityId,
|
|
|
|
+ String roomCode, String courseCode, String name, String identity, Long userId, Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePageProgressListExport(examId, examActivityId, roomCode, courseCode, name, identity, userId,
|
|
|
|
+ orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -735,8 +775,15 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public IPage<InvigilateListHistoryBean> invigilatePageListHistory(IPage<Map> iPage, Long examId, Long examActivityId, String roomCode, String courseCode, String status, Integer breachStatus, String finishType, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount, Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount, Long userId, Long orgId) {
|
|
|
|
- return tOeExamRecordMapper.invigilatePageListHistory(iPage, examId, examActivityId, roomCode, courseCode, status, breachStatus, finishType, name, identity, minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount, maxExceptionCount, minWarningCount, maxWarningCount, userId, orgId);
|
|
|
|
|
|
+ public IPage<InvigilateListHistoryBean> invigilatePageListHistory(IPage<Map> iPage, Long examId,
|
|
|
|
+ Long examActivityId, String roomCode, String courseCode, String status, Integer breachStatus,
|
|
|
|
+ String finishType, String name, String identity, Integer minMultipleFaceCount, Integer maxMultipleFaceCount,
|
|
|
|
+ Integer minExceptionCount, Integer maxExceptionCount, Integer minWarningCount, Integer maxWarningCount,
|
|
|
|
+ Long userId, Long orgId) {
|
|
|
|
+ return tOeExamRecordMapper
|
|
|
|
+ .invigilatePageListHistory(iPage, examId, examActivityId, roomCode, courseCode, status, breachStatus,
|
|
|
|
+ finishType, name, identity, minMultipleFaceCount, maxMultipleFaceCount, minExceptionCount,
|
|
|
|
+ maxExceptionCount, minWarningCount, maxWarningCount, userId, orgId);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -893,12 +940,15 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public TOeExamRecord findMarkResult(MarkResultDto markResultDto, RecordSelectStrategyEnum recordSelectStrategyEnum) {
|
|
|
|
|
|
+ public TOeExamRecord findMarkResult(MarkResultDto markResultDto,
|
|
|
|
+ RecordSelectStrategyEnum recordSelectStrategyEnum) {
|
|
TOeExamRecord tOeExamRecord = null;
|
|
TOeExamRecord tOeExamRecord = null;
|
|
Double sumScore = null;
|
|
Double sumScore = null;
|
|
//客观分最高
|
|
//客观分最高
|
|
- if (Objects.nonNull(recordSelectStrategyEnum) && Objects.equals(recordSelectStrategyEnum, RecordSelectStrategyEnum.HIGHEST_OBJECTIVE_SCORE)) {
|
|
|
|
- List<TOeExamRecord> tOeExamRecordList = this.findMaxObjectiveScore(markResultDto.getExamId(), markResultDto.getExamStudentId());
|
|
|
|
|
|
+ if (Objects.nonNull(recordSelectStrategyEnum) && Objects
|
|
|
|
+ .equals(recordSelectStrategyEnum, RecordSelectStrategyEnum.HIGHEST_OBJECTIVE_SCORE)) {
|
|
|
|
+ List<TOeExamRecord> tOeExamRecordList = this
|
|
|
|
+ .findMaxObjectiveScore(markResultDto.getExamId(), markResultDto.getExamStudentId());
|
|
if (Objects.nonNull(tOeExamRecordList) && tOeExamRecordList.size() > 0) {
|
|
if (Objects.nonNull(tOeExamRecordList) && tOeExamRecordList.size() > 0) {
|
|
Long paperId = tOeExamRecordList.get(0).getPaperId();
|
|
Long paperId = tOeExamRecordList.get(0).getPaperId();
|
|
ExamPaperCacheBean paperCacheBean = examPaperService.getExamPaperCacheBean(paperId);
|
|
ExamPaperCacheBean paperCacheBean = examPaperService.getExamPaperCacheBean(paperId);
|
|
@@ -912,9 +962,11 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
if (Objects.isNull(tOeExamRecord)) {
|
|
if (Objects.isNull(tOeExamRecord)) {
|
|
tOeExamRecord = t;
|
|
tOeExamRecord = t;
|
|
} else {
|
|
} else {
|
|
- if (Objects.nonNull(t.getObjectiveScore()) && Objects.nonNull(tOeExamRecord.getObjectiveScore())
|
|
|
|
- && t.getObjectiveScore().doubleValue() >= tOeExamRecord.getObjectiveScore().doubleValue()
|
|
|
|
- && Objects.nonNull(t.getFinishTime()) && Objects.nonNull(tOeExamRecord.getFinishTime())
|
|
|
|
|
|
+ if (Objects.nonNull(t.getObjectiveScore()) && Objects
|
|
|
|
+ .nonNull(tOeExamRecord.getObjectiveScore())
|
|
|
|
+ && t.getObjectiveScore().doubleValue() >= tOeExamRecord.getObjectiveScore()
|
|
|
|
+ .doubleValue() && Objects.nonNull(t.getFinishTime()) && Objects
|
|
|
|
+ .nonNull(tOeExamRecord.getFinishTime())
|
|
&& t.getFinishTime().longValue() > tOeExamRecord.getFinishTime().longValue()) {
|
|
&& t.getFinishTime().longValue() > tOeExamRecord.getFinishTime().longValue()) {
|
|
tOeExamRecord = t;
|
|
tOeExamRecord = t;
|
|
}
|
|
}
|
|
@@ -927,8 +979,10 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//最后一次提交
|
|
//最后一次提交
|
|
- else if (Objects.nonNull(recordSelectStrategyEnum) && Objects.equals(recordSelectStrategyEnum, RecordSelectStrategyEnum.LATEST)) {
|
|
|
|
- List<TOeExamRecord> tOeExamRecordList = this.findMaxObjectiveScore(markResultDto.getExamId(), markResultDto.getExamStudentId());
|
|
|
|
|
|
+ else if (Objects.nonNull(recordSelectStrategyEnum) && Objects
|
|
|
|
+ .equals(recordSelectStrategyEnum, RecordSelectStrategyEnum.LATEST)) {
|
|
|
|
+ List<TOeExamRecord> tOeExamRecordList = this
|
|
|
|
+ .findMaxObjectiveScore(markResultDto.getExamId(), markResultDto.getExamStudentId());
|
|
for (TOeExamRecord t : tOeExamRecordList) {
|
|
for (TOeExamRecord t : tOeExamRecordList) {
|
|
if (Objects.isNull(tOeExamRecord)) {
|
|
if (Objects.isNull(tOeExamRecord)) {
|
|
tOeExamRecord = t;
|
|
tOeExamRecord = t;
|
|
@@ -941,7 +995,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//全部阅卷后取最高分
|
|
//全部阅卷后取最高分
|
|
- else if (Objects.nonNull(recordSelectStrategyEnum) && Objects.equals(recordSelectStrategyEnum, RecordSelectStrategyEnum.HIGHEST_TOTAL_SCORE)) {
|
|
|
|
|
|
+ else if (Objects.nonNull(recordSelectStrategyEnum) && Objects
|
|
|
|
+ .equals(recordSelectStrategyEnum, RecordSelectStrategyEnum.HIGHEST_TOTAL_SCORE)) {
|
|
tOeExamRecord = getMaxSumScore(tOeExamRecord, sumScore, markResultDto);
|
|
tOeExamRecord = getMaxSumScore(tOeExamRecord, sumScore, markResultDto);
|
|
}
|
|
}
|
|
return tOeExamRecord;
|
|
return tOeExamRecord;
|
|
@@ -955,9 +1010,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void setExamBreak(Long recordId) {
|
|
public void setExamBreak(Long recordId) {
|
|
- if (redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_BREAK_PREFIX + recordId, SystemConstant.REDIS_LOCK_EXAM_BREAK_TIME_OUT)) {
|
|
|
|
|
|
+ if (redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_BREAK_PREFIX + recordId,
|
|
|
|
+ SystemConstant.REDIS_LOCK_EXAM_BREAK_TIME_OUT)) {
|
|
try {
|
|
try {
|
|
- Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ? 0 : ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
|
|
|
|
+ Integer alreadyBreakCount = Objects.isNull(ExamRecordCacheUtil.getAlreadyBreakCount(recordId)) ?
|
|
|
|
+ 0 :
|
|
|
|
+ ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
|
|
alreadyBreakCount++;
|
|
alreadyBreakCount++;
|
|
Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
Long breakId = Constants.idGen.next();
|
|
Long breakId = Constants.idGen.next();
|
|
@@ -968,19 +1026,26 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
|
|
ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
|
|
Long lastStartTime = System.currentTimeMillis();
|
|
Long lastStartTime = System.currentTimeMillis();
|
|
ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
|
|
- String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(), ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(), ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name()};
|
|
|
|
- Object[] values = new Object[]{breakId, ExamRecordStatusEnum.BREAK_OFF, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
|
|
|
|
|
|
+ String[] columns = new String[] { ExamRecordFieldEnum.last_break_id.name(),
|
|
|
|
+ ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(),
|
|
|
|
+ ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name() };
|
|
|
|
+ Object[] values = new Object[] { breakId, ExamRecordStatusEnum.BREAK_OFF, lastBreakTimeNow,
|
|
|
|
+ alreadyBreakCount, lastStartTime };
|
|
TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
|
|
TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
|
|
tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
|
|
tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
|
|
//考试断点异常原因 发送mq start
|
|
//考试断点异常原因 发送mq start
|
|
- MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(), ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId), String.valueOf(recordId));
|
|
|
|
|
|
+ MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(),
|
|
|
|
+ ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId),
|
|
|
|
+ String.valueOf(recordId));
|
|
MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
|
|
MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
|
|
mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
|
|
mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
|
|
//考试断点异常原因 发送mq end
|
|
//考试断点异常原因 发送mq end
|
|
|
|
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
- Integer breakExpireSeconds = Objects.isNull(ec.getBreakExpireSeconds()) ? 0 : ec.getBreakExpireSeconds();
|
|
|
|
|
|
+ Integer breakExpireSeconds = Objects.isNull(ec.getBreakExpireSeconds()) ?
|
|
|
|
+ 0 :
|
|
|
|
+ ec.getBreakExpireSeconds();
|
|
if (breakExpireSeconds > 0) {
|
|
if (breakExpireSeconds > 0) {
|
|
List<String> list = SystemConstant.mqDelayLevelList.subList(5, 15);
|
|
List<String> list = SystemConstant.mqDelayLevelList.subList(5, 15);
|
|
String level = null;
|
|
String level = null;
|
|
@@ -1012,12 +1077,16 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
tranMap.put("timeOut", time);
|
|
tranMap.put("timeOut", time);
|
|
tranMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
|
|
tranMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
|
|
//考试断点延时消息 发送mq start
|
|
//考试断点延时消息 发送mq start
|
|
- MqDto mqDtoBreakDelay = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK_DELAY.name(), MqTagEnum.EXAM_BREAK_DELAY, MqTagEnum.EXAM_BREAK_DELAY, String.valueOf(recordId), tranMap, String.valueOf(recordId));
|
|
|
|
|
|
+ MqDto mqDtoBreakDelay = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(),
|
|
|
|
+ MqTagEnum.EXAM_BREAK_DELAY.name(), MqTagEnum.EXAM_BREAK_DELAY, MqTagEnum.EXAM_BREAK_DELAY,
|
|
|
|
+ String.valueOf(recordId), tranMap, String.valueOf(recordId));
|
|
mqDtoService.assembleSendAsyncDelayMsg(mqDtoBreakDelay);
|
|
mqDtoService.assembleSendAsyncDelayMsg(mqDtoBreakDelay);
|
|
//考试断点延时消息 发送mq end
|
|
//考试断点延时消息 发送mq end
|
|
}
|
|
}
|
|
//更新场次-考试记录缓存
|
|
//更新场次-考试记录缓存
|
|
- ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId, new ExamActivityRecordCacheBean(ExamRecordCacheUtil.getExamStudentId(recordId), ExamRecordCacheUtil.getStatus(recordId)));
|
|
|
|
|
|
+ ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId,
|
|
|
|
+ new ExamActivityRecordCacheBean(ExamRecordCacheUtil.getExamStudentId(recordId),
|
|
|
|
+ ExamRecordCacheUtil.getStatus(recordId)));
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("请求出错", e);
|
|
log.error("请求出错", e);
|
|
if (e instanceof BusinessException) {
|
|
if (e instanceof BusinessException) {
|
|
@@ -1043,27 +1112,37 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
@Override
|
|
@Override
|
|
public Boolean sendExamBreakMsg(Long recordId, boolean setBreak) {
|
|
public Boolean sendExamBreakMsg(Long recordId, boolean setBreak) {
|
|
Boolean finished = false;
|
|
Boolean finished = false;
|
|
- if (redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_BREAK_LOGIC_PREFIX + recordId, SystemConstant.REDIS_LOCK_EXAM_BREAK_LOGIC_TIME_OUT)) {
|
|
|
|
|
|
+ if (redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_BREAK_LOGIC_PREFIX + recordId,
|
|
|
|
+ SystemConstant.REDIS_LOCK_EXAM_BREAK_LOGIC_TIME_OUT)) {
|
|
try {
|
|
try {
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
ExamCacheBean ec = examService.getExamCacheBean(examId);//考试缓存
|
|
Long lastBreakTime = ExamRecordCacheUtil.getLastBreakTime(recordId);
|
|
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);
|
|
if (setBreak) {//如果需要断点,则次数本地先加1,可以避免多生成考试记录
|
|
if (setBreak) {//如果需要断点,则次数本地先加1,可以避免多生成考试记录
|
|
alreadyBreakCount++;
|
|
alreadyBreakCount++;
|
|
}
|
|
}
|
|
Integer leftBreakResumeCount = ec.getBreakResumeCount() - alreadyBreakCount;
|
|
Integer leftBreakResumeCount = ec.getBreakResumeCount() - alreadyBreakCount;
|
|
- if (Objects.nonNull(lastBreakTime) && (System.currentTimeMillis() - lastBreakTime) / 1000 >= breakExpireSeconds) {
|
|
|
|
|
|
+ if (Objects.nonNull(lastBreakTime)
|
|
|
|
+ && (System.currentTimeMillis() - lastBreakTime) / 1000 >= breakExpireSeconds) {
|
|
finished = true;
|
|
finished = true;
|
|
- examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
|
|
|
+ examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(),
|
|
|
|
+ durationSeconds);
|
|
} else {
|
|
} else {
|
|
if (leftBreakResumeCount < 0) {
|
|
if (leftBreakResumeCount < 0) {
|
|
finished = true;
|
|
finished = true;
|
|
- examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(), durationSeconds);
|
|
|
|
|
|
+ examService.finish(examStudentCacheBean.getStudentId(), recordId, FinishTypeEnum.AUTO.name(),
|
|
|
|
+ durationSeconds);
|
|
} else {
|
|
} else {
|
|
if (setBreak) {
|
|
if (setBreak) {
|
|
this.setExamBreak(recordId);
|
|
this.setExamBreak(recordId);
|
|
@@ -1101,8 +1180,8 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
examId = markResultDto.getExamId();
|
|
examId = markResultDto.getExamId();
|
|
examStudentId = markResultDto.getExamStudentId();
|
|
examStudentId = markResultDto.getExamStudentId();
|
|
} else {
|
|
} else {
|
|
- if (Objects.nonNull(markResultDto.getSumScore())
|
|
|
|
- && markResultDto.getSumScore().doubleValue() >= sumScore.doubleValue()) {
|
|
|
|
|
|
+ if (Objects.nonNull(markResultDto.getSumScore()) && markResultDto.getSumScore().doubleValue() >= sumScore
|
|
|
|
+ .doubleValue()) {
|
|
sumScore = markResultDto.getSumScore();
|
|
sumScore = markResultDto.getSumScore();
|
|
examId = markResultDto.getExamId();
|
|
examId = markResultDto.getExamId();
|
|
examStudentId = markResultDto.getExamStudentId();
|
|
examStudentId = markResultDto.getExamStudentId();
|