xiatian 5 rokov pred
rodič
commit
c29aeb484e

+ 3 - 1
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/AudioTimeConfigController.java

@@ -65,7 +65,9 @@ public class AudioTimeConfigController extends ControllerSupport {
             audioTimeConfigService.saveAudioTimeConfig(audioTimeConfigList, user);
             //清除缓存
             for(AudioTimeConfig ep:audioTimeConfigList) {
-            	extractConfigPaperCache.refresh(Long.valueOf(ep.getExamId()), ep.getCourseCode(),ep.getGroupCode(),ep.getPaper().getId());
+                Object[] keys=new Object[]{ep.getPaper().getId()};
+                Object[] subkeys=new Object[]{Long.valueOf(ep.getExamId()), ep.getCourseCode(),ep.getGroupCode()};
+                extractConfigPaperCache.refresh(keys,subkeys);
             }
             return new ResponseEntity<>(HttpStatus.OK);
         }

+ 11 - 10
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/cache/ExtractConfigPaperCache.java

@@ -1,24 +1,25 @@
 package cn.com.qmth.examcloud.core.questions.service.cache;
 
-import cn.com.qmth.examcloud.commons.exception.StatusException;
-import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
-import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigPaperCacheBean;
-import cn.com.qmth.examcloud.web.cache.RandomObjectRedisCache;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import cn.com.qmth.examcloud.commons.exception.StatusException;
+import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
+import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigPaperCacheBean;
+import cn.com.qmth.examcloud.web.cache.HashRedisCache;
+
 @Component
-public class ExtractConfigPaperCache extends RandomObjectRedisCache<ExtractConfigPaperCacheBean> {
+public class ExtractConfigPaperCache extends HashRedisCache<ExtractConfigPaperCacheBean> {
     @Autowired
     private ExtractConfigProviderService extractConfigProviderService;
 
     @Override
-    public ExtractConfigPaperCacheBean loadFromResource(Object... keys) {
-        Long examId = (Long) keys[0];
-        String courseCode = String.valueOf(keys[1]);
-        String groupCode = String.valueOf(keys[2]);
-        String paperId = String.valueOf(keys[3]);
+    public ExtractConfigPaperCacheBean loadFromResource(Object[] keys,Object[] subkeys) {
+        Long examId = (Long) subkeys[0];
+        String courseCode = String.valueOf(subkeys[1]);
+        String groupCode = String.valueOf(subkeys[2]);
+        String paperId = String.valueOf(keys[0]);
 
         if (examId == null) {
             throw new StatusException("400", "examId is null");

+ 11 - 10
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/cache/QuestionCache.java

@@ -1,25 +1,26 @@
 package cn.com.qmth.examcloud.core.questions.service.cache;
 
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
 import cn.com.qmth.examcloud.question.commons.core.question.DefaultQuestion;
 import cn.com.qmth.examcloud.support.cache.bean.QuestionCacheBean;
-import cn.com.qmth.examcloud.web.cache.RandomObjectRedisCache;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import cn.com.qmth.examcloud.web.cache.HashRedisCache;
 
 @Component
-public class QuestionCache extends RandomObjectRedisCache<QuestionCacheBean> {
+public class QuestionCache extends HashRedisCache<QuestionCacheBean> {
     @Autowired
     private ExtractConfigProviderService extractConfigProviderService;
 
     @Override
-    public QuestionCacheBean loadFromResource(Object... keys) {
-        Long examId = (Long) keys[0];
-        String courseCode = String.valueOf(keys[1]);
-        String groupCode = String.valueOf(keys[2]);
-        String questionId = String.valueOf(keys[3]);
+    public QuestionCacheBean loadFromResource(Object[] keys,Object[] subkeys) {
+        Long examId = (Long) subkeys[0];
+        String courseCode = String.valueOf(subkeys[1]);
+        String groupCode = String.valueOf(subkeys[2]);
+        String questionId = String.valueOf(keys[0]);
 
         if (examId == null) {
             throw new StatusException("400", "examId is null");

+ 28 - 16
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperDetailUnitServiceImpl.java

@@ -1,14 +1,9 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
-import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.CACHE_KEY_PAPER;
-import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.CACHE_KEY_QUESTION;
-
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
-import org.apache.commons.collections.CollectionUtils;
 import org.bson.types.ObjectId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Sort;
@@ -33,6 +28,10 @@ import cn.com.qmth.examcloud.core.questions.service.PaperDetailUnitService;
 import cn.com.qmth.examcloud.core.questions.service.PaperService;
 import cn.com.qmth.examcloud.core.questions.service.QuesService;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
+import cn.com.qmth.examcloud.core.questions.service.cache.BasePaperCache;
+import cn.com.qmth.examcloud.core.questions.service.cache.ExtractConfigPaperCache;
+import cn.com.qmth.examcloud.core.questions.service.cache.QuestionAnswerCache;
+import cn.com.qmth.examcloud.core.questions.service.cache.QuestionCache;
 
 /**
  * @author chenken
@@ -41,7 +40,16 @@ import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
  */
 @Service("paperDetailUnitService")
 public class PaperDetailUnitServiceImpl implements PaperDetailUnitService {
-
+    @Autowired
+    private ExtractConfigPaperCache extractConfigPaperCache;
+    @Autowired
+    private BasePaperCache basePaperCache;
+    @Autowired
+    private QuestionCache questionCache;
+    @Autowired
+    private QuestionAnswerCache questionAnswerCache;
+    
+    
     @Autowired
     PaperDetailUnitRepo paperDetailUnitRepo;
 
@@ -340,20 +348,24 @@ public class PaperDetailUnitServiceImpl implements PaperDetailUnitService {
     @Override
     public void clearQuestionCache(String questionId) {
         //清理与当前试题相关的缓存
-        final String patternKey = CACHE_KEY_QUESTION + "*" + questionId;
-        Set<String> keys = redisTemplate.keys(patternKey);
-        if (CollectionUtils.isNotEmpty(keys)) {
-            redisTemplate.delete(keys);
-        }
+//        final String patternKey = CACHE_KEY_QUESTION + "*" + questionId;
+//        Set<String> keys = redisTemplate.keys(patternKey);
+//        if (CollectionUtils.isNotEmpty(keys)) {
+//            redisTemplate.delete(keys);
+//        }
+        questionCache.remove(questionId);
+        questionAnswerCache.remove(questionId);
         //根据questionId清空相关联的paper缓存
         List<PaperDetailUnit> list=findByQuestionId(questionId);
         if(list!=null&&list.size()>0) {
         	for(PaperDetailUnit pd:list) {
-        		String paperKey = CACHE_KEY_PAPER + "*" + pd.getPaper().getId();
-                Set<String> paperKeys = redisTemplate.keys(paperKey);
-                if (CollectionUtils.isNotEmpty(paperKeys)) {
-                    redisTemplate.delete(paperKeys);
-                }
+//        		String paperKey = CACHE_KEY_PAPER + "*" + pd.getPaper().getId();
+//                Set<String> paperKeys = redisTemplate.keys(paperKey);
+//                if (CollectionUtils.isNotEmpty(paperKeys)) {
+//                    redisTemplate.delete(paperKeys);
+//                }
+        	    extractConfigPaperCache.remove(pd.getPaper().getId());
+        	    basePaperCache.remove(pd.getPaper().getId());
         	}
         }
     }

+ 28 - 24
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -1,8 +1,5 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
-import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.CACHE_KEY_PAPER;
-import static cn.com.qmth.examcloud.core.questions.service.cache.Constants.CACHE_KEY_QUESTION;
-
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -38,7 +35,6 @@ import org.springframework.data.domain.Sort.Order;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import org.springframework.web.multipart.MultipartFile;
@@ -64,7 +60,6 @@ import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.dao.ExamPaperRepo;
-import cn.com.qmth.examcloud.core.questions.dao.ExportServiceManageRepo;
 import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
 import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
 import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
@@ -72,7 +67,6 @@ import cn.com.qmth.examcloud.core.questions.dao.QuesBakRepo;
 import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
 import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
-import cn.com.qmth.examcloud.core.questions.dao.entity.ExportServiceManage;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
 import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetail;
 import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
@@ -93,6 +87,10 @@ import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperDetailUnitExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperExp;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.PaperQuestionStructureInfo;
 import cn.com.qmth.examcloud.core.questions.service.bean.dto.SubjectiveQuestionStructure;
+import cn.com.qmth.examcloud.core.questions.service.cache.BasePaperCache;
+import cn.com.qmth.examcloud.core.questions.service.cache.ExtractConfigPaperCache;
+import cn.com.qmth.examcloud.core.questions.service.cache.QuestionAnswerCache;
+import cn.com.qmth.examcloud.core.questions.service.cache.QuestionCache;
 import cn.com.qmth.examcloud.core.questions.service.config.SysProperty;
 import cn.com.qmth.examcloud.core.questions.service.export.ExportPaperAbstractService;
 import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
@@ -149,20 +147,23 @@ public class PaperServiceImpl implements PaperService {
     @Autowired
     private QuestionAudioServiceImpl questionAudioService;
 
-    @Autowired
-    private ExportServiceManageRepo exportServiceManageRepo;
-
     @Autowired
     private SysProperty sysProperty;
 
-    @Autowired
-    private RedisTemplate<String, Object> redisTemplate;
-
     @Autowired
     private CoursePaperCloudService coursePaperCloudService;
 
     @Autowired
     private CourseService courseService;
+    
+    @Autowired
+    private ExtractConfigPaperCache extractConfigPaperCache;
+    @Autowired
+    private BasePaperCache basePaperCache;
+    @Autowired
+    private QuestionCache questionCache;
+    @Autowired
+    private QuestionAnswerCache questionAnswerCache;
 
     private Random random = new Random();
 
@@ -1450,8 +1451,7 @@ public class PaperServiceImpl implements PaperService {
     @Override
     public String findQuestionStructure(String paperId) throws Exception {
         //根据paperId查询新的对象
-        ExportServiceManage esm = exportServiceManageRepo.findByOrgName("陕西师范大学");
-        ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
+        ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById("sxsfExportPaperService");
         PaperExp paperExp = exportPaperAbstractService.initPaperExp(paperId);
         log.info("已经获取试卷");
         //得到试卷中的客观大题
@@ -1849,20 +1849,24 @@ public class PaperServiceImpl implements PaperService {
 
     private void clearPaperCache(String paperId) {
         //清理与当前试卷相关的缓存
-        final String patternKey = CACHE_KEY_PAPER + "*" + paperId;
-        Set<String> keys = redisTemplate.keys(patternKey);
-        if (CollectionUtils.isNotEmpty(keys)) {
-            redisTemplate.delete(keys);
-        }
+//        final String patternKey = CACHE_KEY_PAPER + "*" + paperId;
+//        Set<String> keys = redisTemplate.keys(patternKey);
+//        if (CollectionUtils.isNotEmpty(keys)) {
+//            redisTemplate.delete(keys);
+//        }
+        extractConfigPaperCache.remove(paperId);
+        basePaperCache.remove(paperId);
     }
 
     private void clearQuestionCache(String questionId) {
         //清理与当前试题相关的缓存
-        final String patternKey = CACHE_KEY_QUESTION + "*" + questionId;
-        Set<String> keys = redisTemplate.keys(patternKey);
-        if (CollectionUtils.isNotEmpty(keys)) {
-            redisTemplate.delete(keys);
-        }
+//        final String patternKey = CACHE_KEY_QUESTION + "*" + questionId;
+//        Set<String> keys = redisTemplate.keys(patternKey);
+//        if (CollectionUtils.isNotEmpty(keys)) {
+//            redisTemplate.delete(keys);
+//        }
+        questionCache.remove(questionId);
+        questionAnswerCache.remove(questionId);
     }
 
 }