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

Merge branch 'dev0410' of https://git.oschina.net/songyue123456/comm-ques-bank.git into dev0410

weiwenhai 8 жил өмнө
parent
commit
7e094030ea
22 өөрчлөгдсөн 1460 нэмэгдсэн , 999 устгасан
  1. 9 0
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/FileDisposeUtil.java
  2. 4 4
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/enums/ExamFileType.java
  3. 7 30
      cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java
  4. 2 2
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExamFile.java
  5. 55 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/Block.java
  6. 30 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestOption.java
  7. 92 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestPaper.java
  8. 76 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestPaperDetail.java
  9. 120 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestQuestion.java
  10. 25 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/Section.java
  11. 25 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/Sections.java
  12. 8 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java
  13. 859 860
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java
  14. 7 6
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/DzkdExportPaperService.java
  15. 17 17
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java
  16. 4 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/HzkjExportPaperService.java
  17. 4 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SddxExportPaperService.java
  18. 61 35
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SxsfExportPaperService.java
  19. 1 1
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SydxExportPaperService.java
  20. 4 4
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/TjdxExportPaperService.java
  21. 33 32
      cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java
  22. 17 0
      cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExtractConfigController.java

+ 9 - 0
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/FileDisposeUtil.java

@@ -21,6 +21,7 @@ import java.util.zip.ZipOutputStream;
 
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -175,5 +176,13 @@ public class FileDisposeUtil {
 		}
 		return flag;
 	}
+	
+	public static void createDirectory(String downloadDirectory) {
+		File directory = new File(downloadDirectory);
+		if(directory.exists()){
+			FileUtils.deleteQuietly(directory);
+		}
+		directory.mkdir();
+	}
 
 }

+ 4 - 4
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/enums/ExamFileType.java

@@ -19,21 +19,21 @@ public enum ExamFileType {
 	 * 试卷结构
 	 * 主观题
 	 */
-	PAPER_STRUCTURE_SUBJECTIVE("试卷结构-主观题"),
+	PAPER_STRUCTURE_SUBJECTIVE("主观题"),
 	/**
 	 * ZIP文件
 	 * 试卷结构
 	 * 客观题
 	 */
-	PAPER_STRUCTURE_OBJECTIVE("试卷结构-客观题"),
+	PAPER_STRUCTURE_OBJECTIVE("客观题"),
 	/**
 	 * 音频文件
 	 */
 	AUDIO("音频文件"),
 	/**
-	 * 加密数据包
+	 * 机考数据包
 	 */
-	ENCRYPT_PACKAGE("加密数据包");
+	COMPUTERTEST_PACKAGE("机考数据包");
 	
 	private String name;
 	

+ 7 - 30
cqb-comm-utils/src/main/java/com/qmth/cqb/utils/word/DocxProcessUtil.java

@@ -659,52 +659,29 @@ public final class DocxProcessUtil {
      * 导出word
      *
      * @param dataMap
-     * @param fileName
+     * @param fileName   fileName需要带后缀
      */
     public static void exportWord(Map dataMap, String fileName,Template template)throws Exception {
         Writer out = null;
         // 输出文件
-        File outFile = new File(TEMP_FILE_EXP + fileName + DOCX_SUFFIX);
+        File outFile = new File(TEMP_FILE_EXP+fileName);
         // 将模板和数据模型合并生成文件
         out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), ENCODING));
         // 生成文件
         template.process(dataMap, out);
         out.flush();
         IOUtils.closeQuietly(out);
-        
-        
-    }
-
-    /**
-     * 导出试卷
-     *
-     * @param dataMap
-     * @param fileName
-     */
-    public static void exportPaper(Map dataMap, String fileName,Template template) throws Exception {
-        exportWord(dataMap, fileName, template);
-    }
-
-    /**
-     * 导出答案
-     *
-     * @param dataMap
-     * @param fileName
-     */
-    public static void exportAnswer(Map dataMap, String fileName,Template template) throws Exception {
-        exportWord(dataMap, fileName, template);
     }
 
     /**
      * 处理导出word中的图片
-     *
-     * @param fileName
+     * @param fileName	需要带文件后缀
      * @param wordMLPackages
      * @throws Exception
      */
     public static void processImage(String fileName, List<WordprocessingMLPackage> wordMLPackages) throws Exception {
     	logger.info("试卷:“"+fileName+"”导出处理图片开始...");
-        String filePath = TEMP_FILE_EXP + fileName + DOCX_SUFFIX;
+        String filePath = TEMP_FILE_EXP + fileName;
         InputStream mainFile = new FileInputStream(filePath);
         // 以单个wordXml方式解析freemarker导出的文件
         FlatOpcXmlImporter flatOpcXmlImporter = new FlatOpcXmlImporter(mainFile);
@@ -838,7 +815,7 @@ public final class DocxProcessUtil {
 
     /**
      * 下载word文件
-     * @param fileNames
+     * @param fileNames   需带后缀
      * @param response
      * @throws Exception
      */
@@ -849,12 +826,12 @@ public final class DocxProcessUtil {
          response.setContentType("application/octet-stream;charset=utf-8");
          ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
         for(String fileName:fileNames){
-            ZipUtils.doCompress(TEMP_FILE_EXP+fileName+DOCX_SUFFIX, out);
+            ZipUtils.doCompress(TEMP_FILE_EXP+fileName, out);
             response.flushBuffer();
         }
         //删除本地文件
         for(String fileName:fileNames){
-        	File file = new File(TEMP_FILE_EXP+fileName+DOCX_SUFFIX);
+        	File file = new File(TEMP_FILE_EXP+fileName);
         	if(file.exists()){
         		file.delete();
         	}

+ 2 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExamFile.java

@@ -84,7 +84,7 @@ public class ExamFile implements Serializable{
     	
     }
     
-    public ExamFile(ExtractConfig extractConfig,String fileName,String filePath,ExamFileType examFileType){
+    public ExamFile(ExtractConfig extractConfig,String filePath,ExamFileType examFileType,String fileSuffix){
     	this.orgId = extractConfig.getOrgId();
     	this.orgName = extractConfig.getOrgName();
     	this.examId = extractConfig.getExamId()+"";
@@ -92,7 +92,7 @@ public class ExamFile implements Serializable{
     	this.examType = ExamType.strToEnum(extractConfig.getExamType());
     	this.courseId = extractConfig.getCourseCode();
     	this.courseName = extractConfig.getCourseName();
-    	this.fileName = fileName;
+    	this.fileName = extractConfig.getCourseName()+"_"+extractConfig.getCourseCode()+"_"+examFileType.getName()+fileSuffix;
     	this.filePath = filePath;
     	this.examFileType = examFileType;
     }

+ 55 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/Block.java

@@ -0,0 +1,55 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+
+import java.util.Map;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午10:19:31
+ * @company 	QMTH
+ * @description Block.java
+ */
+public class Block {
+	/**
+	 * text:文字
+	 * image:图片
+	 * audio:音频
+	 * video:视频
+	 */
+	private String type;
+	
+	/**
+	 *	资源相对路径
+	 */
+	private String value;
+	
+	/**
+	 *  "playCount": 1 //播放次数
+	 */
+	private Map<String,Object> param;
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public Map<String, Object> getParam() {
+		return param;
+	}
+
+	public void setParam(Map<String, Object> param) {
+		this.param = param;
+	}
+	
+}
+

+ 30 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestOption.java

@@ -0,0 +1,30 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午10:22:56
+ * @company 	QMTH
+ * @description 选项
+ */
+public class ComputerTestOption {
+	private Integer number;
+	
+	private Sections body;
+
+	public Integer getNumber() {
+		return number;
+	}
+
+	public void setNumber(Integer number) {
+		this.number = number;
+	}
+
+	public Sections getBody() {
+		return body;
+	}
+
+	public void setBody(Sections body) {
+		this.body = body;
+	}
+	
+}
+

+ 92 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestPaper.java

@@ -0,0 +1,92 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+
+import java.util.List;
+
+import com.qmth.cqb.paper.model.Paper;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午9:39:11
+ * @company 	QMTH
+ * @description ComputerTestPaper.java
+ */
+public class ComputerTestPaper {
+	
+	/**
+	 * 试卷编号
+	 */
+	private String id;
+	/**
+	 * 试卷名称
+	 */
+	private String name;
+	/**
+	 * 总分
+	 */
+	private double totalScore;
+	/**
+	 *  pNone 	不含音视频文件   
+	 *  paudio 	含音频文件   
+	 *  pvideo	含视频文件   
+	 *  pAll	 即含音频也含视频
+	 */
+	private String emVideoType;
+	/**
+	 * 大题数量
+	 */
+	private int detailCount;
+	/**
+	 * 大题集合
+	 */
+	private List<ComputerTestPaperDetail> details;
+	
+	public ComputerTestPaper(){
+		
+	}
+	
+	public ComputerTestPaper(Paper paper){
+		this.id = paper.getId();
+		this.name = paper.getName();
+		this.totalScore = paper.getTotalScore();
+		this.detailCount = paper.getPaperDetailCount();
+	}
+	
+	public String getId() {
+		return id;
+	}
+	public void setId(String id) {
+		this.id = id;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public double getTotalScore() {
+		return totalScore;
+	}
+	public void setTotalScore(double totalScore) {
+		this.totalScore = totalScore;
+	}
+	public String getEmVideoType() {
+		return emVideoType;
+	}
+	public void setEmVideoType(String emVideoType) {
+		this.emVideoType = emVideoType;
+	}
+	public int getDetailCount() {
+		return detailCount;
+	}
+	public void setDetailCount(int detailCount) {
+		this.detailCount = detailCount;
+	}
+	public List<ComputerTestPaperDetail> getDetails() {
+		return details;
+	}
+	public void setDetails(List<ComputerTestPaperDetail> details) {
+		this.details = details;
+	}
+	
+}
+

+ 76 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestPaperDetail.java

@@ -0,0 +1,76 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+
+import java.util.List;
+
+import com.qmth.cqb.paper.model.PaperDetail;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午9:43:00
+ * @company 	QMTH
+ * @description ComputerTestPaperDetail.java
+ */
+public class ComputerTestPaperDetail {
+	/**
+	 * 大题号
+	 */
+	private Integer number;
+	/**
+	 * 大题名称
+	 */
+	private String name;
+	/**
+	 * 大题总分
+	 */
+	private Double totalScore;
+	/**
+	 * 小题数量
+	 */
+	private Integer questionCount;
+	/**
+	 * 小题集合
+	 */
+	private List<ComputerTestQuestion> questions;
+	
+	public ComputerTestPaperDetail(){}
+	
+	public ComputerTestPaperDetail(PaperDetail paperDetail){
+		this.number = paperDetail.getNumber();
+		this.name = paperDetail.getName();
+		this.totalScore = paperDetail.getScore();
+		this.questionCount = paperDetail.getUnitCount();
+	}
+	
+	public Integer getNumber() {
+		return number;
+	}
+	public void setNumber(Integer number) {
+		this.number = number;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Double getTotalScore() {
+		return totalScore;
+	}
+	public void setTotalScore(Double totalScore) {
+		this.totalScore = totalScore;
+	}
+	public Integer getQuestionCount() {
+		return questionCount;
+	}
+	public void setQuestionCount(Integer questionCount) {
+		this.questionCount = questionCount;
+	}
+	public List<ComputerTestQuestion> getQuestions() {
+		return questions;
+	}
+	public void setQuestions(List<ComputerTestQuestion> questions) {
+		this.questions = questions;
+	}
+	
+}
+

+ 120 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/ComputerTestQuestion.java

@@ -0,0 +1,120 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午9:51:37
+ * @company 	QMTH
+ * @description ComputerTestQuestion.java
+ */
+public class ComputerTestQuestion {
+	
+	private String id;
+	/**
+	 * 小题号或套题内子题序号
+	 */
+	private Integer number;
+	
+	private Double score;// 小题分数
+	/**
+	 * 1-单选,2-多选,3-判断,4-填空,5-问答,6-套题
+	 */
+	private Integer structType;
+	/**
+	 * 是否客观题
+	 */
+	private Boolean objective;
+	/**
+	 * 子题
+	 */
+	private List<ComputerTestQuestion> subQuestions;
+	
+	/**
+	 * 题干
+	 */
+	private Sections body;
+	
+	/**
+	 * 选项
+	 */
+	private List<ComputerTestOption> options;
+	
+	private Map<String,Object> param;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Integer getNumber() {
+		return number;
+	}
+
+	public void setNumber(Integer number) {
+		this.number = number;
+	}
+
+	public Double getScore() {
+		return score;
+	}
+
+	public void setScore(Double score) {
+		this.score = score;
+	}
+
+	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 List<ComputerTestQuestion> getSubQuestions() {
+		return subQuestions;
+	}
+
+	public void setSubQuestions(List<ComputerTestQuestion> subQuestions) {
+		this.subQuestions = subQuestions;
+	}
+
+	public Sections getBody() {
+		return body;
+	}
+
+	public void setBody(Sections body) {
+		this.body = body;
+	}
+
+	public List<ComputerTestOption> getOptions() {
+		return options;
+	}
+
+	public void setOptions(List<ComputerTestOption> options) {
+		this.options = options;
+	}
+
+	public Map<String, Object> getParam() {
+		return param;
+	}
+
+	public void setParam(Map<String, Object> param) {
+		this.param = param;
+	}
+	
+	
+}
+

+ 25 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/Section.java

@@ -0,0 +1,25 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+
+import java.util.List;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午10:19:03
+ * @company 	QMTH
+ * @description Section.java
+ */
+public class Section {
+	
+	private List<Block> blocks;
+
+	public List<Block> getBlocks() {
+		return blocks;
+	}
+
+	public void setBlocks(List<Block> blocks) {
+		this.blocks = blocks;
+	}
+	
+	
+}
+

+ 25 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/model/computerTestModel/Sections.java

@@ -0,0 +1,25 @@
+package com.qmth.cqb.paper.model.computerTestModel;
+
+import java.util.List;
+
+/**
+ * @author  	chenken
+ * @date    	2017年7月25日 上午10:13:10
+ * @company 	QMTH
+ * @description Sections.java
+ */
+public class Sections {
+	
+	private List<Section> sections;
+
+	public List<Section> getSections() {
+		return sections;
+	}
+
+	public void setSections(List<Section> sections) {
+		this.sections = sections;
+	}
+	
+	
+}
+

+ 8 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java

@@ -83,11 +83,19 @@ public interface ExtractConfigService {
 	 * @return
 	 */
 	public boolean checkIsAllQbjectiveQuestion(String paperId);
+	/**
+	 * 导出考试下的试卷信息  校验
+	 * @param exportModel
+	 * @param response
+	 * @throws Exception
+	 */
+	public void exportExamPaperInfoCheck(ExportPaperInfoModel exportModel,HttpServletResponse response)  throws Exception ;
 	/**
 	 * 导出考试下的试卷信息
 	 * @param exportModel
 	 */
 	public void exportExamPaperInfo(ExportPaperInfoModel exportModel,HttpServletResponse response)  throws Exception ;
+	
 	/**
 	 * 检查该考试下该课程是否生成试卷文件
 	 * @param examId

+ 859 - 860
cqb-paper/src/main/java/com/qmth/cqb/paper/service/PaperService.java

@@ -1,860 +1,859 @@
-package com.qmth.cqb.paper.service;
-
-import java.lang.annotation.Annotation;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import com.qmth.cqb.utils.exception.PaperException;
-
-import org.apache.commons.lang3.StringUtils;
-import org.nlpcn.commons.lang.util.StringUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.domain.Sort.Order;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
-
-import com.google.gson.Gson;
-import com.qmth.cqb.paper.dao.ExamPaperRepo;
-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.ExamPaper;
-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.model.PaperSearchInfo;
-import com.qmth.cqb.question.dao.QuesBakRepo;
-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.question.model.QuestionBak;
-import com.qmth.cqb.question.service.QuesService;
-import com.qmth.cqb.utils.BeanCopierUtil;
-import com.qmth.cqb.utils.CommonUtils;
-import com.qmth.cqb.utils.enums.PaperStatus;
-import com.qmth.cqb.utils.enums.PaperType;
-
-import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-
-/**
- * Created by songyue on 16/12/28.
- */
-@Service
-public class PaperService {
-
-    @Autowired
-    PaperRepo paperRepo;
-
-    @Autowired
-    PaperDetailService paperDetailService;
-
-    @Autowired
-    ExamPaperRepo examPaperRepo;
-
-    @Autowired
-    PaperDetailRepo paperDetailRepo;
-
-    @Autowired
-    PaperDetailUnitRepo paperDetailUnitRepo;
-
-    @Autowired
-    QuesRepo quesRepo;
-
-    @Autowired
-    QuesBakRepo quesBakRepo;
-
-    @Autowired
-    Gson gson;
-
-    @Autowired
-    PaperDetailUnitService paperDetailUnitService;
-
-    @Autowired
-    QuesService quesService;
-
-    @Autowired
-    ExtractConfigService extractConfigService;
-
-    @Autowired
-    private MongoTemplate mongoTemplate;
-
-    /**
-     * 查询所有已导入试卷
-     *
-     * @param paperSearchInfo
-     * @param curPage
-     * @param pageSize
-     * @return
-     */
-    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
-        Query query = new Query();
-        query.addCriteria(Criteria.where("paperType").is(PaperType.IMPORT));
-        if(StringUtils.isNotBlank(paperSearchInfo.getCourseNo())){
-        	query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
-        }
-        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
-        long count = this.mongoTemplate.count(query, Paper.class);
-        query.with(new Sort(new Order(Direction.DESC,"createTime")));
-        query.limit(pageSize);
-        query.skip((curPage - 1) * pageSize);
-        List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
-        return new PageImpl<Paper>(paperList, new PageRequest(curPage - 1, pageSize), count);
-    }
-
-    /**
-     * 查询所有待审核和审核不通过的导入试卷
-     * 
-     * @param paperSearchInfo
-     * @param curPage
-     * @param pageSize
-     * @return
-     */
-    public Page<Paper> getImportPapersNotSuccess(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
-        Query query = new Query();
-        if (paperSearchInfo.getPaperStatus() != null) {
-            query.addCriteria(Criteria.where("paperStatus").is(paperSearchInfo.getPaperStatus()));
-        } else {
-            query.addCriteria(Criteria.where("paperStatus").ne(PaperStatus.PASS));
-        }
-        query.addCriteria(Criteria.where("paperType").is(PaperType.IMPORT));
-        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
-        if (StringUtil.isNotBlank(paperSearchInfo.getCourseNo())) {
-            query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
-        }
-
-        long totalNumber = this.mongoTemplate.count(query, Paper.class);
-        query.limit(pageSize);
-        query.skip((curPage - 1) * pageSize);
-        List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
-        return new PageImpl<Paper>(paperList, new PageRequest(curPage - 1, pageSize), totalNumber);
-    }
-
-    /**
-     * 根据条件查询
-     * 
-     * @param paperSearchInfo
-     * @return
-     */
-    public List<Paper> getImportPapersBySearch(PaperSearchInfo paperSearchInfo) {
-        formatPaperSearchInfo(paperSearchInfo);
-        Paper importPaper = BeanCopierUtil.copyProperties(paperSearchInfo, Paper.class);
-        importPaper.setPaperType(PaperType.IMPORT);
-        return paperRepo.findAll(Example.of(importPaper));
-    }
-
-    /**
-     * 根据条件查询
-     *
-     * @param paperSearchInfo
-     * @return
-     */
-    public List<Paper> getGenPapersBySearch(PaperSearchInfo paperSearchInfo) {
-        formatPaperSearchInfo(paperSearchInfo);
-        Paper genPaper = BeanCopierUtil.copyProperties(paperSearchInfo, Paper.class);
-        genPaper.setPaperType(PaperType.GENERATE);
-        return paperRepo.findAll(Example.of(genPaper));
-    }
-
-    /**
-     * 保存试卷
-     *
-     * @param paperExp
-     * @return
-     */
-    public Map<String, Object> savePaper(PaperExp paperExp, AccessUser user) {
-        Map<String, Object> msgMap = new HashMap<String, Object>();
-        Paper oldPaper = paperRepo.findOne(paperExp.getId());
-        if (oldPaper != null) {
-            String oldName = oldPaper.getName().trim();
-            oldPaper.setTitle(paperExp.getTitle());
-            oldPaper.setName(paperExp.getName().trim());
-            oldPaper.setLastModifyName(user.getName());
-            if (!oldName.equals(paperExp.getName().trim())) {// 假如改变了试卷名称
-                                                             // 则要效验试卷名称唯一性
-                String msg = this.checkPaperName(paperExp.getName().trim(), user.getRootOrgId().toString());
-                if (msg == null) {
-                    paperRepo.save(oldPaper);
-                    msgMap.put("msg", "success");
-                } else {
-                    msgMap.put("msg", msg);
-                }
-            } else {
-                paperRepo.save(oldPaper);
-                msgMap.put("msg", "success");
-            }
-
-        }
-        return msgMap;
-    }
-
-    /**
-     * 查询所有已组试卷
-     *
-     * @param paperSearchInfo
-     * @param curPage
-     * @param pageSize
-     * @return
-     */
-    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
-        Query query = new Query();
-        query.addCriteria(Criteria.where("paperType").is(PaperType.GENERATE));
-        if(StringUtils.isNotBlank(paperSearchInfo.getCourseNo())){
-        	query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
-        }
-        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
-        long count = this.mongoTemplate.count(query, Paper.class);
-        query.with(new Sort(new Order(Direction.DESC,"createTime")));
-        query.limit(pageSize);
-        query.skip((curPage - 1) * pageSize);
-        List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
-        return new PageImpl<Paper>(paperList, new PageRequest(curPage - 1, pageSize), count);
-    }
-
-    /**
-     * 查询考试试卷
-     *
-     * @param id
-     * @param courseCode
-     * @param groupCode
-     * @return
-     */
-    public List<Paper> listExamPapers(long id, String courseCode, String groupCode) {
-        List<Paper> papers = new ArrayList<Paper>();
-        ExamPaper examPaper = new ExamPaper();
-        examPaper.setExamId(id);
-        examPaper.setCourseCode(courseCode);
-        examPaper.setGroupCode(groupCode);
-        Example<ExamPaper> example = Example.of(examPaper);
-        List<ExamPaper> examPapers = examPaperRepo.findAll(example);
-        for (ExamPaper ePaper : examPapers) {
-            Paper paper = paperRepo.findOne(ePaper.getPaper().getId());
-            papers.add(paper);
-        }
-        return papers;
-    }
-
-    /**
-     * 设置考试试卷
-     *
-     * @param examId
-     * @param courseCode
-     * @param groupCode
-     * @param paperId
-     * @return
-     */
-    public void joinToExamPaper(long examId, String courseCode, String groupCode, String paperId) {
-        ExamPaper examPaper = new ExamPaper();
-        examPaper.setExamId(examId);
-        examPaper.setGroupCode(groupCode);
-        examPaper.setCourseCode(courseCode);
-        // examPaper.setPaperId(paperId);
-        examPaperRepo.save(examPaper);
-    }
-
-    public void releaseExamPaper(long examId, String courseCode, String groupCode, String paperId) {
-        ExamPaper examPaper = new ExamPaper();
-        examPaper.setExamId(examId);
-        examPaper.setGroupCode(groupCode);
-        examPaper.setCourseCode(courseCode);
-        // examPaper.setPaperId(paperId);
-        examPaperRepo.delete(examPaper);
-    }
-
-    public Set<String> listGroupCodes(long examId, String courseCode) {
-        Set<String> groupSet = new HashSet<String>();
-        ExamPaper examPaper = new ExamPaper();
-        examPaper.setExamId(examId);
-        examPaper.setCourseCode(courseCode);
-        List<ExamPaper> examPapers = examPaperRepo.findAll(Example.of(examPaper));
-        for (ExamPaper expaper : examPapers) {
-            groupSet.add(expaper.getGroupCode());
-        }
-        return groupSet;
-    }
-
-    public void deletGroupCode(long examId, String courseCode, String groupCode) {
-        ExamPaper examPaper = new ExamPaper();
-        examPaper.setExamId(examId);
-        examPaper.setCourseCode(courseCode);
-        examPaper.setCourseCode(courseCode);
-        examPaperRepo.delete(examPaper);
-    }
-
-    /**
-     * 根据试卷ID获取试卷下面的大题
-     *
-     * @param id
-     * @return
-     */
-    public List<PaperDetail> findPaperDetailsById(String id) {
-        return paperDetailService.getPaperDetailsByPaper(paperRepo.findOne(id));
-    }
-
-    /**
-     * 批量删除试卷
-     *
-     * @param paperIds
-     */
-    public Map<String, Object> deletePapers(List<String> paperIds) {
-        Map<String, Object> msgMap = new HashMap<String, Object>();
-        String msg = "";
-        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-        if (papers.get(0).getPaperType() == PaperType.IMPORT) {
-            List<Question> quesList = new ArrayList<Question>();
-            for (Paper paper : papers) {
-                List<PaperDetailUnit> paperUnits = paperDetailUnitRepo.findByPaper(paper);
-                for (PaperDetailUnit pdu : paperUnits) {
-                    if (pdu.getQuestion() != null) {
-                        quesList.add(pdu.getQuestion());
-                    }
-                }
-            }
-            List<PaperDetailUnit> allUnits = paperDetailUnitRepo.findByQuestionIn(quesList);
-            for (PaperDetailUnit pdu : allUnits) {
-                if (pdu.getPaper() != null && pdu.getPaper().getPaperType() == PaperType.GENERATE) {
-                    msg = "待删除试卷中有试题被组卷使用,不能删除!";
-                    msgMap.put("msg", msg);
-                    msgMap.put("paperName", pdu.getPaper().getName());
-                    return msgMap;
-                    // for(PaperDetailUnit ipdu: importPaperUnits){
-                    // if(ipdu.getQuestion().getId().equals(pdu.getQuestion().getId())){
-                    //
-                    // }
-                    // }
-                }
-            }
-            quesRepo.delete(quesList);
-        } else if (papers.get(0).getPaperType() == PaperType.GENERATE) {
-            for (Paper paper : papers) {
-                List<String> examPaperIds = extractConfigService.getExamPaperId(paper.getCourseNo(), paper.getOrgId());
-                if (examPaperIds != null && examPaperIds.contains(paper.getId())) {
-                    msg = "待删除试卷有被调卷规则使 用,不能删除!";
-                    msgMap.put("msg", msg);
-                    msgMap.put("paperName", paper.getName());
-                    return msgMap;
-                }
-            }
-        }
-        paperDetailService.deletePaperDetailsByPapers(papers);
-        paperRepo.delete(papers);
-        msg = "success";
-        msgMap.put("msg", msg);
-        return msgMap;
-    }
-
-    /**
-     * 批量通过试卷
-     *
-     * @param paperIds
-     */
-    public void passPapers(List<String> paperIds) {
-        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-        papers.stream().forEach(paper -> {
-            paper.setPaperStatus(PaperStatus.PASS);
-        });
-        paperRepo.save(papers);
-    }
-
-    /**
-     * 批量不通过试卷
-     *
-     * @param paperIds
-     */
-    public void noPassPapers(List<String> paperIds) {
-        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-        papers.stream().forEach(paper -> {
-            paper.setPaperStatus(PaperStatus.NOPASS);
-        });
-        paperRepo.save(papers);
-    }
-
-    /**
-     * 批量待审核试卷
-     *
-     * @param paperIds
-     */
-    public void backPapers(List<String> paperIds) {
-        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
-        papers.stream().forEach(paper -> {
-            paper.setPaperStatus(PaperStatus.DRAFT);
-        });
-        paperRepo.save(papers);
-    }
-
-    /**
-     * 初始化导出试卷DTO
-     *
-     * @param id
-     * @return
-     */
-    public PaperExp getPaperDto(String id) {
-
-        // 获取paper
-        Paper paper = paperRepo.findOne(id);
-        // 创建paperDto
-        PaperExp paperExp = BeanCopierUtil.copyProperties(paper, PaperExp.class);
-        // 获取大题
-        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
-        List<PaperDetailExp> paperDetailExps = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailExp.class);
-        paperExp.setPaperDetails(paperDetailExps);
-
-        // 封装小题
-        for (int i = 0; i < paperDetailExps.size(); i++) {
-            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
-            if (paperDetailUnits != null && paperDetailUnits.size() > 0) {
-                List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
-                        PaperDetailUnitExp.class);
-                // 选择题,套题下选择题 选项顺序重新排列
-                reorderChoicequestionOption(paperDetailUnitExps);
-                paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
-            } else {
-                paperDetailExps.get(i).setUnitCount(0);
-            }
-
-        }
-        // 初始化试卷内容
-        initPaper(paperExp);
-
-        return paperExp;
-    }
-
-    /**
-     * 重新对选择题option进行排序(多选、单选、套题下选择题)
-     */
-    public void reorderChoicequestionOption(List<PaperDetailUnitExp> paperDetailUnitExps) {
-        for (PaperDetailUnitExp paperDetailUnitExp : paperDetailUnitExps) {
-            String optionOrder = paperDetailUnitExp.getOptionOrder();
-            if (StringUtil.isNotBlank(optionOrder)) {
-                Question question = paperDetailUnitExp.getQuestion();
-                if (question.getQuestionType() == QuesStructType.SINGLE_ANSWER_QUESTION
-                        || question.getQuestionType() == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
-                    question.setQuesOptions(reorderOptionCore(question.getQuesOptions(), optionOrder));
-                }
-                if (question.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
-                    List<Question> subQuestions = question.getSubQuestions();
-                    int index = 0;
-                    for (int k = 0; k < subQuestions.size(); k++) {
-                        Question subQuestion = subQuestions.get(k);
-                        if (subQuestion.getQuestionType() == QuesStructType.SINGLE_ANSWER_QUESTION
-                                || subQuestion.getQuestionType() == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
-                            subQuestion.setQuesOptions(
-                                    reorderOptionCore(subQuestion.getQuesOptions(), optionOrder.split(";")[index]));
-                            index++;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    public List<QuesOption> reorderOptionCore(List<QuesOption> quesOptions, String optionOrder) {
-        List<QuesOption> newQuesOptions = new ArrayList<QuesOption>();
-        if (StringUtil.isBlank(optionOrder) || quesOptions.isEmpty()) {
-            return null;
-        }
-        String[] optionOrderArr = optionOrder.split(",");
-        for (int j = 0; j < optionOrderArr.length; j++) {
-            for (int k = 0; k < quesOptions.size(); k++) {
-                if (optionOrderArr[j].equals(quesOptions.get(k).getNumber())) {
-                    newQuesOptions.add(quesOptions.get(k));
-                }
-            }
-        }
-        quesOptions = null;
-        return newQuesOptions;
-    }
-
-    /**
-     * 初始化试卷内容(增加序号)
-     *
-     * @param paperExp
-     */
-    public void initPaper(PaperExp paperExp) {
-        if (paperExp.getPaperDetails() == null || paperExp.getPaperDetails().size() == 0) {
-            return;
-        }
-        int mainNum = 0;
-        int subNum = 0;
-        Collections.sort(paperExp.getPaperDetails());
-        List<PaperDetailExp> paperDetailExpList = paperExp.getPaperDetails();
-        for (PaperDetailExp paperDetail : paperDetailExpList) {
-            // 大题序号
-            paperDetail.setNumber(++mainNum);
-            paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
-            // 小题序号
-            if (paperDetail != null && paperDetail.getPaperDetailUnits() != null
-                    && paperDetail.getPaperDetailUnits().size() > 0) {
-                for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
-                    if (paperDetailUnit.getQuestion() != null) {
-                        quesService.formatQuesUnit(paperDetailUnit.getQuestion());
-                        List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
-                        // 套题序号
-                        if (subQuesList != null && subQuesList.size() > 0) {
-                            int index = subNum;
-                            for (Question subQues : subQuesList) {
-                                Map<String, String> params = new HashMap<String, String>();
-                                params.put("number", String.valueOf(++subNum));
-                                subQues.setQuesParams(params);
-                                quesService.formatQuesUnit(subQues);
-                            }
-                            String quesBodyHtml = relaceQuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
-                            paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
-                        } else {
-                            paperDetailUnit.setNumber(++subNum);
-                        }
-
-                    }
-
-                }
-            }
-        }
-    }
-
-    /**
-     * 格式化查询条件
-     *
-     * @param paperSearchInfo
-     */
-    public void formatPaperSearchInfo(PaperSearchInfo paperSearchInfo) {
-        if (StringUtils.isEmpty(paperSearchInfo.getCourseNo())) {
-            paperSearchInfo.setCourseNo(null);
-        }
-        if (StringUtils.isEmpty(paperSearchInfo.getCreateTime())) {
-            paperSearchInfo.setCreateTime(null);
-        }
-        if (StringUtils.isEmpty(paperSearchInfo.getCreator())) {
-            paperSearchInfo.setCreator(null);
-        }
-        if (StringUtils.isEmpty(paperSearchInfo.getName())) {
-            paperSearchInfo.setName(null);
-        }
-    }
-
-    /**
-     * 填充大题小题数量与分数
-     *
-     * @param paper
-     */
-    public void formatPaper(Paper paper, AccessUser user) {
-        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
-        // 计算试卷总分
-        List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaper(paper);
-        int allQuesCount = 0;
-        double totalScore = 0;
-        for (PaperDetailUnit unit : paperDetailUnitAll) {
-            if (unit.getScore() != null) {
-                totalScore += unit.getScore();
-            }
-
-        }
-        // 计算各大题总分
-        for (PaperDetail paperDetail : paperDetails) {
-            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetail);
-            Collections.sort(paperDetailUnits);
-            if (paperDetailUnits.size() > 0) {
-                int count = 0;
-                double score = 0;
-                int nestQusNum = 0;
-                for (PaperDetailUnit unit : paperDetailUnits) {
-                    if (unit.getScore() != null) {
-                        score += unit.getScore();
-                    }
-                    if (unit.getQuestion() != null && unit.getQuestion().getSubQuestions() != null
-                            && unit.getQuestion().getSubQuestions().size() > 0) {
-                        nestQusNum += unit.getQuestion().getSubQuestions().size() - 1;
-                    }
-
-                }
-                count = paperDetailUnits.size() + nestQusNum;
-                paperDetail.setScore(score);
-                paperDetail.setUnitCount(count);
-                allQuesCount += count;
-            } else {
-                paperDetail.setScore(0d);
-            }
-        }
-        paper.setUnitCount(allQuesCount);
-        paper.setPaperDetailCount(paperDetails.size());
-        paper.setTotalScore(totalScore);
-        if (user != null) {
-            paper.setLastModifyName(user.getName());
-        }
-        paperDetailRepo.save(paperDetails);
-        paperRepo.save(paper);
-    }
-
-    /**
-     * 先备份准备删掉的试题,然后再删掉
-     *
-     * @param questionId
-     * @return
-     */
-    public List<String> deleteImportQuestionById(String questionId, AccessUser user) {
-        Question ques = quesRepo.findOne(questionId);
-        List<PaperDetailUnit> pdus = CommonUtils.toList(paperDetailUnitRepo.findByQuestion(ques));
-        List<String> paperNames = new ArrayList<String>();
-        List<PaperDetailUnit> needPdus = new ArrayList<PaperDetailUnit>();// 需要删除的小题
-        List<Paper> papers = new ArrayList<Paper>();
-        for (PaperDetailUnit pdu : pdus) {
-            if (pdu.getPaper() != null) {
-                if (!papers.contains(pdu.getPaper())) {
-                    papers.add(pdu.getPaper());
-                }
-                if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
-                    paperNames.add(pdu.getPaper().getName());
-                }
-            }
-
-        }
-
-        if (paperNames.size() == 0) {
-            needPdus.addAll(pdus);// 此试题没有被组卷调用,则可以删除此试题
-            paperDetailUnitRepo.delete(needPdus);
-            quesBakRepo.save(BeanCopierUtil.copyProperties(ques, QuestionBak.class));
-            quesRepo.delete(ques);
-            for (Paper paper : papers) {
-                formatPaper(paper, user);
-            }
-
-        }
-        return paperNames;
-    }
-
-    /**
-     * 向试卷中插入一个试题
-     *
-     * @param paperId
-     * @param paperDetailId
-     * @return
-     */
-    public Paper insertQuestionToPaper(String paperId, String paperDetailId, Question question, AccessUser user) {
-        question.setOrgId(user.getRootOrgId().toString());
-        quesService.updateQuesWord(question);
-        question = quesRepo.save(question);
-        Paper paper = paperRepo.findOne(paperId);
-        PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
-        PaperDetailUnit pdu = new PaperDetailUnit();
-        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
-        pdu.setPaper(paper);
-        pdu.setQuestionType(question.getQuestionType());
-        pdu.setQuestion(question);
-        pdu.setCreateTime(CommonUtils.getCurDateTime());
-        pdu.setPaperDetail(pd);
-        pdus.add(pdu);
-        Collections.sort(pdus);
-        pdu.setNumber(pdus.indexOf(pdu) + 1);
-        pdu.setScore(0d);
-        paperDetailUnitRepo.save(pdu);
-        formatPaper(paper, user);
-        return paper;
-
-    }
-
-    /**
-     * 获取试题所在的试卷名称
-     *
-     * @param questionId
-     * @return
-     */
-    public List<String> getPaperNamesByQuestionId(String questionId) {
-        List<String> paperNames = new ArrayList<String>();
-        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByQuestion(quesRepo.findOne(questionId));
-        for (PaperDetailUnit pdu : pdus) {
-            paperNames.add(pdu.getPaper().getName());
-        }
-        return paperNames;
-
-    }
-
-    public Page<Question> listQuestionforSelect(String paperId,
-                                                int curPage,
-                                                int pageSize,
-                                                QuesStructType quesType,
-                                                AccessUser accessUser) {
-        Set<String> selectedIds = new HashSet<>();
-        Paper paper = paperRepo.findOne(paperId);
-        // QuestionSearchCondition ques = new QuestionSearchCondition();
-        // if (quesType != null) {
-        // ques.setQuestionType(quesType);
-        // }
-        // Map<String, String> quesParams = new HashMap<String, String>();
-        // quesParams.put("courseName", paper.getCourseName());
-        // ques.setQuesParams(quesParams);
-        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaper(paper);
-        for (PaperDetailUnit pdu : pdus) {
-            selectedIds.add(pdu.getQuestion().getId());
-        }
-        // Page<Question> allQuestions = quesService.findAll(ques, curPage,
-        // pageSize);
-        // Iterator<Question> que = allQuestions.iterator();
-        // while (que.hasNext()) {
-        // if (selectedIds.contains(que.next().getId())) {
-        // que.remove();
-        // }
-        // }
-        return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize,accessUser.getRootOrgId());
-    }
-
-    public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions,
-            AccessUser user) {
-        Paper paper = paperRepo.findOne(paperId);
-        PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
-        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
-        List<PaperDetailUnit> saveUnits = new ArrayList<PaperDetailUnit>();
-        for (Question ques : questions) {
-            PaperDetailUnit pdu = new PaperDetailUnit();
-            pdu.setPaper(paper);
-            pdu.setQuestionType(ques.getQuestionType());
-            pdu.setQuestion(ques);
-            pdu.setCreateTime(CommonUtils.getCurDateTime());
-            pdu.setPaperDetail(pd);
-            pdu.setScore(0d);
-            pdus.add(pdu);
-            saveUnits.add(pdu);
-        }
-        Collections.sort(pdus);
-        for (int i = 0; i < saveUnits.size(); i++) {
-            saveUnits.get(i).setNumber(pdus.indexOf(saveUnits.get(i)) + 1);
-        }
-
-        paperDetailUnitRepo.save(saveUnits);
-        formatPaper(paper, user);
-        return paper;
-    }
-
-    public String checkPaperName(String paperName, String orgId) {
-        String msg = null;
-        Paper paperTemp = new Paper();
-        paperTemp.setCreateTime(null);
-        paperTemp.setName(paperName.trim());
-        paperTemp.setOrgId(orgId);
-        Paper paper = paperRepo.findOne(Example.of(paperTemp));
-        if (paper != null) {
-            msg = "试卷名称重复,请重新命名";
-        }
-        return msg;
-
-    }
-
-    public void checkPaperNameNew(String paperName, String orgId)throws Exception{
-        Paper paperTemp = new Paper();
-        paperTemp.setCreateTime(null);
-        paperTemp.setName(paperName.trim());
-        paperTemp.setOrgId(orgId);
-        Paper paper = paperRepo.findOne(Example.of(paperTemp));
-        if (paper != null) {
-            throw new PaperException("试卷名称重复,请重新命名");
-        }
-    }
-
-    private String relaceQuestionIdx(String str, int baseIdx) {
-        StringBuffer sb = new StringBuffer("");
-        Pattern pattern = Pattern.compile("##(\\d+)##");
-
-        Matcher matcher = pattern.matcher(str);
-
-        while (matcher.find()) {
-            String idx = matcher.group(1);
-            matcher.appendReplacement(sb, "___" + String.valueOf(Integer.parseInt(idx) + baseIdx) + "___");
-        }
-
-        if (StringUtils.isEmpty(sb.toString())) {
-            return str;
-        } else {
-            matcher.appendTail(sb);
-            return sb.toString();
-        }
-    }
-
-    public Page<Paper> getImportPapersNotInIds(PaperSearchInfo paperSearchInfo, String[] ids, int curPage,
-            int pageSize) {
-        Set<String> selectedIds = new HashSet<>();
-        for (String id : ids) {
-            selectedIds.add(id);
-        }
-        Pageable page = new PageRequest(curPage - 1, pageSize);
-        return paperRepo.findByIdNotInAndCourseNoAndOrgIdAndPaperType(selectedIds, paperSearchInfo.getCourseNo(),
-                paperSearchInfo.getOrgId(), PaperType.IMPORT, page);
-    }
-    /**
-     * 将选中的导入试卷复制为卷库试卷
-     */
-    public void useBasePaper(String selectedPaperIds,String userId){
-    	Assert.hasLength(selectedPaperIds, "试卷id不能为空!");
-    	String[] paperIds = selectedPaperIds.split(",");
-    	for(int i = 0;i<paperIds.length;i++){
-    		Paper oldpaper = paperRepo.findOne(paperIds[i]);
-    		List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(oldpaper);
-    		oldpaper.setId(null);
-    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-    		String createTime = sdf.format(new Date());
-    		oldpaper.setCreateTime(createTime);
-    		oldpaper.setCreator(userId);
-    		oldpaper.setLastModifyName(userId);
-    		oldpaper.setPaperType(PaperType.GENERATE);//试卷类型 修改为组卷
-    		Paper newPaper = paperRepo.save(oldpaper);
-    		for(int j = 0;j<paperDetails.size();j++){
-    			PaperDetail paperDetail = paperDetails.get(j);
-    			List<PaperDetailUnit> paperDetailUnits = paperDetailUnitService.getUnitsByPaperDetail(paperDetail);
-    			paperDetail.setPaper(newPaper);//关联新Paper
-    			paperDetail.setId(null);
-    			paperDetail.setCreateTime(createTime);
-    			paperDetail.setCreator(userId);
-    			PaperDetail newPaperDetail = paperDetailRepo.save(paperDetail);//保存新的paperDetail
-    			for(int k = 0;k<paperDetailUnits.size();k++){
-    				//重新设置保存PaperDetailUnit
-    				PaperDetailUnit paperDetailUnit = paperDetailUnits.get(k);
-    				paperDetailUnit.setPaper(newPaper);				//关联新Paper
-    				paperDetailUnit.setPaperDetail(newPaperDetail); //关联新paperDetail
-    				paperDetailUnit.setId(null);
-    				paperDetailUnit.setCreateTime(createTime);
-    				paperDetailUnit.setCreator(userId);
-    				paperDetailUnitRepo.save(paperDetailUnit);//保存新的paperDetailUnit
-    			}
-    		}
-    	}
-    }
-    /**
-     * 根据试卷名称、试卷类型检查名称是否存在
-     * @param paperName
-     * @param paperType
-     * @param orgId
-     * @return
-     * @throws Exception
-     */
-    public boolean checkPaperName(String paperName, PaperType paperType,String orgId)throws Exception{
-        Paper paperTemp = new Paper();
-        paperTemp.setCreateTime(null);
-        paperTemp.setName(paperName.trim());
-        paperTemp.setOrgId(orgId);
-        paperTemp.setPaperType(paperType);
-        Paper paper = paperRepo.findOne(Example.of(paperTemp));
-        if(paper!=null){
-        	return false;
-        }
-        return true;
-    }
-}
+package com.qmth.cqb.paper.service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.qmth.cqb.utils.exception.PaperException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.nlpcn.commons.lang.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.domain.Sort.Order;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import com.google.gson.Gson;
+import com.qmth.cqb.paper.dao.ExamPaperRepo;
+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.ExamPaper;
+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.model.PaperSearchInfo;
+import com.qmth.cqb.question.dao.QuesBakRepo;
+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.question.model.QuestionBak;
+import com.qmth.cqb.question.service.QuesService;
+import com.qmth.cqb.utils.BeanCopierUtil;
+import com.qmth.cqb.utils.CommonUtils;
+import com.qmth.cqb.utils.enums.PaperStatus;
+import com.qmth.cqb.utils.enums.PaperType;
+
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+
+/**
+ * Created by songyue on 16/12/28.
+ */
+@Service
+public class PaperService {
+
+    @Autowired
+    PaperRepo paperRepo;
+
+    @Autowired
+    PaperDetailService paperDetailService;
+
+    @Autowired
+    ExamPaperRepo examPaperRepo;
+
+    @Autowired
+    PaperDetailRepo paperDetailRepo;
+
+    @Autowired
+    PaperDetailUnitRepo paperDetailUnitRepo;
+
+    @Autowired
+    QuesRepo quesRepo;
+
+    @Autowired
+    QuesBakRepo quesBakRepo;
+
+    @Autowired
+    Gson gson;
+
+    @Autowired
+    PaperDetailUnitService paperDetailUnitService;
+
+    @Autowired
+    QuesService quesService;
+
+    @Autowired
+    ExtractConfigService extractConfigService;
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    /**
+     * 查询所有已导入试卷
+     *
+     * @param paperSearchInfo
+     * @param curPage
+     * @param pageSize
+     * @return
+     */
+    public Page<Paper> getImportPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("paperType").is(PaperType.IMPORT));
+        if(StringUtils.isNotBlank(paperSearchInfo.getCourseNo())){
+        	query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
+        }
+        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+        long count = this.mongoTemplate.count(query, Paper.class);
+        query.with(new Sort(new Order(Direction.DESC,"createTime")));
+        query.limit(pageSize);
+        query.skip((curPage - 1) * pageSize);
+        List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
+        return new PageImpl<Paper>(paperList, new PageRequest(curPage - 1, pageSize), count);
+    }
+
+    /**
+     * 查询所有待审核和审核不通过的导入试卷
+     * 
+     * @param paperSearchInfo
+     * @param curPage
+     * @param pageSize
+     * @return
+     */
+    public Page<Paper> getImportPapersNotSuccess(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
+        Query query = new Query();
+        if (paperSearchInfo.getPaperStatus() != null) {
+            query.addCriteria(Criteria.where("paperStatus").is(paperSearchInfo.getPaperStatus()));
+        } else {
+            query.addCriteria(Criteria.where("paperStatus").ne(PaperStatus.PASS));
+        }
+        query.addCriteria(Criteria.where("paperType").is(PaperType.IMPORT));
+        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+        if (StringUtil.isNotBlank(paperSearchInfo.getCourseNo())) {
+            query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
+        }
+
+        long totalNumber = this.mongoTemplate.count(query, Paper.class);
+        query.limit(pageSize);
+        query.skip((curPage - 1) * pageSize);
+        List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
+        return new PageImpl<Paper>(paperList, new PageRequest(curPage - 1, pageSize), totalNumber);
+    }
+
+    /**
+     * 根据条件查询
+     * 
+     * @param paperSearchInfo
+     * @return
+     */
+    public List<Paper> getImportPapersBySearch(PaperSearchInfo paperSearchInfo) {
+        formatPaperSearchInfo(paperSearchInfo);
+        Paper importPaper = BeanCopierUtil.copyProperties(paperSearchInfo, Paper.class);
+        importPaper.setPaperType(PaperType.IMPORT);
+        return paperRepo.findAll(Example.of(importPaper));
+    }
+
+    /**
+     * 根据条件查询
+     *
+     * @param paperSearchInfo
+     * @return
+     */
+    public List<Paper> getGenPapersBySearch(PaperSearchInfo paperSearchInfo) {
+        formatPaperSearchInfo(paperSearchInfo);
+        Paper genPaper = BeanCopierUtil.copyProperties(paperSearchInfo, Paper.class);
+        genPaper.setPaperType(PaperType.GENERATE);
+        return paperRepo.findAll(Example.of(genPaper));
+    }
+
+    /**
+     * 保存试卷
+     *
+     * @param paperExp
+     * @return
+     */
+    public Map<String, Object> savePaper(PaperExp paperExp, AccessUser user) {
+        Map<String, Object> msgMap = new HashMap<String, Object>();
+        Paper oldPaper = paperRepo.findOne(paperExp.getId());
+        if (oldPaper != null) {
+            String oldName = oldPaper.getName().trim();
+            oldPaper.setTitle(paperExp.getTitle());
+            oldPaper.setName(paperExp.getName().trim());
+            oldPaper.setLastModifyName(user.getName());
+            if (!oldName.equals(paperExp.getName().trim())) {// 假如改变了试卷名称
+                                                             // 则要效验试卷名称唯一性
+                String msg = this.checkPaperName(paperExp.getName().trim(), user.getRootOrgId().toString());
+                if (msg == null) {
+                    paperRepo.save(oldPaper);
+                    msgMap.put("msg", "success");
+                } else {
+                    msgMap.put("msg", msg);
+                }
+            } else {
+                paperRepo.save(oldPaper);
+                msgMap.put("msg", "success");
+            }
+
+        }
+        return msgMap;
+    }
+
+    /**
+     * 查询所有已组试卷
+     *
+     * @param paperSearchInfo
+     * @param curPage
+     * @param pageSize
+     * @return
+     */
+    public Page<Paper> getGenPapers(PaperSearchInfo paperSearchInfo, int curPage, int pageSize) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("paperType").is(PaperType.GENERATE));
+        if(StringUtils.isNotBlank(paperSearchInfo.getCourseNo())){
+        	query.addCriteria(Criteria.where("courseNo").is(paperSearchInfo.getCourseNo()));
+        }
+        query.addCriteria(Criteria.where("orgId").is(paperSearchInfo.getOrgId()));
+        long count = this.mongoTemplate.count(query, Paper.class);
+        query.with(new Sort(new Order(Direction.DESC,"createTime")));
+        query.limit(pageSize);
+        query.skip((curPage - 1) * pageSize);
+        List<Paper> paperList = this.mongoTemplate.find(query, Paper.class);
+        return new PageImpl<Paper>(paperList, new PageRequest(curPage - 1, pageSize), count);
+    }
+
+    /**
+     * 查询考试试卷
+     *
+     * @param id
+     * @param courseCode
+     * @param groupCode
+     * @return
+     */
+    public List<Paper> listExamPapers(long id, String courseCode, String groupCode) {
+        List<Paper> papers = new ArrayList<Paper>();
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(id);
+        examPaper.setCourseCode(courseCode);
+        examPaper.setGroupCode(groupCode);
+        Example<ExamPaper> example = Example.of(examPaper);
+        List<ExamPaper> examPapers = examPaperRepo.findAll(example);
+        for (ExamPaper ePaper : examPapers) {
+            Paper paper = paperRepo.findOne(ePaper.getPaper().getId());
+            papers.add(paper);
+        }
+        return papers;
+    }
+
+    /**
+     * 设置考试试卷
+     *
+     * @param examId
+     * @param courseCode
+     * @param groupCode
+     * @param paperId
+     * @return
+     */
+    public void joinToExamPaper(long examId, String courseCode, String groupCode, String paperId) {
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setGroupCode(groupCode);
+        examPaper.setCourseCode(courseCode);
+        // examPaper.setPaperId(paperId);
+        examPaperRepo.save(examPaper);
+    }
+
+    public void releaseExamPaper(long examId, String courseCode, String groupCode, String paperId) {
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setGroupCode(groupCode);
+        examPaper.setCourseCode(courseCode);
+        // examPaper.setPaperId(paperId);
+        examPaperRepo.delete(examPaper);
+    }
+
+    public Set<String> listGroupCodes(long examId, String courseCode) {
+        Set<String> groupSet = new HashSet<String>();
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setCourseCode(courseCode);
+        List<ExamPaper> examPapers = examPaperRepo.findAll(Example.of(examPaper));
+        for (ExamPaper expaper : examPapers) {
+            groupSet.add(expaper.getGroupCode());
+        }
+        return groupSet;
+    }
+
+    public void deletGroupCode(long examId, String courseCode, String groupCode) {
+        ExamPaper examPaper = new ExamPaper();
+        examPaper.setExamId(examId);
+        examPaper.setCourseCode(courseCode);
+        examPaper.setCourseCode(courseCode);
+        examPaperRepo.delete(examPaper);
+    }
+
+    /**
+     * 根据试卷ID获取试卷下面的大题
+     *
+     * @param id
+     * @return
+     */
+    public List<PaperDetail> findPaperDetailsById(String id) {
+        return paperDetailService.getPaperDetailsByPaper(paperRepo.findOne(id));
+    }
+
+    /**
+     * 批量删除试卷
+     *
+     * @param paperIds
+     */
+    public Map<String, Object> deletePapers(List<String> paperIds) {
+        Map<String, Object> msgMap = new HashMap<String, Object>();
+        String msg = "";
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        if (papers.get(0).getPaperType() == PaperType.IMPORT) {
+            List<Question> quesList = new ArrayList<Question>();
+            for (Paper paper : papers) {
+                List<PaperDetailUnit> paperUnits = paperDetailUnitRepo.findByPaper(paper);
+                for (PaperDetailUnit pdu : paperUnits) {
+                    if (pdu.getQuestion() != null) {
+                        quesList.add(pdu.getQuestion());
+                    }
+                }
+            }
+            List<PaperDetailUnit> allUnits = paperDetailUnitRepo.findByQuestionIn(quesList);
+            for (PaperDetailUnit pdu : allUnits) {
+                if (pdu.getPaper() != null && pdu.getPaper().getPaperType() == PaperType.GENERATE) {
+                    msg = "待删除试卷中有试题被组卷使用,不能删除!";
+                    msgMap.put("msg", msg);
+                    msgMap.put("paperName", pdu.getPaper().getName());
+                    return msgMap;
+                    // for(PaperDetailUnit ipdu: importPaperUnits){
+                    // if(ipdu.getQuestion().getId().equals(pdu.getQuestion().getId())){
+                    //
+                    // }
+                    // }
+                }
+            }
+            quesRepo.delete(quesList);
+        } else if (papers.get(0).getPaperType() == PaperType.GENERATE) {
+            for (Paper paper : papers) {
+                List<String> examPaperIds = extractConfigService.getExamPaperId(paper.getCourseNo(), paper.getOrgId());
+                if (examPaperIds != null && examPaperIds.contains(paper.getId())) {
+                    msg = "待删除试卷有被调卷规则使 用,不能删除!";
+                    msgMap.put("msg", msg);
+                    msgMap.put("paperName", paper.getName());
+                    return msgMap;
+                }
+            }
+        }
+        paperDetailService.deletePaperDetailsByPapers(papers);
+        paperRepo.delete(papers);
+        msg = "success";
+        msgMap.put("msg", msg);
+        return msgMap;
+    }
+
+    /**
+     * 批量通过试卷
+     *
+     * @param paperIds
+     */
+    public void passPapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.PASS);
+        });
+        paperRepo.save(papers);
+    }
+
+    /**
+     * 批量不通过试卷
+     *
+     * @param paperIds
+     */
+    public void noPassPapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.NOPASS);
+        });
+        paperRepo.save(papers);
+    }
+
+    /**
+     * 批量待审核试卷
+     *
+     * @param paperIds
+     */
+    public void backPapers(List<String> paperIds) {
+        List<Paper> papers = CommonUtils.toList(paperRepo.findAll(paperIds));
+        papers.stream().forEach(paper -> {
+            paper.setPaperStatus(PaperStatus.DRAFT);
+        });
+        paperRepo.save(papers);
+    }
+
+    /**
+     * 初始化导出试卷DTO
+     *
+     * @param id
+     * @return
+     */
+    public PaperExp getPaperDto(String id) {
+
+        // 获取paper
+        Paper paper = paperRepo.findOne(id);
+        // 创建paperDto
+        PaperExp paperExp = BeanCopierUtil.copyProperties(paper, PaperExp.class);
+        // 获取大题
+        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
+        List<PaperDetailExp> paperDetailExps = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailExp.class);
+        paperExp.setPaperDetails(paperDetailExps);
+
+        // 封装小题
+        for (int i = 0; i < paperDetailExps.size(); i++) {
+            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
+            if (paperDetailUnits != null && paperDetailUnits.size() > 0) {
+                List<PaperDetailUnitExp> paperDetailUnitExps = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
+                        PaperDetailUnitExp.class);
+                // 选择题,套题下选择题 选项顺序重新排列
+                reorderChoicequestionOption(paperDetailUnitExps);
+                paperDetailExps.get(i).setPaperDetailUnits(paperDetailUnitExps);
+            } else {
+                paperDetailExps.get(i).setUnitCount(0);
+            }
+
+        }
+        // 初始化试卷内容
+        initPaper(paperExp);
+
+        return paperExp;
+    }
+
+    /**
+     * 重新对选择题option进行排序(多选、单选、套题下选择题)
+     */
+    public void reorderChoicequestionOption(List<PaperDetailUnitExp> paperDetailUnitExps) {
+        for (PaperDetailUnitExp paperDetailUnitExp : paperDetailUnitExps) {
+            String optionOrder = paperDetailUnitExp.getOptionOrder();
+            if (StringUtil.isNotBlank(optionOrder)) {
+                Question question = paperDetailUnitExp.getQuestion();
+                if (question.getQuestionType() == QuesStructType.SINGLE_ANSWER_QUESTION
+                        || question.getQuestionType() == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
+                    question.setQuesOptions(reorderOptionCore(question.getQuesOptions(), optionOrder));
+                }
+                if (question.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
+                    List<Question> subQuestions = question.getSubQuestions();
+                    int index = 0;
+                    for (int k = 0; k < subQuestions.size(); k++) {
+                        Question subQuestion = subQuestions.get(k);
+                        if (subQuestion.getQuestionType() == QuesStructType.SINGLE_ANSWER_QUESTION
+                                || subQuestion.getQuestionType() == QuesStructType.MULTIPLE_ANSWER_QUESTION) {
+                            subQuestion.setQuesOptions(
+                                    reorderOptionCore(subQuestion.getQuesOptions(), optionOrder.split(";")[index]));
+                            index++;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public List<QuesOption> reorderOptionCore(List<QuesOption> quesOptions, String optionOrder) {
+        List<QuesOption> newQuesOptions = new ArrayList<QuesOption>();
+        if (StringUtil.isBlank(optionOrder) || quesOptions.isEmpty()) {
+            return null;
+        }
+        String[] optionOrderArr = optionOrder.split(",");
+        for (int j = 0; j < optionOrderArr.length; j++) {
+            for (int k = 0; k < quesOptions.size(); k++) {
+                if (optionOrderArr[j].equals(quesOptions.get(k).getNumber())) {
+                    newQuesOptions.add(quesOptions.get(k));
+                }
+            }
+        }
+        quesOptions = null;
+        return newQuesOptions;
+    }
+
+    /**
+     * 初始化试卷内容(增加序号)
+     *
+     * @param paperExp
+     */
+    public void initPaper(PaperExp paperExp) {
+        if (paperExp.getPaperDetails() == null || paperExp.getPaperDetails().size() == 0) {
+            return;
+        }
+        int mainNum = 0;
+        int subNum = 0;
+        Collections.sort(paperExp.getPaperDetails());
+        List<PaperDetailExp> paperDetailExpList = paperExp.getPaperDetails();
+        for (PaperDetailExp paperDetail : paperDetailExpList) {
+            // 大题序号
+            paperDetail.setNumber(++mainNum);
+            paperDetail.setCnNum(CommonUtils.toCHNum(paperDetail.getNumber()));
+            // 小题序号
+            if (paperDetail != null && paperDetail.getPaperDetailUnits() != null
+                    && paperDetail.getPaperDetailUnits().size() > 0) {
+                for (PaperDetailUnitExp paperDetailUnit : paperDetail.getPaperDetailUnits()) {
+                    if (paperDetailUnit.getQuestion() != null) {
+                        quesService.formatQuesUnit(paperDetailUnit.getQuestion());
+                        List<Question> subQuesList = paperDetailUnit.getQuestion().getSubQuestions();
+                        // 套题序号
+                        if (subQuesList != null && subQuesList.size() > 0) {
+                            int index = subNum;
+                            for (Question subQues : subQuesList) {
+                                Map<String, String> params = new HashMap<String, String>();
+                                params.put("number", String.valueOf(++subNum));
+                                subQues.setQuesParams(params);
+                                quesService.formatQuesUnit(subQues);
+                            }
+                            String quesBodyHtml = relaceQuestionIdx(paperDetailUnit.getQuestion().getQuesBody(), index);
+                            paperDetailUnit.getQuestion().setQuesBody(quesBodyHtml);
+                        } else {
+                            paperDetailUnit.setNumber(++subNum);
+                        }
+
+                    }
+
+                }
+            }
+        }
+    }
+
+    /**
+     * 格式化查询条件
+     *
+     * @param paperSearchInfo
+     */
+    public void formatPaperSearchInfo(PaperSearchInfo paperSearchInfo) {
+        if (StringUtils.isEmpty(paperSearchInfo.getCourseNo())) {
+            paperSearchInfo.setCourseNo(null);
+        }
+        if (StringUtils.isEmpty(paperSearchInfo.getCreateTime())) {
+            paperSearchInfo.setCreateTime(null);
+        }
+        if (StringUtils.isEmpty(paperSearchInfo.getCreator())) {
+            paperSearchInfo.setCreator(null);
+        }
+        if (StringUtils.isEmpty(paperSearchInfo.getName())) {
+            paperSearchInfo.setName(null);
+        }
+    }
+
+    /**
+     * 填充大题小题数量与分数
+     *
+     * @param paper
+     */
+    public void formatPaper(Paper paper, AccessUser user) {
+        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
+        // 计算试卷总分
+        List<PaperDetailUnit> paperDetailUnitAll = paperDetailUnitRepo.findByPaper(paper);
+        int allQuesCount = 0;
+        double totalScore = 0;
+        for (PaperDetailUnit unit : paperDetailUnitAll) {
+            if (unit.getScore() != null) {
+                totalScore += unit.getScore();
+            }
+
+        }
+        // 计算各大题总分
+        for (PaperDetail paperDetail : paperDetails) {
+            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetail);
+            Collections.sort(paperDetailUnits);
+            if (paperDetailUnits.size() > 0) {
+                int count = 0;
+                double score = 0;
+                int nestQusNum = 0;
+                for (PaperDetailUnit unit : paperDetailUnits) {
+                    if (unit.getScore() != null) {
+                        score += unit.getScore();
+                    }
+                    if (unit.getQuestion() != null && unit.getQuestion().getSubQuestions() != null
+                            && unit.getQuestion().getSubQuestions().size() > 0) {
+                        nestQusNum += unit.getQuestion().getSubQuestions().size() - 1;
+                    }
+
+                }
+                count = paperDetailUnits.size() + nestQusNum;
+                paperDetail.setScore(score);
+                paperDetail.setUnitCount(count);
+                allQuesCount += count;
+            } else {
+                paperDetail.setScore(0d);
+            }
+        }
+        paper.setUnitCount(allQuesCount);
+        paper.setPaperDetailCount(paperDetails.size());
+        paper.setTotalScore(totalScore);
+        if (user != null) {
+            paper.setLastModifyName(user.getName());
+        }
+        paperDetailRepo.save(paperDetails);
+        paperRepo.save(paper);
+    }
+
+    /**
+     * 先备份准备删掉的试题,然后再删掉
+     *
+     * @param questionId
+     * @return
+     */
+    public List<String> deleteImportQuestionById(String questionId, AccessUser user) {
+        Question ques = quesRepo.findOne(questionId);
+        List<PaperDetailUnit> pdus = CommonUtils.toList(paperDetailUnitRepo.findByQuestion(ques));
+        List<String> paperNames = new ArrayList<String>();
+        List<PaperDetailUnit> needPdus = new ArrayList<PaperDetailUnit>();// 需要删除的小题
+        List<Paper> papers = new ArrayList<Paper>();
+        for (PaperDetailUnit pdu : pdus) {
+            if (pdu.getPaper() != null) {
+                if (!papers.contains(pdu.getPaper())) {
+                    papers.add(pdu.getPaper());
+                }
+                if (PaperType.GENERATE == pdu.getPaper().getPaperType()) {
+                    paperNames.add(pdu.getPaper().getName());
+                }
+            }
+
+        }
+
+        if (paperNames.size() == 0) {
+            needPdus.addAll(pdus);// 此试题没有被组卷调用,则可以删除此试题
+            paperDetailUnitRepo.delete(needPdus);
+            quesBakRepo.save(BeanCopierUtil.copyProperties(ques, QuestionBak.class));
+            quesRepo.delete(ques);
+            for (Paper paper : papers) {
+                formatPaper(paper, user);
+            }
+
+        }
+        return paperNames;
+    }
+
+    /**
+     * 向试卷中插入一个试题
+     *
+     * @param paperId
+     * @param paperDetailId
+     * @return
+     */
+    public Paper insertQuestionToPaper(String paperId, String paperDetailId, Question question, AccessUser user) {
+        question.setOrgId(user.getRootOrgId().toString());
+        quesService.updateQuesWord(question);
+        question = quesRepo.save(question);
+        Paper paper = paperRepo.findOne(paperId);
+        PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
+        PaperDetailUnit pdu = new PaperDetailUnit();
+        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
+        pdu.setPaper(paper);
+        pdu.setQuestionType(question.getQuestionType());
+        pdu.setQuestion(question);
+        pdu.setCreateTime(CommonUtils.getCurDateTime());
+        pdu.setPaperDetail(pd);
+        pdus.add(pdu);
+        Collections.sort(pdus);
+        pdu.setNumber(pdus.indexOf(pdu) + 1);
+        pdu.setScore(0d);
+        paperDetailUnitRepo.save(pdu);
+        formatPaper(paper, user);
+        return paper;
+
+    }
+
+    /**
+     * 获取试题所在的试卷名称
+     *
+     * @param questionId
+     * @return
+     */
+    public List<String> getPaperNamesByQuestionId(String questionId) {
+        List<String> paperNames = new ArrayList<String>();
+        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByQuestion(quesRepo.findOne(questionId));
+        for (PaperDetailUnit pdu : pdus) {
+            paperNames.add(pdu.getPaper().getName());
+        }
+        return paperNames;
+
+    }
+
+    public Page<Question> listQuestionforSelect(String paperId,
+                                                int curPage,
+                                                int pageSize,
+                                                QuesStructType quesType,
+                                                AccessUser accessUser) {
+        Set<String> selectedIds = new HashSet<>();
+        Paper paper = paperRepo.findOne(paperId);
+        // QuestionSearchCondition ques = new QuestionSearchCondition();
+        // if (quesType != null) {
+        // ques.setQuestionType(quesType);
+        // }
+        // Map<String, String> quesParams = new HashMap<String, String>();
+        // quesParams.put("courseName", paper.getCourseName());
+        // ques.setQuesParams(quesParams);
+        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaper(paper);
+        for (PaperDetailUnit pdu : pdus) {
+            selectedIds.add(pdu.getQuestion().getId());
+        }
+        // Page<Question> allQuestions = quesService.findAll(ques, curPage,
+        // pageSize);
+        // Iterator<Question> que = allQuestions.iterator();
+        // while (que.hasNext()) {
+        // if (selectedIds.contains(que.next().getId())) {
+        // que.remove();
+        // }
+        // }
+        return quesService.findByIdExclude(selectedIds, paper.getCourseNo(), quesType, curPage, pageSize,accessUser.getRootOrgId());
+    }
+
+    public Paper selectQuestionsToPaper(String paperId, String paperDetailId, List<Question> questions,
+            AccessUser user) {
+        Paper paper = paperRepo.findOne(paperId);
+        PaperDetail pd = paperDetailRepo.findOne(paperDetailId);
+        List<PaperDetailUnit> pdus = paperDetailUnitRepo.findByPaperDetail(pd);
+        List<PaperDetailUnit> saveUnits = new ArrayList<PaperDetailUnit>();
+        for (Question ques : questions) {
+            PaperDetailUnit pdu = new PaperDetailUnit();
+            pdu.setPaper(paper);
+            pdu.setQuestionType(ques.getQuestionType());
+            pdu.setQuestion(ques);
+            pdu.setCreateTime(CommonUtils.getCurDateTime());
+            pdu.setPaperDetail(pd);
+            pdu.setScore(0d);
+            pdus.add(pdu);
+            saveUnits.add(pdu);
+        }
+        Collections.sort(pdus);
+        for (int i = 0; i < saveUnits.size(); i++) {
+            saveUnits.get(i).setNumber(pdus.indexOf(saveUnits.get(i)) + 1);
+        }
+
+        paperDetailUnitRepo.save(saveUnits);
+        formatPaper(paper, user);
+        return paper;
+    }
+
+    public String checkPaperName(String paperName, String orgId) {
+        String msg = null;
+        Paper paperTemp = new Paper();
+        paperTemp.setCreateTime(null);
+        paperTemp.setName(paperName.trim());
+        paperTemp.setOrgId(orgId);
+        Paper paper = paperRepo.findOne(Example.of(paperTemp));
+        if (paper != null) {
+            msg = "试卷名称重复,请重新命名";
+        }
+        return msg;
+
+    }
+
+    public void checkPaperNameNew(String paperName, String orgId)throws Exception{
+        Paper paperTemp = new Paper();
+        paperTemp.setCreateTime(null);
+        paperTemp.setName(paperName.trim());
+        paperTemp.setOrgId(orgId);
+        Paper paper = paperRepo.findOne(Example.of(paperTemp));
+        if (paper != null) {
+            throw new PaperException("试卷名称重复,请重新命名");
+        }
+    }
+
+    private String relaceQuestionIdx(String str, int baseIdx) {
+        StringBuffer sb = new StringBuffer("");
+        Pattern pattern = Pattern.compile("##(\\d+)##");
+
+        Matcher matcher = pattern.matcher(str);
+
+        while (matcher.find()) {
+            String idx = matcher.group(1);
+            matcher.appendReplacement(sb, "___" + String.valueOf(Integer.parseInt(idx) + baseIdx) + "___");
+        }
+
+        if (StringUtils.isEmpty(sb.toString())) {
+            return str;
+        } else {
+            matcher.appendTail(sb);
+            return sb.toString();
+        }
+    }
+
+    public Page<Paper> getImportPapersNotInIds(PaperSearchInfo paperSearchInfo, String[] ids, int curPage,
+            int pageSize) {
+        Set<String> selectedIds = new HashSet<>();
+        for (String id : ids) {
+            selectedIds.add(id);
+        }
+        Pageable page = new PageRequest(curPage - 1, pageSize);
+        return paperRepo.findByIdNotInAndCourseNoAndOrgIdAndPaperType(selectedIds, paperSearchInfo.getCourseNo(),
+                paperSearchInfo.getOrgId(), PaperType.IMPORT, page);
+    }
+    /**
+     * 将选中的导入试卷复制为卷库试卷
+     */
+    public void useBasePaper(String selectedPaperIds,String userId){
+    	Assert.hasLength(selectedPaperIds, "试卷id不能为空!");
+    	String[] paperIds = selectedPaperIds.split(",");
+    	for(int i = 0;i<paperIds.length;i++){
+    		Paper oldpaper = paperRepo.findOne(paperIds[i]);
+    		List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(oldpaper);
+    		oldpaper.setId(null);
+    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    		String createTime = sdf.format(new Date());
+    		oldpaper.setCreateTime(createTime);
+    		oldpaper.setCreator(userId);
+    		oldpaper.setLastModifyName(userId);
+    		oldpaper.setPaperType(PaperType.GENERATE);//试卷类型 修改为组卷
+    		Paper newPaper = paperRepo.save(oldpaper);
+    		for(int j = 0;j<paperDetails.size();j++){
+    			PaperDetail paperDetail = paperDetails.get(j);
+    			List<PaperDetailUnit> paperDetailUnits = paperDetailUnitService.getUnitsByPaperDetail(paperDetail);
+    			paperDetail.setPaper(newPaper);//关联新Paper
+    			paperDetail.setId(null);
+    			paperDetail.setCreateTime(createTime);
+    			paperDetail.setCreator(userId);
+    			PaperDetail newPaperDetail = paperDetailRepo.save(paperDetail);//保存新的paperDetail
+    			for(int k = 0;k<paperDetailUnits.size();k++){
+    				//重新设置保存PaperDetailUnit
+    				PaperDetailUnit paperDetailUnit = paperDetailUnits.get(k);
+    				paperDetailUnit.setPaper(newPaper);				//关联新Paper
+    				paperDetailUnit.setPaperDetail(newPaperDetail); //关联新paperDetail
+    				paperDetailUnit.setId(null);
+    				paperDetailUnit.setCreateTime(createTime);
+    				paperDetailUnit.setCreator(userId);
+    				paperDetailUnitRepo.save(paperDetailUnit);//保存新的paperDetailUnit
+    			}
+    		}
+    	}
+    }
+    /**
+     * 根据试卷名称、试卷类型检查名称是否存在
+     * @param paperName
+     * @param paperType
+     * @param orgId
+     * @return
+     * @throws Exception
+     */
+    public boolean checkPaperName(String paperName, PaperType paperType,String orgId)throws Exception{
+        Paper paperTemp = new Paper();
+        paperTemp.setCreateTime(null);
+        paperTemp.setName(paperName.trim());
+        paperTemp.setOrgId(orgId);
+        paperTemp.setPaperType(paperType);
+        Paper paper = paperRepo.findOne(Example.of(paperTemp));
+        if(paper!=null){
+        	return false;
+        }
+        return true;
+    }
+}

+ 7 - 6
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/DzkdExportPaperService.java

@@ -23,6 +23,7 @@ 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.enums.ExamFileType;
 import com.qmth.cqb.utils.exception.PaperException;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
 
@@ -37,10 +38,10 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
         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_TEMPLATE_PAPER);
-            DocxProcessUtil.exportAnswer(dataMap,answerFileName,DZKD_TEMPLATE_ANSWER);
+        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
+            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(dataMap, paperfileName,DZKD_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(dataMap,answerFileName,DZKD_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(id));
             DocxProcessUtil.processImage(answerFileName,getPkgList(id));
             fileList.add(paperfileName);
@@ -116,7 +117,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
 		paperExp.setSubjectiveScore(subjectiveScore);
 		if (objectiveDetails.size() > 0) {
 			setUnitExpNumber(objectiveDetails, 0);
-			setScore(objectiveDetails);
+			appendScoreToQuestionBody(objectiveDetails);
 		}
 		if (subjectiveDetails.size() > 0) {
 			for (PaperDetailExp subDetail : subjectiveDetails) {
@@ -125,7 +126,7 @@ public class DzkdExportPaperService extends ExportPaperAbstractService{
 				objectNumber++;
 			}
 			setUnitExpNumber(subjectiveDetails, objetcUnitSum);
-			setScore(subjectiveDetails);
+			appendScoreToQuestionBody(subjectiveDetails);
 		}
 		returnMap.put("paper", paperExp);
 		returnMap.put("fileName", paperExp.getName());

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

@@ -84,7 +84,14 @@ public abstract class ExportPaperAbstractService {
 	
 	public static final String TEMP_FILE_EXP = "docxExport/";
 	
+	/**
+	 * Word文件后缀
+	 */
 	public static final String DOCX_SUFFIX = ".docx";
+	/**
+	 * Excel文件后缀
+	 */
+	public static final String EXCEL_SUFFIX = ".xlsx";
 
 	public static Configuration CONFIGURATION;
 
@@ -157,7 +164,7 @@ public abstract class ExportPaperAbstractService {
 	}
 	
 	/**
-	 * 下载试卷
+	 * 下载试卷相关文件
 	 * @param id
 	 * @param response
 	 * @throws Exception
@@ -166,7 +173,6 @@ public abstract class ExportPaperAbstractService {
 	
 	/**
 	 * 上传试卷相关文件
-     * 文件路径为:UPLOADURL/机构名称/考试名称/文件类型/文件名称
 	 * @param orgName
 	 * @param examName
 	 * @param paperId
@@ -210,22 +216,22 @@ public abstract class ExportPaperAbstractService {
 			// 选择题,套题下选择题 选项顺序重新排列
 			paperService.reorderChoicequestionOption(paperDetailUnitExps);
 			paperDetailExp.setPaperDetailUnits(paperDetailUnitExps);
-			boolean hasTextAnswer = false;// 判断主观题
+			boolean isSubjective = 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;
+						isSubjective = true;
 						break;
 					}
 				}
 			} else if (paperDetailUnits.get(0).getQuestionType() == QuesStructType.TEXT_ANSWER_QUESTION
 					 ||paperDetailUnits.get(0).getQuestionType() == QuesStructType.FILL_BLANK_QUESTION) {
-				hasTextAnswer = true;
+				isSubjective = true;
 			}
-			if (hasTextAnswer) {
+			if (isSubjective) {
 				subjectiveDetails.add(paperDetailExp);
 				subjectiveScore += paperDetailExp.getScore();
-			} else {
+			}else{
 				objectiveDetails.add(paperDetailExp);
 				paperDetailExp.setNumber(objectNumber);
 				paperDetailExp.setCnNum(CommonUtils.toCHNum(objectNumber));
@@ -242,7 +248,7 @@ public abstract class ExportPaperAbstractService {
 		paperExp.setSubjectiveScore(subjectiveScore);
 		if (objectiveDetails.size() > 0) {
 			setUnitExpNumber(objectiveDetails, 0);
-			setScore(objectiveDetails);
+			appendScoreToQuestionBody(objectiveDetails);
 		}
 		if (subjectiveDetails.size() > 0) {
 			for (PaperDetailExp subDetail : subjectiveDetails) {
@@ -251,7 +257,7 @@ public abstract class ExportPaperAbstractService {
 				objectNumber++;
 			}
 			setUnitExpNumber(subjectiveDetails, objetcUnitSum);
-			setScore(subjectiveDetails);
+			appendScoreToQuestionBody(subjectiveDetails);
 		}
 		returnMap.put("paper", paperExp);
 		returnMap.put("fileName", paperExp.getName());
@@ -306,11 +312,9 @@ public abstract class ExportPaperAbstractService {
 	protected void setUnitExpNumber(List<PaperDetailExp> paperDetails,int startIndxt) throws Exception {
 		int subNum = startIndxt;
 		for (PaperDetailExp paperDetail : paperDetails) {
-			
 			List<PaperDetailUnitExp> paperDetailUnitExpList = paperDetail.getPaperDetailUnits();
-			
+			//对大题下的小题进行排序
 			Collections.sort(paperDetailUnitExpList);
-			
 			for (PaperDetailUnitExp paperDetailUnit:paperDetailUnitExpList) {
 				List<QuesOption> optionList = paperDetailUnit.getQuestion().getQuesOptions();
 				if (optionList != null && optionList.size() > 0) {
@@ -504,7 +508,7 @@ public abstract class ExportPaperAbstractService {
      * @param details
      * @throws Exception
      */
-    protected void setScore(List<PaperDetailExp> details) throws Exception{
+    protected void appendScoreToQuestionBody(List<PaperDetailExp> details) throws Exception{
     	for(PaperDetailExp paperDetailExp:details){
     		if(!checkPaperDetailUnitScore(paperDetailExp)){
     			for(PaperDetailUnitExp paperDetailUnit:paperDetailExp.getPaperDetailUnits()){
@@ -548,8 +552,4 @@ public abstract class ExportPaperAbstractService {
         return pWordMl.toString();
     }
     
-    protected String getRandomFileName(ExamFileType examFileType,String suffix){
-    	return examFileType.name()+"_"+CommonUtils.getCurNum()+suffix;
-    }
-    
 }

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

@@ -36,10 +36,10 @@ public class HzkjExportPaperService extends ExportPaperAbstractService {
         Map<String,Object> dataMap = initExportPaper(paperId);
         List<String> fileList = new ArrayList<String>();
         if (dataMap.get("fileName") != null) {
-            String paperfileName = (String) dataMap.get("fileName");
-            String answerFileName = paperfileName+"__答案";
-            DocxProcessUtil.exportPaper(dataMap, paperfileName,HZKJ_TEMPLATE_PAPER);
-            DocxProcessUtil.exportAnswer(dataMap,answerFileName,HZKJ_TEMPLATE_ANSWER);
+        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
+            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(dataMap, paperfileName,HZKJ_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(dataMap,answerFileName,HZKJ_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);

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

@@ -36,10 +36,10 @@ public class SddxExportPaperService extends ExportPaperAbstractService {
         Map<String,Object> dataMap = initExportPaper(paperId);
         List<String> fileList = new ArrayList<String>();
         if (dataMap.get("fileName") != null) {
-            String paperfileName = (String) dataMap.get("fileName");
-            String answerFileName = paperfileName+"__答案";
-            DocxProcessUtil.exportPaper(dataMap, paperfileName,SDDX_TEMPLATE_PAPER);
-            DocxProcessUtil.exportAnswer(dataMap,answerFileName,SDDX_TEMPLATE_ANSWER);
+        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
+            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(dataMap, paperfileName,SDDX_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(dataMap,answerFileName,SDDX_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);

+ 61 - 35
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SxsfExportPaperService.java

@@ -13,24 +13,31 @@ import javax.servlet.http.HttpServletResponse;
 
 import main.java.com.UpYun;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.util.excel.ExcelWriter;
 
+import com.qmth.cqb.paper.dao.PaperRepo;
 import com.qmth.cqb.paper.dto.ObjectiveQuestionStructure;
 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.dto.SubjectiveQuestionStructure;
 import com.qmth.cqb.paper.model.ExamFile;
+import com.qmth.cqb.paper.model.ExamPaper;
 import com.qmth.cqb.paper.model.ExportStructure;
 import com.qmth.cqb.paper.model.ExtractConfig;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.model.PaperDetail;
 import com.qmth.cqb.paper.model.QuestionTypeNum;
+import com.qmth.cqb.paper.service.PaperService;
 import com.qmth.cqb.question.model.Question;
 import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.enums.ExamFileType;
+import com.qmth.cqb.utils.enums.ExportType;
 import com.qmth.cqb.utils.word.DocxProcessUtil;
 
 /**
@@ -42,15 +49,21 @@ import com.qmth.cqb.utils.word.DocxProcessUtil;
 @Service("sxsfExportPaperService")
 public class SxsfExportPaperService extends ExportPaperAbstractService {
 	
+	@Autowired
+	private PaperService paperService;
+	
+	@Autowired
+    PaperRepo paperRepo;
+	
     @Override
     public void downloadPaper(String paperId, HttpServletResponse response) throws Exception {
         Map<String,Object> dataMap = initExportPaper(paperId);
         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);
+            String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
+            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(dataMap, paperfileName,SXSF_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(dataMap,answerFileName,SXSF_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);
@@ -65,7 +78,6 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
         if (dataMap.get("fileName") != null) {
         	String currNum = CommonUtils.getCurNum();
     		ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
-    		
     		List<QuestionTypeNum> questionTypeNums = new ArrayList<QuestionTypeNum>();
     		if(exportStructure!=null){
     			questionTypeNums = exportStructure.getQuestionTypeNums();
@@ -76,10 +88,15 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
         	if(questionTypeNums.size()>0){
         		checkObjectiveDetailsNum(paperExp,objectiveDetails,questionTypeNums);
         	}
-    		//上传试卷
-        	uploadPaperWord(dataMap,extractConfig,paperId,accessUser,currNum);
-        	//上传答案
-        	uploadAnswerWord(dataMap,extractConfig,paperId,accessUser,currNum);
+        	if(exportStructure==null||exportStructure.getExportType()==ExportType.NORMAL){
+	    		//上传试卷
+	        	uploadPaperWord(dataMap,extractConfig,paperId,accessUser,currNum);
+	        	//上传答案
+	        	uploadAnswerWord(dataMap,extractConfig,paperId,accessUser,currNum);
+        	}else if(exportStructure.getExportType()==ExportType.ONLINE){
+        		//上传机考JSON文件
+        		uploadComputerTestFile(extractConfig,currNum);
+        	}
         	//上传试卷结构
         	if(questionTypeNums.size()>0){
         		uploadPaperStructure(dataMap,extractConfig,paperId,accessUser,currNum,questionTypeNums);
@@ -96,16 +113,15 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
      * @param accessUser
      */
     private void uploadPaperWord(Map<String,Object> dataMap,ExtractConfig extractConfig,String paperId,AccessUser accessUser,String currNum){
-    	String paperfileName = extractConfig.getCourseName()+"_"+extractConfig.getCourseCode()+"_"+currNum+"_试卷";
+    	String paperfileName = currNum+ExamFileType.PAPER.name()+DOCX_SUFFIX;
     	try {
-			DocxProcessUtil.exportPaper(dataMap, paperfileName,SXSF_TEMPLATE_PAPER);
+			DocxProcessUtil.exportWord(dataMap,paperfileName,SXSF_TEMPLATE_PAPER);
 			DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
-			File paperFile  = new File(TEMP_FILE_EXP+paperfileName+DOCX_SUFFIX);
-			String paperFilePath = uploadUrl+paperfileName+DOCX_SUFFIX;
-			//上传至又拍云
+			File paperFile  = new File(TEMP_FILE_EXP+paperfileName);
+			String paperFilePath = uploadUrl+paperfileName;
             UpYun upyun = new UpYun(bucketName,userName,password);
 			upyun.writeFile(paperFilePath, paperFile,true);
-			examFileService.saveExamFile(new ExamFile(extractConfig,paperfileName+DOCX_SUFFIX,paperFilePath,ExamFileType.PAPER),accessUser);
+			examFileService.saveExamFile(new ExamFile(extractConfig,paperFilePath,ExamFileType.PAPER,DOCX_SUFFIX),accessUser);
 			paperFile.delete();
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -121,16 +137,15 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
      * @param accessUser
      */
     private void uploadAnswerWord(Map<String,Object> dataMap,ExtractConfig extractConfig,String paperId,AccessUser accessUser,String currNum){
-    	String answerFileName = extractConfig.getCourseName()+"_"+extractConfig.getCourseCode()+"_"+currNum+"_答案";
+    	String answerFileName = currNum+ExamFileType.ANSWER.name()+DOCX_SUFFIX;
     	try {
-    		DocxProcessUtil.exportAnswer(dataMap,answerFileName,SXSF_TEMPLATE_ANSWER);
+    		DocxProcessUtil.exportWord(dataMap,answerFileName,SXSF_TEMPLATE_ANSWER);
     		DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
-    		File answerFile  = new File(TEMP_FILE_EXP+answerFileName+DOCX_SUFFIX);
-    		String answerFilePath = uploadUrl+answerFileName+DOCX_SUFFIX;
-			//上传至又拍云
+    		File answerFile  = new File(TEMP_FILE_EXP+answerFileName);
+    		String answerFilePath = uploadUrl+answerFileName;
             UpYun upyun = new UpYun(bucketName,userName,password);
 			upyun.writeFile(answerFilePath, answerFile,true);
-			examFileService.saveExamFile(new ExamFile(extractConfig,answerFileName+DOCX_SUFFIX,answerFilePath,ExamFileType.ANSWER),accessUser);
+			examFileService.saveExamFile(new ExamFile(extractConfig,answerFilePath,ExamFileType.ANSWER,DOCX_SUFFIX),accessUser);
 			answerFile.delete();
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -151,6 +166,7 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
      * @return
      */
     private void exportObjectiveQuestionStructures(Map<String,Object> dataMap,ExtractConfig extractConfig,AccessUser accessUser,String currNum,List<QuestionTypeNum> questionTypeNums){
+    	String objectiveFilename = currNum+ExamFileType.PAPER_STRUCTURE_OBJECTIVE.name()+EXCEL_SUFFIX;
     	PaperExp paperExp = (PaperExp) dataMap.get("paper");
     	List<PaperDetailExp> objectiveDetails = paperExp.getObjectiveDetails();
     	//根据试卷结构导出设置中的数量补齐客观题
@@ -161,19 +177,15 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
     			objectiveQuestionStructureList.add(new ObjectiveQuestionStructure(paperExp,paperDetailExp,unit));
     		}
     	}
-    	
     	ExcelWriter objectiveExcelExporter = new ExcelWriter(ObjectiveQuestionStructure.class); 
-    	String objectiveFilename = extractConfig.getCourseName()+"_"+extractConfig.getCourseCode()+"_"+currNum+"_客观题";
 		try {
-			File file = new File(TEMP_FILE_EXP+objectiveFilename+".xlsx");
+			File file = new File(TEMP_FILE_EXP+objectiveFilename);
 			FileOutputStream out = new FileOutputStream(file);
 			objectiveExcelExporter.write(objectiveFilename,objectiveQuestionStructureList,out);
-			//上传至又拍云
-			String objectiveFilePath = uploadUrl+objectiveFilename+".xlsx";
+			String objectiveFilePath = uploadUrl+objectiveFilename;
             UpYun upyun = new UpYun(bucketName,userName,password);
 			upyun.writeFile(objectiveFilePath,file,true);
-			//保存记录
-			examFileService.saveExamFile(new ExamFile(extractConfig,objectiveFilename+".xlsx",uploadUrl+objectiveFilename+".xlsx",ExamFileType.PAPER_STRUCTURE_OBJECTIVE),accessUser);
+			examFileService.saveExamFile(new ExamFile(extractConfig,objectiveFilePath,ExamFileType.PAPER_STRUCTURE_OBJECTIVE,EXCEL_SUFFIX),accessUser);
 			file.delete();
 		} catch (FileNotFoundException e) {
 			e.printStackTrace();
@@ -233,7 +245,7 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
 					if(paperDetailExp.getUnitCount()>typeNum.getQuantity()){
 						throw new RuntimeException("试卷:"+paperExp.getName()
 								+"中"+quesStructType.getName()+"的数量:"+paperDetailExp.getUnitCount()
-								+ ",大于试卷结构导出设置的数量:"+typeNum.getQuantity()+",不符合导出规则");
+								+ ",大于试卷结构导出设置的数量:"+typeNum.getQuantity()+",不符合试卷结构导出规则");
 					}
 				}
 			}
@@ -246,6 +258,7 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
      * @return
      */
     private void exportSubjectiveQuestionStructures(Map<String,Object> dataMap,ExtractConfig extractConfig,AccessUser accessUser,String currNum){
+    	String subjectiveFileName = currNum+ExamFileType.PAPER_STRUCTURE_SUBJECTIVE.name()+EXCEL_SUFFIX;
     	PaperExp paperExp = (PaperExp) dataMap.get("paper");
     	List<PaperDetailExp> subjectiveDetails = paperExp.getSubjectiveDetails();
     	List<SubjectiveQuestionStructure> subjectiveQuestionStructureList = new ArrayList<SubjectiveQuestionStructure>();
@@ -255,17 +268,14 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
     		}
     	}
     	ExcelWriter subjectiveExcelExporter = new ExcelWriter(SubjectiveQuestionStructure.class); 
-    	String subjectiveFileName = extractConfig.getCourseName()+"_"+extractConfig.getCourseCode()+"_"+currNum+"_主观题";
 		try {
-			File file = new File(TEMP_FILE_EXP+subjectiveFileName+".xlsx");
+			File file = new File(TEMP_FILE_EXP+subjectiveFileName);
 			FileOutputStream out = new FileOutputStream(file);
 			subjectiveExcelExporter.write(subjectiveFileName,subjectiveQuestionStructureList,out);
-			//上传至又拍云
-			String subjectiveFilePath = uploadUrl+subjectiveFileName+".xlsx";
+			String subjectiveFilePath = uploadUrl+subjectiveFileName;
             UpYun upyun = new UpYun(bucketName,userName,password);
 			upyun.writeFile(subjectiveFilePath,file,true);
-			//保存记录
-			examFileService.saveExamFile(new ExamFile(extractConfig,subjectiveFileName+".xlsx",uploadUrl+subjectiveFileName+".xlsx",ExamFileType.PAPER_STRUCTURE_SUBJECTIVE),accessUser);
+			examFileService.saveExamFile(new ExamFile(extractConfig,subjectiveFilePath,ExamFileType.PAPER_STRUCTURE_SUBJECTIVE,EXCEL_SUFFIX),accessUser);
 			file.delete();
 		} catch (FileNotFoundException e) {
 			e.printStackTrace();
@@ -274,5 +284,21 @@ public class SxsfExportPaperService extends ExportPaperAbstractService {
 		}
     }
     
+    /**
+     * 创建机考文件,并打包上传至又拍云
+     * @param paperId
+     * @param currNum
+     */
+    private void uploadComputerTestFile(ExtractConfig extractConfig,String currNum){
+    	List<ExamPaper> examPapers = extractConfig.getExamPaperList();
+    	for(ExamPaper examPaper:examPapers){
+    		Paper paper = examPaper.getPaper();
+    		List<PaperDetail> paperDetails = paperService.findPaperDetailsById(paper.getId());
+    		
+    		
+    		
+    	}
+    }
+    
 }
 

+ 1 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/SydxExportPaperService.java

@@ -279,7 +279,7 @@ public class SydxExportPaperService{
         Map<String,Object> dataMap = initExportPaper(id);
         if (dataMap.get("fileName") != null) {
             String fileName = (String) dataMap.get("fileName");
-            DocxProcessUtil.exportPaper(dataMap, fileName,SYDX_TEMPLATE_NORMAL);
+            DocxProcessUtil.exportWord(dataMap, fileName,SYDX_TEMPLATE_NORMAL);
             DocxProcessUtil.processImage(fileName, getPkgList(id));
             fileNames.add(fileName);
             DocxProcessUtil.processDownload(fileNames, response);

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

@@ -36,10 +36,10 @@ public class TjdxExportPaperService extends ExportPaperAbstractService {
         Map<String,Object> dataMap = initExportPaper(paperId);
         List<String> fileList = new ArrayList<String>();
         if (dataMap.get("fileName") != null) {
-            String paperfileName = (String) dataMap.get("fileName");
-            String answerFileName = paperfileName+"__答案";
-            DocxProcessUtil.exportPaper(dataMap, paperfileName,TJDX_TEMPLATE_PAPER);
-            DocxProcessUtil.exportAnswer(dataMap,answerFileName,TJDX_TEMPLATE_ANSWER);
+        	String paperfileName = (String) dataMap.get("fileName")+DOCX_SUFFIX;
+            String answerFileName = (String) dataMap.get("fileName")+"_"+ExamFileType.ANSWER.getName()+DOCX_SUFFIX;
+            DocxProcessUtil.exportWord(dataMap, paperfileName,TJDX_TEMPLATE_PAPER);
+            DocxProcessUtil.exportWord(dataMap,answerFileName,TJDX_TEMPLATE_ANSWER);
             DocxProcessUtil.processImage(paperfileName,getPkgList(paperId));
             DocxProcessUtil.processImage(answerFileName,getPkgList(paperId));
             fileList.add(paperfileName);

+ 33 - 32
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -1,6 +1,5 @@
 package com.qmth.cqb.paper.service.impl;
 
-import java.io.File;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -14,7 +13,6 @@ import java.util.Set;
 
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.nlpcn.commons.lang.util.StringUtil;
 import org.slf4j.Logger;
@@ -675,39 +673,52 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         quesOptions = null;
         return newQuesOptions;
     }
+    
+    @Override
+	public void exportExamPaperInfoCheck(ExportPaperInfoModel exportModel,HttpServletResponse response) throws Exception {
+    	Map<String, Object> exportStructureMap = exportStructureService.findStructureByExamIdAndExamType(exportModel.getExamId()+"",exportModel.getExamType());
+		ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
+		//如果是批量导出
+		if(exportModel.getExportWay()==ExportWay.BATCH){
+			if(exportStructure==null){
+				throw new RuntimeException("该考试下的试卷结构导出设置未制定,不能导出");
+			}
+			//查询该考试下是否所有课程都制定了调卷规则
+			checkAllCourseByExamId(exportModel.getExamId());
+		}
+	}
 
 	@Override
 	public void exportExamPaperInfo(ExportPaperInfoModel exportModel,HttpServletResponse response) throws Exception {
+		//创建试卷和压缩文件 文件夹
+		FileDisposeUtil.createDirectory(downloadDirectory);
+		//创建压缩文件的文件夹
+		FileDisposeUtil.createDirectory(zipDirectory);
 		//如果是批量导出,首先检查该考试下的所有课程是否都制定了调卷规则
 		List<String> paperIds = new ArrayList<String>();
-		if(exportModel.getExportWay()==ExportWay.BATCH&&
-				exportModel.getExportContentList().contains("PAPER_STRUCTURE_OBJECTIVE")){
+		Map<String, Object> exportStructureMap = exportStructureService.findStructureByExamIdAndExamType(exportModel.getExamId()+"",exportModel.getExamType());
+		ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
+		//如果是批量导出
+		if(exportModel.getExportWay()==ExportWay.BATCH){
+			if(exportStructure==null){
+				throw new RuntimeException("该考试下的试卷结构导出设置未制定,不能导出");
+			}
 			paperIds = checkAllCourseByExamId(exportModel.getExamId());
+			//生成试卷结构到downloadDirectory目录
+			if(paperIds.size()>0){
+				//创建试卷结构Excel文件
+				makePaperStructure(exportStructure.getExamName(),paperIds,exportStructure);
+			}
 		}
+		//根据条件获取到文件下载路径,下载文件到服务器的downloadDirectory文件夹
 		List<ExamFile> examFiles = examFileService.findExamFileListByExportPaperInfoModel(exportModel);
-		//创建试卷和压缩文件 文件夹
-		createDirectory(downloadDirectory);
-		createDirectory(zipDirectory);
-		//下载文件到服务器
 		if(examFiles!=null&&examFiles.size()>0){
 			for(ExamFile examFile:examFiles){
 				FileDisposeUtil.saveUrlAs(downloadUrl+examFile.getFilePath(),downloadDirectory+"\\"+examFile.getFileName());
 			}
 		}
-		//生成试卷结构到downloadDirectory目录
-		Map<String, Object> exportStructureMap = exportStructureService.findStructureByExamIdAndExamType(exportModel.getExamId()+"",exportModel.getExamType());
-		ExportStructure exportStructure = (ExportStructure) exportStructureMap.get("exportStructure");
-		if(exportStructure==null){
-			throw new RuntimeException("该考试下的试卷结构导出设置未制定,不能导出");
-		}
-		if(paperIds.size()>0){
-			//创建试卷结构Excel文件
-			makePaperStructure(exportStructure.getExamName(),paperIds,exportStructure);
-		}
 		//创建压缩文件名称
-		String zipFileName = exportStructure.getExamName()+"_"+
-							 exportStructure.getExamType().name()+"_"+
-							 CommonUtils.getCurNum();
+		String zipFileName = exportStructure.getExamName()+"_"+exportStructure.getExamType().name()+"_"+CommonUtils.getCurNum();
 		//将downloadDirectory文件夹压缩成zip文件,存放到zipDirectory文件夹中
 		FileDisposeUtil.fileToZip(downloadDirectory,zipDirectory,zipFileName);
 		//下载zip文件到客户端
@@ -741,7 +752,6 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		return paperIdList;
 	}
 	
-
 	@Override
 	public List<ExamFile> findPaperStructure(String examId, String courseId) {
 		ExamFile examFile = new ExamFile();
@@ -750,7 +760,6 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		return examFileService.findExamFileListByExamFile(examFile);
 	}
 	
-	
 	private void makePaperStructure(String examName,List<String> paperIds,ExportStructure exportStructure) throws Exception{
 		List<QuestionTypeNum> questionTypeNums = exportStructure.getQuestionTypeNums();
 		
@@ -790,13 +799,5 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
     	FileOutputStream out2 = new FileOutputStream(downloadDirectory+"\\"+examName+"_主观题.xlsx");
     	subjectiveExcelExporter.write(examName+"_主观题.xlsx",subjectiveQuestionStructureList,out2);
 	}
-	
-	private void createDirectory(String downloadDirectory) {
-		File directory = new File(downloadDirectory);
-		if(directory.exists()){
-			FileUtils.deleteQuietly(directory);
-		}
-		directory.mkdir();
-	}
-	
+
 }

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

@@ -168,6 +168,23 @@ public class ExtractConfigController {
 		}
 	}
 	
+	@ApiOperation(value = "导出试卷文件前校验", notes = "导出试卷文件前校验")
+	@GetMapping(value = "/exportBatchExamPaperInfoCheck/{exportWay}/{examId}")
+	public ResponseEntity<String> exportExamPaperInfoCheck(HttpServletResponse response,
+											@PathVariable String exportWay,
+											@PathVariable String examId){
+		ExportPaperInfoModel exportModel = new ExportPaperInfoModel();
+		exportModel.setExportWay(ExportWay.strToEnum(exportWay));
+		exportModel.setExamId(examId);
+		try {
+			extractConfigService.exportExamPaperInfoCheck(exportModel,response);
+			return new ResponseEntity<String>(HttpStatus.OK);
+		} catch (Exception e) {
+			return new ResponseEntity<String>(e.getMessage(),HttpStatus.OK);
+		}
+	}
+	
+	
 	@ApiOperation(value = "导出整个考试下所有 课程的试卷、答案、试卷结构", notes = "导出整个考试下所有 课程的试卷、答案、试卷结构")
 	@GetMapping(value = "/exportBatchExamPaperInfo/{exportWay}/{examId}/{exportContentList}")
 	public void exportExamPaperInfo(HttpServletResponse response,