|
@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.marking.service;
|
|
|
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
|
|
|
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.*;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
|
|
@@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -115,79 +117,124 @@ public class AssignTaskService {
|
|
|
*/
|
|
|
@Transactional
|
|
|
public void assignForGrouping(List<Paper> papers, List<MarkerGroup> markerGroups, MarkSubject markSubject, List<TaskPublishSetting> taskList) throws Exception {
|
|
|
- markerGroups = markerGroups.stream().filter(m -> m.getMarkers().size() > 0).collect(Collectors.toList());
|
|
|
- int sum = markerGroups.stream().mapToInt(m -> m.getMarkers().size()).sum();
|
|
|
- int groupSize = markerGroups.size();
|
|
|
- int idx = 0;
|
|
|
long currentTime = System.currentTimeMillis();
|
|
|
- Iterator<Paper> iterator = papers.iterator();
|
|
|
- List<MarkTask> markTaskList = new ArrayList<>(papers.size() * sum);
|
|
|
+ List<MarkTask> markTaskList;
|
|
|
List<Paper> paperList = new ArrayList<>(papers.size());
|
|
|
List<MarkTask> markTasks = markTaskRepo.findByWorkId(markSubject.getWorkId());
|
|
|
Map<Long, MarkTask> randomMap = markTasks.stream().collect(Collectors.toMap(MarkTask::getRandomSeqNew, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
- //定序序号记录
|
|
|
- Map map = new HashMap();
|
|
|
- while (iterator.hasNext()) {
|
|
|
- if (idx >= groupSize) {
|
|
|
- idx = 0;
|
|
|
- }
|
|
|
- Paper paper = iterator.next();
|
|
|
- String serialNumber = null;
|
|
|
- Integer displayNumber = null;
|
|
|
- if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
|
|
|
- //是否定序
|
|
|
- int seq = 0;
|
|
|
+ //打分任务发布,并且是谁分档谁打分模式
|
|
|
+ if (Objects.equals(MarkStage.SCORE, markSubject.getStage()) && ParamCache.paramMap.get(markSubject.getWorkId()).getIsLevelToScore() == 1) {
|
|
|
+ //查询所有试卷各分档时任务详情
|
|
|
+ List<MarkTask> levelMarkTasks = markTaskRepo.findByWorkIdAndStage(markSubject.getWorkId(), MarkStage.LEVEL);
|
|
|
+ markTaskList = new ArrayList<>(levelMarkTasks.size());
|
|
|
+ //各试卷对应的分档评卷员信息
|
|
|
+ Map<Long, List<MarkTask>> listMap = levelMarkTasks.stream().collect(Collectors.groupingBy(item-> item.getPaper().getId()));
|
|
|
+ //生成打分任务
|
|
|
+ Map<String, AtomicInteger> integerMap = new HashMap<>();
|
|
|
+ for (Paper paper : papers) {
|
|
|
+ //是否显示序号
|
|
|
long sortRule = taskList.stream().filter(m -> Objects.equals(m.getCode(), paper.getLevel()) && m.getSortRule() == 1).count();
|
|
|
+ String serialNumber = null;
|
|
|
+ Integer displayNumber = null;
|
|
|
if (sortRule != 0) {
|
|
|
- if (map.containsKey(paper.getLevel() + idx)) {
|
|
|
- seq = (int) map.get(paper.getLevel() + idx);
|
|
|
+ AtomicInteger atomicInteger = integerMap.get(paper.getLevel());
|
|
|
+ if(atomicInteger == null){
|
|
|
+ atomicInteger = new AtomicInteger(0);
|
|
|
+ integerMap.put(paper.getLevel(), atomicInteger);
|
|
|
}
|
|
|
- seq = ++seq;
|
|
|
- serialNumber = paper.getLevel() + seq;
|
|
|
+ serialNumber = paper.getLevel() + atomicInteger.incrementAndGet();
|
|
|
//是否显示序号
|
|
|
long display = taskList.stream().filter(m -> Objects.equals(m.getCode(), paper.getLevel()) && m.getDisplayNumber() == 1).count();
|
|
|
displayNumber = (int) display;
|
|
|
- //设置新值
|
|
|
- map.put(paper.getLevel() + idx, seq);
|
|
|
}
|
|
|
- }
|
|
|
- for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
|
|
|
- Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber(), randomMap);
|
|
|
- MarkTask markTask = null;
|
|
|
- if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
|
|
|
- markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+
|
|
|
+ for (MarkTask task : listMap.get(paper.getId())) {
|
|
|
+ Long random = getRandom(task.getMarkerId(), paper.getId(), task.getWorkId(), paper.getExamNumber(), randomMap);
|
|
|
+ MarkTask markTask = new MarkTask(task.getMarkerId(), task.getMarkerName(), task.getSubject(), task.getWorkId(), paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
markTask.setBatchNo(currentTime);
|
|
|
markTask.setSerialNumber(serialNumber);
|
|
|
markTask.setDisplayNumber(displayNumber);
|
|
|
- } else {
|
|
|
- if(paper.isSample() && paper.getLevel() != null){
|
|
|
- Level level = levelRepo.findByWorkIdAndCode(markSubject.getWorkId(), paper.getLevel());
|
|
|
- markTask = new MarkTask(marker, paper, level, markSubject.getStage(), random, markSubject.getTest());
|
|
|
- } else {
|
|
|
- markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+ markTaskList.add(markTask);
|
|
|
+ randomMap.put(random, markTask);
|
|
|
+ }
|
|
|
+ if (markSubject.getTest() != 1) {
|
|
|
+ if (MarkStage.SCORE.equals(markSubject.getStage())) {
|
|
|
+ paper.setScoreBatchNo(currentTime);
|
|
|
+ paperList.add(paper);
|
|
|
}
|
|
|
}
|
|
|
- markTaskList.add(markTask);
|
|
|
- randomMap.put(random, markTask);
|
|
|
-// markTaskRepo.save(markTask);
|
|
|
}
|
|
|
- if (markSubject.getTest() != 1) {
|
|
|
- if (MarkStage.LEVEL.equals(markSubject.getStage())) {
|
|
|
- //将paper置为激活
|
|
|
- paper.setActive(true);
|
|
|
- paper.setBatchNo(currentTime);
|
|
|
+ } else {
|
|
|
+ markerGroups = markerGroups.stream().filter(m -> m.getMarkers().size() > 0).collect(Collectors.toList());
|
|
|
+ int sum = markerGroups.stream().mapToInt(m -> m.getMarkers().size()).sum();
|
|
|
+ int groupSize = markerGroups.size();
|
|
|
+ int idx = 0;
|
|
|
+ Iterator<Paper> iterator = papers.iterator();
|
|
|
+ markTaskList = new ArrayList<>(papers.size() * sum);
|
|
|
+ //定序序号记录
|
|
|
+ Map map = new HashMap();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ if (idx >= groupSize) {
|
|
|
+ idx = 0;
|
|
|
+ }
|
|
|
+ Paper paper = iterator.next();
|
|
|
+ String serialNumber = null;
|
|
|
+ Integer displayNumber = null;
|
|
|
+ if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
|
|
|
+ //是否定序
|
|
|
+ int seq = 0;
|
|
|
+ long sortRule = taskList.stream().filter(m -> Objects.equals(m.getCode(), paper.getLevel()) && m.getSortRule() == 1).count();
|
|
|
+ if (sortRule != 0) {
|
|
|
+ if (map.containsKey(paper.getLevel() + idx)) {
|
|
|
+ seq = (int) map.get(paper.getLevel() + idx);
|
|
|
+ }
|
|
|
+ seq = ++seq;
|
|
|
+ serialNumber = paper.getLevel() + seq;
|
|
|
+ //是否显示序号
|
|
|
+ long display = taskList.stream().filter(m -> Objects.equals(m.getCode(), paper.getLevel()) && m.getDisplayNumber() == 1).count();
|
|
|
+ displayNumber = (int) display;
|
|
|
+ //设置新值
|
|
|
+ map.put(paper.getLevel() + idx, seq);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
|
|
|
+ Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber(), randomMap);
|
|
|
+ MarkTask markTask = null;
|
|
|
+ if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
|
|
|
+ markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+ markTask.setBatchNo(currentTime);
|
|
|
+ markTask.setSerialNumber(serialNumber);
|
|
|
+ markTask.setDisplayNumber(displayNumber);
|
|
|
+ } else {
|
|
|
+ if (paper.isSample() && paper.getLevel() != null) {
|
|
|
+ Level level = levelRepo.findByWorkIdAndCode(markSubject.getWorkId(), paper.getLevel());
|
|
|
+ markTask = new MarkTask(marker, paper, level, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+ } else {
|
|
|
+ markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markTaskList.add(markTask);
|
|
|
+ randomMap.put(random, markTask);
|
|
|
+// markTaskRepo.save(markTask);
|
|
|
+ }
|
|
|
+ if (markSubject.getTest() != 1) {
|
|
|
+ if (MarkStage.LEVEL.equals(markSubject.getStage())) {
|
|
|
+ //将paper置为激活
|
|
|
+ paper.setActive(true);
|
|
|
+ paper.setBatchNo(currentTime);
|
|
|
// paperRepo.save(paper);
|
|
|
- paperList.add(paper);
|
|
|
- //更新subject表formal为正试评卷
|
|
|
+ paperList.add(paper);
|
|
|
+ //更新subject表formal为正试评卷
|
|
|
// markSubject.setFormal(true);
|
|
|
// markSubjectRepo.saveAndFlush(markSubject);
|
|
|
+ }
|
|
|
+ if (MarkStage.SCORE.equals(markSubject.getStage())) {
|
|
|
+ paper.setScoreBatchNo(currentTime);
|
|
|
+ paperList.add(paper);
|
|
|
+ }
|
|
|
}
|
|
|
- if (MarkStage.SCORE.equals(markSubject.getStage())) {
|
|
|
- paper.setScoreBatchNo(currentTime);
|
|
|
- paperList.add(paper);
|
|
|
- }
|
|
|
+ idx++;
|
|
|
}
|
|
|
- idx++;
|
|
|
}
|
|
|
markTaskRepo.save(markTaskList);
|
|
|
paperRepo.save(paperList);
|
|
@@ -197,14 +244,14 @@ public class AssignTaskService {
|
|
|
markSubjectRepo.saveAndFlush(markSubject);
|
|
|
}
|
|
|
//只有全部任务投放完成,才能删除分组
|
|
|
- int count = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
|
|
|
+ /*int count = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
|
|
|
//进入分档阶段后,清空当前分组,以便打分阶段前重新分组
|
|
|
if (MarkStage.LEVEL.equals(markSubject.getStage()) && count == 0) {
|
|
|
for (MarkerGroup markerGroup : markerGroups) {
|
|
|
markerGroup.setMarkers(null);
|
|
|
}
|
|
|
markerGroupRepo.delete(markerGroups);
|
|
|
- }
|
|
|
+ }*/
|
|
|
// if (MarkStage.SCORE.equals(markSubject.getStage()) && count == 0) {
|
|
|
// //初始化打分任务数据
|
|
|
// initTaskPublishData(markSubject);
|
|
@@ -213,17 +260,22 @@ public class AssignTaskService {
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
- public void assignForGroupingScore(MarkSubject markSubject) {
|
|
|
+ public void assignForGroupingScore(MarkSubject markSubject, List<MarkerGroup> markerGroups) {
|
|
|
if (markSubject.getTest() != 1) {
|
|
|
//更新subject表formal为正试评卷
|
|
|
markSubject.setFormal(true);
|
|
|
markSubjectRepo.saveAndFlush(markSubject);
|
|
|
}
|
|
|
int count = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
|
|
|
+ //进入打分阶段后,清空当前分组,以便打分阶段前重新分组
|
|
|
if (MarkStage.SCORE.equals(markSubject.getStage()) && count == 0) {
|
|
|
+ for (MarkerGroup markerGroup : markerGroups) {
|
|
|
+ markerGroup.setMarkers(null);
|
|
|
+ }
|
|
|
+ markerGroupRepo.delete(markerGroups);
|
|
|
+
|
|
|
//初始化打分任务数据
|
|
|
initTaskPublishData(markSubject);
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|