deason пре 5 година
родитељ
комит
34ae72cd4d

+ 14 - 5
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigProviderServiceImpl.java

@@ -160,11 +160,17 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
             while (it.hasNext()) {
                 String key = it.next();
                 Paper paper = this.getPaperByProbability(examPaperMap.get(key));
+
+                if (paper == null) {
+                    continue;
+                }
+
                 //不能用原来的paper对象,否则examPaperList中的paper对象会被覆盖
                 Paper newPaper = Model.of(paperRepo.findById(paper.getId()));
                 paperByTypeMap.put(key, newPaper);
             }
         }
+
         return paperByTypeMap;
     }
 
@@ -445,21 +451,22 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
      * @return
      */
     private String[] getSelectQuestionAnswer(List<QuesOption> quesOptions) {
-        String[] rightAnswer = null;
         List<String> list = new ArrayList<>();
 
-        if (quesOptions != null && quesOptions.size() > 0) {
+        if (CollectionUtils.isNotEmpty(quesOptions)) {
             for (int i = 0; i < quesOptions.size(); i++) {
                 QuesOption quesOption = quesOptions.get(i);
                 if (quesOption.getIsCorrect() == 1) {
                     list.add(String.valueOf(i));
                 }
             }
-            rightAnswer = list.toArray(new String[list.size()]);
-            return rightAnswer;
         }
 
-        return rightAnswer;
+        if (list.size() > 0) {
+            return list.toArray(new String[list.size()]);
+        }
+
+        return new String[0];
     }
 
     /**
@@ -660,6 +667,7 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
     public List<String> getAnswer(String questionId) {
         List<String> list = new ArrayList<>();
         Question question = Model.of(quesRepo.findById(questionId));
+
         if (question.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
             List<Question> subList = question.getSubQuestions();
             if (subList != null && subList.size() > 0) {
@@ -706,6 +714,7 @@ public class ExtractConfigProviderServiceImpl implements ExtractConfigProviderSe
             }
             list.add(answer);
         }
+
         return list;
     }
 

+ 10 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExtractConfigServiceImpl.java

@@ -402,6 +402,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         if (examPaperList == null || examPaperList.size() == 0) {
             throw new RuntimeException("可供抽取的试卷集合为空,无法抽取试卷");
         }
+
         Map<String, List<ExamPaper>> examPaperMap = new HashMap<>();
         for (int i = 0; i < examPaperList.size(); i++) {
             ExamPaper examPaper = examPaperList.get(i);
@@ -418,17 +419,24 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
                 }
             }
         }
+
         if (examPaperMap != null) {
             Set<String> keys = examPaperMap.keySet();
             Iterator<String> it = keys.iterator();
             while (it.hasNext()) {
                 String key = it.next();
                 Paper paper = this.getPaperByProbability(examPaperMap.get(key));
+
+                if (paper == null) {
+                    continue;
+                }
+
                 //不能用原来的paper对象,否则examPaperList中的paper对象会被覆盖
                 Paper newPaper = Model.of(paperRepo.findById(paper.getId()));
                 paperByTypeMap.put(key, newPaper);
             }
         }
+
         return paperByTypeMap;
     }
 
@@ -443,6 +451,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         for (int i = 0; i < examPaperList.size(); i++) {
             sum += examPaperList.get(i).getWeight();
         }
+
         // 从1开始  
         Integer rand = new Random().nextInt(sum) + 1;
         for (int i = 0; i < examPaperList.size(); i++) {
@@ -452,6 +461,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
                 return examPaperList.get(i).getPaper();
             }
         }
+
         return null;
     }
 

+ 31 - 25
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/GenPaperService.java

@@ -585,33 +585,39 @@ public class GenPaperService {
 
     //将所有小题按questionId去重,并按试卷分类
     private Map<String, List<PaperDetailUnit>> sortUnitsByPaper(Map<String, NumberDto> paperMap) {
-        if (paperMap != null && paperMap.size() > 0) {
-            //所有小题集合
-            List<PaperDetailUnit> oldUnits = new ArrayList<>();
-            //取到试卷id
-            for (String paperId : paperMap.keySet()) {
-                //取到所有小题
-                Paper paper = Model.of(paperRepo.findById(paperId));
-                List<PaperDetailUnit> unitList = unitRepo.findByPaperOrderByNumber(paper);
-                oldUnits.addAll(unitList);
-            }
-            //如果是卷库来源,进行questionId去重
-            Set<PaperDetailUnit> spareUnits = new HashSet<>();
-            spareUnits.addAll(oldUnits);
-            Map<String, List<PaperDetailUnit>> map = new HashMap<>();
-            List<PaperDetailUnit> units = null;
-            for (PaperDetailUnit unit : spareUnits) {
-                if (map.get(unit.getPaper().getId()) == null) {
-                    units = new ArrayList<>();
-                } else {
-                    units = map.get(unit.getPaper().getId());
-                }
-                units.add(unit);
-                map.put(unit.getPaper().getId(), units);
+        if (paperMap == null || paperMap.isEmpty()) {
+            return new HashMap<>();
+        }
+
+        //所有小题集合
+        List<PaperDetailUnit> oldUnits = new ArrayList<>();
+
+        //取到试卷id
+        for (String paperId : paperMap.keySet()) {
+            //取到所有小题
+            Paper paper = Model.of(paperRepo.findById(paperId));
+            List<PaperDetailUnit> unitList = unitRepo.findByPaperOrderByNumber(paper);
+            oldUnits.addAll(unitList);
+        }
+
+        //如果是卷库来源,进行questionId去重
+        Set<PaperDetailUnit> spareUnits = new HashSet<>();
+        spareUnits.addAll(oldUnits);
+        Map<String, List<PaperDetailUnit>> map = new HashMap<>();
+
+        List<PaperDetailUnit> units;
+        for (PaperDetailUnit unit : spareUnits) {
+            if (map.get(unit.getPaper().getId()) == null) {
+                units = new ArrayList<>();
+            } else {
+                units = map.get(unit.getPaper().getId());
             }
-            return map;
+
+            units.add(unit);
+            map.put(unit.getPaper().getId(), units);
         }
-        return null;
+
+        return map;
     }
 
     //将试卷下面的所有小题按照 公开度  和   难度  进行分类

+ 7 - 1
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuesServiceImpl.java

@@ -519,9 +519,14 @@ public class QuesServiceImpl implements QuesService {
      */
     public String getExtractText(Question question) {
         StringBuilder quesText = new StringBuilder();
-        if (question != null && !StringUtils.isEmpty(question.getQuesBody())) {
+        if (question == null) {
+            return quesText.toString();
+        }
+
+        if (!StringUtils.isEmpty(question.getQuesBody())) {
             quesText.append(DocxProcessUtil.getTextInHtml(question.getQuesBody()));
         }
+
         List<QuesOption> quesOptionList = question.getQuesOptions();
         if (quesOptionList != null && quesOptionList.size() > 0) {
             for (QuesOption quesOption : quesOptionList) {
@@ -530,6 +535,7 @@ public class QuesServiceImpl implements QuesService {
                 }
             }
         }
+
         return quesText.toString();
     }