|
@@ -1,16 +1,10 @@
|
|
|
package com.qmth.cqb.paper.service.impl;
|
|
|
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Random;
|
|
|
-import java.util.Set;
|
|
|
+import java.util.*;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.nlpcn.commons.lang.util.StringUtil;
|
|
@@ -261,20 +255,36 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
* @return
|
|
|
*/
|
|
|
public Paper recombinationPaper(Paper paper,PaperType paperType,int upSetQuestionOrder,int upSetOptionOrder){
|
|
|
- List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
|
|
|
+
|
|
|
+ //将小题全部取出来,只取一次
|
|
|
+ List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
|
|
|
+ //从小题中抽取大题
|
|
|
+ List<PaperDetail> paperDetails = allPaperDetailUnits.stream()
|
|
|
+ .map(PaperDetailUnit::getPaperDetail)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //抽取大题号对应的小题
|
|
|
+ Map<Integer,List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream()
|
|
|
+ .collect(Collectors.groupingBy(PaperDetailUnit::getDetailNumber));
|
|
|
+ //最终保存的所有小题
|
|
|
+ List<PaperDetailUnit> savePaperDetailUnits = new ArrayList<>();
|
|
|
paper.setId(null);
|
|
|
paper.setPaperType(paperType);
|
|
|
- Paper newPaper = paperRepo.save(paper);//重新保存成新的paper
|
|
|
+
|
|
|
for(int i = 0;i<paperDetails.size();i++){
|
|
|
PaperDetail paperDetail = paperDetails.get(i);
|
|
|
+ paperDetail.setId(null);
|
|
|
+ paperDetail.setPaper(paper);
|
|
|
+
|
|
|
+ List<PaperDetailUnit> paperDetailUnits = pduMap.get(paperDetail.getNumber());
|
|
|
+ if(paperDetailUnits == null || paperDetailUnits.size() == 0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Collections.sort(paperDetailUnits);
|
|
|
+
|
|
|
//将大题中最小的number取出
|
|
|
- PaperDetailUnit topDetailUnit = paperDetailUnitService.findTopOrderByNumber(paperDetail,"ASC");
|
|
|
+ PaperDetailUnit topDetailUnit = paperDetailUnits.get(0);
|
|
|
int minNumber = topDetailUnit.getNumber();
|
|
|
- List<PaperDetailUnit> paperDetailUnits = paperDetailUnitService.getUnitsByPaperDetail(paperDetail);
|
|
|
-
|
|
|
- paperDetail.setPaper(newPaper);//关联新Paper
|
|
|
- paperDetail.setId(null);
|
|
|
- PaperDetail newPaperDetail = paperDetailRepo.save(paperDetail);//保存新的paperDetail
|
|
|
+
|
|
|
//小题乱序
|
|
|
if(paperDetailUnits!=null&&paperDetailUnits.size()>0){
|
|
|
if((topDetailUnit.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION
|
|
@@ -288,13 +298,24 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
for(int j = 0;j<paperDetailUnits.size();j++){
|
|
|
//重新设置保存PaperDetailUnit
|
|
|
PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
|
|
|
- paperDetailUnit.setPaperType(newPaper.getPaperType());
|
|
|
- paperDetailUnit.setPaper(newPaper); //关联新Paper
|
|
|
- paperDetailUnit.setPaperDetail(newPaperDetail); //关联新paperDetail
|
|
|
+ paperDetailUnit.setPaperType(paperType);
|
|
|
+ paperDetailUnit.setPaper(paper);
|
|
|
+ paperDetailUnit.setPaperDetail(paperDetail);
|
|
|
paperDetailUnit.setNumber(minNumber+j); //重新设置序号
|
|
|
reSavePaperDetailUtilAndQuestion(paperDetailUnit,upSetOptionOrder);
|
|
|
+ savePaperDetailUnits.add(paperDetailUnit);
|
|
|
}
|
|
|
}
|
|
|
+ //保存试卷信息
|
|
|
+ Paper newPaper = paperRepo.save(paper);
|
|
|
+ paperDetailRepo.save(paperDetails);
|
|
|
+ paperDetailUnitRepo.save(savePaperDetailUnits);
|
|
|
+
|
|
|
+ //清空所有list
|
|
|
+ allPaperDetailUnits.clear();
|
|
|
+ savePaperDetailUnits.clear();
|
|
|
+ paperDetails.clear();
|
|
|
+
|
|
|
return newPaper;
|
|
|
}
|
|
|
|
|
@@ -408,7 +429,6 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
}
|
|
|
}
|
|
|
paperDetailUnit.setId(null);
|
|
|
- paperDetailUnitRepo.save(paperDetailUnit);//保存新的paperDetailUnit
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -438,14 +458,26 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
|
*/
|
|
|
private PaperDto getPaperDtoByPaper(Paper paper){
|
|
|
PaperDto paperDto = BeanCopierUtil.copyProperties(paper, PaperDto.class);
|
|
|
- // 获取大题
|
|
|
- List<PaperDetail> paperDetails = paperDetailRepo.findByPaperOrderByNumber(paper);
|
|
|
+
|
|
|
+ //将小题全部取出来,只取一次
|
|
|
+ List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(paper);
|
|
|
+ //从小题中抽取大题
|
|
|
+ List<PaperDetail> paperDetails = allPaperDetailUnits.stream()
|
|
|
+ .map(PaperDetailUnit::getPaperDetail)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //抽取大题Id对应的小题
|
|
|
+ Map<String,List<PaperDetailUnit>> pduMap = allPaperDetailUnits.stream()
|
|
|
+ .collect(Collectors.groupingBy(PaperDetailUnit::getDetailId));
|
|
|
+ // 获取大题Dto
|
|
|
List<PaperDetailDto> paperDetailDtos = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailDto.class);
|
|
|
paperDto.setPaperDetails(paperDetailDtos);
|
|
|
+
|
|
|
// 封装小题
|
|
|
for (int i = 0; i < paperDetailDtos.size(); i++) {
|
|
|
//根据大题查出大题下面的小题
|
|
|
- List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(paperDetails.get(i));
|
|
|
+ PaperDetail paperDetail = paperDetails.get(i);
|
|
|
+
|
|
|
+ List<PaperDetailUnit> paperDetailUnits = pduMap.get(paperDetail.getId());
|
|
|
//设置答案
|
|
|
setSelectQuestoionAnswer(paperDetailUnits);
|
|
|
List<PaperDetailUnitDto> paperDetailUnitDtos = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,PaperDetailUnitDto.class);
|