|
@@ -1,6 +1,7 @@
|
|
|
package com.qmth.cqb.paper.service.export;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
@@ -8,6 +9,19 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import cn.com.qmth.examcloud.common.dto.core.enums.CourseLevel;
|
|
|
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
|
|
|
+
|
|
|
+import com.qmth.cqb.paper.dto.PaperDetailExp;
|
|
|
+import com.qmth.cqb.paper.dto.PaperDetailUnitExp;
|
|
|
+import com.qmth.cqb.paper.dto.PaperExp;
|
|
|
+import com.qmth.cqb.paper.model.Paper;
|
|
|
+import com.qmth.cqb.paper.model.PaperDetail;
|
|
|
+import com.qmth.cqb.paper.model.PaperDetailUnit;
|
|
|
+import com.qmth.cqb.question.model.Question;
|
|
|
+import com.qmth.cqb.utils.BeanCopierUtil;
|
|
|
+import com.qmth.cqb.utils.CommonUtils;
|
|
|
+import com.qmth.cqb.utils.exception.PaperException;
|
|
|
import com.qmth.cqb.utils.word.DocxProcessUtil;
|
|
|
|
|
|
@Service("dzkdExportPaperService")
|
|
@@ -33,5 +47,89 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
|
|
|
DocxProcessUtil.processDownload(fileList, response);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化导出试卷DTO
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected Map<String,Object> initExportPaper(String paperId) throws Exception {
|
|
|
+ // 创建返回Map
|
|
|
+ Map<String,Object> returnMap = new HashMap<String,Object>();
|
|
|
+ // 获取paper
|
|
|
+ Paper paper = paperRepo.findOne(paperId);
|
|
|
+ paperService.formatPaper(paper, null);
|
|
|
+ if (paper == null) {
|
|
|
+ throw new PaperException("该试卷不存在");
|
|
|
+ }
|
|
|
+ // 创建paperDto
|
|
|
+ PaperExp paperExp = BeanCopierUtil.copyProperties(paper, PaperExp.class);
|
|
|
+ paperExp.setCourseLevel(paper.getLevel()==null?CourseLevel.ALL.name():paper.getLevel().name());
|
|
|
+ List<PaperDetailExp> objectiveDetails = new ArrayList<PaperDetailExp>();// 客观题
|
|
|
+ List<PaperDetailExp> subjectiveDetails = new ArrayList<PaperDetailExp>();// 主观题
|
|
|
+ double objectiveScore = 0;
|
|
|
+ double subjectiveScore = 0;
|
|
|
+ paperExp.setTitle(CommonUtils.PAPER_TITLE);
|
|
|
+ paperExp.setSubTitle(CommonUtils.PAPER_SUB_TITLE);
|
|
|
+ // 获取大题
|
|
|
+ List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
|
|
|
+ int objectNumber = 1;// 客观题大题序号
|
|
|
+ int objetcUnitSum = 0;
|
|
|
+ for (int i = 0; i < paperDetails.size(); i++) {
|
|
|
+ PaperDetailExp paperDetailExp = BeanCopierUtil.copyProperties(paperDetails.get(i), PaperDetailExp.class);
|
|
|
+ List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
|
|
|
+ // 把大题分类 :客观题和主观题
|
|
|
+ List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,PaperDetailUnitExp.class);
|
|
|
+ // 选择题,套题下选择题 选项顺序重新排列
|
|
|
+ paperService.reorderChoicequestionOption(paperDetailUnitExps);
|
|
|
+ paperDetailExp.setPaperDetailUnits(paperDetailUnitExps);
|
|
|
+ boolean hasTextAnswer = false;// 判断主观题
|
|
|
+ if (paperDetailUnits.get(0).getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
|
|
|
+ for (Question ques : paperDetailUnits.get(0).getQuestion().getSubQuestions()) {
|
|
|
+ if (ques.getQuestionType() == QuesStructType.TEXT_ANSWER_QUESTION) {
|
|
|
+ hasTextAnswer = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (paperDetailUnits.get(0).getQuestionType() == QuesStructType.TEXT_ANSWER_QUESTION) {
|
|
|
+ hasTextAnswer = true;
|
|
|
+ }
|
|
|
+ if (hasTextAnswer) {
|
|
|
+ subjectiveDetails.add(paperDetailExp);
|
|
|
+ subjectiveScore += paperDetailExp.getScore();
|
|
|
+ } else {
|
|
|
+ objectiveDetails.add(paperDetailExp);
|
|
|
+ paperDetailExp.setNumber(objectNumber);
|
|
|
+ paperDetailExp.setCnNum(CommonUtils.toCHNum(objectNumber));
|
|
|
+ objectiveScore += paperDetailExp.getScore();
|
|
|
+ objetcUnitSum += paperDetailExp.getUnitCount();
|
|
|
+ objectNumber++;
|
|
|
+ }
|
|
|
+ setExpTitle(paperDetailExp);
|
|
|
+ }
|
|
|
+
|
|
|
+ paperExp.setObjectiveDetails(objectiveDetails);
|
|
|
+ paperExp.setSubjectiveDetails(subjectiveDetails);
|
|
|
+ paperExp.setObjectiveScore(objectiveScore);
|
|
|
+ paperExp.setSubjectiveScore(subjectiveScore);
|
|
|
+ if (objectiveDetails.size() > 0) {
|
|
|
+ setUnitExpNumber(objectiveDetails, 0);
|
|
|
+ setScore(objectiveDetails);
|
|
|
+ }
|
|
|
+ if (subjectiveDetails.size() > 0) {
|
|
|
+ for (PaperDetailExp subDetail : subjectiveDetails) {
|
|
|
+ subDetail.setNumber(objectNumber);
|
|
|
+ subDetail.setCnNum(CommonUtils.toCHNum(objectNumber));
|
|
|
+ objectNumber++;
|
|
|
+ }
|
|
|
+ setUnitExpNumber(subjectiveDetails, objetcUnitSum);
|
|
|
+ setScore(subjectiveDetails);
|
|
|
+ }
|
|
|
+ returnMap.put("paper", paperExp);
|
|
|
+ returnMap.put("fileName", paperExp.getName());
|
|
|
+
|
|
|
+ return returnMap;
|
|
|
+ }
|
|
|
|
|
|
}
|