ソースを参照

Merge branch 'dev1130' of https://gitee.com/songyue123456/comm-ques-bank.git into dev1130

weiwenhai 7 年 前
コミット
a0109716b8

+ 7 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/assemble/SubQuestionDtoAssembler.java

@@ -6,6 +6,7 @@ import com.qmth.cqb.question.model.QuesOption;
 import com.qmth.cqb.question.model.Question;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -35,12 +36,18 @@ public class SubQuestionDtoAssembler {
     }
 
     public List<SubQuestionDto> toDtoList(List<Question> questionList){
+        if(questionList == null || questionList.size() == 0 ){
+            return new ArrayList<SubQuestionDto>();
+        }
         return questionList.stream()
                 .map(question -> toDto(question))
                 .collect(Collectors.toList());
     }
 
     public List<QuesOptionDto> toOptionDtoList(List<QuesOption> quesOptionList){
+        if(quesOptionList == null || quesOptionList.size() == 0 ){
+            return new ArrayList<QuesOptionDto>();
+        }
         return quesOptionList.stream()
                 .map(quesOption -> toOptionDto(quesOption))
                 .collect(Collectors.toList());

+ 23 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.data.domain.PageRequest;
 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;
 
@@ -141,7 +142,10 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	@Autowired
 	private SubQuestionDtoAssembler subQuestionDtoAssembler;
 
-    
+	@Autowired
+	private RedisTemplate redisTemplate;
+
+
 	@Override
 	public ExtractConfig findConfig(ExtractConfig condition) {
 		if(condition.getExamId()==null){
@@ -227,9 +231,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			logger.info("总共耗时:"+(System.currentTimeMillis() - beginTime)+"ms");
 		}else{
 			//乱序重新生成试卷
-			Paper newPaper = this.recombinationPaper(basePaper,PaperType.STUDENT_EXAM,
-					upSetQuestionOrder,
-					upSetOptionOrder);
+			Paper newPaper = this.recombinationPaper(basePaper, PaperType.STUDENT_EXAM, upSetQuestionOrder, upSetOptionOrder);
 			logger.info("根据新试卷 paperId:"+newPaper.getId()+"组装PaperDto后返回");
 
 			long genPaperFinishTime = System.currentTimeMillis();
@@ -251,6 +253,14 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	
 	@Override
 	public boolean checkIsAllQbjectiveQuestion(String paperId) {
+
+		//优先从redis中获取缓存dto
+		Object cacheDto = redisTemplate.opsForValue().get(paperId);
+		if(cacheDto != null && cacheDto.getClass().equals(PaperDto.class)){
+			PaperDto paperDto = (PaperDto)cacheDto;
+			return paperDto.isAllQbjectiveQuestion();
+		}
+
 		Paper paper = paperRepo.findOne(paperId);
 		List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
 		for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
@@ -510,8 +520,14 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	 * @return
 	 */
 	private PaperDto getPaperDtoByPaper(Paper paper){
-		PaperDto paperDto = paperDtoAssembler.toDto(paper);
 
+		//优先从redis中获取缓存dto
+		Object cacheDto = redisTemplate.opsForValue().get(paper.getId());
+		if(cacheDto != null && cacheDto.getClass().equals(PaperDto.class)){
+			return (PaperDto)cacheDto;
+		}
+		//没有则重新组装
+		PaperDto paperDto = paperDtoAssembler.toDto(paper);
 		//将小题全部取出来,只取一次
 		List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
 		//获取大题
@@ -567,6 +583,8 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
             paperDetailDtos.get(i).setPaperDetailUnits(paperDetailUnitDtos);
             paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
         }
+        //将重新组装的dto放进缓存
+        redisTemplate.opsForValue().set(paperDto.getId(),paperDto);
 		return paperDto;
 	}
 	

+ 4 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/PaperDetailServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.cqb.paper.service.impl;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
@@ -42,6 +43,9 @@ public class PaperDetailServiceImpl implements PaperDetailService{
     @Autowired
     PaperDetailUnitRepo paperDetailUnitRepo;
 
+    @Autowired
+    RedisTemplate redisTemplate;
+
     /**
      * 根据Id获得对应所有小题
      * 

+ 10 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/PaperServiceImpl.java

@@ -36,6 +36,7 @@ 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;
@@ -125,7 +126,10 @@ public class PaperServiceImpl implements PaperService{
     
     @Autowired
 	private QuestionAudioRepo questionAudioRepo;
-    
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
     @Value("${upyun.radioType}")
     private String radioType;
     
@@ -259,6 +263,8 @@ public class PaperServiceImpl implements PaperService{
             }
 
         }
+        //删除缓存
+        redisTemplate.delete(paperExp.getId());
         return msgMap;
     }
 
@@ -416,6 +422,8 @@ public class PaperServiceImpl implements PaperService{
         }
         paperDetailService.deletePaperDetailsByPapers(papers);
         paperRepo.delete(papers);
+        //删除缓存
+        redisTemplate.delete(paperIds);
         msg = "success";
         msgMap.put("msg", msg);
         return msgMap;
@@ -722,6 +730,7 @@ public class PaperServiceImpl implements PaperService{
             paper.setLastModifyName(user.getName());
         }
         paperRepo.save(paper);
+        redisTemplate.delete(paper.getId());
 	}
 
 	/**