|
@@ -1,5 +1,10 @@
|
|
|
package com.qmth.themis.business.service.impl;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneOffset;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
@@ -10,8 +15,12 @@ import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
|
|
|
import com.qmth.themis.business.cache.ExamRecordCacheUtil;
|
|
|
import com.qmth.themis.business.cache.RedisKeyHelper;
|
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
|
+import com.qmth.themis.business.dto.MqDto;
|
|
|
import com.qmth.themis.business.enums.ExamRecordStatusEnum;
|
|
|
+import com.qmth.themis.business.enums.MqTagEnum;
|
|
|
+import com.qmth.themis.business.enums.MqTopicEnum;
|
|
|
import com.qmth.themis.business.service.CommonService;
|
|
|
+import com.qmth.themis.business.service.MqDtoService;
|
|
|
import com.qmth.themis.business.service.TOeExamRecordService;
|
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
|
|
|
@@ -29,26 +38,47 @@ public class CommonServiceImpl implements CommonService {
|
|
|
@Resource
|
|
|
RedisUtil redisUtil;
|
|
|
|
|
|
+ @Resource
|
|
|
+ MqDtoService mqDtoService;
|
|
|
+
|
|
|
@Override
|
|
|
public void persisted(Long recordId) {
|
|
|
- ExamRecordStatusEnum status=ExamRecordCacheUtil.getStatus(recordId);
|
|
|
- if(!ExamRecordStatusEnum.FINISHED.equals(status)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- Double score=ExamRecordCacheUtil.getObjectiveScore(recordId);
|
|
|
- if(score==null) {
|
|
|
- return;
|
|
|
- }
|
|
|
String lockKey = SystemConstant.REDIS_LOCK_EXAM_RECORD_PERSISTED_PREFIX + recordId;
|
|
|
Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
|
|
|
if (!lock) {
|
|
|
log.debug("persisted doing,request ignore");
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
try {
|
|
|
+ ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
+ if (!ExamRecordStatusEnum.FINISHED.equals(status)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Double score = ExamRecordCacheUtil.getObjectiveScore(recordId);
|
|
|
+ if (score == null) {
|
|
|
+ //算分未完成的 发送5秒延迟消息
|
|
|
+ Map<String, Object> transMap = new HashMap<String, Object>();
|
|
|
+ transMap.put("recordId", recordId);
|
|
|
+ String level = "5s";
|
|
|
+ Integer time = SystemConstant.mqDelayLevel.get(level);
|
|
|
+ LocalDateTime dt = LocalDateTime.now();
|
|
|
+ dt = dt.plusSeconds(Long.parseLong(level.replace("s", "")));
|
|
|
+ Map<String, Object> propMap = new HashMap<String, Object>();
|
|
|
+ propMap.put("timeOut", time);
|
|
|
+ propMap.put("mqExecTime", dt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
|
|
|
+ MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.EXAM_RECORD_PERSISTED.name(),
|
|
|
+ transMap, MqTagEnum.EXAM_RECORD_PERSISTED, recordId.toString(), propMap, recordId.toString());
|
|
|
+
|
|
|
+ mqDtoService.assembleSendAsyncDelayMsg(mqDto);
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
examRecordService.saveDataByCache(recordId);
|
|
|
// 清除缓存
|
|
|
- ExamActivityRecordCacheUtil.removeActivityRecordCache(ExamRecordCacheUtil.getExamActivityId(recordId), recordId);
|
|
|
+ ExamActivityRecordCacheUtil.removeActivityRecordCache(ExamRecordCacheUtil.getExamActivityId(recordId),
|
|
|
+ recordId);
|
|
|
redisUtil.delete(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
redisUtil.delete(RedisKeyHelper.examAnswerKey(recordId));
|
|
|
redisUtil.delete(RedisKeyHelper.audioLeftPlayCountKey(recordId));
|