Quellcode durchsuchen

数据持久化fix

xiatian vor 4 Jahren
Ursprung
Commit
7676313179

+ 39 - 9
themis-business/src/main/java/com/qmth/themis/business/service/impl/CommonServiceImpl.java

@@ -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));

+ 0 - 4
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -782,10 +782,6 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         if (!ExamRecordStatusEnum.FINISHED.equals(status)) {
             return;
         }
-        Double score = ExamRecordCacheUtil.getObjectiveScore(recordId);
-        if (score == null) {
-            return;
-        }
 
         Map<String, Object> transMap = new HashMap<String, Object>();
         transMap.put("recordId", recordId);