Эх сурвалжийг харах

题库对接试卷导入接口改动支持套题

xiatian 1 жил өмнө
parent
commit
e480fb4773

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

@@ -385,6 +385,8 @@ public class ExportThemisPaperServiceImpl implements ExportThemisPaperService {
         while (matcher.find()) {
         	matcher.appendReplacement(buffer, "__"+matcher.group(1)+"__");
         }
+        //fixbug
+        matcher.appendTail(buffer);
         return buffer.toString();
 	}
 	private ThemisSections getNestedBody(String str, ThemisPaper computerTestPaper) {

+ 7 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/yunkai/KdPaper.java

@@ -8,6 +8,7 @@ public class KdPaper {
 	private String name;
 	private Double totalScore;
 	private Integer detailCount;
+	private Integer unitCount;
 	private List<KdDetail> details;
 	public String getCourseCode() {
 		return courseCode;
@@ -45,5 +46,11 @@ public class KdPaper {
 	public void setCourseName(String courseName) {
 		this.courseName = courseName;
 	}
+	public Integer getUnitCount() {
+		return unitCount;
+	}
+	public void setUnitCount(Integer unitCount) {
+		this.unitCount = unitCount;
+	}
 	
 }

+ 39 - 48
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/yunkai/KdQuestion.java

@@ -2,20 +2,21 @@ package cn.com.qmth.examcloud.core.questions.service.yunkai;
 
 import java.util.List;
 
+import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
+
 public class KdQuestion {
-	private Long id;
+	private String id;
 	private Integer number;
-	private YunkaiQuesStructType qst;
-	private Integer structType;
-	private Boolean objective;
+	private Double score;
+	private QuesStructType quesStructType;
 	private YunkaiDifficulty difficulty;
 	private String body;
 	private String answer;
-	private String qtype;
 	private Boolean haveAudio;
 	private List<KdQuesOption> options;
 	private List<Long> propIds;
-	private Boolean valid;
+	private List<Double> subScores;
+	private List<KdQuestion> subQuestions;
 
 	public Integer getNumber() {
 		return number;
@@ -25,22 +26,6 @@ public class KdQuestion {
 		this.number = number;
 	}
 
-	public Integer getStructType() {
-		return structType;
-	}
-
-	public void setStructType(Integer structType) {
-		this.structType = structType;
-	}
-
-	public Boolean getObjective() {
-		return objective;
-	}
-
-	public void setObjective(Boolean objective) {
-		this.objective = objective;
-	}
-
 	public String getBody() {
 		return body;
 	}
@@ -65,22 +50,14 @@ public class KdQuestion {
 		this.options = options;
 	}
 
-	public Long getId() {
+	public String getId() {
 		return id;
 	}
 
-	public void setId(Long id) {
+	public void setId(String id) {
 		this.id = id;
 	}
 
-	public String getQtype() {
-		return qtype;
-	}
-
-	public void setQtype(String qtype) {
-		this.qtype = qtype;
-	}
-
 	public Boolean getHaveAudio() {
 		return haveAudio;
 	}
@@ -89,38 +66,52 @@ public class KdQuestion {
 		this.haveAudio = haveAudio;
 	}
 
-	public Boolean getValid() {
-		return valid;
+	public List<Long> getPropIds() {
+		return propIds;
 	}
 
-	public void setValid(Boolean valid) {
-		this.valid = valid;
+	public void setPropIds(List<Long> propIds) {
+		this.propIds = propIds;
 	}
 
+	public YunkaiDifficulty getDifficulty() {
+		return difficulty;
+	}
 
-	public List<Long> getPropIds() {
-		return propIds;
+	public void setDifficulty(YunkaiDifficulty difficulty) {
+		this.difficulty = difficulty;
 	}
 
-	public void setPropIds(List<Long> propIds) {
-		this.propIds = propIds;
+	public QuesStructType getQuesStructType() {
+		return quesStructType;
 	}
 
-	public YunkaiQuesStructType getQst() {
-		return qst;
+	public void setQuesStructType(QuesStructType quesStructType) {
+		this.quesStructType = quesStructType;
 	}
 
-	public void setQst(YunkaiQuesStructType qst) {
-		this.qst = qst;
+	public List<Double> getSubScores() {
+		return subScores;
 	}
 
-	public YunkaiDifficulty getDifficulty() {
-		return difficulty;
+	public void setSubScores(List<Double> subScores) {
+		this.subScores = subScores;
 	}
 
-	public void setDifficulty(YunkaiDifficulty difficulty) {
-		this.difficulty = difficulty;
+	public List<KdQuestion> getSubQuestions() {
+		return subQuestions;
+	}
+
+	public void setSubQuestions(List<KdQuestion> subQuestions) {
+		this.subQuestions = subQuestions;
+	}
+
+	public Double getScore() {
+		return score;
 	}
 
+	public void setScore(Double score) {
+		this.score = score;
+	}
 
 }

+ 64 - 29
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/yunkai/YunkaiService.java

@@ -267,7 +267,7 @@ public class YunkaiService {
 				questionNum++;
 				Question question = initQuestion(que, p);
 				questions.add(question);
-				PaperDetailUnit paperDetailUnit = initPaperDetailUnit(paper, paperDetail, question, questionNum,
+				PaperDetailUnit paperDetailUnit = initPaperDetailUnit(que,paper, paperDetail, question, questionNum,
 						p.getUser());
 				paperDetailUnits.add(paperDetailUnit);
 			}
@@ -320,10 +320,6 @@ public class YunkaiService {
 	}
 
 	private Paper initPaper(KdPaper kpaper, YunkaiImportPaperParam p) {
-		int unitCount = 0;
-		for (KdDetail de : kpaper.getDetails()) {
-			unitCount = unitCount + de.getQuestions().size();
-		}
 		Paper paper = new Paper();
 		paper.setName(kpaper.getName());
 		paper.setTitle(kpaper.getName());
@@ -331,15 +327,15 @@ public class YunkaiService {
 		paper.setPaperStatus(PaperStatus.DRAFT);
 		paper.setOrgId(p.getRootOrgId().toString());
 		paper.setCreator(p.getUser().getDisplayName());
-		paper.setTotalScore(unitCount + 0.0);
+		paper.setTotalScore(kpaper.getTotalScore());
 		paper.setCourse(p.getCourse());
 		paper.setCourseName(p.getCourse().getName());
 		paper.setCourseNo(p.getCourse().getCode());
 		paper.setCreateTime(getCurDateTime());
-		paper.setPaperDetailCount(kpaper.getDetails().size());
+		paper.setPaperDetailCount(kpaper.getDetailCount());
 		paper.setCreationBy(p.getUser().getUserId());
 		paper.setCreationDate(new Date());
-		paper.setUnitCount(unitCount);
+		paper.setUnitCount(kpaper.getUnitCount());
 		return paper;
 	}
 
@@ -348,26 +344,27 @@ public class YunkaiService {
 	}
 
 	private PaperDetail initPaperDetail(KdDetail de, Paper paper) {
-		PaperDetail paperDetail = new PaperDetail();
-		if (de.getQuestions() != null && de.getQuestions().size() > 0) {
-			paperDetail.setPaper(paper);
-			paperDetail.setNumber(de.getNumber());
-			paperDetail.setName(de.getName());
-			paperDetail.setScore(de.getQuestions().size() + 0.0);
-			paperDetail.setUnitCount(de.getQuestions().size());
-			paperDetail.setCreator(paper.getCreator());
-			paperDetail.setCreateTime(getCurDateTime());
-			paperDetail.setCreationBy(paper.getCreationBy());
-			paperDetail.setCreationDate(new Date());
+		if (CollectionUtils.isEmpty(de.getQuestions())) {
+			throw new StatusException("没有小题信息,detail="+de.getName());
 		}
+		PaperDetail paperDetail = new PaperDetail();
+		paperDetail.setPaper(paper);
+		paperDetail.setNumber(de.getNumber());
+		paperDetail.setName(de.getName());
+		paperDetail.setScore(de.getTotalScore());
+		paperDetail.setUnitCount(de.getQuestionCount());
+		paperDetail.setCreator(paper.getCreator());
+		paperDetail.setCreateTime(getCurDateTime());
+		paperDetail.setCreationBy(paper.getCreationBy());
+		paperDetail.setCreationDate(new Date());
 		return paperDetail;
 	}
 
 	private Question initQuestion(KdQuestion que, YunkaiImportPaperParam p) {
 		Question question = new Question();
-		question.setFromId(que.getId().toString());
+		question.setFromId(que.getId());
 		question.setCreateTime(getCurDateTime());
-		question.setScore(1.0);
+		question.setScore(que.getScore());
 		question.setCourse(p.getCourse());
 		question.setOrgId(p.getRootOrgId().toString());
 		question.setHasAudio(false);
@@ -385,8 +382,38 @@ public class YunkaiService {
 		// 按试题分类初始化题干,答案,选项
 		initQuestionInfo(question, que);
 		initQuestionProp(question, que, p);
+		initSubQuestion(question, que, p);
 		return question;
 	}
+	
+	private void initSubQuestion(Question mainQuestion,KdQuestion que, YunkaiImportPaperParam p) {
+		if(CollectionUtils.isNotEmpty(que.getSubQuestions())) {
+			List<Question> sub=new ArrayList<>();
+			mainQuestion.setSubQuestions(sub);
+			int number=0;
+			for(KdQuestion subque:que.getSubQuestions()) {
+				number++;
+				Question subQuestion = new Question();
+				sub.add(subQuestion);
+				subQuestion.setNumber(number);
+				subQuestion.setScore(subque.getScore());
+				subQuestion.setCourse(p.getCourse());
+				subQuestion.setOrgId(p.getRootOrgId().toString());
+				subQuestion.setHasAudio(que.getHaveAudio());
+				if (que.getDifficulty() == null) {
+					subQuestion.setDifficulty("易");
+					subQuestion.setDifficultyDegree(0.5);
+				} else {
+					subQuestion.setDifficulty(que.getDifficulty().getDesc());
+					subQuestion.setDifficultyDegree(que.getDifficulty().getType());
+				}
+				subQuestion.setPublicity(true);
+				// 按试题分类初始化题干,答案,选项
+				initQuestionInfo(subQuestion, subque);
+				initQuestionProp(subQuestion, subque, p);
+			}
+		}
+	}
 
 	private void initQuestionProp(Question question, KdQuestion que, YunkaiImportPaperParam p) {
 		if (CollectionUtils.isEmpty(que.getPropIds())) {
@@ -411,7 +438,7 @@ public class YunkaiService {
 
 	private void initQuestionInfo(Question question, KdQuestion que) {
 		// 单选题
-		if (YunkaiQuesStructType.DANXUAN.equals(que.getQst())) {
+		if (QuesStructType.SINGLE_ANSWER_QUESTION.equals(que.getQuesStructType())) {
 			String quesBody = que.getBody();
 			question.setQuesBody(quesBody);
 			question.setQuestionType(QuesStructType.SINGLE_ANSWER_QUESTION);
@@ -438,8 +465,7 @@ public class YunkaiService {
 				char c1 = (char) (answerNumber + 64);
 				question.setQuesAnswer(String.valueOf(c1));
 			}
-		} else if (YunkaiQuesStructType.DUOXUAN.equals(que.getQst())
-				|| YunkaiQuesStructType.BUDINGXIANG.equals(que.getQst())) {
+		} else if (QuesStructType.MULTIPLE_ANSWER_QUESTION.equals(que.getQuesStructType())) {
 			String quesBody = que.getBody();
 			question.setQuesBody(quesBody);
 			question.setQuestionType(QuesStructType.MULTIPLE_ANSWER_QUESTION);
@@ -474,24 +500,32 @@ public class YunkaiService {
 				}
 				question.setQuesAnswer(answers);
 			}
-		} else if (YunkaiQuesStructType.PANDUAN.equals(que.getQst())) {
+		} else if (QuesStructType.BOOL_ANSWER_QUESTION.equals(que.getQuesStructType())) {
 			String quesBody = que.getBody();
 			question.setQuesBody(quesBody);
 			question.setQuestionType(QuesStructType.BOOL_ANSWER_QUESTION);
 			String answer = que.getAnswer();
 			question.setQuesAnswer(answer);
-		} else if (YunkaiQuesStructType.TIANKONGTI.equals(que.getQst())) {
+		} else if (QuesStructType.FILL_BLANK_QUESTION.equals(que.getQuesStructType())) {
 			String quesBody = que.getBody();
 			question.setQuesBody(quesBody);
 			question.setQuestionType(QuesStructType.FILL_BLANK_QUESTION);
 			String answer = que.getAnswer();
 			question.setQuesAnswer(answer);
-		} else {// 全是问答题
+		} else if(QuesStructType.TEXT_ANSWER_QUESTION.equals(que.getQuesStructType())) {
 			String quesBody = que.getBody();
 			question.setQuesBody(quesBody);
 			question.setQuestionType(QuesStructType.TEXT_ANSWER_QUESTION);
 			String answer = que.getAnswer();
 			question.setQuesAnswer(answer);
+		}	else if(QuesStructType.NESTED_ANSWER_QUESTION.equals(que.getQuesStructType())) {
+			String quesBody = que.getBody();
+			question.setQuesBody(quesBody);
+			question.setQuestionType(QuesStructType.NESTED_ANSWER_QUESTION);
+			String answer = que.getAnswer();
+			question.setQuesAnswer(answer);
+		}else {
+			throw new StatusException("题型错误");
 		}
 	}
 
@@ -504,12 +538,13 @@ public class YunkaiService {
 		return quesOption;
 	}
 
-	private PaperDetailUnit initPaperDetailUnit(Paper paper, PaperDetail paperDetail, Question question,
+	private PaperDetailUnit initPaperDetailUnit(KdQuestion que,Paper paper, PaperDetail paperDetail, Question question,
 			int questionNum, User user) {
 		PaperDetailUnit paperDetailUnit = new PaperDetailUnit();
+		paperDetailUnit.setSubScoreList(que.getSubScores()); 
 		paperDetailUnit.setPaper(paper);
 		paperDetailUnit.setNumber(questionNum);
-		paperDetailUnit.setScore(1.0);
+		paperDetailUnit.setScore(que.getScore());
 		paperDetailUnit.setPaperDetail(paperDetail);
 		paperDetailUnit.setQuestionType(question.getQuestionType());
 		paperDetailUnit.setCreator(user.getDisplayName());