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

增加了分档随机性的功能

YuanPan 7 éve
szülő
commit
9071fbe4b5

+ 8 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/SnapshotController.java

@@ -24,6 +24,9 @@ public class SnapshotController {
     private JdbcTemplate jdbcTemplate;
 
 
+    @Value("${app.snapshot.initsql}")
+    private String initsql;
+
     @Value("${app.snapshot.fdsql}")
     private String fdsql;
 
@@ -33,6 +36,11 @@ public class SnapshotController {
     @Value("${app.snapshot.fpsql}")
     private String fpsql;
 
+    @PostMapping("/init")
+    public void init() {
+        execSql(initsql);
+    }
+
 
     @PostMapping("/fendang")
     public void fendang() {

+ 11 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/task/MarkTask.java

@@ -66,6 +66,9 @@ public class MarkTask implements Serializable {
     @Temporal(value = TemporalType.TIMESTAMP)
     private Date updatedOn;
 
+
+    private Integer randomSeq;
+
     public MarkTask(MarkUser marker, Paper paper, MarkStage stage){
         this.markerId = marker.getId();
         this.markerName = marker.getName();
@@ -191,4 +194,12 @@ public class MarkTask implements Serializable {
     public void setOriginLevel(String originLevel) {
         this.originLevel = originLevel;
     }
+
+    public Integer getRandomSeq() {
+        return randomSeq;
+    }
+
+    public void setRandomSeq(Integer randomSeq) {
+        this.randomSeq = randomSeq;
+    }
 }

+ 2 - 1
stmms-ms-main/src/main/resources/application-dev.properties

@@ -48,6 +48,7 @@ web.upload-path=/Users/yuanpan/tmp/stmms-ms/static/
 spring.mvc.static-path-pattern=/**
 spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}
 
+app.snapshot.initsql=/Users/yuanpan/dumps/stmms-ms-2-init.sql
 app.snapshot.fdsql=/Users/yuanpan/dumps/stmms-ms-2-fendang.sql
 app.snapshot.dfsql=/Users/yuanpan/dumps/stmms-ms-2-dafen.sql
-app.snapshot.fpsql=/Users/yuanpan/dumps/stmms-ms-2-fuping.sql
+app.snapshot.fpsql=/Users/yuanpan/dumps/stmms-ms-2-fuping.sql

+ 2 - 0
stmms-ms-main/src/main/resources/application.properties

@@ -42,6 +42,8 @@ sys.config.imageServer.port=8080
 #图片服务器ip
 sys.config.imageServer.ip=118.122.113.10
 sys.config.yangjuan=false
+#分档的试卷随机捆大小
+sys.config.random-bundle-size=600
 #前端部署目录
 web.upload-path=/home/xuhuaq/stmms-ms/
 spring.mvc.static-path-pattern=/**

+ 54 - 17
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/AssignTaskService.java

@@ -1,13 +1,13 @@
 package cn.com.qmth.stmms.ms.marking.service;
 
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -26,45 +26,82 @@ public class AssignTaskService {
     @Autowired
     private MarkTaskRepo markTaskRepo;
 
+    @Value("${sys.config.random-bundle-size}")
+    private int randomBundleSize;
+
 
     /**
      * 单评任务模式,每个科目评卷员都需要对该科目每份试卷进行评卷
      * 比如,色彩有1000份试卷,那么每个评卷员都需要评1000份
+     *
      * @param papers
      * @param markers
      */
     @Transactional
-    public void assignForAll(List<Paper> papers, Iterable<MarkUser> markers, MarkSubject markSubject){
-        Iterator<Paper> iterator = papers.iterator();
-        while(iterator.hasNext()){
-            Paper paper = iterator.next();
-            for(MarkUser marker : markers){
-                MarkTask markTask = new MarkTask(marker,paper,markSubject.getStage());
-                markTaskRepo.save(markTask);
-                //taskExecutor.execute(papers,marker,stage);
+    public void assignForAll(List<Paper> papers, Iterable<MarkUser> markers, MarkSubject markSubject) {
+        List<MarkTask> markTasks = new ArrayList<>();
+        int paperCount = papers.size();
+        int randomBundleCount = paperCount / randomBundleSize;
+        if (paperCount % randomBundleSize != 0) {
+            randomBundleCount += 1;
+        }
+
+        for (int i = 0; i < randomBundleCount; i++) {
+            int fromIndex = i * randomBundleSize;
+            int endIndex = i * randomBundleSize + randomBundleSize;
+            if (endIndex > paperCount) {
+                endIndex = paperCount;
             }
+            List<Paper> bundleList = papers.subList(fromIndex, endIndex);
+
+            for (MarkUser marker : markers) {
+                List<Paper> markerPaperList = Arrays.asList(new Paper[bundleList.size()]);
+
+                Collections.copy(markerPaperList, bundleList);
+                Collections.shuffle(markerPaperList);//乱序
+
+                for (int j = 0; j < markerPaperList.size(); j++) {
+                    MarkTask markTask = new MarkTask(marker, markerPaperList.get(j), markSubject.getStage());
+                    markTask.setRandomSeq(i * randomBundleSize + j + 1);
+                    markTasks.add(markTask);
+                }
+            }
+
         }
+
+        markTaskRepo.save(markTasks);
+
+//        Iterator<Paper> iterator = papers.iterator();
+//        while (iterator.hasNext()) {
+//            Paper paper = iterator.next();
+//            for (MarkUser marker : markers) {
+//                MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage());
+//                markTaskRepo.save(markTask);
+//                //taskExecutor.execute(papers,marker,stage);
+//            }
+//        }
     }
 
     /**
      * 分组任务模式,将该科目的评卷员分成N组,将该科目试卷平均分给这些组,每组内的评卷员每人将这些试卷打分
      * 比如:6个评卷员分2组,有1000份试卷,每组评500份,每个评卷员评500份
+     *
      * @param papers
      * @param markerGroups
      */
     @Transactional
-    public void assignForGrouping(List<Paper> papers, List<MarkerGroup> markerGroups,MarkSubject markSubject){
-    	markerGroups = markerGroups.stream().filter(m -> m.getMarkers().size()>0).collect(Collectors.toList());
-    	int groupSize = markerGroups.size();
+    public void assignForGrouping(List<Paper> papers, List<MarkerGroup> markerGroups, MarkSubject markSubject) {
+        markerGroups = markerGroups.stream().filter(m -> m.getMarkers().size() > 0).collect(Collectors.toList());
+        int groupSize = markerGroups.size();
         int idx = 0;
         Iterator<Paper> iterator = papers.iterator();
-        while(iterator.hasNext()){
-            if(idx >= groupSize){
+        while (iterator.hasNext()) {
+            if (idx >= groupSize) {
                 idx = 0;
             }
             Paper paper = iterator.next();
-            for(MarkUser marker : markerGroups.get(idx).getMarkers()){
-                MarkTask markTask = new MarkTask(marker,paper,markSubject.getStage());
+            for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
+                MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage());
                 markTaskRepo.save(markTask);
             }
             idx++;