|
@@ -31,6 +31,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.jsoup.Jsoup;
|
|
|
import org.jsoup.nodes.Document;
|
|
|
import org.jsoup.nodes.Element;
|
|
|
+import org.jsoup.safety.Whitelist;
|
|
|
import org.jsoup.select.Elements;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
@@ -258,18 +259,27 @@ public class ExamQuestionOuterServiceProvider extends ControllerSupport implemen
|
|
|
AnswerType answerType,
|
|
|
QuestionType questionType, Long examId) {
|
|
|
String transformedAnswerType = getTransformedAnswerType(answerType, questionType, examId);
|
|
|
- String transformedStudentAnswer = getTransformedStudentAnswer(studentAnswer);
|
|
|
|
|
|
List<OuterSectionBean> sectionBeanList = new ArrayList<>();
|
|
|
List<OuterBlockBean> blockBeanList = new ArrayList<>();
|
|
|
|
|
|
//校验答案格式,校验成功才追加至集合,否则不追加
|
|
|
- if (validateAnswer(transformedAnswerType, transformedStudentAnswer)) {
|
|
|
- //图片文件特殊处理
|
|
|
- if (!StringUtils.isNullOrEmpty(transformedStudentAnswer) && "image".equals(transformedAnswerType)) {
|
|
|
- if (transformedStudentAnswer.indexOf("|") > -1) {
|
|
|
+ //图片文件特殊处理
|
|
|
+ if ("image".equals(transformedAnswerType)) {
|
|
|
+ if (validateImgAnswer(studentAnswer)) {
|
|
|
+ //图片文本部分
|
|
|
+ String txtStr = getImgTxt(studentAnswer);
|
|
|
+ if (!StringUtils.isNullOrEmpty(txtStr)) {
|
|
|
+ OuterBlockBean blockBean = new OuterBlockBean();
|
|
|
+ blockBean.setType("text");
|
|
|
+ blockBean.setValue(txtStr);
|
|
|
+ blockBeanList.add(blockBean);
|
|
|
+ }
|
|
|
|
|
|
- String[] imgAnswers = transformedStudentAnswer.split("\\|");
|
|
|
+ //图片部分
|
|
|
+ String imgSrc = getImgSrc(studentAnswer);
|
|
|
+ if (imgSrc.indexOf("|") > -1) {
|
|
|
+ String[] imgAnswers = imgSrc.split("\\|");
|
|
|
|
|
|
for (int i = 0; i < imgAnswers.length; i++) {
|
|
|
OuterBlockBean blockBean = new OuterBlockBean();
|
|
@@ -289,12 +299,20 @@ public class ExamQuestionOuterServiceProvider extends ControllerSupport implemen
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- } else {
|
|
|
+ }
|
|
|
+ } else if ("audio".equals(transformedAnswerType)){
|
|
|
+ if (validateAudioAnswer(studentAnswer)) {
|
|
|
OuterBlockBean blockBean = new OuterBlockBean();
|
|
|
blockBean.setType(transformedAnswerType);
|
|
|
- blockBean.setValue(getSimpleTransformedAnswer(transformedAnswerType, transformedStudentAnswer));
|
|
|
+ blockBean.setValue(getSimpleTransformedAnswer(transformedAnswerType, studentAnswer));
|
|
|
blockBeanList.add(blockBean);
|
|
|
}
|
|
|
+
|
|
|
+ }else {
|
|
|
+ OuterBlockBean blockBean = new OuterBlockBean();
|
|
|
+ blockBean.setType(transformedAnswerType);
|
|
|
+ blockBean.setValue(getSimpleTransformedAnswer(transformedAnswerType, studentAnswer));
|
|
|
+ blockBeanList.add(blockBean);
|
|
|
}
|
|
|
|
|
|
OuterSectionBean sectionBean = new OuterSectionBean();
|
|
@@ -345,31 +363,43 @@ public class ExamQuestionOuterServiceProvider extends ControllerSupport implemen
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 转化过的作答
|
|
|
+ * 获取图片作答的文本部分
|
|
|
+ *
|
|
|
+ * @param studentAnswer
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getImgTxt(String studentAnswer) {
|
|
|
+ return Jsoup.clean(studentAnswer, Whitelist.basic());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取图片作答图片路径
|
|
|
*
|
|
|
* @param studentAnswer
|
|
|
* @return
|
|
|
*/
|
|
|
- private String getTransformedStudentAnswer(String studentAnswer) {
|
|
|
+ private String getImgSrc(String studentAnswer) {
|
|
|
if (StringUtils.isNullOrEmpty(studentAnswer)) {
|
|
|
return studentAnswer;
|
|
|
}
|
|
|
|
|
|
- //图片题特殊处理(因为图片作答题中有html标签)
|
|
|
+ //图片题特殊处理(因为图片作答题中有html标签,只需要取url即可)
|
|
|
Document doc = Jsoup.parse(studentAnswer);
|
|
|
- Elements imgElements = doc.select("img[src]");
|
|
|
- String imgStudentAnswer = "";
|
|
|
+ Elements imgElements = doc.select("imgSrc[src]");
|
|
|
+
|
|
|
+ String imgSrc = "";
|
|
|
+
|
|
|
for (Element el : imgElements) {
|
|
|
String src = el.attr("src");
|
|
|
if (!StringUtils.isNullOrEmpty(src)) {
|
|
|
- imgStudentAnswer += src + "|";
|
|
|
+ imgSrc += src + "|";
|
|
|
}
|
|
|
}
|
|
|
- if (!StringUtils.isNullOrEmpty(imgStudentAnswer)) {
|
|
|
- return imgStudentAnswer.substring(0, imgStudentAnswer.length() - 1);
|
|
|
+ if (!StringUtils.isNullOrEmpty(imgSrc)) {
|
|
|
+ return imgSrc.substring(0, imgSrc.length() - 1);
|
|
|
}
|
|
|
|
|
|
- return studentAnswer;
|
|
|
+ return imgSrc;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -506,29 +536,32 @@ public class ExamQuestionOuterServiceProvider extends ControllerSupport implemen
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 校验答案格式是否正确
|
|
|
+ * 校验图片答案格式是否正确
|
|
|
*
|
|
|
- * @param realAnswerType
|
|
|
* @param studentAnswer
|
|
|
* @return
|
|
|
*/
|
|
|
- private boolean validateAnswer(String realAnswerType, String studentAnswer) {
|
|
|
+ private boolean validateImgAnswer(String studentAnswer) {
|
|
|
if (StringUtils.isNullOrEmpty(studentAnswer)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- String regExp;
|
|
|
- switch (realAnswerType) {
|
|
|
- case "image":
|
|
|
- //图片必须包含.png|jpg|gif|jpeg
|
|
|
- regExp = "^(ftp|https?)\\:\\/\\/([\\w\\_\\-]+)\\.([\\w\\-]+[\\.]?)*[\\w]+\\.[a-zA-Z]{2,10}(.*)\\.(png|jpg|gif|jpeg).*$";
|
|
|
- return studentAnswer.matches(regExp);
|
|
|
- case "audio":
|
|
|
- //音频必须包含.mp3
|
|
|
- regExp = "^(ftp|https?)\\:\\/\\/([\\w\\_\\-]+)\\.([\\w\\-]+[\\.]?)*[\\w]+\\.[a-zA-Z]{2,10}(.*)\\.(mp3)";
|
|
|
- return studentAnswer.matches(regExp);
|
|
|
+ String regExp = "(\\S)*(ftp|https?)\\:\\/\\/([\\w\\_\\-]+)\\.([\\w\\-]+[\\.]?)*[\\w]+\\.[a-zA-Z]{2,10}(.*)\\.(png|jpg|gif|jpeg).*$";
|
|
|
+ return studentAnswer.matches(regExp);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验音频答案格式是否正确
|
|
|
+ *
|
|
|
+ * @param studentAnswer
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean validateAudioAnswer(String studentAnswer) {
|
|
|
+ if (StringUtils.isNullOrEmpty(studentAnswer)) {
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
- return true;
|
|
|
+ String regExp = "^(ftp|https?)\\:\\/\\/([\\w\\_\\-]+)\\.([\\w\\-]+[\\.]?)*[\\w]+\\.[a-zA-Z]{2,10}(.*)\\.(mp3)";
|
|
|
+ return studentAnswer.matches(regExp);
|
|
|
}
|
|
|
}
|