Explorar el Código

fix-题库上传音频失败,无法显示音频

deason hace 5 años
padre
commit
aa9ccac3a7

+ 40 - 29
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -1216,40 +1216,51 @@ public class PaperServiceImpl implements PaperService {
      */
     private void appendAudioTag(String fileName, String questionId) {
         QuestionAudio questionAudio = questionAudioService.findByQuestionIdAndFileName(questionId, fileName);
-        if (questionAudio != null) {
-            String numbers[] = fileName.split("_");
-            Question question = Model.of(quesRepo.findById(questionAudio.getQuestionId()));
-            if (numbers[1].equals("1")) {
-                String quesBody = question.getQuesBody();
-                if (!quesBody.contains(fileName)) {
-                    String quesBodyNew = quesBody.substring(0, quesBody.lastIndexOf("</p>")) + "<a id=\"" + questionAudio.getId() + "\" name=\"" + fileName + "\"></a></p>";
-                    question.setQuesBody(quesBodyNew);
+        if (questionAudio == null) {
+            return;
+        }
+
+        Question question = Model.of(quesRepo.findById(questionAudio.getQuestionId()));
+
+        final String audioTag = String.format("<a id=\"%s\" name=\"%s\"></a>", questionAudio.getId(), fileName);
+        String numbers[] = fileName.split("_");
+
+        if (numbers[1].equals("1")) {
+            String quesBody = question.getQuesBody();
+            if (!quesBody.contains(audioTag)) {
+                int lastTagIndex = quesBody.lastIndexOf("</p>");
+                if (lastTagIndex > 0) {
+                    question.setQuesBody(quesBody.substring(0, lastTagIndex) + audioTag + "</p>");
+                } else {
+                    question.setQuesBody(quesBody + audioTag);
                 }
-            } else {
-                List<QuesOption> quesOptions = question.getQuesOptions();
-                List<QuesOption> quesOptionsNew = new ArrayList<QuesOption>();
-                for (QuesOption quesOption : quesOptions) {
-                    if (quesOption.getNumber().equals(CommonUtils.characterToNumber(numbers[2]).toString())) {
-                        String optionBody = quesOption.getOptionBody();
-                        if (!optionBody.contains(fileName)) {
-                            String optionBodyNew = "";
-                            if (StringUtils.isBlank(optionBody)) {
-                                optionBodyNew = "<p><a id=\"" + questionAudio.getId() + "\" name=\"" + fileName + "\"></a></p>";
-                            } else {
-                                optionBodyNew = optionBody.substring(0, optionBody.lastIndexOf("</p>"))
-                                        + "<a id=\"" + questionAudio.getId() + "\" name=\"" + fileName + "\"></a></p>";
-                            }
-                            quesOption.setOptionBody(optionBodyNew);
-                        }
+            }
+        } else {
+            for (QuesOption quesOption : question.getQuesOptions()) {
+                Integer optNumber = CommonUtils.characterToNumber(numbers[2]);
+                if (!quesOption.getNumber().equals(optNumber)) {
+                    continue;
+                }
+
+                String optionBody = quesOption.getOptionBody();
+                if (StringUtils.isBlank(optionBody)) {
+                    quesOption.setOptionBody("<p>" + audioTag + "</p>");
+                    continue;
+                }
+
+                if (!optionBody.contains(audioTag)) {
+                    int lastTagIndex = optionBody.lastIndexOf("</p>");
+                    if (lastTagIndex > 0) {
+                        quesOption.setOptionBody(optionBody.substring(0, lastTagIndex) + audioTag + "</p>");
+                    } else {
+                        quesOption.setOptionBody(optionBody + audioTag);
                     }
-                    quesOptionsNew.add(quesOption);
                 }
-                quesOptions = null;
-                question.setQuesOptions(quesOptionsNew);
             }
-            question.setHasAudio(true);
-            quesRepo.save(question);
         }
+
+        question.setHasAudio(true);
+        quesRepo.save(question);
     }
 
     @Override