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

网考接口修改

gaoxing 8 éve
szülő
commit
3ab44238dd

+ 45 - 12
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ExtractService.java

@@ -1,9 +1,9 @@
 package com.qmth.cqb.paper.service;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +30,7 @@ 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.QuestionDto;
+import cn.com.qmth.examcloud.common.dto.question.SubQuestionDto;
 import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 
 @Service
@@ -50,20 +51,49 @@ public class ExtractService {
     @Autowired
     PaperDetailUnitRepo paperDetailUnitRepo;
 
+    @Autowired
+    PaperService paperService;
+
     @Autowired
     QuesRepo questionRepo;
 
+    private Map<String, AtomicInteger> randomMap = new HashMap<String, AtomicInteger>();
+
+    /**
+     * 注意:单机版计数器,重启后重新归零;用于随机抽取试卷的规则
+     * 
+     * @param key
+     * @param totalCount
+     * @return
+     */
+    private int randomNumber(String key, int totalCount) {
+        AtomicInteger counter = randomMap.get(key);
+        if (counter == null) {
+            synchronized (ExtractService.class) {
+                counter = randomMap.get(key);
+                if (counter == null) {
+                    counter = new AtomicInteger();
+                    randomMap.put(key, counter);
+                }
+            }
+        }
+
+        return counter.incrementAndGet() % totalCount;
+    }
+
     /**
      * 随机抽一张试卷
      * 
      * @param papers
      * @return
      */
-    public Map<String, Object> randomPaper(List<Paper> papers) {
+    public Map<String, Object> randomPaper(Long examId, String courseCode, String groupCode) {
         String msg = "";
+        List<Paper> papers = paperService.listExamPapers(examId, courseCode, groupCode);
         Map<String, Object> paperMap = new HashMap<String, Object>();
         if (papers.size() > 0) {
-            Collections.shuffle(papers);
+            papers.get(this.randomNumber(examId + courseCode + groupCode, papers.size()));
+
         } else {
             msg = "没有可用的抽取试卷,请检查";
             paperMap.put("msg", msg);
@@ -86,20 +116,21 @@ public class ExtractService {
                 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<QuestionDto> quesDtos = BeanCopierUtil.copyPropertiesOfList(subQuesList, QuestionDto.class);
+                    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);
-                        quesDtos.get(m).setQuesOptions(quesOptionDtos);
-                        quesDtos.get(m)
+                        subQuesDtos.get(m).setQuesOptions(quesOptionDtos);
+                        subQuesDtos.get(m)
                                 .setQuesAnswer(DocxProcessUtil.getTextInHtml(subQuesList.get(m).getQuesAnswer()));
+                        subQuesDtos.get(m).setNumber(m + 1);
                     }
-                    unitDto.setSubQuestions(quesDtos);
+                    unitDto.setSubQuestions(subQuesDtos);
                 }
             }
             paperDetailDtos.get(i).setPaperDetailUnits(paperDetailUnitDtos);
@@ -123,14 +154,16 @@ public class ExtractService {
         Map<String, Object> quesMap = new HashMap<String, Object>();
         Question ques = questionRepo.findOne(id);
         QuestionDto dto = BeanCopierUtil.copyProperties(ques, QuestionDto.class);
-        if (ques.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {// 假如是套题
+        if (ques.getQuestionType() == QuesStructType.NESTED_ANSWER_QUESTION) {
             List<Question> subQuesList = ques.getSubQuestions();
-            List<QuestionDto> quesDtos = BeanCopierUtil.copyPropertiesOfList(subQuesList, QuestionDto.class);
+            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);
-                quesDtos.get(m).setQuesOptions(quesOptionDtos);
-                dto.setSubQuestions(quesDtos);
+                subQuesDtos.get(m).setQuesOptions(quesOptionDtos);
+                subQuesDtos.get(m).setQuesAnswer(DocxProcessUtil.getTextInHtml(subQuesList.get(m).getQuesAnswer()));
+                subQuesDtos.get(m).setNumber(m + 1);
+                dto.setSubQuestions(subQuesDtos);
             }
         }
         msg = "success";

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

@@ -1,7 +1,6 @@
 package com.qmth.cqb.paper.web;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,9 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.qmth.cqb.paper.model.ExtractConfig;
-import com.qmth.cqb.paper.model.Paper;
 import com.qmth.cqb.paper.service.ExtractService;
-import com.qmth.cqb.paper.service.PaperService;
 
 import io.swagger.annotations.ApiOperation;
 
@@ -29,9 +26,6 @@ public class ExtractController {
     @Autowired
     ExtractService extractService;
 
-    @Autowired
-    PaperService paperService;
-
     @ApiOperation(value = "抽取试卷", notes = "抽取试卷")
     @GetMapping(value = "/extract/{exam_id}/{course_code}/{group_code}")
     public ResponseEntity extract(@PathVariable String exam_id, @PathVariable String course_code,
@@ -39,8 +33,7 @@ public class ExtractController {
         Map<String, Object> paperMap = new HashMap<String, Object>();
         ExtractConfig config = extractService.findConfig(Long.parseLong(exam_id), course_code);
         if ("RANDOM_PAPER".equals(config.getPolicy().getKey())) {
-            List<Paper> papers = paperService.listExamPapers(config.getExamId(), config.getCourseCode(), group_code);
-            paperMap = extractService.randomPaper(papers);
+            paperMap = extractService.randomPaper(config.getExamId(), config.getCourseCode(), group_code);
         }
         if (paperMap.get("msg").equals("success")) {
             return new ResponseEntity(paperMap.get("paperDto"), HttpStatus.OK);