|
@@ -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++;
|