YuanPan 7 жил өмнө
parent
commit
44c86c7cf2

+ 6 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkStage.java

@@ -18,6 +18,12 @@ public enum MarkStage {
      * 打分
      * 打分
      */
      */
     SCORE,
     SCORE,
+
+    /**
+     * 抽查
+     * CHECK,先暂时不加这个状态
+     */
+
     /**
     /**
      * 结束
      * 结束
      */
      */

+ 68 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/InspectUser.java

@@ -0,0 +1,68 @@
+package cn.com.qmth.stmms.ms.core.domain.user;
+
+import javax.persistence.Entity;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by yuanpan on 2017/10/13.
+ */
+@Entity
+public class InspectUser extends AbstractUser {
+
+    private static final long serialVersionUID = 1520626334734138538L;
+
+    @NotNull
+    private Long workId;
+
+    @NotNull
+    private Boolean allowSC;
+
+    @NotNull
+    private Boolean allowSM;
+
+    @NotNull
+    private Boolean allowSX;
+
+    public InspectUser() {
+    }
+
+    public InspectUser(String loginName, String password, Long workId, Boolean allowSC, Boolean allowSM, Boolean allowSX) {
+        super(loginName, password);
+        this.workId = workId;
+        this.allowSC = allowSC;
+        this.allowSM = allowSM;
+        this.allowSX = allowSX;
+    }
+
+    public Long getWorkId() {
+        return workId;
+    }
+
+    public void setWorkId(Long workId) {
+        this.workId = workId;
+    }
+
+    public Boolean getAllowSC() {
+        return allowSC;
+    }
+
+    public void setAllowSC(Boolean allowSC) {
+        this.allowSC = allowSC;
+    }
+
+    public Boolean getAllowSM() {
+        return allowSM;
+    }
+
+    public void setAllowSM(Boolean allowSM) {
+        this.allowSM = allowSM;
+    }
+
+    public Boolean getAllowSX() {
+        return allowSX;
+    }
+
+    public void setAllowSX(Boolean allowSX) {
+        this.allowSX = allowSX;
+    }
+}

+ 3 - 3
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/Role.java

@@ -4,15 +4,15 @@ package cn.com.qmth.stmms.ms.core.domain.user;
  * Created by zhengmin on 2016/10/9.
  * Created by zhengmin on 2016/10/9.
  */
  */
 public enum Role {
 public enum Role {
-    MARKER("评卷员"),MARK_LEADER("科组长"),ADMIN("管理员");
+    MARKER("评卷员"), MARK_LEADER("科组长"), ADMIN("管理员"), INSPECTOR("复评专家");
 
 
     private String name;
     private String name;
 
 
-    private Role(String name){
+    private Role(String name) {
         this.name = name;
         this.name = name;
     }
     }
 
 
-    public String getName(){
+    public String getName() {
         return this.name;
         return this.name;
     }
     }
 }
 }

+ 65 - 36
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

@@ -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);
     }
     }