deason před 1 rokem
rodič
revize
7017bba630

+ 41 - 21
src/main/java/cn/com/qmth/examcloud/tool/service/create_random_paper_template/CreateRandomPaperTemplateTask.java

@@ -15,6 +15,7 @@ import cn.com.qmth.examcloud.tool.vo.Pager;
 import cn.com.qmth.examcloud.tool.vo.user.User;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,7 +54,7 @@ public class CreateRandomPaperTemplateTask {
 
     private void execute(User user, JsonNode jsonParams, TaskEntity task) {
         Long examId = jsonParams.get("examId").asLong(0L);
-        Integer questionPool = jsonParams.get("questionPool").asInt(1);
+        String questionPool = jsonParams.get("questionPool").asInt(1) == 1 ? "IMPORT" : "GENERATE";
         String structType = jsonParams.get("structType").asInt(1) == 1 ? "EXACT" : "BLUEPRINT";
         String structName = jsonParams.get("structName").asText("");
         String paperKeywords = jsonParams.get("paperKeywords").asText("");
@@ -168,7 +169,7 @@ public class CreateRandomPaperTemplateTask {
     /**
      * 获取试卷列表
      */
-    private List<String> getPapers(User user, String courseCode, Integer questionPool, String paperKeywords) {
+    private List<String> getPapers(User user, String courseCode, String questionPool, String paperKeywords) {
         Map<String, String> headers = new HashMap<>();
         headers.put("key", user.getKey());
         headers.put("token", user.getToken());
@@ -177,26 +178,49 @@ public class CreateRandomPaperTemplateTask {
         params.put("courseNo", courseCode);
         params.put("ids", "");
 
-        String paperType = questionPool == 1 ? "importPaper" : "genPaper";
-        String url = user.getServerUrl() + "/api/ecs_ques/" + paperType + "/huoge/1/10";
+        int pageNo = 0, pageSize = 100, total = 0;
 
-        String json = HttpHelper.get(url, headers, params);
+        String url;
+        if ("IMPORT".equals(questionPool)) {
+            url = user.getServerUrl() + "/api/ecs_ques/importPaper/huoge/%s/" + pageSize;
+        } else {
+            url = user.getServerUrl() + "/api/ecs_ques/genPaper/huoge/%s/" + pageSize;
+        }
 
+        List<String> paperIds = new ArrayList<>();
         JsonMapper jsonMapper = new JsonMapper();
-        Pager<PaperVO> page = jsonMapper.parseJson(json, new TypeReference<Pager<PaperVO>>() {
+        String[] keywords = paperKeywords.split(",");
 
-        });
+        while (true) {
+            pageNo++;
 
-        String[] keywords = paperKeywords.split(",");
+            String json = HttpHelper.get(String.format(url, pageNo), headers, params);
+            Pager<PaperVO> page = jsonMapper.parseJson(json, new TypeReference<Pager<PaperVO>>() {
 
-        List<String> paperIds = new ArrayList<>();
-        for (PaperVO vo : page.getContent()) {
-            log.info("courseCode:{} paperId:{} paperName:{}", courseCode, vo.getId(), vo.getName());
-            for (String keyword : keywords) {
-                if (vo.getName().contains(keyword)) {
+            });
+
+            if (page == null || CollectionUtils.isEmpty(page.getContent())) {
+                break;
+            }
+
+            total += page.getContent().size();
+            float rate = total * 100f / page.getTotalElements();
+            log.info("courseCode:{} 已获取试卷数:{} 进度:{}%", courseCode, total, rate);
+
+            for (PaperVO vo : page.getContent()) {
+                boolean match = false;
+                for (String keyword : keywords) {
+                    if (vo.getName().contains(keyword)) {
+                        match = true;
+                        break;
+                    }
+                }
+
+                if (match) {
                     paperIds.add(vo.getId());
-                    break;
                 }
+                log.info("【{}】courseCode:{} paperId:{} paperName:{}", match ? "匹配" : "忽略", courseCode, vo.getId(),
+                        vo.getName());
             }
         }
 
@@ -207,24 +231,20 @@ public class CreateRandomPaperTemplateTask {
      * 保存随机抽卷模板
      */
     public void saveRandomPaperTemplate(User user, CourseVO course, String paperStructType, String paperStructId,
-            Integer questionPool, List<String> paperIds) {
+            String paperType, List<String> paperIds) {
         Map<String, String> headers = new HashMap<>();
         headers.put("key", user.getKey());
         headers.put("token", user.getToken());
 
-        String paperType = questionPool == 1 ? "IMPORT" : "GENERATE";
-
         Map<String, String> params = new HashMap<>();
-        params.put("name", course.getCourseName() + "抽卷模板");//todo
+        params.put("name", course.getCourseName() + "-模板");//todo
         params.put("courseId", String.valueOf(course.getCourseId()));
         params.put("paperStructType", paperStructType);
         params.put("paperStructId", paperStructId);
         params.put("paperType", paperType);
         params.put("paperIds", StringUtils.join(paperIds, ","));
 
-        String x = HttpHelper.toUrlParams(params);
-
-        final String url = user.getServerUrl() + "/api/ecs_ques/randompaper/save?" + x;
+        final String url = user.getServerUrl() + "/api/ecs_ques/randompaper/save?" + HttpHelper.toUrlParams(params);
         HttpHelper.post(url, headers, null);
     }