deason 5 жил өмнө
parent
commit
1ce9965961

+ 1 - 1
examcloud-task-api-provider/pom.xml

@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>cn.com.qmth.examcloud.task</groupId>
 		<artifactId>examcloud-task</artifactId>
-		<version>2019-SNAPSHOT</version>
+		<version>v3.0-RELEASE</version>
 	</parent>
 	<artifactId>examcloud-task-api-provider</artifactId>
 

+ 1 - 1
examcloud-task-base/pom.xml

@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>cn.com.qmth.examcloud.task</groupId>
 		<artifactId>examcloud-task</artifactId>
-		<version>2019-SNAPSHOT</version>
+		<version>v3.0-RELEASE</version>
 	</parent>
 	<artifactId>examcloud-task-base</artifactId>
 

+ 1 - 1
examcloud-task-dao/pom.xml

@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>cn.com.qmth.examcloud.task</groupId>
 		<artifactId>examcloud-task</artifactId>
-		<version>2019-SNAPSHOT</version>
+		<version>v3.0-RELEASE</version>
 	</parent>
 	<artifactId>examcloud-task-dao</artifactId>
 

+ 1 - 1
examcloud-task-service/pom.xml

@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>cn.com.qmth.examcloud.task</groupId>
 		<artifactId>examcloud-task</artifactId>
-		<version>2019-SNAPSHOT</version>
+		<version>v3.0-RELEASE</version>
 	</parent>
 	<artifactId>examcloud-task-service</artifactId>
 

+ 71 - 0
examcloud-task-service/src/main/java/cn/com/qmth/examcloud/task/service/consumer/MarkWorkCreateItemsConsumer.java

@@ -0,0 +1,71 @@
+package cn.com.qmth.examcloud.task.service.consumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.com.qmth.examcloud.core.questions.api.ExtractConfigCloudService;
+import cn.com.qmth.examcloud.core.questions.api.request.GetBasePaperReq;
+import cn.com.qmth.examcloud.core.questions.api.response.GetBasePaperResp;
+import cn.com.qmth.examcloud.marking.api.MarkItemCloudService;
+import cn.com.qmth.examcloud.marking.api.bean.MarkItemBean;
+import cn.com.qmth.examcloud.marking.api.request.SaveMarkItemReq;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
+import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
+import cn.com.qmth.examcloud.task.base.multithread.Consumer;
+import cn.com.qmth.examcloud.task.service.dto.MarkWorkCreateItemsDto;
+import cn.com.qmth.examcloud.web.support.SpringContextHolder;
+
+public class MarkWorkCreateItemsConsumer extends Consumer<MarkWorkCreateItemsDto> {
+
+	private ExtractConfigCloudService extractConfigCloudService = SpringContextHolder
+			.getBean(ExtractConfigCloudService.class);
+
+	private MarkItemCloudService markItemCloudService = SpringContextHolder.getBean(MarkItemCloudService.class);
+	private static final double SCORE_INTERVAL = 0.5;
+
+	@Override
+	public void consume(MarkWorkCreateItemsDto dto) {
+		List<String> basePaperIds = dto.getList();
+		Long workId = dto.getWorkId();
+		List<MarkItemBean> markItems = new ArrayList<MarkItemBean>();
+		GetBasePaperReq getBasePaperReq = new GetBasePaperReq();
+		for (String basePaperId : basePaperIds) {
+			getBasePaperReq.setPaperId(basePaperId);
+			GetBasePaperResp getBasePaperResp = extractConfigCloudService.getBasePaper(getBasePaperReq);
+			DefaultPaper defaultPaper = getBasePaperResp.getDefaultPaper();
+			List<DefaultQuestionGroup> defaultQuestionGroupList = defaultPaper.getQuestionGroupList();
+			// 大题号
+			int mainNumber = 1;
+			// 每个小题在试卷中的位置
+			int order = 0;
+			for (DefaultQuestionGroup defaultQuestionGroup : defaultQuestionGroupList) {
+				List<DefaultQuestionStructureWrapper> defaultQuestionStructureWrapperList = defaultQuestionGroup
+						.getQuestionWrapperList();
+				// 小题号
+				int subNumber = 1;
+				for (DefaultQuestionStructureWrapper defaultQuestionStructureWrapper : defaultQuestionStructureWrapperList) {
+					List<DefaultQuestionUnitWrapper> defaultQuestionUnitWrapperList = defaultQuestionStructureWrapper
+							.getQuestionUnitWrapperList();
+					for (DefaultQuestionUnitWrapper defaultQuestionUnitWrapper : defaultQuestionUnitWrapperList) {
+						order++;
+						if ("FILL_UP".equals(defaultQuestionUnitWrapper.getQuestionType().toString())
+								|| "ESSAY".equals(defaultQuestionUnitWrapper.getQuestionType().toString())) {
+							MarkItemBean markItem = new MarkItemBean(basePaperId, mainNumber,
+									subNumber, defaultQuestionUnitWrapper.getQuestionScore(), SCORE_INTERVAL, order,
+									defaultQuestionStructureWrapper.getQuestionId());
+							markItems.add(markItem);
+						}
+						subNumber++;
+					}
+				}
+				mainNumber++;
+			}
+		}
+		SaveMarkItemReq req = new SaveMarkItemReq();
+		req.setWorkId(workId);
+		req.setMarkItemBeanList(markItems);
+		markItemCloudService.saveMarkWork(req);
+	}
+}

+ 26 - 0
examcloud-task-service/src/main/java/cn/com/qmth/examcloud/task/service/dto/MarkWorkCreateItemsDto.java

@@ -0,0 +1,26 @@
+package cn.com.qmth.examcloud.task.service.dto;
+
+import java.util.List;
+
+public class MarkWorkCreateItemsDto{
+	private List<String> list;
+	private Long workId;
+	public List<String> getList() {
+		return list;
+	}
+	public void setList(List<String> list) {
+		this.list = list;
+	}
+	public Long getWorkId() {
+		return workId;
+	}
+	public void setWorkId(Long workId) {
+		this.workId = workId;
+	}
+	public MarkWorkCreateItemsDto(List<String> list, Long workId) {
+		super();
+		this.list = list;
+		this.workId = workId;
+	}
+	
+}

+ 8 - 71
examcloud-task-service/src/main/java/cn/com/qmth/examcloud/task/service/job/MarkWorkPaperCreateTask.java

@@ -1,34 +1,20 @@
 package cn.com.qmth.examcloud.task.service.job;
 
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import cn.com.qmth.examcloud.commons.exception.StatusException;
-import cn.com.qmth.examcloud.core.oe.admin.api.ExamRecordForMarkingCloudService;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamRecordForMarkingBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.request.FindExamRecordForMarkingInfoReq;
-import cn.com.qmth.examcloud.core.oe.admin.api.response.FindExamRecordForMarkingInfoResp;
-import cn.com.qmth.examcloud.core.questions.api.ExtractConfigCloudService;
-import cn.com.qmth.examcloud.core.questions.api.request.GetBasePaperReq;
-import cn.com.qmth.examcloud.core.questions.api.response.GetBasePaperResp;
-import cn.com.qmth.examcloud.marking.api.MarkItemCloudService;
 import cn.com.qmth.examcloud.marking.api.MarkWorkCloudService;
-import cn.com.qmth.examcloud.marking.api.bean.MarkItemBean;
 import cn.com.qmth.examcloud.marking.api.bean.MarkWorkBean;
 import cn.com.qmth.examcloud.marking.api.bean.MarkWorkMainBean;
-import cn.com.qmth.examcloud.marking.api.request.SaveMarkItemReq;
 import cn.com.qmth.examcloud.marking.api.request.UpdateMarkWorkReq;
 import cn.com.qmth.examcloud.marking.api.response.GetTodoMarkWorkMainResp;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultPaper;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionGroup;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionStructureWrapper;
-import cn.com.qmth.examcloud.question.commons.core.paper.DefaultQuestionUnitWrapper;
 import cn.com.qmth.examcloud.task.service.consumer.MarkWorkCreateConsumer;
+import cn.com.qmth.examcloud.task.service.consumer.MarkWorkCreateItemsConsumer;
+import cn.com.qmth.examcloud.task.service.producer.MarkWorkCreateItemsProducer;
 import cn.com.qmth.examcloud.task.service.producer.MarkWorkCreateProducer;
 import cn.com.qmth.examcloud.web.task.AbstractTask;
 import cn.com.qmth.examcloud.web.task.ScheduleJob;
@@ -37,19 +23,10 @@ import cn.com.qmth.examcloud.web.task.TaskTracker;
 @Component("markWorkPaperCreateTask")
 public class MarkWorkPaperCreateTask extends AbstractTask {
 
-    private static final double SCORE_INTERVAL = 0.5;
 
     @Autowired
     private MarkWorkCloudService markWorkCloudService;
 
-    @Autowired
-    private MarkItemCloudService markItemCloudService;
-
-    @Autowired
-    private ExtractConfigCloudService extractConfigCloudService;
-
-    @Autowired
-    private ExamRecordForMarkingCloudService examRecordForMarkingCloudService;
 
     @Autowired
     TaskTracker TaskTracker;
@@ -84,52 +61,12 @@ public class MarkWorkPaperCreateTask extends AbstractTask {
         }
     }
 
-    private void createMarkItems(Long examId, Long workId) {
-        // 根据考试批次ID获取需要阅卷的试卷集合
-        FindExamRecordForMarkingInfoReq markingReq = new FindExamRecordForMarkingInfoReq();
-        markingReq.setExamId(examId);
-        markingReq.setBatchNum(workId + "");
-        FindExamRecordForMarkingInfoResp markingResp = examRecordForMarkingCloudService
-                .findExamRecordForMarkingInfo(markingReq);
-        List<ExamRecordForMarkingBean> examRecordForMarkingBeanList = markingResp.getExamRecordForMarkingBeanList();
-        List<MarkItemBean> markItems = new ArrayList<MarkItemBean>();
-        GetBasePaperReq getBasePaperReq = new GetBasePaperReq();
-        for (ExamRecordForMarkingBean markingBean : examRecordForMarkingBeanList) {
-            getBasePaperReq.setPaperId(markingBean.getBasePaperId());
-            GetBasePaperResp getBasePaperResp = extractConfigCloudService.getBasePaper(getBasePaperReq);
-            DefaultPaper defaultPaper = getBasePaperResp.getDefaultPaper();
-            List<DefaultQuestionGroup> defaultQuestionGroupList = defaultPaper.getQuestionGroupList();
-            // 大题号
-            int mainNumber = 1;
-            // 每个小题在试卷中的位置
-            int order = 0;
-            for (DefaultQuestionGroup defaultQuestionGroup : defaultQuestionGroupList) {
-                List<DefaultQuestionStructureWrapper> defaultQuestionStructureWrapperList = defaultQuestionGroup
-                        .getQuestionWrapperList();
-                // 小题号
-                int subNumber = 1;
-                for (DefaultQuestionStructureWrapper defaultQuestionStructureWrapper : defaultQuestionStructureWrapperList) {
-                    List<DefaultQuestionUnitWrapper> defaultQuestionUnitWrapperList = defaultQuestionStructureWrapper
-                            .getQuestionUnitWrapperList();
-                    for (DefaultQuestionUnitWrapper defaultQuestionUnitWrapper : defaultQuestionUnitWrapperList) {
-                        order++;
-                        if ("FILL_UP".equals(defaultQuestionUnitWrapper.getQuestionType().toString())
-                                || "ESSAY".equals(defaultQuestionUnitWrapper.getQuestionType().toString())) {
-                            MarkItemBean markItem = new MarkItemBean(markingBean.getBasePaperId(), mainNumber,
-                                    subNumber, defaultQuestionUnitWrapper.getQuestionScore(), SCORE_INTERVAL, order,
-                                    defaultQuestionStructureWrapper.getQuestionId());
-                            markItems.add(markItem);
-                        }
-                        subNumber++;
-                    }
-                }
-                mainNumber++;
-            }
-        }
-        SaveMarkItemReq req = new SaveMarkItemReq();
-        req.setWorkId(workId);
-        req.setMarkItemBeanList(markItems);
-        markItemCloudService.saveMarkWork(req);
+    private void createMarkItems(Long examId, Long workId) throws InstantiationException, IllegalAccessException{
+    	MarkWorkCreateItemsProducer producer = new MarkWorkCreateItemsProducer();
+        Map<String, Object> param = new HashMap<String, Object>();
+        param.put("examId", examId);
+        param.put("workId", workId);
+        producer.startDispose(MarkWorkCreateItemsConsumer.class, 10, param);
     }
 
     private void createStudentPapers(Long examId, Long workId) throws InstantiationException, IllegalAccessException {

+ 82 - 0
examcloud-task-service/src/main/java/cn/com/qmth/examcloud/task/service/producer/MarkWorkCreateItemsProducer.java

@@ -0,0 +1,82 @@
+package cn.com.qmth.examcloud.task.service.producer;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import cn.com.qmth.examcloud.core.oe.admin.api.ExamRecordForMarkingCloudService;
+import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamRecordForMarkingBean;
+import cn.com.qmth.examcloud.core.oe.admin.api.request.FindExamRecordForMarkingInfoReq;
+import cn.com.qmth.examcloud.core.oe.admin.api.response.FindExamRecordForMarkingInfoResp;
+import cn.com.qmth.examcloud.support.cache.CacheHelper;
+import cn.com.qmth.examcloud.support.cache.bean.SysPropertyCacheBean;
+import cn.com.qmth.examcloud.task.base.multithread.Producer;
+import cn.com.qmth.examcloud.task.service.dto.MarkWorkCreateItemsDto;
+import cn.com.qmth.examcloud.web.support.SpringContextHolder;
+
+public class MarkWorkCreateItemsProducer extends Producer {
+
+    private ExamRecordForMarkingCloudService examRecordForMarkingCloudService = SpringContextHolder
+            .getBean(ExamRecordForMarkingCloudService.class);
+
+
+    private static final Logger logger = LoggerFactory.getLogger(MarkWorkCreateItemsProducer.class);
+
+    @Override
+    protected void produce(Map<String, Object> param) throws Exception {
+        Long examId = (Long) param.get("examId");
+        Long workId = (Long) param.get("workId");
+        Long batchSize = 50L;
+        SysPropertyCacheBean spc = CacheHelper.getSysProperty("marking.rpc.saveMarkItems.batchSize");
+        if (spc != null && spc.getValue() != null) {
+            batchSize = (Long) spc.getValue();
+        }
+        
+        FindExamRecordForMarkingInfoReq markingReq = new FindExamRecordForMarkingInfoReq();
+        markingReq.setExamId(examId);
+        markingReq.setBatchNum(workId + "");
+        FindExamRecordForMarkingInfoResp markingResp = examRecordForMarkingCloudService
+                .findExamRecordForMarkingInfo(markingReq);
+        List<ExamRecordForMarkingBean> examRecordForMarkingBeanList = markingResp.getExamRecordForMarkingBeanList();
+        if(examRecordForMarkingBeanList!=null&&examRecordForMarkingBeanList.size()>0) {
+        	List<String> result=duplicateRemoval(examRecordForMarkingBeanList);
+        	logger.info("创建评卷工作评分项,试卷套数:" + result.size());
+        	subListDispose(result, workId, batchSize);
+        }else {
+        	logger.info("创建评卷工作评分项,试卷套数:0");
+        }
+    }
+
+
+    private List<String> duplicateRemoval(List<ExamRecordForMarkingBean> list){
+    	Set<String> set=new HashSet<String>();
+    	for(ExamRecordForMarkingBean bean:list) {
+    		set.add(bean.getBasePaperId());
+    	}
+    	List<String> result = new ArrayList<>(set);
+    	return result;
+    }
+    
+    private void subListDispose(List<String> list, Long workId, Long batchSize) throws InterruptedException {
+        if (list.size() <= batchSize) {
+            // 生产需处理的数据
+            offer(new MarkWorkCreateItemsDto(list, workId));
+        } else {
+            int size = list.size();
+            int len = batchSize.intValue();
+            int count = (size + len - 1) / len;
+
+            for (int i = 0; i < count; i++) {
+                List<String> subList = list.subList(i * len,
+                        ((i + 1) * len > size ? size : len * (i + 1)));
+                // 生产需处理的数据
+                offer(new MarkWorkCreateItemsDto(subList, workId));
+            }
+        }
+    }
+}

+ 1 - 1
examcloud-task-starter/pom.xml

@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>cn.com.qmth.examcloud.task</groupId>
 		<artifactId>examcloud-task</artifactId>
-		<version>2019-SNAPSHOT</version>
+		<version>v3.0-RELEASE</version>
 	</parent>
 	<artifactId>examcloud-task-starter</artifactId>
 

+ 2 - 2
examcloud-task-starter/shell/start.sh

@@ -1,8 +1,8 @@
 #!/bin/bash
 
 FILE_PATH=$(cd `dirname $0`; pwd)
-APP_VERSION=`cat $FILE_PATH/version`
-APP_MAIN_JAR="examcloud-task-starter-"$APP_VERSION"-SNAPSHOT.jar"
+
+APP_MAIN_JAR="examcloud-task-starter-v3.0-RELEASE.jar"
 
 JAVA_OPTS=`cat $FILE_PATH/start.vmoptions`
 APP_ARGS=`cat $FILE_PATH/start.args`

+ 2 - 2
examcloud-task-starter/shell/stop.sh

@@ -1,8 +1,8 @@
 #!/bin/bash
 
 FILE_PATH=$(cd `dirname $0`; pwd)
-APP_VERSION=`cat $FILE_PATH/version`
-APP_MAIN_JAR="examcloud-task-starter-"$APP_VERSION"-SNAPSHOT.jar"
+
+APP_MAIN_JAR="examcloud-task-starter-v3.0-RELEASE.jar"
 
 PID_LIST=`ps -ef|grep $APP_MAIN_JAR|grep java|awk '{print $2}'`
 

+ 0 - 1
examcloud-task-starter/shell/version

@@ -1 +0,0 @@
-2019

+ 2 - 2
pom.xml

@@ -6,11 +6,11 @@
 	<parent>
 		<groupId>cn.com.qmth.examcloud</groupId>
 		<artifactId>examcloud-parent</artifactId>
-		<version>2019</version>
+		<version>v3.0-RELEASE</version>
 	</parent>
 	<groupId>cn.com.qmth.examcloud.task</groupId>
 	<artifactId>examcloud-task</artifactId>
-	<version>2019-SNAPSHOT</version>
+	<version>v3.0-RELEASE</version>
 	<packaging>pom</packaging>
 	<dependencyManagement>
 		<dependencies>