|
@@ -102,10 +102,8 @@ public class ClonePaperService {
|
|
|
//保存新试卷的所有试题信息
|
|
|
this.savePaperDetails(detailMaps, newPaper, user);
|
|
|
} catch (Exception e) {
|
|
|
- if (newPaper.getId() != null) {
|
|
|
- //如果试题保存失败,则还原数据
|
|
|
- paperService.deletePapers(Lists.newArrayList(newPaper.getId()));
|
|
|
- }
|
|
|
+ //如果试题保存失败,则还原数据
|
|
|
+ paperService.deletePapers(Lists.newArrayList(newPaper.getId()));
|
|
|
throw new PaperException("克隆试卷失败!");
|
|
|
}
|
|
|
}
|
|
@@ -124,7 +122,8 @@ public class ClonePaperService {
|
|
|
}
|
|
|
//批量保存大题
|
|
|
paperDetailRepo.save(detailMaps.keySet());
|
|
|
-
|
|
|
+ List<PaperDetailUnit> newDetailUnits = new ArrayList<>();
|
|
|
+ List<Question> newQuestions = new ArrayList<>();
|
|
|
for (Map.Entry<PaperDetail, List<PaperDetailUnit>> entry : detailMaps.entrySet()) {
|
|
|
PaperDetail detail = entry.getKey();
|
|
|
log.info("new paperDetailId:" + detail.getId());
|
|
@@ -132,28 +131,35 @@ public class ClonePaperService {
|
|
|
for (PaperDetailUnit detailUnit : detailUnits) {
|
|
|
detailUnit.setPaper(newPaper);
|
|
|
detailUnit.setPaperDetail(detail);
|
|
|
- Question question = detailUnit.getQuestion();
|
|
|
- this.updateQuestionPkgPath(question);
|
|
|
- //保存试题
|
|
|
- quesRepo.save(question);
|
|
|
- log.info("new questionId:" + question.getId());
|
|
|
+ newDetailUnits.add(detailUnit);
|
|
|
+ newQuestions.add(detailUnit.getQuestion());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //更新试题的PkgPath
|
|
|
+ for (Question question : newQuestions) {
|
|
|
+ this.updateQuestionPkgPath(question);
|
|
|
+ }
|
|
|
+ //批量新增试题
|
|
|
+ quesRepo.save(newQuestions);
|
|
|
|
|
|
- //保存试题的音频信息
|
|
|
- List<QuestionAudio> audioList = question.getAudioList();
|
|
|
- if (audioList != null && audioList.size() > 0) {
|
|
|
- for (QuestionAudio audio : audioList) {
|
|
|
- audio.setQuestionId(question.getId());
|
|
|
- questionAudioService.saveQuestionAudio(audio, user);
|
|
|
- log.info("new questionAudioId:" + audio.getId());
|
|
|
- }
|
|
|
- this.updateQuestionBody(question, audioList);
|
|
|
+ for (Question question : newQuestions) {
|
|
|
+ List<QuestionAudio> audioList = question.getAudioList();
|
|
|
+ if (audioList != null && audioList.size() > 0) {
|
|
|
+ for (QuestionAudio audio : audioList) {
|
|
|
+ audio.setQuestionId(question.getId());
|
|
|
+ questionAudioService.saveQuestionAudio(audio, user);
|
|
|
+ log.info("new questionAudioId:" + audio.getId());
|
|
|
}
|
|
|
+ this.updateQuestionBody(question, audioList);
|
|
|
+ //如果试题存在音频,则更新试题的音频信息
|
|
|
+ quesRepo.save(question);
|
|
|
}
|
|
|
- //批量保存小题
|
|
|
- paperDetailUnitRepo.save(detailUnits);
|
|
|
- //复制来源大题的名称
|
|
|
- quesTypeNameService.saveCloneQuesTypeName(detailUnits, newPaper.getCourseNo());
|
|
|
}
|
|
|
+
|
|
|
+ //批量保存试题单元
|
|
|
+ paperDetailUnitRepo.save(newDetailUnits);
|
|
|
+ //复制来源大题的名称
|
|
|
+ quesTypeNameService.saveCloneQuesTypeName(newDetailUnits, newPaper.getCourseNo());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -252,21 +258,29 @@ public class ClonePaperService {
|
|
|
* 复制试卷的所有试题信息
|
|
|
*/
|
|
|
private Map<PaperDetail, List<PaperDetailUnit>> copyPaperDetails(Paper oldPaper, User user, Course course) throws PaperException {
|
|
|
- List<PaperDetail> oldPaperDetails = paperDetailRepo.findByPaperOrderByNumber(oldPaper);
|
|
|
- if (oldPaperDetails == null || oldPaperDetails.size() == 0) {
|
|
|
- throw new PaperException("原试卷的大题不存在!");
|
|
|
+ //批量查询原试卷的所有试题
|
|
|
+ List<PaperDetailUnit> allDetailUnits = paperDetailUnitRepo.findByPaperOrderByNumber(oldPaper);
|
|
|
+ if (allDetailUnits == null || allDetailUnits.size() == 0) {
|
|
|
+ throw new PaperException("原试卷的试题不存在!");
|
|
|
}
|
|
|
-
|
|
|
+ //按大题有序封装对应的试题列表
|
|
|
+ Map<PaperDetail, List<PaperDetailUnit>> oldDetailMaps = new TreeMap<>();
|
|
|
+ for (PaperDetailUnit detailUnit : allDetailUnits) {
|
|
|
+ PaperDetail detail = detailUnit.getPaperDetail();
|
|
|
+ if (!oldDetailMaps.containsKey(detail)) {
|
|
|
+ oldDetailMaps.put(detail, new ArrayList<>());
|
|
|
+ }
|
|
|
+ List<PaperDetailUnit> detailUnits = oldDetailMaps.get(detail);
|
|
|
+ detailUnits.add(detailUnit);
|
|
|
+ }
|
|
|
+ //开始复制
|
|
|
Map<PaperDetail, List<PaperDetailUnit>> detailMaps = new TreeMap<>();
|
|
|
- for (PaperDetail oldPaperDetail : oldPaperDetails) {
|
|
|
+ for (Map.Entry<PaperDetail, List<PaperDetailUnit>> entry : oldDetailMaps.entrySet()) {
|
|
|
//复制大题信息
|
|
|
+ PaperDetail oldPaperDetail = entry.getKey();
|
|
|
PaperDetail paperDetail = this.copyPaperDetail(oldPaperDetail, user.getDisplayName());
|
|
|
- List<PaperDetailUnit> oldDetailUnits = paperDetailUnitRepo.findByPaperDetailOrderByNumber(oldPaperDetail);
|
|
|
- if (oldDetailUnits == null || oldDetailUnits.size() == 0) {
|
|
|
- throw new PaperException("原试卷的大题下的试题不存在!");
|
|
|
- }
|
|
|
-
|
|
|
- //复制大题下的所有小题
|
|
|
+ //复制大题下的所有试题单元
|
|
|
+ List<PaperDetailUnit> oldDetailUnits = entry.getValue();
|
|
|
List<PaperDetailUnit> detailUnits = new ArrayList<>();
|
|
|
for (PaperDetailUnit oldDetailUnit : oldDetailUnits) {
|
|
|
PaperDetailUnit detailUnit = this.copyPaperDetailUnit(oldDetailUnit, course, user.getDisplayName());
|
|
@@ -317,7 +331,7 @@ public class ClonePaperService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 复制小题信息
|
|
|
+ * 复制试题单元信息
|
|
|
*/
|
|
|
private PaperDetailUnit copyPaperDetailUnit(PaperDetailUnit oldDetailUnit, Course course, String createUser) throws PaperException {
|
|
|
Question oldQuestion = oldDetailUnit.getQuestion();
|