Forráskód Böngészése

提交调用规则代码

chenken 8 éve
szülő
commit
82acbfa7a8

+ 17 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExamPaperService.java

@@ -0,0 +1,17 @@
+package com.qmth.cqb.paper.service;
+
+import java.util.List;
+
+import com.qmth.cqb.paper.model.ExamPaper;
+
+/**
+ * @author  	chenken
+ * @date    	2017年4月17日 上午10:45:26
+ * @company 	QMTH
+ * @description ExamPaperService.java
+ */
+public interface ExamPaperService {
+	
+	public List<ExamPaper> findExamPaperList(ExamPaper condition);
+}
+

+ 30 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExamPaperServiceImpl.java

@@ -0,0 +1,30 @@
+package com.qmth.cqb.paper.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import com.qmth.cqb.paper.dao.ExamPaperRepo;
+import com.qmth.cqb.paper.model.ExamPaper;
+
+/**
+ * @author  	chenken
+ * @date    	2017年4月17日 上午10:46:40
+ * @company 	QMTH
+ * @description ExamPaperServiceImpl.java
+ */
+@Service("examPaperService")
+public class ExamPaperServiceImpl implements ExamPaperService {
+	
+	@Autowired
+	private ExamPaperRepo examPaperRepo;
+	
+	@Override
+	public List<ExamPaper> findExamPaperList(ExamPaper condition) {
+		return examPaperRepo.findAll(Example.of(condition));
+	}
+
+}
+

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

@@ -0,0 +1,34 @@
+package com.qmth.cqb.paper.service;
+
+import java.util.Map;
+
+import com.qmth.cqb.paper.model.ExtractConfig;
+
+/**
+ * 
+ * @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);
+	/**
+	 * 保存调卷规则
+	 */
+	public void saveExtractConfig(ExtractConfig extractConfig);
+	/**
+	 * 按照设定几率随机生成一套试卷
+	 * @param examId
+	 * @param courseCode
+	 * @param groupCode
+	 * @return
+	 */
+	public Map<String, Object> randomPaper(String extractConfigId,Long examId, String courseCode, String groupCode);
+}

+ 161 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java

@@ -0,0 +1,161 @@
+package com.qmth.cqb.paper.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+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.dto.question.PaperDetailDto;
+import cn.com.qmth.examcloud.common.dto.question.PaperDetailUnitDto;
+import cn.com.qmth.examcloud.common.dto.question.PaperDto;
+import cn.com.qmth.examcloud.common.dto.question.QuesOptionDto;
+import cn.com.qmth.examcloud.common.dto.question.SubQuestionDto;
+import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
+
+import com.qmth.cqb.paper.dao.ExtractConfigRepo;
+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.model.ExamPaper;
+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.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.word.DocxProcessUtil;
+
+/**
+ * 
+ * @author  	chenken
+ * @date    	2017年4月14日 下午6:07:55
+ * @company 	QMTH
+ * @description ExtractConfigServiceImpl.java
+ */
+@Service("extractConfigService")
+public class ExtractConfigServiceImpl implements ExtractConfigService {
+	
+	@Autowired
+    private ExtractConfigRepo extractConfigRepo;
+	
+	@Autowired
+	private PaperDetailRepo paperDetailRepo;
+
+    @Autowired
+    private PaperDetailUnitRepo paperDetailUnitRepo;
+    
+    @Autowired
+    PaperService paperService;
+    
+    @Autowired
+    PaperRepo paperRepo;
+    
+	@Override
+	public ExtractConfig findConfig(ExtractConfig condition) {
+		if(condition.getExamId()==null){
+			return null;
+		}
+		if(StringUtils.isBlank(condition.getCourseCode())){
+			return null;
+		}
+		ExtractConfig tempConfig =  extractConfigRepo.findOne(Example.of(condition));
+        return tempConfig;
+	}
+
+	@Override
+	public void saveExtractConfig(ExtractConfig extractConfig) {
+		List<ExamPaper> examPapers = extractConfig.getExamPaperList();
+		for(int i=0;i<examPapers.size();i++){
+			ExamPaper examPaper = examPapers.get(i);
+			Paper paper = examPaper.getPaper();
+			paper = paperRepo.findOne(paper.getId());
+			examPaper.setPaper(paper);
+		}
+		extractConfigRepo.save(extractConfig);
+	}
+
+	@Override
+	public Map<String, Object> randomPaper(String extractConfigId,Long examId, String courseCode,String groupCode) {
+		ExtractConfig extractConfig = this.findConfig(new ExtractConfig(extractConfigId));
+		//获得抽取好的试卷
+		ExamPaper examPaper = this.getExamPaperByProbability(extractConfig.getExamPaperList());
+        List<Paper> papers = paperService.listExamPapers(examPaper.getExamId(),examPaper.getCourseCode(),examPaper.getGroupCode());
+        if(papers==null||papers.size()==0){
+        	return null;
+        }
+        Map<String, Object> paperMap = new HashMap<String, Object>();
+        Paper paper = papers.get(0);
+        PaperDto paperDto = BeanCopierUtil.copyProperties(paper, PaperDto.class);
+        // 获取大题
+        List<PaperDetail> paperDetails = paperDetailRepo.findByPaper(paper);
+        List<PaperDetailDto> paperDetailDtos = BeanCopierUtil.copyPropertiesOfList(paperDetails, PaperDetailDto.class);
+        paperDto.setPaperDetails(paperDetailDtos);
+        // 封装小题
+        for (int i = 0; i < paperDetailDtos.size(); i++) {
+            List<PaperDetailUnit> paperDetailUnits = paperDetailUnitRepo.findByPaperDetail(paperDetails.get(i));
+            List<PaperDetailUnitDto> paperDetailUnitDtos = BeanCopierUtil.copyPropertiesOfList(paperDetailUnits,
+                    PaperDetailUnitDto.class);
+            for (int j = 0; j < paperDetailUnitDtos.size(); j++) {
+                PaperDetailUnitDto unitDto = paperDetailUnitDtos.get(j);
+                unitDto.setQuesId(paperDetailUnits.get(j).getQuestion().getId());
+                if (StringUtils.isNotEmpty(paperDetailUnits.get(j).getQuestion().getQuesAnswer())) {
+                    String answer = DocxProcessUtil
+                            .getTextInHtml(paperDetailUnits.get(j).getQuestion().getQuesAnswer());
+                    unitDto.setAnswer(answer);
+                }
+                if (unitDto.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {// 假如是套题
+                    List<Question> subQuesList = paperDetailUnits.get(j).getQuestion().getSubQuestions();
+                    List<SubQuestionDto> subQuesDtos = BeanCopierUtil.copyPropertiesOfList(subQuesList,
+                            SubQuestionDto.class);
+                    for (int m = 0; m < subQuesList.size(); m++) {
+                        List<QuesOptionDto> quesOptionDtos = BeanCopierUtil
+                                .copyPropertiesOfList(subQuesList.get(m).getQuesOptions(), QuesOptionDto.class);
+                        subQuesDtos.get(m).setQuesOptions(quesOptionDtos);
+                        subQuesDtos.get(m)
+                                .setQuesAnswer(DocxProcessUtil.getTextInHtml(subQuesList.get(m).getQuesAnswer()));
+                        subQuesDtos.get(m).setNumber(m + 1);
+                    }
+                    unitDto.setSubQuestions(subQuesDtos);
+                }
+            }
+            paperDetailDtos.get(i).setPaperDetailUnits(paperDetailUnitDtos);
+            paperDetailDtos.get(i).setCnNum(CommonUtils.toCHNum(paperDetailDtos.get(i).getNumber()));
+        }
+        paperMap.put("paperDto", paperDto);
+        paperMap.put("msg","success");
+        return paperMap;
+	}
+	
+	/**
+	 * 根据设定好的几率取出一套试卷
+	 * @param examPaperList
+	 * @return
+	 */
+	private ExamPaper getExamPaperByProbability(List<ExamPaper> examPaperList){
+		if(examPaperList == null || examPaperList.size() == 0) {
+       	 	return null;  
+        }
+		double sum = 0.0;  
+        for (int i = 0;i<examPaperList.size();i++) {  
+             sum += examPaperList.get(i).getWeight();  
+        }
+        //得到权重总和
+        int boundary = Integer.valueOf(Math.rint(sum)+"");
+        // 从1开始  
+        Integer rand = new Random().nextInt(boundary) + 1;  
+        for (int i = 0;i<examPaperList.size();i++) {
+            rand -= Integer.valueOf(Math.rint(examPaperList.get(i).getWeight())+"");
+            // 选中
+            if (rand <= 0) {
+                return examPaperList.get(i);
+            }
+        } 
+        return null;
+	}
+}

+ 59 - 0
cqb-paper/src/main/java/com/qmth/cqb/paper/web/ExamPaperController.java

@@ -0,0 +1,59 @@
+package com.qmth.cqb.paper.web;
+
+import io.swagger.annotations.ApiOperation;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections4.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+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.RequestMapping;
+
+import com.qmth.cqb.paper.model.ExamPaper;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.service.ExamPaperService;
+
+/**
+ * @author  	chenken
+ * @date    	2017年4月17日 上午10:40:20
+ * @company 	QMTH
+ * @description ExamPaperController.java
+ */
+@Controller
+@RequestMapping("${api_cqb}/")
+public class ExamPaperController {
+	
+	@Autowired
+	private ExamPaperService examPaperService;
+	
+	@ApiOperation(value = "获取卷库考试试卷,按试卷类型分组", notes = "获取卷库考试试卷,按试卷类型分组")
+    @GetMapping(value = "/examPaper/listByGroupCode/{examId}/{courseCode}")
+	public ResponseEntity<Map<String, List<Paper>>> findExamPaper(@PathVariable Long examId, @PathVariable String courseCode){
+		ExamPaper condition = new ExamPaper();
+		condition.setExamId(examId);
+		condition.setCourseCode(courseCode);
+		//根据考试ID和课程code取出所有试卷
+		List<ExamPaper> examPaperList = examPaperService.findExamPaperList(condition);
+		//按照试卷类型分组
+		Map<String,List<Paper>> examPaperMap = new HashedMap<String,List<Paper>>();
+		for(int i = 0;i<examPaperList.size();i++){
+			ExamPaper examPaper = examPaperList.get(i);
+			if(!examPaperMap.containsKey(examPaper.getGroupCode())){
+				List<Paper> epList = new ArrayList<Paper>();
+				epList.add(examPaper.getPaper());
+				examPaperMap.put(examPaper.getGroupCode(), epList);
+			}else{
+				List<Paper> epList = examPaperMap.get(examPaper.getGroupCode());
+				epList.add(examPaper.getPaper());
+			}
+		}
+		return new ResponseEntity<Map<String, List<Paper>>>(examPaperMap, HttpStatus.OK);
+	}
+}
+

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

@@ -0,0 +1,52 @@
+package com.qmth.cqb.paper.web;
+
+import java.util.Map;
+
+import io.swagger.annotations.ApiOperation;
+
+import org.apache.commons.collections4.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+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 com.qmth.cqb.paper.model.ExtractConfig;
+import com.qmth.cqb.paper.service.ExtractConfigService;
+
+
+/**
+ * 
+ * @author  	chenken
+ * @date    	2017年4月14日 下午6:05:37
+ * @company 	QMTH
+ * @description ExtractConfigController.java
+ */
+@Controller
+@RequestMapping("${api_cqb}/")
+public class ExtractConfigController {
+	@Autowired
+	private ExtractConfigService extractConfigService;
+	
+	@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 = "保存调卷规则", notes = "保存调卷规则")
+    @PutMapping(value = "/extractConfig")
+	public Map<String,Object> saveExtractConfig(@RequestBody ExtractConfig extractConfig){
+		Map<String,Object> paramsMap = new HashedMap<String,Object>();
+		extractConfigService.saveExtractConfig(extractConfig);
+		return paramsMap;
+	}
+}