weiwenhai il y a 7 ans
Parent
commit
21045fb19b

+ 0 - 2
cqb-paper/src/main/java/com/qmth/cqb/paper/dao/AudioTimeConfigRepo.java

@@ -24,7 +24,5 @@ public interface AudioTimeConfigRepo  extends MongoRepository<AudioTimeConfig,St
 	
 	List<AudioTimeConfig> findByExamIdAndCourseCode(String examId,String courseCode);
 	
-	public  AudioTimeConfig  findByPaperDetailUnit(PaperDetailUnit paperDetailUnit);
-	
 }
 

+ 7 - 5
cqb-paper/src/main/java/com/qmth/cqb/paper/model/AudioTimeConfig.java

@@ -5,6 +5,8 @@ import java.util.Date;
 
 import org.springframework.data.mongodb.core.mapping.DBRef;
 
+import com.qmth.cqb.question.model.Question;
+
 
 /**
  * @author  	chenken
@@ -45,7 +47,7 @@ public class AudioTimeConfig implements Serializable {
      * 关联题目
      */
     @DBRef
-    private PaperDetailUnit paperDetailUnit;
+    private Question question;
     /**
      * 播放次数
      */
@@ -79,11 +81,11 @@ public class AudioTimeConfig implements Serializable {
 	public void setPaper(Paper paper) {
 		this.paper = paper;
 	}
-	public PaperDetailUnit getPaperDetailUnit() {
-		return paperDetailUnit;
+	public Question getQuestion() {
+		return question;
 	}
-	public void setPaperDetailUnit(PaperDetailUnit paperDetailUnit) {
-		this.paperDetailUnit = paperDetailUnit;
+	public void setQuestion(Question question) {
+		this.question = question;
 	}
 	public Integer getPlayTime() {
 		return playTime;

+ 100 - 98
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigService.java

@@ -1,98 +1,100 @@
-package com.qmth.cqb.paper.service;
-
-import java.util.List;
-import java.util.Map;
-
-
-
-
-
-import org.springframework.data.domain.Page;
-
-import cn.com.qmth.examcloud.common.dto.question.QuestionDto;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-
-import com.qmth.cqb.paper.model.ExtractConfig;
-import com.qmth.cqb.paper.model.Paper;
-
-/**
- * 
- * @author  	chenken
- * @date    	2017年4月14日 下午6:08:15
- * @company 	QMTH
- * @description 调卷规则接口
- */
-public interface ExtractConfigService {
-	/**
-	 * 根据考试ID和课程code获取规则
-	 * @param examId
-	 * @param courseCode
-	 * @return
-	 */
-	public ExtractConfig findConfig(ExtractConfig extractConfig);
-	/**
-	 * 根据ID获取调卷规则
-	 * @param id
-	 * @return
-	 */
-	public ExtractConfig findConfigById(String id);
-	/**
-	 * 保存调卷规则
-	 * @param extractConfig
-	 * @param orgName		机构名称
-	 * @throws Exception
-	 */
-	public Map<String, String> saveExtractConfig(ExtractConfig extractConfig,AccessUser accessUser) throws Exception;
-	/**
-	 * 按照设定调卷规则生成一套试卷
-	 * 1.根据ExamPaper集合得出每个类型下应该抽取的试卷,并返回 试卷类型--->试卷的map
-	 * 2.根据小题乱序和选项乱序规则,重组试卷
-	 * 3.得到试卷类型--->试卷ID的map,设置到finishedPaperIdMap属性中
-	 * 4.如果 是第一次生成试卷,保存finishedPaperIdMap
-	 * @param extractConfigId	规则 ID
-	 * @return 类型--->试卷ID的Map集合
-	 */
-	public Map<String, String> makePaperByConfig(ExtractConfig extractConfig);
-	/**
-	 * 根据给定试卷重组试卷,生成新的试卷
-	 * @param paper					给定的试卷
-	 * @param upSetQuestionOrder	小题乱序		1:乱序  0:不乱序
-	 * @param upSetOptionOrder		选项乱序		1:乱序  0:不乱序
-	 * @return
-	 */
-	public Paper recombinationPaper(Paper paper,int upSetQuestionOrder,int upSetOptionOrder);
-	/**
-	 * 根据courseNo和orgId取出所有被引用的试卷 ID
-	 * @return
-	 */
-	public List<String> getExamPaperId(String courseCode,String orgId);
-	/**
-	 * 根据考试ID,课程code,试卷类型生成试卷
-	 * @return PaperDto
-	 */
-	public Map<String, Object> extractExamPaper(Long exam_id,String course_code,String group_code);
-	/**
-	 * 根据paperDetailUnitId抽取单个试题
-	 * @param id
-	 * @return
-	 */
-	public QuestionDto extractExamQuestion(String paperDetailUnitId);
-	/**
-	 * 判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题
-	 * 全为客观题返回true
-	 * 不全为客观题返回false
-	 * @param newPaper
-	 * @return
-	 */
-	public boolean checkIsAllQbjectiveQuestion(String paperId);
-	/**
-	 * 分页查询调卷规则
-	 * @param currentPage
-	 * @param pageSize
-	 * @param examId
-	 * @param courseNo
-	 * @return
-	 */
-	public Page<ExtractConfig> findPageExtractConfig(int currentPage,int pageSize, Long examId, String courseNo);
-	
-}
+package com.qmth.cqb.paper.service;
+
+import java.util.List;
+import java.util.Map;
+
+
+
+
+
+
+
+import org.springframework.data.domain.Page;
+
+import cn.com.qmth.examcloud.common.dto.question.QuestionDto;
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+
+import com.qmth.cqb.paper.model.ExtractConfig;
+import com.qmth.cqb.paper.model.Paper;
+
+/**
+ * 
+ * @author  	chenken
+ * @date    	2017年4月14日 下午6:08:15
+ * @company 	QMTH
+ * @description 调卷规则接口
+ */
+public interface ExtractConfigService {
+	/**
+	 * 根据考试ID和课程code获取规则
+	 * @param examId
+	 * @param courseCode
+	 * @return
+	 */
+	public ExtractConfig findConfig(ExtractConfig extractConfig);
+	/**
+	 * 根据ID获取调卷规则
+	 * @param id
+	 * @return
+	 */
+	public ExtractConfig findConfigById(String id);
+	/**
+	 * 保存调卷规则
+	 * @param extractConfig
+	 * @param orgName		机构名称
+	 * @throws Exception
+	 */
+	public Map<String, String> saveExtractConfig(ExtractConfig extractConfig,AccessUser accessUser) throws Exception;
+	/**
+	 * 按照设定调卷规则生成一套试卷
+	 * 1.根据ExamPaper集合得出每个类型下应该抽取的试卷,并返回 试卷类型--->试卷的map
+	 * 2.根据小题乱序和选项乱序规则,重组试卷
+	 * 3.得到试卷类型--->试卷ID的map,设置到finishedPaperIdMap属性中
+	 * 4.如果 是第一次生成试卷,保存finishedPaperIdMap
+	 * @param extractConfigId	规则 ID
+	 * @return 类型--->试卷ID的Map集合
+	 */
+	public Map<String, String> makePaperByConfig(ExtractConfig extractConfig);
+	/**
+	 * 根据给定试卷重组试卷,生成新的试卷
+	 * @param paper					给定的试卷
+	 * @param upSetQuestionOrder	小题乱序		1:乱序  0:不乱序
+	 * @param upSetOptionOrder		选项乱序		1:乱序  0:不乱序
+	 * @return
+	 */
+	public Paper recombinationPaper(Paper paper,int upSetQuestionOrder,int upSetOptionOrder);
+	/**
+	 * 根据courseNo和orgId取出所有被引用的试卷 ID
+	 * @return
+	 */
+	public List<String> getExamPaperId(String courseCode,String orgId);
+	/**
+	 * 根据考试ID,课程code,试卷类型生成试卷
+	 * @return PaperDto
+	 */
+	public Map<String, Object> extractExamPaper(Long exam_id,String course_code,String group_code);
+	/**
+	 * 根据paperDetailUnitId抽取单个试题
+	 * @param id
+	 * @return
+	 */
+	public QuestionDto extractExamQuestion(String examId,String courseCode,String groupCode,String paperDetailUnitId);
+	/**
+	 * 判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题
+	 * 全为客观题返回true
+	 * 不全为客观题返回false
+	 * @param newPaper
+	 * @return
+	 */
+	public boolean checkIsAllQbjectiveQuestion(String paperId);
+	/**
+	 * 分页查询调卷规则
+	 * @param currentPage
+	 * @param pageSize
+	 * @param examId
+	 * @param courseNo
+	 * @return
+	 */
+	public Page<ExtractConfig> findPageExtractConfig(int currentPage,int pageSize, Long examId, String courseNo);
+	
+}

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

@@ -707,7 +707,7 @@ public abstract class ExportPaperAbstractService {
 						audioTime.setCourseCode(computerTestPaper.getCourseCode());
 						audioTime.setExamId(examId);
 						audioTime.setGroupCode(computerTestPaper.getGroupCode());
-						audioTime.setPaperDetailUnit(paperDetailUnit);
+						audioTime.setQuestion(paperDetailUnit.getQuestion());
 						AudioTimeConfig audioTimeConfig = audioTimeConfigRepo.findOne(Example.of(audioTime));
 						if(audioTimeConfig!=null){
 							block.setPlayTime(audioTimeConfig.getPlayTime());

+ 26 - 26
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/AudioTimeConfigServiceImpl.java

@@ -1,26 +1,26 @@
-package com.qmth.cqb.paper.service.impl;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.stereotype.Service;
-
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-
-import com.qmth.cqb.paper.dao.AudioTimeConfigRepo;
-import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
-import com.qmth.cqb.paper.dao.PaperRepo;
-import com.qmth.cqb.paper.model.AudioTimeConfig;
-import com.qmth.cqb.paper.model.Paper;
-import com.qmth.cqb.paper.model.PaperDetailUnit;
-import com.qmth.cqb.paper.service.AudioTimeConfigService;
-import com.qmth.cqb.question.service.QuesService;
+package com.qmth.cqb.paper.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+
+import com.qmth.cqb.paper.dao.AudioTimeConfigRepo;
+import com.qmth.cqb.paper.dao.PaperDetailUnitRepo;
+import com.qmth.cqb.paper.dao.PaperRepo;
+import com.qmth.cqb.paper.model.AudioTimeConfig;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
+import com.qmth.cqb.paper.service.AudioTimeConfigService;
+import com.qmth.cqb.question.service.QuesService;
 
 /**
  * @author  	chenken
@@ -82,7 +82,7 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 		    			audioTimeCon.setPaper(paper);
 		    			audioTimeCon.setCourseCode(audioTimeConfig.getCourseCode());
 		    			quesService.formatQues(paperDetailUnit.getQuestion());
-		    			audioTimeCon.setPaperDetailUnit(paperDetailUnit);
+		    			audioTimeCon.setQuestion(audioTimeConfig.getQuestion());
 		    			audioTimeConfigList.add(audioTimeCon);
 		    		}
 		    	}
@@ -102,7 +102,7 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 	public List<AudioTimeConfig> findAudioTimeConfigByExamId(String examId,String courseCode) {
 		List<AudioTimeConfig> list = audioTimeConfigRepo.findByExamIdAndCourseCode(examId,courseCode);
 		for(AudioTimeConfig audioTimeConfig : list){
-			quesService.formatQues(audioTimeConfig.getPaperDetailUnit().getQuestion());
+			quesService.formatQues(audioTimeConfig.getQuestion());
 		}
 		return list;
 	}
@@ -131,7 +131,7 @@ public class AudioTimeConfigServiceImpl implements AudioTimeConfigService{
 		audioTime.setCourseCode(courseCode);
 		audioTime.setExamId(examId);
 		audioTime.setGroupCode(groupCode);
-		audioTime.setPaperDetailUnit(paperDetailUnit);
+		audioTime.setQuestion(paperDetailUnit.getQuestion());
 		AudioTimeConfig audioTimeConfig = audioTimeConfigRepo.findOne(Example.of(audioTime));
 	    if(audioTimeConfig == null){
 	    	map.put("errMessage", "音频次数未设置");

+ 9 - 4
cqb-paper/src/main/java/com/qmth/cqb/paper/service/impl/ExtractConfigServiceImpl.java

@@ -537,7 +537,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	 * 根据paperDetailUnitId中设置的option顺序对option排序
 	 */
 	@Override
-	public QuestionDto extractExamQuestion(String paperDetailUnitId) {
+	public QuestionDto extractExamQuestion(String examId,String courseCode,String groupCode,String paperDetailUnitId) {
         PaperDetailUnit paperDetailUnit = paperDetailUnitRepo.findOne(paperDetailUnitId);
         List<PaperDetailUnit> paperDetailUnits = new ArrayList<PaperDetailUnit>();
         paperDetailUnits.add(paperDetailUnit);
@@ -566,7 +566,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
         		||ques.getQuestionType() == QuesStructType.MULTIPLE_ANSWER_QUESTION){
         	dto.setQuesAnswer(ques.getQuesAnswer());
         }
-        buildQuestionDto(dto,paperDetailUnit);
+        buildQuestionDto(dto,examId,courseCode,groupCode,paperDetailUnit);
         return dto;
     }
 	
@@ -589,10 +589,15 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 	 * 2.给试题音频中有a标签添加url
 	 * @param questionDto
 	 */ 
-	private void buildQuestionDto(QuestionDto questionDto, PaperDetailUnit paperDetailUnit){
+	private void buildQuestionDto(QuestionDto questionDto, String examId,String courseCode,String groupCode,PaperDetailUnit paperDetailUnit){
 		//判断questionDto是否含有音频,如果有添加音频播放次数
 		if(questionDto.getHasAudio() != null && questionDto.getHasAudio() == true){
-			AudioTimeConfig audioTimeConfig = audioTimeConfigRepo.findByPaperDetailUnit(paperDetailUnit);
+			AudioTimeConfig audioTimeCon = new AudioTimeConfig();
+			audioTimeCon.setExamId(examId);
+			audioTimeCon.setCourseCode(courseCode);
+			audioTimeCon.setGroupCode(groupCode);
+			audioTimeCon.setQuestion(paperDetailUnit.getQuestion());
+			AudioTimeConfig audioTimeConfig = audioTimeConfigRepo.findOne(Example.of(audioTimeCon));
 			if(audioTimeConfig != null && audioTimeConfig.getPlayTime() != null){
 				questionDto.setPlayTime(audioTimeConfig.getPlayTime());
 			}else {

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

@@ -1,223 +1,226 @@
-package com.qmth.cqb.paper.web;
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import io.swagger.annotations.ApiOperation;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import cn.com.qmth.examcloud.common.dto.question.PaperDto;
-import cn.com.qmth.examcloud.common.dto.question.QuestionDto;
-import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
-import cn.com.qmth.examcloud.common.util.ErrorMsg;
-
-import com.qmth.cqb.paper.dto.ExportPaperInfoModel;
-import com.qmth.cqb.paper.model.ExtractConfig;
-import com.qmth.cqb.paper.service.ExtractConfigFileService;
-import com.qmth.cqb.paper.service.ExtractConfigService;
-import com.qmth.cqb.utils.enums.ExportWay;
-
-
-/**
- * 
- * @author  	chenken
- * @date    	2017年4月14日 下午6:05:37
- * @company 	QMTH
- * @description 调卷规则控制器
- */
-@Controller
-@RequestMapping("${api_cqb}/")
-public class ExtractConfigController {
-	private static final Logger logger = LoggerFactory.getLogger(ExtractConfigController.class);
-	
-	@Autowired
-	private ExtractConfigService extractConfigService;
-	
-	@Autowired
-	private ExtractConfigFileService extractConfigFileService;
-	
-	@ApiOperation(value = "根据考试ID和课程ID获取调卷规则", notes = "根据考试ID和课程ID获取调卷规则")
-    @GetMapping(value = "/findPageExtractConfig/{currentPage}/{pageSize}")
-	public ResponseEntity findPageExtractConfig(@PathVariable int currentPage,
-														       @PathVariable int pageSize,
-															   @RequestParam("examId") Long examId,
-															   @RequestParam("courseNo") String courseNo){
-		try{
-			Page<ExtractConfig> extractConfigPageList = extractConfigService.findPageExtractConfig(currentPage,pageSize,examId,courseNo);
-			return new ResponseEntity<Page<ExtractConfig>>(extractConfigPageList,HttpStatus.OK);
-		}catch(Exception e){
-			e.printStackTrace();
-			return new ResponseEntity<Object>(new ErrorMsg(e.getMessage()),HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-	
-	@ApiOperation(value = "根据考试ID和课程ID获取调卷规则", notes = "根据考试ID和课程ID获取调卷规则")
-    @GetMapping(value = "/extractConfig/{examId}/{courseCode}")
-	public ResponseEntity<ExtractConfig> findExtractConfig(@PathVariable Long examId,@PathVariable String courseCode){
-		ExtractConfig condition = new ExtractConfig();
-		condition.setExamId(examId);
-		condition.setCourseCode(courseCode);
-		ExtractConfig extractConfig = extractConfigService.findConfig(condition);
-		return new ResponseEntity<ExtractConfig>(extractConfig,HttpStatus.OK);
-	}
-	
-	@ApiOperation(value = "根据ID获取调卷规则", notes = "根据ID获取调卷规则")
-    @GetMapping(value = "/extractConfig/{id}")
-	public ResponseEntity<ExtractConfig> findExtractConfigById(@PathVariable String id){
-		ExtractConfig extractConfig = extractConfigService.findConfigById(id);
-		return new ResponseEntity<ExtractConfig>(extractConfig,HttpStatus.OK);
-	} 
-	
-	@ApiOperation(value = "保存调卷规则", notes = "保存调卷规则")
-    @PutMapping(value = "/extractConfig/{isbuildFile}")
-	public ResponseEntity<Object> saveExtractConfig(HttpServletRequest request,@PathVariable Integer isbuildFile,@RequestBody ExtractConfig extractConfig){
-		try{
-			AccessUser accessUser = (AccessUser) request.getAttribute("accessUser");
-			extractConfig.setOrgId(accessUser.getRootOrgId()+"");
-			extractConfig.setOrgName(accessUser.getRootOrgName());
-			extractConfigFileService.saveExtractConfigAndBuildPaperFile(extractConfig,isbuildFile,accessUser);
-			return new ResponseEntity<Object>(HttpStatus.OK);
-		}catch(Exception e){
-			e.printStackTrace();
-			return new ResponseEntity<Object>(new ErrorMsg(e.getMessage()),HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-	
-	@ApiOperation(value = "抽取考试试卷", notes = "抽取考试试卷")
-    @GetMapping(value = "/extract/{exam_id}/{course_code}/{group_code}")
-    public ResponseEntity extract(@PathVariable Long exam_id, @PathVariable String course_code,@PathVariable String group_code) {
-		try{
-			Map<String, Object> returnMap = extractConfigService.extractExamPaper(exam_id, course_code, group_code);
-			if(returnMap.get("errorMsg")==null){
-				PaperDto paperDto = (PaperDto) returnMap.get("paperDto");
-				return new ResponseEntity<PaperDto>(paperDto, HttpStatus.OK);
-			}else{
-				return new ResponseEntity<String>(returnMap.get("errorMsg")+"", HttpStatus.OK);
-			}
-		}catch(Exception e){
-			logger.error("抽卷失败",e);
-			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-	
-	@ApiOperation(value = "抽取单个试题", notes = "抽取单个试题")
-    @GetMapping(value = "/extractQues/{paperDetailUnitId}")
-    public ResponseEntity<Object> extractQuestion(@PathVariable String paperDetailUnitId){
-		try{
-	        QuestionDto questionDto = extractConfigService.extractExamQuestion(paperDetailUnitId);
-	        return new ResponseEntity<Object>(questionDto,HttpStatus.OK);
-		}catch(Exception e){
-			logger.error("抽题失败",e);
-			e.printStackTrace();
-			return new ResponseEntity<Object>("抽题失败:"+e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-        
-    }
-	
-	@ApiOperation(value = "判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题", 
-				  notes = "判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题")
-    @GetMapping(value = "/checkObjective/{paperId}")
-	public ResponseEntity<Map<String, Object>> checkIsAllObjectiveQuestion(@PathVariable String paperId){
-		Map<String, Object> quesMap = new HashMap<String, Object>();
-		try{
-			if(StringUtils.isBlank(paperId)){
-				quesMap.put("message","paperId不能为空");
-				return new ResponseEntity<Map<String, Object>>(HttpStatus.INTERNAL_SERVER_ERROR);
-			}
-			boolean result = extractConfigService.checkIsAllQbjectiveQuestion(paperId);
-			quesMap.put("result", result);
-			quesMap.put("message", result?"全为客观题":"不全为客观题");
-			return new ResponseEntity<Map<String, Object>>(quesMap, HttpStatus.OK);
-		}catch(Exception e){
-			logger.error("调用checkIsAllQbjectiveQuestion失败",e);
-			quesMap.put("result","error");
-			quesMap.put("message","调用失败");
-			return new ResponseEntity<Map<String, Object>>(HttpStatus.INTERNAL_SERVER_ERROR);
-		}
-	}
-	
-	@ApiOperation(value = "导出单张考试试卷、答案、试卷结构", notes = "导出单张考试试卷、答案、试卷结构")
-	@GetMapping(value = "/exportSingleExamPaperInfo/{exportWay}/{examId}/{courseId}/{exportContentList}")
-	public void exportSingleExamPaperInfo(HttpServletResponse response,
-											@PathVariable String exportWay,
-											@PathVariable String examId,
-											@PathVariable String courseId,
-											@PathVariable String exportContentList){
-		ExportPaperInfoModel exportModel = new ExportPaperInfoModel();
-		exportModel.setExportWay(ExportWay.strToEnum(exportWay));
-		exportModel.setExamId(examId);
-		exportModel.setCourseId(courseId);
-		String[] exportContentArray = exportContentList.split(",");
-		List<String> list = new ArrayList<String>();
-		for(int i = 0;i<exportContentArray.length;i++){
-			list.add(exportContentArray[i]);
-		}
-		exportModel.setExportContentList(list);
-		try {
-			extractConfigFileService.exportExamPaperInfo(exportModel,response);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	@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 {
-			extractConfigFileService.exportExamPaperInfoCheck(exportModel,response);
-			return new ResponseEntity<String>(HttpStatus.OK);
-		} catch (Exception e) {
-			e.printStackTrace();
-			return new ResponseEntity<String>(e.getMessage(),HttpStatus.OK);
-		}
-	}
-	
-	
-	@ApiOperation(value = "导出整个考试下所有 课程的试卷、答案、试卷结构", notes = "导出整个考试下所有 课程的试卷、答案、试卷结构")
-	@GetMapping(value = "/exportBatchExamPaperInfo/{exportWay}/{examId}/{exportContentList}")
-	public void exportBatchExamPaperInfo(HttpServletResponse response,
-											@PathVariable String exportWay,
-											@PathVariable String examId,
-											@PathVariable String exportContentList){
-		ExportPaperInfoModel exportModel = new ExportPaperInfoModel();
-		exportModel.setExportWay(ExportWay.strToEnum(exportWay));
-		exportModel.setExamId(examId);
-		String[] exportContentArray = exportContentList.split(",");
-		List<String> list = new ArrayList<String>();
-		for(int i = 0;i<exportContentArray.length;i++){
-			list.add(exportContentArray[i]);
-		}
-		exportModel.setExportContentList(list);
-		try {
-			extractConfigFileService.exportExamPaperInfo(exportModel,response);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-}	
+package com.qmth.cqb.paper.web;
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.ApiOperation;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import cn.com.qmth.examcloud.common.dto.question.PaperDto;
+import cn.com.qmth.examcloud.common.dto.question.QuestionDto;
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import cn.com.qmth.examcloud.common.util.ErrorMsg;
+
+import com.qmth.cqb.paper.dto.ExportPaperInfoModel;
+import com.qmth.cqb.paper.model.ExtractConfig;
+import com.qmth.cqb.paper.service.ExtractConfigFileService;
+import com.qmth.cqb.paper.service.ExtractConfigService;
+import com.qmth.cqb.utils.enums.ExportWay;
+
+
+/**
+ * 
+ * @author  	chenken
+ * @date    	2017年4月14日 下午6:05:37
+ * @company 	QMTH
+ * @description 调卷规则控制器
+ */
+@Controller
+@RequestMapping("${api_cqb}/")
+public class ExtractConfigController {
+	private static final Logger logger = LoggerFactory.getLogger(ExtractConfigController.class);
+	
+	@Autowired
+	private ExtractConfigService extractConfigService;
+	
+	@Autowired
+	private ExtractConfigFileService extractConfigFileService;
+	
+	@ApiOperation(value = "根据考试ID和课程ID获取调卷规则", notes = "根据考试ID和课程ID获取调卷规则")
+    @GetMapping(value = "/findPageExtractConfig/{currentPage}/{pageSize}")
+	public ResponseEntity findPageExtractConfig(@PathVariable int currentPage,
+														       @PathVariable int pageSize,
+															   @RequestParam("examId") Long examId,
+															   @RequestParam("courseNo") String courseNo){
+		try{
+			Page<ExtractConfig> extractConfigPageList = extractConfigService.findPageExtractConfig(currentPage,pageSize,examId,courseNo);
+			return new ResponseEntity<Page<ExtractConfig>>(extractConfigPageList,HttpStatus.OK);
+		}catch(Exception e){
+			e.printStackTrace();
+			return new ResponseEntity<Object>(new ErrorMsg(e.getMessage()),HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+	
+	@ApiOperation(value = "根据考试ID和课程ID获取调卷规则", notes = "根据考试ID和课程ID获取调卷规则")
+    @GetMapping(value = "/extractConfig/{examId}/{courseCode}")
+	public ResponseEntity<ExtractConfig> findExtractConfig(@PathVariable Long examId,@PathVariable String courseCode){
+		ExtractConfig condition = new ExtractConfig();
+		condition.setExamId(examId);
+		condition.setCourseCode(courseCode);
+		ExtractConfig extractConfig = extractConfigService.findConfig(condition);
+		return new ResponseEntity<ExtractConfig>(extractConfig,HttpStatus.OK);
+	}
+	
+	@ApiOperation(value = "根据ID获取调卷规则", notes = "根据ID获取调卷规则")
+    @GetMapping(value = "/extractConfig/{id}")
+	public ResponseEntity<ExtractConfig> findExtractConfigById(@PathVariable String id){
+		ExtractConfig extractConfig = extractConfigService.findConfigById(id);
+		return new ResponseEntity<ExtractConfig>(extractConfig,HttpStatus.OK);
+	} 
+	
+	@ApiOperation(value = "保存调卷规则", notes = "保存调卷规则")
+    @PutMapping(value = "/extractConfig/{isbuildFile}")
+	public ResponseEntity<Object> saveExtractConfig(HttpServletRequest request,@PathVariable Integer isbuildFile,@RequestBody ExtractConfig extractConfig){
+		try{
+			AccessUser accessUser = (AccessUser) request.getAttribute("accessUser");
+			extractConfig.setOrgId(accessUser.getRootOrgId()+"");
+			extractConfig.setOrgName(accessUser.getRootOrgName());
+			extractConfigFileService.saveExtractConfigAndBuildPaperFile(extractConfig,isbuildFile,accessUser);
+			return new ResponseEntity<Object>(HttpStatus.OK);
+		}catch(Exception e){
+			e.printStackTrace();
+			return new ResponseEntity<Object>(new ErrorMsg(e.getMessage()),HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+	
+	@ApiOperation(value = "抽取考试试卷", notes = "抽取考试试卷")
+    @GetMapping(value = "/extract/{exam_id}/{course_code}/{group_code}")
+    public ResponseEntity extract(@PathVariable Long exam_id, @PathVariable String course_code,@PathVariable String group_code) {
+		try{
+			Map<String, Object> returnMap = extractConfigService.extractExamPaper(exam_id, course_code, group_code);
+			if(returnMap.get("errorMsg")==null){
+				PaperDto paperDto = (PaperDto) returnMap.get("paperDto");
+				return new ResponseEntity<PaperDto>(paperDto, HttpStatus.OK);
+			}else{
+				return new ResponseEntity<String>(returnMap.get("errorMsg")+"", HttpStatus.OK);
+			}
+		}catch(Exception e){
+			logger.error("抽卷失败",e);
+			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+	
+	@ApiOperation(value = "抽取单个试题", notes = "抽取单个试题")
+    @GetMapping(value = "/extractQues/{examId}/{courseCode}/{groupCode}/{paperDetailUnitId}")
+    public ResponseEntity<Object> extractQuestion(@PathVariable String examId,
+    											  @PathVariable String courseCode,
+    											  @PathVariable String groupCode,
+    											  @PathVariable String paperDetailUnitId){
+		try{
+	        QuestionDto questionDto = extractConfigService.extractExamQuestion(examId,courseCode,groupCode,paperDetailUnitId);
+	        return new ResponseEntity<Object>(questionDto,HttpStatus.OK);
+		}catch(Exception e){
+			logger.error("抽题失败",e);
+			e.printStackTrace();
+			return new ResponseEntity<Object>("抽题失败:"+e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+        
+    }
+	
+	@ApiOperation(value = "判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题", 
+				  notes = "判断试卷中的题是否都为客观题(单选、多选、判断),包括套题中的小题")
+    @GetMapping(value = "/checkObjective/{paperId}")
+	public ResponseEntity<Map<String, Object>> checkIsAllObjectiveQuestion(@PathVariable String paperId){
+		Map<String, Object> quesMap = new HashMap<String, Object>();
+		try{
+			if(StringUtils.isBlank(paperId)){
+				quesMap.put("message","paperId不能为空");
+				return new ResponseEntity<Map<String, Object>>(HttpStatus.INTERNAL_SERVER_ERROR);
+			}
+			boolean result = extractConfigService.checkIsAllQbjectiveQuestion(paperId);
+			quesMap.put("result", result);
+			quesMap.put("message", result?"全为客观题":"不全为客观题");
+			return new ResponseEntity<Map<String, Object>>(quesMap, HttpStatus.OK);
+		}catch(Exception e){
+			logger.error("调用checkIsAllQbjectiveQuestion失败",e);
+			quesMap.put("result","error");
+			quesMap.put("message","调用失败");
+			return new ResponseEntity<Map<String, Object>>(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
+	
+	@ApiOperation(value = "导出单张考试试卷、答案、试卷结构", notes = "导出单张考试试卷、答案、试卷结构")
+	@GetMapping(value = "/exportSingleExamPaperInfo/{exportWay}/{examId}/{courseId}/{exportContentList}")
+	public void exportSingleExamPaperInfo(HttpServletResponse response,
+											@PathVariable String exportWay,
+											@PathVariable String examId,
+											@PathVariable String courseId,
+											@PathVariable String exportContentList){
+		ExportPaperInfoModel exportModel = new ExportPaperInfoModel();
+		exportModel.setExportWay(ExportWay.strToEnum(exportWay));
+		exportModel.setExamId(examId);
+		exportModel.setCourseId(courseId);
+		String[] exportContentArray = exportContentList.split(",");
+		List<String> list = new ArrayList<String>();
+		for(int i = 0;i<exportContentArray.length;i++){
+			list.add(exportContentArray[i]);
+		}
+		exportModel.setExportContentList(list);
+		try {
+			extractConfigFileService.exportExamPaperInfo(exportModel,response);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@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 {
+			extractConfigFileService.exportExamPaperInfoCheck(exportModel,response);
+			return new ResponseEntity<String>(HttpStatus.OK);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return new ResponseEntity<String>(e.getMessage(),HttpStatus.OK);
+		}
+	}
+	
+	
+	@ApiOperation(value = "导出整个考试下所有 课程的试卷、答案、试卷结构", notes = "导出整个考试下所有 课程的试卷、答案、试卷结构")
+	@GetMapping(value = "/exportBatchExamPaperInfo/{exportWay}/{examId}/{exportContentList}")
+	public void exportBatchExamPaperInfo(HttpServletResponse response,
+											@PathVariable String exportWay,
+											@PathVariable String examId,
+											@PathVariable String exportContentList){
+		ExportPaperInfoModel exportModel = new ExportPaperInfoModel();
+		exportModel.setExportWay(ExportWay.strToEnum(exportWay));
+		exportModel.setExamId(examId);
+		String[] exportContentArray = exportContentList.split(",");
+		List<String> list = new ArrayList<String>();
+		for(int i = 0;i<exportContentArray.length;i++){
+			list.add(exportContentArray[i]);
+		}
+		exportModel.setExportContentList(list);
+		try {
+			extractConfigFileService.exportExamPaperInfo(exportModel,response);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+}