|
@@ -45,24 +45,25 @@ public class StageControlService {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private ExamQuestionRepo examQuestionRepo;
|
|
private ExamQuestionRepo examQuestionRepo;
|
|
-
|
|
|
|
|
|
+
|
|
@Autowired
|
|
@Autowired
|
|
private MarkerGroupRepo markerGroupRepo;
|
|
private MarkerGroupRepo markerGroupRepo;
|
|
|
|
|
|
- public static volatile Map<String,Boolean> statusMap = new Hashtable<>();
|
|
|
|
|
|
+ public static volatile Map<String, Boolean> statusMap = new Hashtable<>();
|
|
|
|
|
|
/**
|
|
/**
|
|
* 进入下一阶段
|
|
* 进入下一阶段
|
|
|
|
+ *
|
|
* @param markSubject
|
|
* @param markSubject
|
|
*/
|
|
*/
|
|
@Transactional
|
|
@Transactional
|
|
- public void goNext(MarkSubject markSubject){
|
|
|
|
- if(statusMap.get(markSubject.getId()) != null && statusMap.get(markSubject.getId())){
|
|
|
|
|
|
+ public void goNext(MarkSubject markSubject) {
|
|
|
|
+ if (statusMap.get(markSubject.getId()) != null && statusMap.get(markSubject.getId())) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- statusMap.put(markSubject.getId(),true);
|
|
|
|
|
|
+ statusMap.put(markSubject.getId(), true);
|
|
MarkStage markStage = markSubject.getStage();
|
|
MarkStage markStage = markSubject.getStage();
|
|
- switch (markStage){
|
|
|
|
|
|
+ switch (markStage) {
|
|
case INIT:
|
|
case INIT:
|
|
markSubject.setStage(MarkStage.LEVEL);
|
|
markSubject.setStage(MarkStage.LEVEL);
|
|
enterLevelStage(markSubject);
|
|
enterLevelStage(markSubject);
|
|
@@ -72,12 +73,20 @@ public class StageControlService {
|
|
enterScoreStage(markSubject);
|
|
enterScoreStage(markSubject);
|
|
break;
|
|
break;
|
|
case SCORE:
|
|
case SCORE:
|
|
- //TODO 结束评卷
|
|
|
|
|
|
+ // TODO: 2017/10/12 结束评卷
|
|
markSubject.setStage(MarkStage.END);
|
|
markSubject.setStage(MarkStage.END);
|
|
|
|
+
|
|
|
|
+ //TODO 进入抽查阶段
|
|
|
|
+// markSubject.setStage(MarkStage.CHECK);
|
|
|
|
+// enterCheckStage(markSubject);
|
|
break;
|
|
break;
|
|
|
|
+// case CHECK:
|
|
|
|
+// //TODO 结束评卷
|
|
|
|
+// markSubject.setStage(MarkStage.END);
|
|
|
|
+// break;
|
|
}
|
|
}
|
|
markSubjectRepo.save(markSubject);
|
|
markSubjectRepo.save(markSubject);
|
|
- statusMap.put(markSubject.getId(),false);
|
|
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -85,71 +94,91 @@ public class StageControlService {
|
|
* 1.检查是否有设定档位,如果有,将所有level设置连续的levelValue值,用于仲裁误差判定
|
|
* 1.检查是否有设定档位,如果有,将所有level设置连续的levelValue值,用于仲裁误差判定
|
|
* 2.检查有无可分档的评卷员,没有则终止
|
|
* 2.检查有无可分档的评卷员,没有则终止
|
|
* 3.给所有能够分档的评卷员分配任务
|
|
* 3.给所有能够分档的评卷员分配任务
|
|
|
|
+ *
|
|
* @param markSubject
|
|
* @param markSubject
|
|
*/
|
|
*/
|
|
- private void enterLevelStage(MarkSubject markSubject){
|
|
|
|
|
|
+ private void enterLevelStage(MarkSubject markSubject) {
|
|
Long workId = markSubject.getWorkId();
|
|
Long workId = markSubject.getWorkId();
|
|
Subject subject = markSubject.getSubject();
|
|
Subject subject = markSubject.getSubject();
|
|
List<Level> levels = levelRepo.findByWorkId(workId);
|
|
List<Level> levels = levelRepo.findByWorkId(workId);
|
|
- if(levels.size() == 0){
|
|
|
|
- statusMap.put(markSubject.getId(),false);
|
|
|
|
|
|
+ if (levels.size() == 0) {
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
throw new RuntimeException("没有设定档位");
|
|
throw new RuntimeException("没有设定档位");
|
|
}
|
|
}
|
|
- List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId,subject);
|
|
|
|
- List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId,subject, Role.MARKER);
|
|
|
|
|
|
+ List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId, subject);
|
|
|
|
+ List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);
|
|
List<MarkUser> levelMarkers = markers.stream().filter(m -> m.getMarkRight() == MarkRight.ALLOW_ALL || m.getMarkRight() == MarkRight.ALLOW_LEVELING).collect(Collectors.toList());
|
|
List<MarkUser> levelMarkers = markers.stream().filter(m -> m.getMarkRight() == MarkRight.ALLOW_ALL || m.getMarkRight() == MarkRight.ALLOW_LEVELING).collect(Collectors.toList());
|
|
- if(levelMarkers.size() == 0){
|
|
|
|
- statusMap.put(markSubject.getId(),false);
|
|
|
|
|
|
+ if (levelMarkers.size() == 0) {
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
throw new RuntimeException("没有设定评卷员");
|
|
throw new RuntimeException("没有设定评卷员");
|
|
}
|
|
}
|
|
for (int i = 0; i < levels.size(); i++) {
|
|
for (int i = 0; i < levels.size(); i++) {
|
|
levels.get(i).setLevelValue(i);
|
|
levels.get(i).setLevelValue(i);
|
|
}
|
|
}
|
|
levelRepo.save(levels);
|
|
levelRepo.save(levels);
|
|
- assignTaskService.assignForAll(papers,levelMarkers,markSubject);
|
|
|
|
|
|
+ assignTaskService.assignForAll(papers, levelMarkers, markSubject);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 进入打分阶段
|
|
* 进入打分阶段
|
|
* 1.检查是否有能够打分的评卷员
|
|
* 1.检查是否有能够打分的评卷员
|
|
* 2.检查是否所有试卷都分档完成(有仲裁卷或打回重评卷)
|
|
* 2.检查是否所有试卷都分档完成(有仲裁卷或打回重评卷)
|
|
|
|
+ *
|
|
* @param markSubject
|
|
* @param markSubject
|
|
*/
|
|
*/
|
|
- private void enterScoreStage(MarkSubject markSubject){
|
|
|
|
- Long workId = markSubject.getWorkId();
|
|
|
|
|
|
+ private void enterScoreStage(MarkSubject markSubject) {
|
|
|
|
+ Long workId = markSubject.getWorkId();
|
|
Subject subject = markSubject.getSubject();
|
|
Subject subject = markSubject.getSubject();
|
|
- List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId,subject, Role.MARKER);
|
|
|
|
|
|
+ List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);
|
|
List<MarkUser> levelMarkers = markers.stream().filter(m -> m.getMarkRight() == MarkRight.ALLOW_ALL || m.getMarkRight() == MarkRight.ALLOW_SCORING).collect(Collectors.toList());
|
|
List<MarkUser> levelMarkers = markers.stream().filter(m -> m.getMarkRight() == MarkRight.ALLOW_ALL || m.getMarkRight() == MarkRight.ALLOW_SCORING).collect(Collectors.toList());
|
|
- if(levelMarkers.size() == 0){
|
|
|
|
- statusMap.put(markSubject.getId(),false);
|
|
|
|
|
|
+ if (levelMarkers.size() == 0) {
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
throw new RuntimeException("没有设定评卷员");
|
|
throw new RuntimeException("没有设定评卷员");
|
|
}
|
|
}
|
|
Long count = paperRepo.countByWorkIdAndSubjectAndLevelIsNull(workId, subject);
|
|
Long count = paperRepo.countByWorkIdAndSubjectAndLevelIsNull(workId, subject);
|
|
- if(count > 0){
|
|
|
|
- statusMap.put(markSubject.getId(),false);
|
|
|
|
- throw new RuntimeException("没有分档完成");
|
|
|
|
- }
|
|
|
|
|
|
+ if (count > 0) {
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
|
|
+ throw new RuntimeException("没有分档完成");
|
|
|
|
+ }
|
|
Sort sort = new Sort("questionId");
|
|
Sort sort = new Sort("questionId");
|
|
- List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId,subject,sort);
|
|
|
|
- List<MarkerGroup> markerGroups = markerGroupRepo.findByWorkIdAndSubject(workId,subject);
|
|
|
|
- if(markerGroups.size() == 0){
|
|
|
|
- statusMap.put(markSubject.getId(),false);
|
|
|
|
- throw new RuntimeException("评卷员没有进行分组");
|
|
|
|
- }
|
|
|
|
- assignTaskService.assignForGrouping(papers, markerGroups, markSubject);
|
|
|
|
|
|
+ List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId, subject, sort);
|
|
|
|
+ List<MarkerGroup> markerGroups = markerGroupRepo.findByWorkIdAndSubject(workId, subject);
|
|
|
|
+ if (markerGroups.size() == 0) {
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
|
|
+ throw new RuntimeException("评卷员没有进行分组");
|
|
|
|
+ }
|
|
|
|
+ assignTaskService.assignForGrouping(papers, markerGroups, markSubject);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 进入到抽查阶段
|
|
|
|
+ *
|
|
|
|
+ * @param markSubject
|
|
|
|
+ 暂时不将抽查做成一个独立的stage
|
|
|
|
+ private void enterCheckStage(MarkSubject markSubject) {
|
|
|
|
+ // TODO: 2017/10/11
|
|
|
|
+ Long workId = markSubject.getWorkId();
|
|
|
|
+ Subject subject = markSubject.getSubject();
|
|
|
|
+ List<MarkUser> checkers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.INSPECTOR);
|
|
|
|
+ if (checkers.size() == 0) {
|
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
|
|
+ throw new RuntimeException("没有设定复评专家");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }*/
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 重置所有评卷数据,回到INIT状态
|
|
* 重置所有评卷数据,回到INIT状态
|
|
|
|
+ *
|
|
* @param markSubject
|
|
* @param markSubject
|
|
- * @param stage 重置的阶段
|
|
|
|
- * @param force 是否强制重置,如果为false,当有评卷记录时,不可重置,如果为true,不论有无评卷记录,删除所有数据
|
|
|
|
|
|
+ * @param stage 重置的阶段
|
|
|
|
+ * @param force 是否强制重置,如果为false,当有评卷记录时,不可重置,如果为true,不论有无评卷记录,删除所有数据
|
|
*/
|
|
*/
|
|
@Transactional
|
|
@Transactional
|
|
- public void reset(MarkSubject markSubject,MarkStage stage,boolean force){
|
|
|
|
|
|
+ public void reset(MarkSubject markSubject, MarkStage stage, boolean force) {
|
|
Subject subject = markSubject.getSubject();
|
|
Subject subject = markSubject.getSubject();
|
|
Long workId = markSubject.getWorkId();
|
|
Long workId = markSubject.getWorkId();
|
|
- markTaskRepo.deleteByWorkIdAndSubjectAndStage(workId,subject,markSubject.getStage());
|
|
|
|
|
|
+ markTaskRepo.deleteByWorkIdAndSubjectAndStage(workId, subject, markSubject.getStage());
|
|
markSubject.setStage(stage);
|
|
markSubject.setStage(stage);
|
|
markSubjectRepo.save(markSubject);
|
|
markSubjectRepo.save(markSubject);
|
|
}
|
|
}
|