|
@@ -1,5 +1,6 @@
|
|
|
package cn.com.qmth.stmms.ms.marking.service;
|
|
|
|
|
|
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
|
|
|
import cn.com.qmth.stmms.ms.core.utils.DbBackupUtils;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
|
|
@@ -17,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -128,63 +130,65 @@ 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));
|
|
|
- List<Object[]> markTasks = markTaskRepo.findAllByWorkId(markSubject.getWorkId());
|
|
|
- Map<Long, Object> randomMap = new HashMap<>();
|
|
|
- markTasks.forEach(m -> randomMap.put(Long.valueOf(m[1].toString()), m[0]));
|
|
|
- List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
|
|
|
- Map<String, Level> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, l -> l));
|
|
|
+
|
|
|
+ Iterator<Paper> iterator = papers.iterator();
|
|
|
//定序序号记录
|
|
|
Map map = new HashMap();
|
|
|
Map seqNewMap = new HashMap();
|
|
|
- while (iterator.hasNext()) {
|
|
|
- if (idx >= groupSize) {
|
|
|
- idx = 0;
|
|
|
- }
|
|
|
- Paper paper = iterator.next();
|
|
|
- String serialNumber = null;
|
|
|
- Integer displayNumber = null;
|
|
|
- Integer seqNewNumber = null;
|
|
|
- if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
|
|
|
+ long currentTime = System.currentTimeMillis();
|
|
|
+
|
|
|
+ List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
|
|
|
+ Map<String, Level> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, l -> l));
|
|
|
+
|
|
|
+ List<Object[]> markTasks = markTaskRepo.findAllByWorkId(markSubject.getWorkId());
|
|
|
+ Map<Long, Object> randomMap = new HashMap<>();
|
|
|
+ markTasks.forEach(m -> randomMap.put(Long.valueOf(m[1].toString()), m[0]));
|
|
|
+ // 谁分档谁打分
|
|
|
+ if(Objects.equals(MarkStage.SCORE, markSubject.getStage()) && ParamCache.paramMap.get(markSubject.getWorkId()).getIsLevelToScore() == 1){
|
|
|
+ // 查询所有分档
|
|
|
+ List<MarkTask> markTasksLevels = markTaskRepo.findByWorkIdAndSubjectAndStage(markSubject.getWorkId(),markSubject.getSubject(), MarkStage.LEVEL);
|
|
|
+ markTaskList = new ArrayList<>(markTasksLevels.size());
|
|
|
+ Map<Long, List<MarkTask>> markerMap = markTasksLevels.stream().collect(Collectors.groupingBy(m->m.getPaper().getId()));
|
|
|
+ Map<String, AtomicInteger> integerMap = new HashMap<>();
|
|
|
+
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ Paper paper = iterator.next();
|
|
|
+ String serialNumber = null;
|
|
|
+ Integer displayNumber = null;
|
|
|
+ Integer seqNewNumber = null;
|
|
|
//是否定序
|
|
|
- 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);
|
|
|
+ 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);
|
|
|
|
|
|
int seqNew = 0;
|
|
|
- if(seqNewMap.containsKey(paper.getLevel())){
|
|
|
+ if (seqNewMap.containsKey(paper.getLevel())) {
|
|
|
seqNew = (int) seqNewMap.get(paper.getLevel());
|
|
|
}
|
|
|
seqNewNumber = ++seqNew;
|
|
|
seqNewMap.put(paper.getLevel(), seqNew);
|
|
|
}
|
|
|
- }
|
|
|
- int markerCount = 0;
|
|
|
- for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
|
|
|
- markerCount ++ ;
|
|
|
- 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());
|
|
|
+
|
|
|
+ List<MarkTask> markTask1 = markerMap.get(paper.getId());
|
|
|
+ for (MarkTask mt : markTask1) {
|
|
|
+ MarkUser marker = new MarkUser();
|
|
|
+ marker.setId(mt.getMarkerId());
|
|
|
+ marker.setName(mt.getMarkerName());
|
|
|
+ marker.setWorkId(mt.getWorkId());
|
|
|
+ marker.setSubject(mt.getSubject());
|
|
|
+ Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber(), randomMap);
|
|
|
+ MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
String levelValue = String.valueOf(levelMap.get(paper.getLevel()).getLevelValue() + 1);
|
|
|
if (Objects.nonNull(serialNumber)) {
|
|
|
//和随机数位数保持一致(8位)
|
|
@@ -197,42 +201,116 @@ public class AssignTaskService {
|
|
|
markTask.setSerialNumber(serialNumber);
|
|
|
markTask.setDisplayNumber(displayNumber);
|
|
|
markTask.setLevel(paper.getLevel());
|
|
|
+
|
|
|
+ markTaskList.add(markTask);
|
|
|
+ randomMap.put(random, markTask);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (markSubject.getTest() != 1) {
|
|
|
+ if (MarkStage.SCORE.equals(markSubject.getStage())) {
|
|
|
+ paper.setScoreBatchNo(currentTime);
|
|
|
+ paperList.add(paper);
|
|
|
+ }
|
|
|
} 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());
|
|
|
+ paper.setBatchNo(currentTime);
|
|
|
+ paperList.add(paper);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 初始化排序值
|
|
|
- if(markerCount == markerGroups.get(idx).getMarkers().size()){
|
|
|
- paper.setSortNum(level.getWeight() * markerCount);
|
|
|
+ } 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;
|
|
|
+ markTaskList = new ArrayList<>(papers.size() * sum);
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ if (idx >= groupSize) {
|
|
|
+ idx = 0;
|
|
|
+ }
|
|
|
+ Paper paper = iterator.next();
|
|
|
+ String serialNumber = null;
|
|
|
+ Integer displayNumber = null;
|
|
|
+ Integer seqNewNumber = 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);
|
|
|
}
|
|
|
- } else {
|
|
|
+ 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);
|
|
|
+
|
|
|
+ int seqNew = 0;
|
|
|
+ if (seqNewMap.containsKey(paper.getLevel())) {
|
|
|
+ seqNew = (int) seqNewMap.get(paper.getLevel());
|
|
|
+ }
|
|
|
+ seqNewNumber = ++seqNew;
|
|
|
+ seqNewMap.put(paper.getLevel(), seqNew);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int markerCount = 0;
|
|
|
+ for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
|
|
|
+ markerCount++;
|
|
|
+ Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber(), randomMap);
|
|
|
+ MarkTask markTask;
|
|
|
+ if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
|
|
|
markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+ String levelValue = String.valueOf(levelMap.get(paper.getLevel()).getLevelValue() + 1);
|
|
|
+ if (Objects.nonNull(serialNumber)) {
|
|
|
+ //和随机数位数保持一致(8位)
|
|
|
+ String randomSeqNew = String.format("%08d", seqNewNumber);
|
|
|
+ markTask.setRandomSeqNew(Long.valueOf(levelValue + randomSeqNew));
|
|
|
+ } else {
|
|
|
+ markTask.setRandomSeqNew(Long.valueOf(levelValue + markTask.getRandomSeqNew()));
|
|
|
+ }
|
|
|
+ markTask.setBatchNo(currentTime);
|
|
|
+ markTask.setSerialNumber(serialNumber);
|
|
|
+ markTask.setDisplayNumber(displayNumber);
|
|
|
+ markTask.setLevel(paper.getLevel());
|
|
|
+ } 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());
|
|
|
+
|
|
|
+ // 初始化排序值
|
|
|
+ if (markerCount == markerGroups.get(idx).getMarkers().size()) {
|
|
|
+ paper.setSortNum(level.getWeight() * markerCount);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
|
|
|
+ }
|
|
|
+ markTask.setBatchNo(currentTime);
|
|
|
}
|
|
|
- markTask.setBatchNo(currentTime);
|
|
|
+ markTaskList.add(markTask);
|
|
|
+ randomMap.put(random, markTask);
|
|
|
}
|
|
|
- markTaskList.add(markTask);
|
|
|
- randomMap.put(random, markTask);
|
|
|
- }
|
|
|
- if (markSubject.getTest() != 1) {
|
|
|
- if (MarkStage.LEVEL.equals(markSubject.getStage())) {
|
|
|
- //将paper置为激活
|
|
|
- paper.setActive(true);
|
|
|
- paper.setBatchNo(currentTime);
|
|
|
- paperList.add(paper);
|
|
|
- //更新subject表formal为正试评卷
|
|
|
+ if (markSubject.getTest() != 1) {
|
|
|
+ if (MarkStage.LEVEL.equals(markSubject.getStage())) {
|
|
|
+ //将paper置为激活
|
|
|
+ paper.setActive(true);
|
|
|
+ paper.setBatchNo(currentTime);
|
|
|
+ paperList.add(paper);
|
|
|
+ //更新subject表formal为正试评卷
|
|
|
// markSubject.setFormal(true);
|
|
|
// markSubjectRepo.saveAndFlush(markSubject);
|
|
|
- }
|
|
|
- if (MarkStage.SCORE.equals(markSubject.getStage())) {
|
|
|
- paper.setScoreBatchNo(currentTime);
|
|
|
+ }
|
|
|
+ if (MarkStage.SCORE.equals(markSubject.getStage())) {
|
|
|
+ paper.setScoreBatchNo(currentTime);
|
|
|
+ paperList.add(paper);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ paper.setBatchNo(currentTime);
|
|
|
paperList.add(paper);
|
|
|
}
|
|
|
- } else {
|
|
|
- paper.setBatchNo(currentTime);
|
|
|
- paperList.add(paper);
|
|
|
+ idx++;
|
|
|
}
|
|
|
- idx++;
|
|
|
}
|
|
|
|
|
|
List<MarkTask> data = new ArrayList<>();
|
|
@@ -249,7 +327,6 @@ public class AssignTaskService {
|
|
|
markTaskRepo.save(data);
|
|
|
}
|
|
|
|
|
|
-// markTaskRepo.save(markTaskList);
|
|
|
paperRepo.save(paperList);
|
|
|
if (markSubject.getTest() != 1) {
|
|
|
//更新subject表formal为正试评卷
|
|
@@ -257,14 +334,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);
|