Selaa lähdekoodia

提交调卷规则 代码

chenken 8 vuotta sitten
vanhempi
commit
0e6b337f04

+ 6 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/model/ExtractConfig.java

@@ -100,7 +100,12 @@ public class ExtractConfig implements Serializable {
     	this.id = id;
     }
     
-    public Long getExamId() {
+    public ExtractConfig(String exam_id, String course_code) {
+    	this.examId = Long.parseLong(exam_id+"");
+    	this.courseCode = course_code;
+	}
+
+	public Long getExamId() {
         return examId;
     }
 

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

@@ -3,6 +3,8 @@ package com.qmth.cqb.paper.service;
 import java.util.List;
 import java.util.Map;
 
+import cn.com.qmth.examcloud.common.dto.question.PaperDto;
+
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.model.Paper;
 
@@ -55,4 +57,9 @@ public interface ExtractConfigService {
 	 * @return
 	 */
 	public List<String> getExamPaperId(String courseCode,String orgId);
+	/**
+	 * 根据考试ID,课程code,试卷类型生成试卷
+	 * @return PaperDto
+	 */
+	public PaperDto extract(String exam_id,String course_code,String group_code);
 }

+ 73 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractConfigServiceImpl.java

@@ -18,6 +18,11 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
+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;
@@ -32,7 +37,10 @@ import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.question.dao.QuesRepo;
 import com.qmth.cqb.question.model.QuesOption;
 import com.qmth.cqb.question.model.Question;
+import com.qmth.cqb.utils.BeanCopierUtil;
+import com.qmth.cqb.utils.CommonUtils;
 import com.qmth.cqb.utils.enums.PaperType;
+import com.qmth.cqb.utils.word.DocxProcessUtil;
 
 /**
  * 
@@ -110,6 +118,26 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		return extractConfigRepo.findOne(id);
 	}
 	
+	@Override
+	public PaperDto extract(String exam_id,String course_code,String group_code){
+		ExtractConfig extractConfig = this.findConfig(new ExtractConfig(exam_id,course_code));
+		if(extractConfig==null){
+			throw new RuntimeException("调卷规则不存在");
+		}
+		//获得规则中设置的试卷
+		Map<String,Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
+		if(paperMap.isEmpty()){
+			throw new RuntimeException("抽取试卷失败");
+		}
+		Paper paper = paperMap.get("group_code");
+		//根据规则中设置的试卷重新组卷得到新试卷
+    	Paper newPaper = this.recombinationPaper(paper, 
+						        				 extractConfig.getScrambling_the_question_order(), 
+						        				 extractConfig.getScrambling_the_option_order());
+    	PaperDto paperDto = getPaperDtoByPaper(newPaper);
+		return paperDto;
+	}
+	
 	@Override
 	public Map<String, String> makePaperByConfig(String extractConfigId) {
 		Map<String, String> finishedPaperIdMap = new HashMap<String, String>();
@@ -118,7 +146,7 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		if(extractConfig==null){
 			throw new RuntimeException("调卷规则不存在");
 		}
-		//获得抽取好的试卷
+		//获得规则中设置的试卷
 		Map<String,Paper> paperMap = this.getExamPaperByProbability(extractConfig.getExamPaperList());
 		if(paperMap.isEmpty()){
 			throw new RuntimeException("抽取试卷失败");
@@ -310,4 +338,48 @@ public class ExtractConfigServiceImpl implements ExtractConfigService {
 		}
 		return paperIdList;
 	}
+	/**
+	 * 根据paper得到PaperDto
+	 * @param paper
+	 * @return
+	 */
+	private PaperDto getPaperDtoByPaper(Paper paper){
+		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()));
+        }
+		return paperDto;
+	}
 }

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

@@ -1,6 +1,9 @@
 package com.qmth.cqb.paper.web;
 
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.servlet.http.HttpServletRequest;
 
 import io.swagger.annotations.ApiOperation;
@@ -15,7 +18,11 @@ import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import cn.com.qmth.examcloud.common.dto.question.PaperDto;
+import cn.com.qmth.examcloud.common.uac.annotation.Uac;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
+import cn.com.qmth.examcloud.common.uac.enums.UacPolicy;
 
 import com.qmth.cqb.paper.model.ExtractConfig;
 import com.qmth.cqb.paper.service.ExtractConfigService;
@@ -74,4 +81,17 @@ public class ExtractConfigController {
 			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
 		}
 	}
+	
+	@ApiOperation(value = "抽取试卷", notes = "抽取试卷")
+    @GetMapping(value = "/extract/{exam_id}/{course_code}/{group_code}")
+    public ResponseEntity<PaperDto> extract(@PathVariable String exam_id, 
+    										@PathVariable String course_code,
+            								@PathVariable String group_code) {
+		try{
+			PaperDto paperDto = extractConfigService.extract(exam_id, course_code, group_code);
+			return new ResponseEntity<PaperDto>(paperDto, HttpStatus.OK);
+		}catch(Exception e){
+			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+	}
 }	

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

@@ -30,7 +30,7 @@ public class ExtractController {
     @Autowired
     ExtractService extractService;
 
-    @ApiOperation(value = "抽取试卷", notes = "抽取试卷")
+    /*@ApiOperation(value = "抽取试卷", notes = "抽取试卷")
     @GetMapping(value = "/extract/{exam_id}/{course_code}/{group_code}")
     public ResponseEntity extract(@PathVariable String exam_id, @PathVariable String course_code,
             @PathVariable String group_code) {
@@ -44,7 +44,7 @@ public class ExtractController {
         } else {
             return new ResponseEntity(paperMap.get("msg"), HttpStatus.INTERNAL_SERVER_ERROR);
         }
-    }
+    }*/
 
     @ApiOperation(value = "抽取单个试题", notes = "抽取单个试题")
     @GetMapping(value = "/extractQues/{ques_id}")