Parcourir la source

提交陕西师范大学试卷导出功能代码

chenken il y a 8 ans
Parent
commit
9c99a8682a

+ 8 - 201
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/DzkdExportPaperService.java

@@ -1,10 +1,6 @@
 package com.qmth.cqb.paper.service.export;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -13,147 +9,27 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.qmth.cqb.paper.dao.PaperDetailRepo;
-import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
-import com.qmth.cqb.paper.dao.PaperRepo;
-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.paper.service.PaperService;
-import com.qmth.cqb.question.dao.QuesRepo;
-import com.qmth.cqb.question.model.QuesOption;
-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;
 
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
-
-@Service("zkdExportPaperService")
-public class DzkdExportPaperService extends ExportPaperAbstractService {
-	
-    @Autowired
-    PaperRepo paperRepo;
-	
-    @Autowired
-    PaperService paperService;
-
-    @Autowired
-    PaperDetailRepo paperDetailRepo;
-
-    @Autowired
-    PaperDetailUnitRepo paperDetailUnitRepo;
-
-    @Autowired
-    QuesRepo quesRepo;
+@Service("dzkdExportPaperService")
+public class DzkdExportPaperService extends ExportPaperAbstractService{
 	
     @Autowired
     ExportPaperService exportPaperService;
-	
-    /**
-     * 初始化导出试卷DTO
-     * @param id
-     * @return
-     */
-    public Map initExportPaper(String id) throws Exception{
-        //创建返回Map
-        Map returnMap = new HashMap();
-        //获取paper
-        Paper paper = paperRepo.findOne(id);
-
-        paperService.formatPaper(paper,null);
-
-        if(paper == null){
-            throw new PaperException("该试卷不存在");
-        }
-
-        //创建paperDto
-        PaperExp paperExp = BeanCopierUtil.copyProperties(paper,PaperExp.class);
-        paperExp.setCourseLevel(paper.getLevel().getName());
-        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);
-        }
-        if(subjectiveDetails.size()>0){
-        	for(PaperDetailExp subDetail:subjectiveDetails){
-        		subDetail.setNumber(objectNumber);
-        		subDetail.setCnNum(CommonUtils.toCHNum(objectNumber));
-        		objectNumber++;
-        	}
-        	setUnitExpNumber(subjectiveDetails,objetcUnitSum);
-        }
-        returnMap.put("paper", paperExp);
-        returnMap.put("fileName", paperExp.getName());
-
-        return returnMap;
-    }
-    
     
     /**
      * 下载试卷
      * @param id
      */
-    public void dzkdDownloadPaper(String id, HttpServletResponse response) throws Exception {
-        Map dataMap = initExportPaper(id);
+    @Override
+    public void downloadPaper(String id, HttpServletResponse response) throws Exception {
+        Map<String,Object> dataMap = initExportPaper(id);
         List<String> fileList = new ArrayList<String>();
         if (dataMap.get("fileName") != null) {
             String paperfileName = (String) dataMap.get("fileName");
             String answerFileName = paperfileName+"__答案";
-            DocxProcessUtil.exportPaper(dataMap, paperfileName,"dzkd_paper_template.ftl");
-            DocxProcessUtil.exportAnswer(dataMap,answerFileName,"dzkd_answer_template.ftl");
+            DocxProcessUtil.exportPaper(dataMap, paperfileName,DZKD_TEMPLATE_PAPER);
+            DocxProcessUtil.exportAnswer(dataMap,answerFileName,DZKD_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName, exportPaperService.getPkgList(id));
             DocxProcessUtil.processImage(answerFileName, exportPaperService.getPkgList(id));
             fileList.add(paperfileName);
@@ -161,74 +37,5 @@ public class DzkdExportPaperService extends ExportPaperAbstractService {
             DocxProcessUtil.processDownload(fileList, response);
         }
     }
-    
-    private void setExpTitle(PaperDetailExp paperDetailExp){
-    	String title =""; 
-    	String totalScore = BigDecimal.valueOf(paperDetailExp.getScore()).stripTrailingZeros().toPlainString();
-    	String unitScore = BigDecimal.valueOf(paperDetailExp.getPaperDetailUnits().get(0).getScore()).stripTrailingZeros().toPlainString();
-    	QuesStructType type = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
-    	if(type == QuesStructType.SINGLE_ANSWER_QUESTION){
-    		paperDetailExp.setName("单项选择题");
-    		title = "(本大题共"+paperDetailExp.getUnitCount()+"小题,每小题"+unitScore+"分共"+totalScore+"分)。"
-    				+ "在每小题列出的四个备选中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
-    	} else if (type == QuesStructType.BOOL_ANSWER_QUESTION){
-    		paperDetailExp.setName("判断题");
-    		title = "(本大题共"+paperDetailExp.getUnitCount()+"小题,每小题"+unitScore+"分共"+totalScore+"分。正确的填涂A、错误填涂B。错涂、多涂或未涂均无分)";
-    	} else if(type == QuesStructType.FILL_BLANK_QUESTION){
-    		paperDetailExp.setName("填空题");
-    		int blankNum = 0;
-    		for(PaperDetailUnitExp unit:paperDetailExp.getPaperDetailUnits()){
-    			String tempStr = unit.getQuestion().getQuesBody().replaceAll("###", "");
-    			int lenTimes = (unit.getQuestion().getQuesBody().length()-tempStr.length())/"###".length();//出现的次数
-    			blankNum +=lenTimes;			
-    		}
-    		title = "(本大题共"+blankNum+"个空格,将每空答在答题卡 “1—"+blankNum+"”相应的序号上。每空"+unitScore+"分共"+totalScore+"分)";
-    	} else {
-    		title = "(本大题共"+paperDetailExp.getUnitCount()+"小题,每小题"+unitScore+"分共"+totalScore+"分)";
-    	}
-    	paperDetailExp.setTitle(title);
-    }
-    
-    public void setUnitExpNumber(List<PaperDetailExp> paperDetails,int startIndxt) throws Exception {
-        int subNum = startIndxt;
-	    for(PaperDetailExp paperDetail: paperDetails){
-	        for(PaperDetailUnitExp paperDetailUnit:paperDetail.getPaperDetailUnits()){
-	            List<QuesOption> optionList = paperDetailUnit.getQuestion().getQuesOptions();
-	            if(optionList != null && optionList.size() > 0){
-	                int index = 0;
-	                for(QuesOption quesOption:optionList){
-	                    quesOption.setOptionBodyWord(exportPaperService.setOptionNum(quesOption.getOptionBodyWord(),exportPaperService.getOptionNum(index)));
-	                    index++;
-	                }
-	            }
-	            List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
-	            Question question = paperDetailUnit.getQuestion();
-	            //套题序号
-	            if(subQuesList != null && subQuesList.size() > 0){
-	
-	                question.setQuesBodyWord(exportPaperService.replaceQuesBlank(question.getQuesBodyWord(),subNum + 1));
-	
-	                for(Question subQues:subQuesList){
-	                    int curSubNum = ++subNum;
-	                    subQues.setQuesBodyWord(exportPaperService.setSubQuesNum(subQues.getQuesBodyWord(),curSubNum));
-	                    subQues.setQuesAnswerWord(exportPaperService.setSubQuesNum(subQues.getQuesAnswerWord(),curSubNum));
-	                    subQues.setQuesBodyWord(exportPaperService.replaceQuesBlank(subQues.getQuesBodyWord(),curSubNum));
-	                    List<QuesOption> subOptionList = subQues.getQuesOptions();
-	                    if(subOptionList != null && subOptionList.size() > 0){
-	                        int sub_index = 0;
-	                        for(QuesOption quesOption:subOptionList){
-	                            quesOption.setOptionBodyWord(exportPaperService.setOptionNum(quesOption.getOptionBodyWord(),exportPaperService.getOptionNum(sub_index)));
-	                            sub_index++;
-	                        }
-	                    }
-	                }
-	            }else{
-	                int curSubNum = ++subNum;
-	                question.setQuesBodyWord(exportPaperService.setSubQuesNum(question.getQuesBodyWord(),curSubNum));
-	                question.setQuesAnswerWord(exportPaperService.setSubQuesNum(question.getQuesAnswerWord(),curSubNum));
-	                question.setQuesBodyWord(exportPaperService.replaceQuesBlank(question.getQuesBodyWord(),curSubNum));
-	            }
-	        }
-	     }
-	 }
+
 }

+ 274 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java

@@ -1,12 +1,282 @@
 package com.qmth.cqb.paper.service.export;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import javax.servlet.http.HttpServletResponse;
 
-import org.springframework.stereotype.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+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.dao.PaperDetailRepo;
+import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
+import com.qmth.cqb.paper.dao.PaperRepo;
+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.paper.service.PaperService;
+import com.qmth.cqb.question.dao.QuesRepo;
+import com.qmth.cqb.question.model.QuesOption;
+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;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
 
-@Service("exportPaperService")
 public abstract class ExportPaperAbstractService {
 	
-	 public abstract void dzkdDownloadPaper(String id, HttpServletResponse response) throws Exception;
-	 
+	private static final Logger logger = LoggerFactory.getLogger(ExportPaperAbstractService.class);
+
+	@Autowired
+	PaperRepo paperRepo;
+
+	@Autowired
+	PaperService paperService;
+
+	@Autowired
+	PaperDetailRepo paperDetailRepo;
+
+	@Autowired
+	PaperDetailUnitRepo paperDetailUnitRepo;
+
+	@Autowired
+	QuesRepo quesRepo;
+
+	@Autowired
+	ExportPaperService exportPaperService;
+
+	public static Configuration CONFIGURATION;
+
+	public static final String ENCODING = "UTF-8";
+
+	protected static Template SXSF_TEMPLATE_PAPER;
+
+	protected static Template SXSF_TEMPLATE_ANSWER;
+
+	protected static Template DZKD_TEMPLATE_PAPER;
+
+	protected static Template DZKD_TEMPLATE_ANSWER;
+	
+	protected static Template TEMPLATE_NORMAL;
+
+	static {
+		try {
+			logger.info("*********************试卷导出设置初始化start**************************");
+			CONFIGURATION = new Configuration(Configuration.VERSION_2_3_25);
+			// 设置编码
+			CONFIGURATION.setDefaultEncoding(ENCODING);
+			// 设置ftl模板路径
+			CONFIGURATION.setClassForTemplateLoading(DocxProcessUtil.class, "/");
+			
+			//陕西师范模板
+			SXSF_TEMPLATE_PAPER = CONFIGURATION.getTemplate("sxsf_paper_template.ftl", ENCODING);
+			SXSF_TEMPLATE_ANSWER = CONFIGURATION.getTemplate("sxsf_answer_template.ftl", ENCODING);
+			//电子科大模板
+			DZKD_TEMPLATE_PAPER = CONFIGURATION.getTemplate("dzkd_paper_template.ftl", ENCODING);
+			DZKD_TEMPLATE_ANSWER = CONFIGURATION.getTemplate("dzkd_answer_template.ftl", ENCODING);
+			
+			TEMPLATE_NORMAL = CONFIGURATION.getTemplate("paper_template.ftl", ENCODING);
+			logger.info("*********************试卷导出设置初始化end**************************");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * 下载试卷
+	 * @param id
+	 * @param response
+	 * @throws Exception
+	 */
+	public abstract void downloadPaper(String id, HttpServletResponse response)throws Exception;
+	
+	/**
+	 * 初始化导出试卷DTO
+	 * 
+	 * @param id
+	 * @return
+	 */
+	protected Map<String,Object> initExportPaper(String id) throws Exception {
+		// 创建返回Map
+		Map<String,Object> returnMap = new HashMap<String,Object>();
+		// 获取paper
+		Paper paper = paperRepo.findOne(id);
+		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;
+			} else if (paperDetailUnits.get(0).getQuestionType() == QuesStructType.FILL_BLANK_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);
+		}
+		if (subjectiveDetails.size() > 0) {
+			for (PaperDetailExp subDetail : subjectiveDetails) {
+				subDetail.setNumber(objectNumber);
+				subDetail.setCnNum(CommonUtils.toCHNum(objectNumber));
+				objectNumber++;
+			}
+			setUnitExpNumber(subjectiveDetails, objetcUnitSum);
+		}
+		returnMap.put("paper", paperExp);
+		returnMap.put("fileName", paperExp.getName());
+
+		return returnMap;
+	}
+
+	protected void setExpTitle(PaperDetailExp paperDetailExp) {
+		String title = "";
+		String totalScore = BigDecimal.valueOf(paperDetailExp.getScore()).stripTrailingZeros().toPlainString();
+		String unitScore = BigDecimal.valueOf(paperDetailExp.getPaperDetailUnits().get(0).getScore()).stripTrailingZeros().toPlainString();
+		QuesStructType type = paperDetailExp.getPaperDetailUnits().get(0).getQuestionType();
+		String scoreString = "";
+		if (type == QuesStructType.FILL_BLANK_QUESTION) {
+			scoreString = checkPaperDetailUnitScore(paperDetailExp) ? "每空"+ unitScore + "分" : "";
+		} else {
+			scoreString = checkPaperDetailUnitScore(paperDetailExp) ? "每小题"+ unitScore + "分" : "";
+		}
+		if (type == QuesStructType.SINGLE_ANSWER_QUESTION) {
+			paperDetailExp.setName("单项选择题");
+
+			title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"
+					+ scoreString + "共" + totalScore + "分)。"
+					+ "在每小题列出的四个备选中只有一个符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑,错涂、多涂或未涂均无分";
+		} else if (type == QuesStructType.BOOL_ANSWER_QUESTION) {
+			paperDetailExp.setName("判断题");
+			title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"+ scoreString + "共" + totalScore+ "分。正确的填涂A、错误填涂B。错涂、多涂或未涂均无分)";
+		} else if (type == QuesStructType.FILL_BLANK_QUESTION) {
+			paperDetailExp.setName("填空题");
+			int blankNum = 0;
+			for (PaperDetailUnitExp unit : paperDetailExp.getPaperDetailUnits()) {
+				String tempStr = unit.getQuestion().getQuesBody().replaceAll("###", "");
+				int lenTimes = (unit.getQuestion().getQuesBody().length() - tempStr.length()) / "###".length();// 出现的次数
+				blankNum += lenTimes;
+			}
+			title = "(本大题共" + blankNum + "个空格,将每空答在答题卡 “1—" + blankNum+ "”相应的序号上。" + scoreString + "共" + totalScore + "分)";
+		} else {
+			title = "(本大题共" + paperDetailExp.getUnitCount() + "小题,"+ scoreString + "共" + totalScore + "分)";
+		}
+		paperDetailExp.setTitle(title);
+	}
+
+	/**
+	 * 校验大题下的小题分数是不是一样
+	 * 
+	 * @param paperDetailExp
+	 * @return
+	 */
+	protected boolean checkPaperDetailUnitScore(PaperDetailExp paperDetailExp) {
+		List<PaperDetailUnitExp> paperDetailUnitExps = paperDetailExp.getPaperDetailUnits();
+		Set<Double> scoreSet = new HashSet<Double>();
+		for (PaperDetailUnitExp unitExp : paperDetailUnitExps) {
+			scoreSet.add(unitExp.getScore());
+		}
+		return scoreSet.size() == 1;
+	}
+
+	protected void setUnitExpNumber(List<PaperDetailExp> paperDetails,int startIndxt) throws Exception {
+		int subNum = startIndxt;
+		for (PaperDetailExp paperDetail : paperDetails) {
+			for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
+				List<QuesOption> optionList = paperDetailUnit.getQuestion().getQuesOptions();
+				if (optionList != null && optionList.size() > 0) {
+					int index = 0;
+					for (QuesOption quesOption : optionList) {
+						quesOption.setOptionBodyWord(exportPaperService.setOptionNum(quesOption.getOptionBodyWord(),exportPaperService.getOptionNum(index)));
+						index++;
+					}
+				}
+				List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
+				Question question = paperDetailUnit.getQuestion();
+				// 套题序号
+				if (subQuesList != null && subQuesList.size() > 0) {
+					question.setQuesBodyWord(exportPaperService.replaceQuesBlank(question.getQuesBodyWord(),subNum + 1));
+					for (Question subQues : subQuesList) {
+						int curSubNum = ++subNum;
+						subQues.setQuesBodyWord(exportPaperService.setSubQuesNum(subQues.getQuesBodyWord(),curSubNum));
+						subQues.setQuesAnswerWord(exportPaperService.setSubQuesNum(subQues.getQuesAnswerWord(),curSubNum));
+						subQues.setQuesBodyWord(exportPaperService.replaceQuesBlank(subQues.getQuesBodyWord(),curSubNum));
+						List<QuesOption> subOptionList = subQues.getQuesOptions();
+						if (subOptionList != null && subOptionList.size() > 0) {
+							int sub_index = 0;
+							for (QuesOption quesOption : subOptionList) {
+								quesOption.setOptionBodyWord(exportPaperService.setOptionNum(quesOption.getOptionBodyWord(),exportPaperService.getOptionNum(sub_index)));
+								sub_index++;
+							}
+						}
+					}
+				} else {
+					int curSubNum = ++subNum;
+					question.setQuesBodyWord(exportPaperService.setSubQuesNum(question.getQuesBodyWord(), curSubNum));
+					question.setQuesAnswerWord(exportPaperService.setSubQuesNum(question.getQuesAnswerWord(),curSubNum));
+					question.setQuesBodyWord(exportPaperService.replaceQuesBlank(question.getQuesBodyWord(),curSubNum));
+				}
+			}
+		}
+	}
 }

+ 5 - 3
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperService.java

@@ -1,6 +1,7 @@
 package com.qmth.cqb.paper.service.export;
 
 import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+
 import com.google.gson.Gson;
 import com.qmth.cqb.paper.dao.PaperDetailRepo;
 import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
@@ -20,6 +21,7 @@ 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;
+
 import org.apache.commons.lang3.StringUtils;
 import org.docx4j.XmlUtils;
 import org.docx4j.jaxb.Context;
@@ -42,7 +44,7 @@ import java.util.stream.Collectors;
  * Created by songyue on 17/3/15.
  */
 @Service
-public class ExportPaperService {
+public class ExportPaperService extends ExportPaperAbstractService{
 
     @Autowired
     PaperRepo paperRepo;
@@ -64,7 +66,7 @@ public class ExportPaperService {
 
     @Autowired
     PaperService paperService;
-
+    
     /**
      * 初始化导出试卷DTO
      * @param id
@@ -276,7 +278,7 @@ public class ExportPaperService {
         
         if (dataMap.get("fileName") != null) {
             String fileName = (String) dataMap.get("fileName");
-            DocxProcessUtil.exportPaper(dataMap, fileName,"paper_template.ftl");
+            DocxProcessUtil.exportPaper(dataMap, fileName,TEMPLATE_NORMAL);
             DocxProcessUtil.processImage(fileName, getPkgList(id));
             DocxProcessUtil.processDownload(fileNames, response);
         }

+ 42 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SxsfExportPaperService.java

@@ -0,0 +1,42 @@
+package com.qmth.cqb.paper.service.export;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.qmth.cqb.utils.word.DocxProcessUtil;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月7日 上午11:29:49
+ * @company 	QMTH
+ * @description 陕西师范试卷导出service
+ */
+@Service("sxsfExportPaperService")
+public class SxsfExportPaperService extends ExportPaperAbstractService {
+	
+    @Autowired
+    ExportPaperService exportPaperService;
+    
+    @Override
+    public void downloadPaper(String id, HttpServletResponse response) throws Exception {
+        Map<String,Object> dataMap = initExportPaper(id);
+        List<String> fileList = new ArrayList<String>();
+        if (dataMap.get("fileName") != null) {
+            String paperfileName = (String) dataMap.get("fileName");
+            String answerFileName = paperfileName+"__答案";
+            DocxProcessUtil.exportPaper(dataMap, paperfileName,SXSF_TEMPLATE_PAPER);
+            DocxProcessUtil.exportAnswer(dataMap,answerFileName,SXSF_TEMPLATE_ANSWER);
+            DocxProcessUtil.processImage(paperfileName, exportPaperService.getPkgList(id));
+            DocxProcessUtil.processImage(answerFileName, exportPaperService.getPkgList(id));
+            fileList.add(paperfileName);
+            fileList.add(answerFileName);
+            DocxProcessUtil.processDownload(fileList, response);
+        }
+    }
+
+}
+

+ 12 - 30
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExportPaperController.java

@@ -1,17 +1,13 @@
 package com.qmth.cqb.paper.web;
 
 import cn.com.qmth.examcloud.common.uac.annotation.Uac;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
 import cn.com.qmth.examcloud.common.uac.enums.UacPolicy;
 import io.swagger.annotations.ApiOperation;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -19,11 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import com.qmth.cqb.paper.dao.ExportServiceManageRepo;
 import com.qmth.cqb.paper.model.ExportServiceManage;
-import com.qmth.cqb.paper.service.export.DzkdExportPaperService;
 import com.qmth.cqb.paper.service.export.ExportPaperAbstractService;
-import com.qmth.cqb.paper.service.export.ExportPaperService;
-
-import java.lang.reflect.Method;
+import com.qmth.cqb.utils.SpringContextUtils;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -37,13 +30,9 @@ public class ExportPaperController {
 
     protected static final Logger log = LoggerFactory.getLogger(ExportPaperController.class);
     
-    
     @Autowired
     ExportServiceManageRepo exportServiceManageRepo; 
-    
-    @Autowired
-    ExportPaperAbstractService exportPaperService;
-
+ 
     /**
      * 导出试卷
      * @param id
@@ -53,23 +42,16 @@ public class ExportPaperController {
     @Uac(roles={RoleMeta.QUESTION_ADMIN,RoleMeta.SUPER_ADMIN},policy=UacPolicy.IN)
     @GetMapping(value = "/paper/export/{id}")
     public void getPaperById(@PathVariable String id, HttpServletResponse response,HttpServletRequest request){
-        log.info("导出开始");
-        try {
-            //AccessUser user = (AccessUser) request.getAttribute("accessUser");
-            ExportServiceManage esm = exportServiceManageRepo.findByOrgName("电子科技大学");        
-            Method mds[] = ExportPaperAbstractService.class.getDeclaredMethods(); 
-            for(Method met:mds){ 
-	            if(met.getName().equals(esm.getExportServiceName())){ 
-		            met.invoke(exportPaperService, id,response); 
-	            } 
-            } 
-        } catch (Exception e) {
-            e.printStackTrace();
-            log.error("导出异常:"+e.getMessage());
-        }finally {
-            log.info("导出结束");
-        }
+    	log.info("导出开始");
+    	try {
+    		ExportServiceManage esm = exportServiceManageRepo.findByOrgName("陕西师范大学");
+        	ExportPaperAbstractService exportPaperAbstractService = (ExportPaperAbstractService) SpringContextUtils.getBeanById(esm.getExportServiceName());
+			exportPaperAbstractService.downloadPaper(id, response);
+		} catch (Exception e) {
+			e.printStackTrace();
+	        log.error("导出异常:"+e.getMessage());
+		}
+    	log.info("导出结束");
     }
 
-
 }

+ 1 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java

@@ -115,7 +115,7 @@ public class ExtractConfigController {
 	@ApiOperation(value = "判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题", 
 				  notes = "判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题")
     @GetMapping(value = "/checkObjective/{paperId}")
-	public ResponseEntity<Map<String, Object>> checkIsAllQbjectiveQuestion(@PathVariable String paperId){
+	public ResponseEntity<Map<String, Object>> checkIsAllObjectiveQuestion(@PathVariable String paperId){
 		Map<String, Object> quesMap = new HashMap<String, Object>();
 		try{
 			if(StringUtils.isBlank(paperId)){

+ 2 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/web/PaperController.java

@@ -534,6 +534,8 @@ public class PaperController {
     @PutMapping(value = "/useBasePaper/{paperIds}")
     public ResponseEntity useBasePaper(HttpServletRequest request,@PathVariable String paperIds){
     	AccessUser user = (AccessUser) request.getAttribute("accessUser");
+    	user = new AccessUser();
+    	user.setRootOrgId(1L);
     	try{
     		String[] paperIdArray = paperIds.split(",");
         	for(int i = 0;i<paperIdArray.length;i++){