Переглянути джерело

课程题库导入兼容选项

wangxy 2 тижнів тому
батько
коміт
bd73adc419

+ 43 - 21
fs-service/src/main/java/com/fs/course/service/impl/FsCourseQuestionBankServiceImpl.java

@@ -552,9 +552,8 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
      */
     private ValidationResult validateOptions(FsCourseQuestionBankImportDTO importDTO) {
         if (StringUtils.isBlank(importDTO.getQuestionA()) ||
-                StringUtils.isBlank(importDTO.getQuestionB()) ||
-                StringUtils.isBlank(importDTO.getQuestionC())) {
-            return ValidationResult.fail("选项A、B、C不能为空");
+                StringUtils.isBlank(importDTO.getQuestionB())) {
+            return ValidationResult.fail("选项A、B不能为空");
         }
         return ValidationResult.success();
     }
@@ -681,8 +680,9 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
         // 构建选项
         addOption(questionArray, importDTO.getQuestionA(), answerList.contains("A"), 0);
         addOption(questionArray, importDTO.getQuestionB(), answerList.contains("B"), 1);
-        addOption(questionArray, importDTO.getQuestionC(), answerList.contains("C"), 2);
-
+        if (StringUtils.isNotBlank(importDTO.getQuestionC())) {
+            addOption(questionArray, importDTO.getQuestionC(), answerList.contains("C"), 2);
+        }
         if (StringUtils.isNotBlank(importDTO.getQuestionD())) {
             addOption(questionArray, importDTO.getQuestionD(), answerList.contains("D"), 3);
         }
@@ -710,16 +710,29 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
         List<String> answerList = Arrays.asList(answers);
 
         Map<String, String> questionMap = new HashMap<>();
-        questionMap.put("A", importDTO.getQuestionA().trim());
-        questionMap.put("B", importDTO.getQuestionB().trim());
-        questionMap.put("C", importDTO.getQuestionC().trim());
-        questionMap.put("D", importDTO.getQuestionD().trim());
+        if (StringUtils.isNotBlank(importDTO.getQuestionA())) {
+            questionMap.put("A", importDTO.getQuestionA().trim());
+        }
+        if (StringUtils.isNotBlank(importDTO.getQuestionB())) {
+            questionMap.put("B", importDTO.getQuestionB().trim());
+        }
+        if (StringUtils.isNotBlank(importDTO.getQuestionC())) {
+            questionMap.put("C", importDTO.getQuestionC().trim());
+        }
+        if (StringUtils.isNotBlank(importDTO.getQuestionD())) {
+            questionMap.put("D", importDTO.getQuestionD().trim());
+        }
 
         List<String> selectedAnswers = answerList.stream()
                 .map(questionMap::get)
+                .filter(Objects::nonNull)
                 .collect(Collectors.toList());
 
-        if (answerList.size() == 1) {
+        if (selectedAnswers.isEmpty()) {
+            return null;
+        }
+
+        if (selectedAnswers.size() == 1) {
             return selectedAnswers.get(0);
         }
 
@@ -817,18 +830,27 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
             dto.setStatus(q.getStatus() == 1 ? "正常" : "停用");
 
             StringBuilder answersBuilder = new StringBuilder();
-            JSONArray array = JSON.parseArray(q.getQuestion());
-            array.forEach(jsonObject -> {
-                JSONObject json = (JSONObject) jsonObject;
-                int index = json.getInteger("indexId");
-                String name = json.getString("name");
-                int isAnswer = json.getInteger("isAnswer");
-                questionSetters.get(index).accept(dto, name);
-                if (isAnswer == 1) {
-                    answersBuilder.append(answerLettersMap.get(index));
+            if (StringUtils.isNotBlank(q.getQuestion())) {
+                JSONArray array = JSON.parseArray(q.getQuestion());
+                if (array != null) {
+                    array.forEach(jsonObject -> {
+                        JSONObject json = (JSONObject) jsonObject;
+                        Integer index = json.getInteger("indexId");
+                        String name = json.getString("name");
+                        Integer isAnswer = json.getInteger("isAnswer");
+
+                        if (index != null && questionSetters.containsKey(index)) {
+                            questionSetters.get(index).accept(dto, name);
+                        }
+                        if (isAnswer != null && isAnswer == 1 && index != null) {
+                            String answerLetter = answerLettersMap.get(index);
+                            if (answerLetter != null) {
+                                answersBuilder.append(answerLetter);
+                            }
+                        }
+                    });
                 }
-
-            });
+            }
             dto.setAnswer(answersBuilder .toString());
             return dto;
         }).collect(Collectors.toList());