Jelajahi Sumber

改善调卷性能

宋悦 7 tahun lalu
induk
melakukan
7f6f80914e

+ 30 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/assemble/PaperDetailDtoAssembler.java

@@ -0,0 +1,30 @@
+package com.qmth.cqb.paper.assemble;
+
+import cn.com.qmth.examcloud.common.dto.question.PaperDetailDto;
+import com.qmth.cqb.paper.model.PaperDetail;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by songyue on 18/1/5.
+ */
+@Component
+public class PaperDetailDtoAssembler {
+
+    public PaperDetailDto toDto(PaperDetail paperDetail){
+        PaperDetailDto paperDetailDto = new PaperDetailDto();
+        paperDetailDto.setId(paperDetail.getId());
+        paperDetailDto.setName(paperDetail.getName());
+        paperDetailDto.setNumber(paperDetail.getNumber());
+        paperDetailDto.setScore(paperDetail.getScore());
+        return paperDetailDto;
+    }
+
+    public List<PaperDetailDto> toDtoList(List<PaperDetail> paperDetailList){
+        return paperDetailList.stream()
+                .map(paperDetail -> toDto(paperDetail))
+                .collect(Collectors.toList());
+    }
+}

+ 32 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/assemble/PaperDetailUnitDtoAssembler.java

@@ -0,0 +1,32 @@
+package com.qmth.cqb.paper.assemble;
+
+import cn.com.qmth.examcloud.common.dto.question.PaperDetailUnitDto;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by songyue on 18/1/5.
+ */
+@Component
+public class PaperDetailUnitDtoAssembler {
+
+    public PaperDetailUnitDto toDto(PaperDetailUnit paperDetailUnit){
+        PaperDetailUnitDto paperDetailUnitDto = new PaperDetailUnitDto();
+        paperDetailUnitDto.setId(paperDetailUnit.getId());
+        paperDetailUnitDto.setNumber(paperDetailUnit.getNumber());
+        paperDetailUnitDto.setScore(paperDetailUnit.getScore());
+        paperDetailUnitDto.setOptionOrder(paperDetailUnit.getOptionOrder());
+        paperDetailUnitDto.setQuestionType(paperDetailUnit.getQuestionType());
+        paperDetailUnitDto.setSubScoreList(paperDetailUnit.getSubScoreList());
+        return paperDetailUnitDto;
+    }
+
+    public List<PaperDetailUnitDto> toDtoList(List<PaperDetailUnit> paperDetailUnitList){
+        return paperDetailUnitList.stream()
+                .map(paperDetailUnit -> toDto(paperDetailUnit))
+                .collect(Collectors.toList());
+    }
+}

+ 30 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/assemble/PaperDtoAssembler.java

@@ -0,0 +1,30 @@
+package com.qmth.cqb.paper.assemble;
+
+import cn.com.qmth.examcloud.common.dto.question.PaperDto;
+import com.qmth.cqb.paper.model.Paper;
+import org.springframework.stereotype.Component;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by songyue on 18/1/5.
+ */
+@Component
+public class PaperDtoAssembler {
+
+    public PaperDto toDto(Paper paper){
+        PaperDto paperDto = new PaperDto();
+        paperDto.setId(paper.getId());
+        paperDto.setName(paper.getName());
+        paperDto.setTitle(paper.getTitle());
+        paperDto.setParams(paper.getParams());
+        paperDto.setTotalScore(paper.getTotalScore());
+        return paperDto;
+    }
+
+    public List<PaperDto> toDtoList(List<Paper> paperList){
+        return paperList.stream()
+                .map(paper -> toDto(paper))
+                .collect(Collectors.toList());
+    }
+}

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

@@ -0,0 +1,48 @@
+package com.qmth.cqb.paper.assemble;
+
+import cn.com.qmth.examcloud.common.dto.question.QuesOptionDto;
+import cn.com.qmth.examcloud.common.dto.question.SubQuestionDto;
+import com.qmth.cqb.question.model.QuesOption;
+import com.qmth.cqb.question.model.Question;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by songyue on 18/1/5.
+ */
+@Component
+public class SubQuestionDtoAssembler {
+
+    public SubQuestionDto toDto(Question question){
+        SubQuestionDto subQuestionDto = new SubQuestionDto();
+        subQuestionDto.setQuestionType(question.getQuestionType());
+        subQuestionDto.setNumber(question.getNumber());
+        subQuestionDto.setScore(question.getScore());
+        subQuestionDto.setQuesAnswer(question.getQuesAnswer());
+        subQuestionDto.setQuesBody(question.getQuesBody());
+        subQuestionDto.setQuesParams(question.getQuesParams());
+        subQuestionDto.setQuesOptions(toOptionDtoList(question.getQuesOptions()));
+        return subQuestionDto;
+    }
+
+    public QuesOptionDto toOptionDto(QuesOption quesOption){
+        QuesOptionDto quesOptionDto = new QuesOptionDto();
+        quesOptionDto.setNumber(quesOption.getNumber());
+        quesOptionDto.setOptionBody(quesOption.getOptionBody());
+        return quesOptionDto;
+    }
+
+    public List<SubQuestionDto> toDtoList(List<Question> questionList){
+        return questionList.stream()
+                .map(question -> toDto(question))
+                .collect(Collectors.toList());
+    }
+
+    public List<QuesOptionDto> toOptionDtoList(List<QuesOption> quesOptionList){
+        return quesOptionList.stream()
+                .map(quesOption -> toOptionDto(quesOption))
+                .collect(Collectors.toList());
+    }
+}

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

@@ -6,8 +6,13 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+import com.qmth.cqb.paper.assemble.PaperDetailDtoAssembler;
+import com.qmth.cqb.paper.assemble.PaperDetailUnitDtoAssembler;
+import com.qmth.cqb.paper.assemble.PaperDtoAssembler;
+import com.qmth.cqb.paper.assemble.SubQuestionDtoAssembler;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.SystemUtils;
+import org.bson.types.ObjectId;
 import org.nlpcn.commons.lang.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -124,6 +129,18 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	@Value("${upyun.downloadUrl}")
 	private String downloadUrl;
 
+	@Autowired
+	private PaperDtoAssembler paperDtoAssembler;
+
+	@Autowired
+	private PaperDetailDtoAssembler paperDetailDtoAssembler;
+
+	@Autowired
+	private PaperDetailUnitDtoAssembler paperDetailUnitDtoAssembler;
+
+	@Autowired
+	private SubQuestionDtoAssembler subQuestionDtoAssembler;
+
     
 	@Override
 	public ExtractConfig findConfig(ExtractConfig condition) {
@@ -287,7 +304,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		//保存试卷信息
 		paper.setId(null);
 		paper.setPaperType(paperType);
-		Paper newPaper = paperRepo.save(paper);
+		Paper newPaper = paperRepo.insert(paper);
 
 		for(int i = 0;i<paperDetails.size();i++){
 			PaperDetail paperDetail = paperDetails.get(i);
@@ -314,7 +331,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 			//保存大题信息
 			paperDetail.setId(null);
 			paperDetail.setPaper(newPaper);
-			PaperDetail newPaperDetail = paperDetailRepo.save(paperDetail);
+			PaperDetail newPaperDetail = paperDetailRepo.insert(paperDetail);
 
 			for(int j = 0;j<paperDetailUnits.size();j++){
 				//重新设置保存PaperDetailUnit
@@ -329,7 +346,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 
 		}
 		//保存小题信息
-		paperDetailUnitRepo.save(savePaperDetailUnits);
+		paperDetailUnitRepo.insert(savePaperDetailUnits);
 
 		//清空所有list
 		allPaperDetailUnits.clear();
@@ -477,7 +494,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	 * @return
 	 */
 	private PaperDto getPaperDtoByPaper(Paper paper){
-		PaperDto paperDto = BeanCopierUtil.copyProperties(paper, PaperDto.class);
+		PaperDto paperDto = paperDtoAssembler.toDto(paper);
 
 		//将小题全部取出来,只取一次
 		List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
@@ -489,7 +506,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		Map<String,List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream()
 				.collect(Collectors.groupingBy(PaperDetailUnit::getDetailId));
         // 获取大题Dto
-        List<PaperDetailDto> paperDetailDtos = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailDto.class);
+        List<PaperDetailDto> paperDetailDtos = paperDetailDtoAssembler.toDtoList(paperDetails);
         paperDto.setPaperDetails(paperDetailDtos);
 
         // 封装小题
@@ -500,7 +517,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
             List<PaperDetailUnit> paperDetailUnits = pduMap.get(paperDetail.getId());
 			//设置答案
             setSelectQuestoionAnswer(paperDetailUnits);
-            List<PaperDetailUnitDto> paperDetailUnitDtos = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,PaperDetailUnitDto.class);
+            List<PaperDetailUnitDto> paperDetailUnitDtos = paperDetailUnitDtoAssembler.toDtoList(paperDetailUnits);
             for (int j = 0; j < paperDetailUnitDtos.size(); j++) {
             	PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
             	if(paperDetailUnit==null||paperDetailUnit.getQuestion()==null){
@@ -519,9 +536,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 				}
                 if (unitDto.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {// 假如是套题
                     List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
-                    List<SubQuestionDto> subQuesDtos = BeanCopierUtil.copyPropertiesOfList(subQuesList,SubQuestionDto.class);
+                    List<SubQuestionDto> subQuesDtos = subQuestionDtoAssembler.toDtoList(subQuesList);
                     for (int m = 0; m < subQuesList.size(); m++) {
-                        List<QuesOptionDto> quesOptionDtos = BeanCopierUtil.copyPropertiesOfList(subQuesList.get(m).getQuesOptions(), QuesOptionDto.class);
+                        List<QuesOptionDto> quesOptionDtos = subQuestionDtoAssembler.toOptionDtoList(subQuesList.get(m).getQuesOptions());
                         subQuesDtos.get(m).setQuesOptions(quesOptionDtos);
 						if(StringUtils.isNotEmpty(subQuesList.get(m).getQuesAnswer())){
 							subQuesDtos.get(m).setQuesAnswer(subQuesList.get(m).getQuesAnswer());