|
@@ -11,6 +11,7 @@ import com.qmth.cqb.paper.assemble.PaperDetailUnitDtoAssembler;
|
|
import com.qmth.cqb.paper.assemble.PaperDtoAssembler;
|
|
import com.qmth.cqb.paper.assemble.PaperDtoAssembler;
|
|
import com.qmth.cqb.paper.assemble.SubQuestionDtoAssembler;
|
|
import com.qmth.cqb.paper.assemble.SubQuestionDtoAssembler;
|
|
|
|
|
|
|
|
+import com.qmth.cqb.paper.dao.nativedriver.PaperDetailUnitNativeRepo;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.SystemUtils;
|
|
import org.apache.commons.lang3.SystemUtils;
|
|
import org.bson.types.ObjectId;
|
|
import org.bson.types.ObjectId;
|
|
@@ -146,6 +147,9 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
@Autowired
|
|
@Autowired
|
|
private RedisTemplate redisTemplate;
|
|
private RedisTemplate redisTemplate;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private PaperDetailUnitNativeRepo detailUnitNativeRepo;
|
|
|
|
+
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public ExtractConfig findConfig(ExtractConfig condition) {
|
|
public ExtractConfig findConfig(ExtractConfig condition) {
|
|
@@ -279,6 +283,27 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public boolean checkIsAllQbjectiveByPdu(List<PaperDetailUnit> paperDetailUnits) {
|
|
|
|
+ for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
|
|
|
|
+ Question question = paperDetailUnit.getQuestion();
|
|
|
|
+ //填空或问答
|
|
|
|
+ if(question.getQuestionType()==QuesStructType.FILL_BLANK_QUESTION
|
|
|
|
+ ||question.getQuestionType()==QuesStructType.TEXT_ANSWER_QUESTION){
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ if(question.getQuestionType()==QuesStructType.NESTED_ANSWER_QUESTION){
|
|
|
|
+ List<Question> subQuestions = question.getSubQuestions();
|
|
|
|
+ for(Question subQuestion:subQuestions){
|
|
|
|
+ if(subQuestion.getQuestionType()==QuesStructType.FILL_BLANK_QUESTION
|
|
|
|
+ ||subQuestion.getQuestionType()==QuesStructType.TEXT_ANSWER_QUESTION){
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public Map<String, String> makePaperByConfig(ExtractConfig extractConfig) {
|
|
public Map<String, String> makePaperByConfig(ExtractConfig extractConfig) {
|
|
Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
|
|
Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
|
|
@@ -612,6 +637,108 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
|
|
redisTemplate.opsForValue().set(paperDto.getId(),paperDto);
|
|
redisTemplate.opsForValue().set(paperDto.getId(),paperDto);
|
|
return paperDto;
|
|
return paperDto;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 测试获取paperDto
|
|
|
|
+ * @param basePaperId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public PaperDto getPaperDtoByPaperNew(String basePaperId){
|
|
|
|
+
|
|
|
|
+ long beginTime = System.currentTimeMillis();
|
|
|
|
+ //没有则重新组装
|
|
|
|
+ Paper paper = paperRepo.findOne(basePaperId);
|
|
|
|
+ PaperDto paperDto = paperDtoAssembler.toDto(paper);
|
|
|
|
+ paperDto.setBasePaperId(basePaperId);
|
|
|
|
+
|
|
|
|
+ long paperDtoEndTime = System.currentTimeMillis();
|
|
|
|
+ logger.info("单独组装paperDto耗时:"+(paperDtoEndTime - beginTime)+"ms");
|
|
|
|
+
|
|
|
|
+ //将小题全部取出来,只取一次
|
|
|
|
+ List<PaperDetailUnit> allPaperDetailUnits = detailUnitNativeRepo.findByPaperId(paper.getId());
|
|
|
|
+ long pduEndTime = System.currentTimeMillis();
|
|
|
|
+ logger.info("数据库取小题耗时:"+(pduEndTime - paperDtoEndTime)+"ms");
|
|
|
|
+ Collections.sort(allPaperDetailUnits);
|
|
|
|
+ long pduSortEndTime = System.currentTimeMillis();
|
|
|
|
+ logger.info("排序小题耗时:"+(pduSortEndTime - pduEndTime)+"ms");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ paperDto.setAllQbjectiveQuestion(checkIsAllQbjectiveByPdu(allPaperDetailUnits));
|
|
|
|
+ long isAllObjEndtime = System.currentTimeMillis();
|
|
|
|
+ logger.info("设置客观题耗时:"+(isAllObjEndtime - pduSortEndTime)+"ms");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //获取大题
|
|
|
|
+ List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
|
+ long pdEndTime = System.currentTimeMillis();
|
|
|
|
+ logger.info("数据库取大题耗时:"+(pdEndTime - isAllObjEndtime)+"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++) {
|
|
|
|
+ //根据大题查出大题下面的小题
|
|
|
|
+ PaperDetail paperDetail = paperDetails.get(i);
|
|
|
|
+
|
|
|
|
+ List<PaperDetailUnit> paperDetailUnits = pduMap.get(paperDetail.getId());
|
|
|
|
+
|
|
|
|
+ List<PaperDetailUnitDto> paperDetailUnitDtos = new ArrayList<>();
|
|
|
|
+ for (int j = 0; j < paperDetailUnits.size(); j++) {
|
|
|
|
+ PaperDetailUnit paperDetailUnit = paperDetailUnits.get(j);
|
|
|
|
+ if(paperDetailUnit==null||paperDetailUnit.getQuestion()==null){
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ //设置答案
|
|
|
|
+ setSelectQuestionAnswerUnit(paperDetailUnit);
|
|
|
|
+
|
|
|
|
+ PaperDetailUnitDto unitDto = paperDetailUnitDtoAssembler.toDto(paperDetailUnit);
|
|
|
|
+ /**
|
|
|
|
+ * 此处不能传questionId,需要传paperDetailUnitId
|
|
|
|
+ * 因为选项乱序在paperDetailUnit里
|
|
|
|
+ * unitDto.setQuesId(paperDetailUnit.getQuestion().getId());
|
|
|
|
+ */
|
|
|
|
+ unitDto.setQuesId(paperDetailUnit.getId());
|
|
|
|
+ String answer = paperDetailUnit.getQuestion().getQuesAnswer();
|
|
|
|
+ if (StringUtils.isNotEmpty(answer)){
|
|
|
|
+ unitDto.setAnswer(answer);
|
|
|
|
+ }
|
|
|
|
+ if (unitDto.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {// 假如是套题
|
|
|
|
+ List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
|
|
|
|
+ List<SubQuestionDto> subQuesDtos = subQuestionDtoAssembler.toDtoList(subQuesList);
|
|
|
|
+ for (int m = 0; m < subQuesList.size(); m++) {
|
|
|
|
+ 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());
|
|
|
|
+ }
|
|
|
|
+ subQuesDtos.get(m).setNumber(m + 1);
|
|
|
|
+ //套题分数从小题类中取值
|
|
|
|
+ subQuesDtos.get(m).setScore(paperDetailUnit.getSubScoreList().get(m));
|
|
|
|
+ }
|
|
|
|
+ unitDto.setSubQuestions(subQuesDtos);
|
|
|
|
+ }
|
|
|
|
+ paperDetailUnitDtos.add(unitDto);
|
|
|
|
+ }
|
|
|
|
+ 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");
|
|
|
|
+ return paperDto;
|
|
|
|
+ }
|
|
|
|
|
|
private void setSelectQuestoionAnswer(List<PaperDetailUnit> paperDetailUnits) {
|
|
private void setSelectQuestoionAnswer(List<PaperDetailUnit> paperDetailUnits) {
|
|
for (PaperDetailUnit paperDetailUnit : paperDetailUnits) {
|
|
for (PaperDetailUnit paperDetailUnit : paperDetailUnits) {
|