Jelajahi Sumber

Merge branch 'v1.3.1' into dev1130

# Conflicts:
#	cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java
宋悦 7 tahun lalu
induk
melakukan
6d409aa5c9

+ 2 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dao/PaperDetailRepo.java

@@ -8,4 +8,6 @@ import java.util.List;
 
 public interface PaperDetailRepo extends MongoRepository<PaperDetail, String>,QueryByExampleExecutor<PaperDetail> {
 	List<PaperDetail> findByPaperOrderByNumber(Paper paper);
+
+	List<PaperDetail> findByPaper(Paper paper);
 }

+ 1 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/dao/PaperDetailUnitRepo.java

@@ -15,6 +15,7 @@ import java.util.List;
 public interface PaperDetailUnitRepo extends MongoRepository<PaperDetailUnit, String>,QueryByExampleExecutor<PaperDetailUnit> {
     List<PaperDetailUnit> findByPaperDetailOrderByNumber(PaperDetail paperDetail);
     List<PaperDetailUnit> findByPaperOrderByNumber(Paper paper);
+    List<PaperDetailUnit> findByPaper(Paper paper);
     List<PaperDetailUnit> findByQuestion(Question question);
     List<PaperDetailUnit> findByQuestionIn(List<Question> questionList);
     PaperDetailUnit findById(String id);

+ 1 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/model/PaperDetail.java

@@ -13,7 +13,7 @@ public class PaperDetail implements Serializable,Comparable<PaperDetail> {
     @Id
     private String id;
 
-    @DBRef
+    @DBRef(lazy = true)
     private Paper paper;// 关联的试卷
 
     private Integer number;// 大题序号

+ 3 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/model/PaperDetailUnit.java

@@ -23,7 +23,7 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
     @Id
     private String id;
 
-    @DBRef
+    @DBRef(lazy = true)
     private Paper paper;// 关联的试卷
 
     private Integer number;// 小题序号
@@ -32,12 +32,12 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
 
     private List<Double> subScoreList;// 对应套题的情况下,各子题的分数分布
 
-    @DBRef
+    @DBRef(lazy = true)
     private PaperDetail paperDetail;// 关联的大题
 
     private QuesStructType questionType;// 小题类型
 
-    @DBRef
+    @DBRef(lazy = true)
     private Question question;// 关联试题
 
     /**

+ 25 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -526,18 +526,39 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 //		if(cacheDto != null && cacheDto.getClass().equals(PaperDto.class)){
 //			return (PaperDto)cacheDto;
 //		}
+		long beginTime = System.currentTimeMillis();
 		//没有则重新组装
 		PaperDto paperDto = paperDtoAssembler.toDto(paper);
+		long paperDtoEndTime = System.currentTimeMillis();
+		logger.info("单独组装paperDto耗时:"+(paperDtoEndTime - beginTime)+"ms");
+
 		//将小题全部取出来,只取一次
-		List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
+		List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaper(paper);
+		long pduEndTime = System.currentTimeMillis();
+		logger.info("数据库取小题耗时:"+(pduEndTime - paperDtoEndTime)+"ms");
+		Collections.sort(allPaperDetailUnits);
+		long pduSortEndTime = System.currentTimeMillis();
+		logger.info("排序小题耗时:"+(pduSortEndTime - pduEndTime)+"ms");
+
 		//获取大题
-		List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
+		List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
+		long pdEndTime = System.currentTimeMillis();
+		logger.info("数据库取大题耗时:"+(pdEndTime - pduSortEndTime)+"ms");
+		Collections.sort(paperDetails);
+		long pdSortEndTime = System.currentTimeMillis();
+		logger.info("排序大题耗时:"+(pdSortEndTime - pdEndTime)+"ms");
+
 		//抽取大题Id对应的小题
 		Map<String,List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream()
 				.collect(Collectors.groupingBy(PaperDetailUnit::getDetailId));
+		long pduMapEndTime = System.currentTimeMillis();
+		logger.info("获取大题与小题对应关系耗时:"+(pduMapEndTime - pdSortEndTime)+"ms");
+
         // 获取大题Dto
         List<PaperDetailDto> paperDetailDtos = paperDetailDtoAssembler.toDtoList(paperDetails);
         paperDto.setPaperDetails(paperDetailDtos);
+		long paperDetailDtoEndTime = System.currentTimeMillis();
+		logger.info("单独组装paperDetailDto耗时:"+(paperDetailDtoEndTime - pduMapEndTime)+"ms");
 
         // 封装小题
         for (int i = 0; i < paperDetailDtos.size(); i++) {
@@ -583,6 +604,8 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
             paperDetailDtos.get(i).setPaperDetailUnits(paperDetailUnitDtos);
             paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
         }
+		long paperDetailUnitDtoEndTime = System.currentTimeMillis();
+		logger.info("单独组装paperDetailUnitDto耗时:"+(paperDetailUnitDtoEndTime - paperDetailDtoEndTime)+"ms");
         //将重新组装的dto放进缓存
 //        redisTemplate.opsForValue().set(paperDto.getId(),paperDto);
 		return paperDto;