ソースを参照

川音需求版本1

YuanPan 7 年 前
コミット
e8ef3400b3
19 ファイル変更672 行追加185 行削除
  1. 4 3
      stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java
  2. 25 10
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/InspectRangeApi.java
  3. 12 2
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/InspectorApi.java
  4. 42 44
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java
  5. 121 8
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/InspectRangeService.java
  6. 16 6
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectRange.java
  7. 51 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectStudent.java
  8. 150 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectTask.java
  9. 2 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkStage.java
  10. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectRangeRepo.java
  11. 25 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectStudentRepo.java
  12. 25 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectTaskRepo.java
  13. 3 3
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java
  14. 1 1
      stmms-ms-main/src/main/resources/application-dev.properties
  15. 1 1
      stmms-ms-main/src/main/resources/application.properties
  16. 2 89
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/InspectApi.java
  17. 106 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/InspectTaskController.java
  18. 70 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/InspectService.java
  19. 14 17
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

+ 4 - 3
stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java

@@ -38,9 +38,10 @@ public class AuthApi {
                 loginConfig.getPassword().equals(user.getPassword())) {
             domain = new MarkUser(loginConfig.getLoginName(), loginConfig.getPassword(), null, null, "系统管理员", Role.ADMIN);
         } else {
-            Work activeWork = workRepo.findByActiveTrue();
-            String loginName = activeWork.getId() + "-" + user.getLoginName();
-            domain = markUserRepo.findByLoginName(loginName);
+//            Work activeWork = workRepo.findByActiveTrue();
+//            String loginName = activeWork.getId() + "-" + user.getLoginName();
+//            domain = markUserRepo.findByLoginName(loginName);
+            domain = markUserRepo.findByLoginName(user.getLoginName());
             if (domain == null) {
                 throw new RuntimeException("用户不存在");
             }

+ 25 - 10
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/InspectRangeApi.java

@@ -4,9 +4,7 @@ import cn.com.qmth.stmms.ms.admin.service.InspectRangeService;
 import cn.com.qmth.stmms.ms.core.domain.InspectRange;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
-import cn.com.qmth.stmms.ms.core.repository.InspectRangeRepo;
-import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -33,6 +31,12 @@ public class InspectRangeApi {
     @Autowired
     private PaperRepo paperRepo;
 
+    @Autowired
+    private MarkTaskRepo markTaskRepo;
+
+    @Autowired
+    private InspectTaskRepo inspectTaskRepo;
+
     @GetMapping
     public List<InspectRange> list(@RequestParam Long workId) {
         return inspectRangeRepo.findByWorkId(workId);
@@ -50,10 +54,10 @@ public class InspectRangeApi {
         }
 
         //判断该评卷工作是否已经有抽查工作了
-        int inspectRangeCount = inspectRangeRepo.countByWorkId(workId);
-        if (inspectRangeCount > 0) {
-            throw new RuntimeException("请勿重复创建抽查范围");
-        }
+//        int inspectRangeCount = inspectRangeRepo.countByWorkId(workId);
+//        if (inspectRangeCount > 0) {
+//            throw new RuntimeException("请勿重复创建抽查范围");
+//        }
 
         //判断是否已经全部打分完成了
         long unfinishedPaperCount = paperRepo.countByWorkIdAndScoreIsNull(workId);
@@ -66,16 +70,27 @@ public class InspectRangeApi {
 
     }
 
+    @DeleteMapping(value = "{domain}")
+    public void delete(@PathVariable(value = "domain") InspectRange domain) {
+
+        int inspectTaskCount = inspectTaskRepo.countByWorkIdAndInspectRangeId(domain.getWorkId(), domain.getId());
+        if (inspectTaskCount > 0) {
+            throw new RuntimeException("抽查已经启动,不可以删除!");
+        }
+
+        inspectRangeRepo.delete(domain);
+    }
+
     @PutMapping(value = "{domain}")
     public void update(@PathVariable InspectRange domain, @RequestBody InspectRange inspectRange) {
 
         //如果抽查已经启动,则不能再修改了
-        if (domain.getEnabled()) {
+        if (domain.isActive()) {
             throw new RuntimeException("抽查已经启动了,无法修改抽查范围。");
         }
 
         domain.setCondition(inspectRange.getCondition());
-        domain.setEnabled(inspectRange.getEnabled());
+        domain.setActive(false);
         domain.setType(inspectRange.getType());
         inspectRangeService.save(domain);
     }
@@ -85,7 +100,7 @@ public class InspectRangeApi {
     public void start(@PathVariable InspectRange domain) {
 
         //已经启动了就不用再启动了
-        if (domain.getEnabled()) {
+        if (domain.isActive()) {
             throw new RuntimeException("抽查已经启动了");
         }
 

+ 12 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/InspectorApi.java

@@ -7,6 +7,7 @@ import cn.com.qmth.stmms.ms.core.domain.InspectRange;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.repository.InspectRangeRepo;
+import cn.com.qmth.stmms.ms.core.repository.InspectTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +31,10 @@ public class InspectorApi {
     @Autowired
     private MarkUserAssembler markUserAssembler;
 
+    @Autowired
+    private InspectTaskRepo inspectTaskRepo;
+
+
     @GetMapping
     public List<MarkUser> list(@RequestParam Long workId) {
 
@@ -39,11 +44,11 @@ public class InspectorApi {
     @PostMapping
     public void create(@RequestBody MarkUser inspectUser) {
 
-        MarkUser inspector = markUserRepo.findByLoginName(inspectUser.getWorkId() + "-" + inspectUser.getLoginName());
+        MarkUser inspector = markUserRepo.findByLoginName(inspectUser.getLoginName());
         if (inspector != null) {
             throw new RuntimeException("该登录名已经存在");
         }
-        inspectUser.setLoginName(inspectUser.getWorkId() + "-" + inspectUser.getLoginName());
+        inspectUser.setLoginName(inspectUser.getLoginName());
         markUserRepo.save(inspectUser);
 
     }
@@ -56,6 +61,11 @@ public class InspectorApi {
 
     @DeleteMapping(value = "{domain}")
     public void delete(@PathVariable MarkUser domain) {
+        //判断是否有复查任务
+        int taskCount = inspectTaskRepo.countByMarkerId(domain.getId());
+        if (taskCount > 0) {
+            throw new RuntimeException("该复评专家已经有复评任务了,不能删除!");
+        }
         markUserRepo.delete(domain.getId());
     }
 

+ 42 - 44
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -22,70 +22,68 @@ import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 
 /**
- * 
- * @Description: 用户api
  * @author ting.yin
+ * @Description: 用户api
  * @date 2016年10月24日
  */
 @RestController
 @RequestMapping("api/admin/users")
 public class UserApi {
 
-	@Autowired
-	private MarkUserRepo markUserRepo;
+    @Autowired
+    private MarkUserRepo markUserRepo;
 
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
-	@Autowired
-	private MarkTaskRepo markTaskRepo;
-	
-	@RequestMapping(value = "{userId}", method = RequestMethod.DELETE)
-	public void remove(@PathVariable Long userId) {
-		long count = markTaskRepo.countByMarkerId(userId);
-		if(count > 0){
-			throw new RuntimeException("已分配任务,不允许删除");
-		}
-		markUserRepo.delete(userId);
-	}
+    @Autowired
+    private MarkTaskRepo markTaskRepo;
+
+    @RequestMapping(value = "{userId}", method = RequestMethod.DELETE)
+    public void remove(@PathVariable Long userId) {
+        long count = markTaskRepo.countByMarkerId(userId);
+        if (count > 0) {
+            throw new RuntimeException("已分配任务,不允许删除");
+        }
+        markUserRepo.delete(userId);
+    }
 
-	@RequestMapping(value = "{domain}", method = RequestMethod.PUT)
-	public void update(@PathVariable MarkUser domain,@RequestBody MarkUser user){
-		domain.setName(user.getName());
-		domain.setMarkRight(user.getMarkRight());
-		markUserRepo.save(domain);
-	}
+    @RequestMapping(value = "{domain}", method = RequestMethod.PUT)
+    public void update(@PathVariable MarkUser domain, @RequestBody MarkUser user) {
+        domain.setName(user.getName());
+        domain.setMarkRight(user.getMarkRight());
+        markUserRepo.save(domain);
+    }
 
-	@RequestMapping(method = RequestMethod.POST)
-	public void create(@RequestBody MarkUser user) {
-		MarkSubject markSubject = markSubjectRepo.findOne(user.getWorkId() + "-" + user.getSubject().toString());
-		if(markSubject == null){
+    @RequestMapping(method = RequestMethod.POST)
+    public void create(@RequestBody MarkUser user) {
+        MarkSubject markSubject = markSubjectRepo.findOne(user.getWorkId() + "-" + user.getSubject().toString());
+        if (markSubject == null) {
             throw new RuntimeException("该科目不存在");
         }
-		if(user.getRole() == Role.MARKER && user.getMarkRight() == MarkRight.ALLOW_LEVELING && !markSubject.getStage().equals(MarkStage.INIT)){
-			throw new RuntimeException("请进入分档阶段前创建");
-		}
-		MarkUser markUser = markUserRepo.findByLoginName(user.getWorkId()+"-"+user.getLoginName());
-		if(markUser != null){
+        if (user.getRole() == Role.MARKER && user.getMarkRight() == MarkRight.ALLOW_LEVELING && !markSubject.getStage().equals(MarkStage.INIT)) {
+            throw new RuntimeException("请进入分档阶段前创建");
+        }
+        MarkUser markUser = markUserRepo.findByLoginName(user.getLoginName());
+        if (markUser != null) {
             throw new RuntimeException("该登录名已经存在");
         }
-		user.setLoginName(user.getWorkId()+"-"+user.getLoginName());
-		markUserRepo.save(user);
-	}
+        user.setLoginName(user.getLoginName());
+        markUserRepo.save(user);
+    }
 
     @RequestMapping(method = RequestMethod.GET)
     public List<MarkUser> list(@RequestParam Long workId,
-							   @RequestParam Subject subject,
-							   @RequestParam(required = false ) Role role){
-    	if(role!= null){
-    		return markUserRepo.findByWorkIdAndRole(workId,role).stream().filter( u -> u.getSubject() == subject)
-					.collect(Collectors.toList());
-    	}else{
-    		return markUserRepo.findByWorkId(workId).stream().filter( u -> u.getSubject() == subject)
-					.collect(Collectors.toList());
-    	}
+                               @RequestParam Subject subject,
+                               @RequestParam(required = false) Role role) {
+        if (role != null) {
+            return markUserRepo.findByWorkIdAndRole(workId, role).stream().filter(u -> u.getSubject() == subject)
+                    .collect(Collectors.toList());
+        } else {
+            return markUserRepo.findByWorkId(workId).stream().filter(u -> u.getSubject() == subject)
+                    .collect(Collectors.toList());
+        }
     }
-	
 
-	
+
 }

+ 121 - 8
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/InspectRangeService.java

@@ -1,9 +1,13 @@
 package cn.com.qmth.stmms.ms.admin.service;
 
 import cn.com.qmth.stmms.ms.core.domain.InspectRange;
+import cn.com.qmth.stmms.ms.core.domain.InspectStudent;
+import cn.com.qmth.stmms.ms.core.domain.InspectTask;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
-import cn.com.qmth.stmms.ms.core.repository.InspectRangeRepo;
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
+import cn.com.qmth.stmms.ms.core.domain.user.Role;
+import cn.com.qmth.stmms.ms.core.repository.*;
+import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,11 +27,105 @@ public class InspectRangeService {
     @Autowired
     private PaperRepo paperRepo;
 
+    @Autowired
+    private InspectTaskRepo inspectTaskRepo;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+
+    @Autowired
+    private InspectStudentRepo inspectStudentRepo;
+
     @Transactional
     public void start(Long id) {
+        //将本范围激活,并将其他范围设置成未激活
         InspectRange inspectRange = inspectRangeRepo.findOne(id);
-        inspectRange.setEnabled(true);
+        inspectRange.setEditable(false);
+        inspectRange.setActive(true);
         inspectRangeRepo.save(inspectRange);
+
+        List<InspectRange> otherRanges = inspectRangeRepo.findByWorkId(inspectRange.getWorkId());
+        for (InspectRange r : otherRanges) {
+            if (!Objects.equals(r.getId(), inspectRange.getId())) {
+                r.setActive(false);
+                inspectRangeRepo.save(r);
+            }
+        }
+
+        //判断是否已经有复查任务了
+        int taskCount = inspectTaskRepo.countByWorkIdAndInspectRangeId(inspectRange.getWorkId(), inspectRange.getId());
+        if (taskCount > 0) {
+            //不要重新生产任务
+            return;
+        }
+
+        List<MarkUser> scInspectors = markUserRepo.findByWorkIdAndSubjectAndRole(inspectRange.getWorkId(), Subject.SC, Role.INSPECTOR);
+        List<MarkUser> sxInspectors = markUserRepo.findByWorkIdAndSubjectAndRole(inspectRange.getWorkId(), Subject.SX, Role.INSPECTOR);
+        List<MarkUser> smInspectors = markUserRepo.findByWorkIdAndSubjectAndRole(inspectRange.getWorkId(), Subject.SM, Role.INSPECTOR);
+
+
+        List<InspectStudent> inspectStudents = inspectStudentRepo.findByInspectRangeId(id);
+
+        List<InspectTask> inspectTasks = new ArrayList<>();
+        for (InspectStudent inspectStudent : inspectStudents) {
+            String examNumber = inspectStudent.getExamNumber();
+            Paper scPaper = paperRepo.findByWorkIdAndSubjectAndExamNumber(inspectRange.getWorkId(), Subject.SC, examNumber);
+            Paper sxPaper = paperRepo.findByWorkIdAndSubjectAndExamNumber(inspectRange.getWorkId(), Subject.SX, examNumber);
+            Paper smPaper = paperRepo.findByWorkIdAndSubjectAndExamNumber(inspectRange.getWorkId(), Subject.SM, examNumber);
+
+
+            //色彩的
+            for (MarkUser inspector : scInspectors) {
+                InspectTask inspectTask = new InspectTask();
+
+                inspectTask.setMarkerId(inspector.getId());
+                inspectTask.setMarkerName(inspector.getName());
+                inspectTask.setSubject(inspector.getSubject());
+                inspectTask.setWorkId(inspectRange.getWorkId());
+                inspectTask.setInspectRangeId(id);
+                inspectTask.setPaper(scPaper);
+                inspectTask.setQuestionId(scPaper.getQuestionId());
+                inspectTask.setCreatedOn(new Date());
+
+                inspectTasks.add(inspectTask);
+            }
+
+            for (MarkUser inspector : sxInspectors) {
+                InspectTask inspectTask = new InspectTask();
+
+                inspectTask.setMarkerId(inspector.getId());
+                inspectTask.setMarkerName(inspector.getName());
+                inspectTask.setSubject(inspector.getSubject());
+                inspectTask.setWorkId(inspectRange.getWorkId());
+                inspectTask.setInspectRangeId(id);
+                inspectTask.setPaper(sxPaper);
+                inspectTask.setQuestionId(sxPaper.getQuestionId());
+                inspectTask.setCreatedOn(new Date());
+
+                inspectTasks.add(inspectTask);
+            }
+
+            for (MarkUser inspector : smInspectors) {
+                InspectTask inspectTask = new InspectTask();
+
+                inspectTask.setMarkerId(inspector.getId());
+                inspectTask.setMarkerName(inspector.getName());
+                inspectTask.setSubject(inspector.getSubject());
+                inspectTask.setWorkId(inspectRange.getWorkId());
+                inspectTask.setInspectRangeId(id);
+                inspectTask.setPaper(smPaper);
+                inspectTask.setQuestionId(smPaper.getQuestionId());
+                inspectTask.setCreatedOn(new Date());
+
+                inspectTasks.add(inspectTask);
+            }
+
+
+        }
+
+        inspectTaskRepo.save(inspectTasks);
+
     }
 
 
@@ -97,16 +195,31 @@ public class InspectRangeService {
                 break;
         }
 
+        inspectRange.setActive(false);
+        inspectRange.setEditable(true);
         if (inspectRange.getId() != null) {
             //如果是修改操作,要将先前标记的学生试卷改回来
-            paperRepo.resetInspectRange(inspectRange.getId());
+//            paperRepo.resetInspectRange(inspectRange.getId());
+            inspectStudentRepo.deleteByInspectRangeId(inspectRange.getId());
         }
 
-        //再重新标记
-        paperRepo.markInspectRange(inspectRange.getId(), examNumbers);
-
         inspectRange.setStudentCount(examNumbers.size());
-        inspectRangeRepo.save(inspectRange);
+        InspectRange savedRange = inspectRangeRepo.save(inspectRange);
+
+
+        if (examNumbers.size() > 0) {
+
+            //再重新标记
+            //paperRepo.markInspectRange(inspectRange.getId(), examNumbers);
+            List<InspectStudent> inspectStudents = new ArrayList<>();
+            for (String examNumber : examNumbers) {
+                InspectStudent inspectStudent = new InspectStudent();
+                inspectStudent.setExamNumber(examNumber);
+                inspectStudent.setInspectRangeId(savedRange.getId());
+                inspectStudents.add(inspectStudent);
+            }
+            inspectStudentRepo.save(inspectStudents);
+        }
 
     }
 }

+ 16 - 6
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectRange.java

@@ -16,6 +16,10 @@ public class InspectRange implements Serializable {
 
     private Long workId;
 
+    private boolean active;
+
+    private boolean editable;
+
     @Enumerated(value = EnumType.STRING)
     private InspectRangeType type;
 
@@ -24,8 +28,6 @@ public class InspectRange implements Serializable {
 
     private Integer studentCount;
 
-    private Boolean enabled;
-
     public static enum InspectRangeType {
         ZF, DKFS, SYD
     }
@@ -71,11 +73,19 @@ public class InspectRange implements Serializable {
         this.studentCount = studentCount;
     }
 
-    public Boolean getEnabled() {
-        return enabled;
+    public boolean isActive() {
+        return active;
+    }
+
+    public void setActive(boolean active) {
+        this.active = active;
+    }
+
+    public boolean isEditable() {
+        return editable;
     }
 
-    public void setEnabled(Boolean enabled) {
-        this.enabled = enabled;
+    public void setEditable(boolean editable) {
+        this.editable = editable;
     }
 }

+ 51 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectStudent.java

@@ -0,0 +1,51 @@
+package cn.com.qmth.stmms.ms.core.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * Created by yuanpan on 2017/11/20.
+ */
+@Entity
+public class InspectStudent implements Serializable {
+    private static final long serialVersionUID = -250396162022769459L;
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @NotNull
+    private Long inspectRangeId;
+
+    @NotNull
+    private String examNumber;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getInspectRangeId() {
+        return inspectRangeId;
+    }
+
+    public void setInspectRangeId(Long inspectRangeId) {
+        this.inspectRangeId = inspectRangeId;
+    }
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+}

+ 150 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectTask.java

@@ -0,0 +1,150 @@
+package cn.com.qmth.stmms.ms.core.domain;
+
+import cn.com.qmth.stmms.ms.core.vo.Subject;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by yuanpan on 2017/11/20.
+ */
+@Entity
+public class InspectTask implements Serializable {
+
+    private static final long serialVersionUID = 952218366749449251L;
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @NotNull
+    private Long markerId;
+
+
+    @NotNull
+    private String markerName;
+
+    @Enumerated(value = EnumType.STRING)
+    private Subject subject;
+
+    @NotNull
+    private Long workId;
+
+    @NotNull
+    private Long inspectRangeId;
+
+    @NotNull
+    @ManyToOne
+    @JoinColumn(name = "paperId")
+    private Paper paper;
+
+    private Long questionId;
+
+    @Temporal(value = TemporalType.TIMESTAMP)
+    private Date createdOn;
+
+    @Temporal(value = TemporalType.TIMESTAMP)
+    private Date updatedOn;
+
+    private String level;
+    private Integer score;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Long markerId) {
+        this.markerId = markerId;
+    }
+
+    public String getMarkerName() {
+        return markerName;
+    }
+
+    public void setMarkerName(String markerName) {
+        this.markerName = markerName;
+    }
+
+    public Subject getSubject() {
+        return subject;
+    }
+
+    public void setSubject(Subject subject) {
+        this.subject = subject;
+    }
+
+    public Long getWorkId() {
+        return workId;
+    }
+
+    public void setWorkId(Long workId) {
+        this.workId = workId;
+    }
+
+    public Long getInspectRangeId() {
+        return inspectRangeId;
+    }
+
+    public void setInspectRangeId(Long inspectRangeId) {
+        this.inspectRangeId = inspectRangeId;
+    }
+
+    public Paper getPaper() {
+        return paper;
+    }
+
+    public void setPaper(Paper paper) {
+        this.paper = paper;
+    }
+
+    public Long getQuestionId() {
+        return questionId;
+    }
+
+    public void setQuestionId(Long questionId) {
+        this.questionId = questionId;
+    }
+
+    public Date getCreatedOn() {
+        return createdOn;
+    }
+
+    public void setCreatedOn(Date createdOn) {
+        this.createdOn = createdOn;
+    }
+
+    public Date getUpdatedOn() {
+        return updatedOn;
+    }
+
+    public void setUpdatedOn(Date updatedOn) {
+        this.updatedOn = updatedOn;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public Integer getScore() {
+        return score;
+    }
+
+    public void setScore(Integer score) {
+        this.score = score;
+    }
+}

+ 2 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkStage.java

@@ -21,8 +21,9 @@ public enum MarkStage {
 
     /**
      * 抽查
-     * CHECK,先暂时不加这个状态
      */
+    INSPECT,
+
 
     /**
      * 结束

+ 2 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectRangeRepo.java

@@ -14,5 +14,7 @@ public interface InspectRangeRepo extends JpaRepository<InspectRange, Long> {
 
     List<InspectRange> findByWorkId(Long workId);
 
+    InspectRange findByWorkIdAndActive(Long workId,boolean active);
+
     int countByWorkId(Long workId);
 }

+ 25 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectStudentRepo.java

@@ -0,0 +1,25 @@
+package cn.com.qmth.stmms.ms.core.repository;
+
+import cn.com.qmth.stmms.ms.core.domain.InspectStudent;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by yuanpan on 2017/11/20.
+ */
+@Repository
+public interface InspectStudentRepo extends CrudRepository<InspectStudent, Long> {
+
+
+//    @Modifying
+//    @Query(value = "delete from InspectStudent s where s.inspectRangeId = ?1 and s.examNumber in ?2")
+//    void deleteByExamNumbers(Long inspectRangeId, List<String> examNumbers);
+
+    void deleteByInspectRangeId(Long inspectRangeId);
+
+    List<InspectStudent> findByInspectRangeId(Long inspectRangeId);
+}

+ 25 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectTaskRepo.java

@@ -0,0 +1,25 @@
+package cn.com.qmth.stmms.ms.core.repository;
+
+import cn.com.qmth.stmms.ms.core.domain.InspectTask;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by yuanpan on 2017/11/20.
+ */
+@Repository
+public interface InspectTaskRepo extends CrudRepository<InspectTask, Long>, JpaSpecificationExecutor<InspectTask> {
+
+    int countByWorkIdAndInspectRangeId(Long workId, Long inspectRangeId);
+
+    int countByMarkerId(Long markerId);
+
+    List<InspectTask> findByMarkerIdAndInspectRangeId(Long markerId, Long inspectRangeId);
+
+    List<InspectTask> findByInspectRangeId(Long inspectRangeId);
+
+    List<InspectTask> findByPaperId(Long paperId);
+}

+ 3 - 3
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java

@@ -44,7 +44,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      * @param subject
      * @return
      */
-    @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.level IS NULL,1,0)),COUNT(p.`question_id`), p.area_code \n" +
+    @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.level IS NULL,1,0)),COUNT(p.`question_id`), MAX(p.area_code) \n" +
             "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
     List<Object[]> countGroupByQuestionForLevel(Long workId, String subject);
@@ -69,7 +69,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      * @param workId
      * @return
      */
-    @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.score IS NULL,1,0)),COUNT(p.`question_id`) ,p.area_code \n" +
+    @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.score IS NULL,1,0)),COUNT(p.`question_id`) ,MAX(p.area_code) \n" +
             "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
     List<Object[]> countGroupByQuestionForScore(Long workId, String string);
@@ -136,5 +136,5 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     @Query(value = "update Paper p set p.inspectRange = ?1 where p.examNumber in ?2")
     void markInspectRange(Long inspectRange, List<String> examNumbers);
 
-    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
+//    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

+ 1 - 1
stmms-ms-main/src/main/resources/application-dev.properties

@@ -23,7 +23,7 @@ logging.file=./logs/sys.log
 logging.level.org.springframework=ERROR
 logging.level.org.hibernate=ERROR
 
-spring.jpa.show-sql=true
+spring.jpa.show-sql=false
 spring.jpa.hibernate.ddl-auto=update
 
 

+ 1 - 1
stmms-ms-main/src/main/resources/application.properties

@@ -1,4 +1,4 @@
-spring.profiles.active=test
+spring.profiles.active=dev
 
 spring.datasource.url=jdbc:mysql://localhost:3306/stmms-ms-2?useUnicode=true&characterEncoding=UTF-8
 spring.datasource.username=root

+ 2 - 89
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/InspectApi.java

@@ -1,13 +1,11 @@
 package cn.com.qmth.stmms.ms.marking.api;
 
 import cn.com.qmth.stmms.ms.core.domain.InspectRange;
+import cn.com.qmth.stmms.ms.core.domain.InspectTask;
 import cn.com.qmth.stmms.ms.core.domain.Level;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
-import cn.com.qmth.stmms.ms.core.repository.InspectRangeRepo;
-import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
-import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
@@ -24,90 +22,5 @@ import java.util.stream.Collectors;
 @RequestMapping("api/inspect")
 public class InspectApi {
 
-    @Autowired
-    private LevelRepo levelRepo;
-
-    @Autowired
-    private PaperRepo paperRepo;
-
-    @Autowired
-    private PaperAssembler paperAssembler;
-
-    @Autowired
-    private InspectRangeRepo inspectRangeRepo;
-
-    @Autowired
-    private MarkUserRepo markUserRepo;
-
-
-    @GetMapping(value = "{workId}/{markerId}")
-    public List<Map<String, Object>> list(@PathVariable(value = "workId") Long workId, @PathVariable(value = "markerId") Long markerId) {
-
-        List<InspectRange> inspectRanges = inspectRangeRepo.findByWorkId(workId);
-        if (inspectRanges == null || inspectRanges.size() < 1) {
-            return null;
-        }
-
-        InspectRange inspectRange = inspectRanges.get(0);
-
-
-        MarkUser inspector = markUserRepo.findOne(markerId);
-
-        Subject subject = inspector.getSubject();
-
-
-        List<PaperDTO> inspectPages = paperRepo.findByWorkIdAndSubjectAndInspectRange(workId, subject, inspectRange.getId()).stream().map(paper -> paperAssembler.toDTO(paper)).collect(Collectors.toList());
-        Map<String, List<PaperDTO>> group = inspectPages.stream().collect(Collectors.groupingBy(PaperDTO::getAreaCode));
-
-        List<Map<String, Object>> resultList = new LinkedList<>();
-        group.forEach((k, v) -> {
-            Map<String, Object> map = new HashMap<>();
-            //将试卷按照分数大小从高到低排序
-            v.sort((o1, o2) -> o2.getScore().intValue() - o1.getScore().intValue());
-            map.put("area", k);
-            map.put("papers", v);
-            resultList.add(map);
-        });
-
-        //按数量倒序排序
-        resultList.sort(new Comparator<Map<String, Object>>() {
-            @Override
-            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
-                List l1 = (List) o1.get("papers");
-                List l2 = (List) o2.get("papers");
-
-                return l2.size() - l1.size();
-            }
-        });
-        return resultList;
-    }
-
-
-    @PostMapping(value = "{workId}/{markerId}/{paperId}")
-    public void marking(@PathVariable(value = "workId") Long workId, @PathVariable(value = "markerId") Long markerId, @PathVariable(value = "paperId") Long paperId, @RequestBody HashMap<String, String> body) {
-
-        Paper paper = paperRepo.findOne(paperId);
-        if (Objects.equals(workId, paper.getWorkId())) {
-
-            Double inspectScore = Double.parseDouble(body.get("score"));
-
-            List<Level> levels = levelRepo.findByWorkId(workId);
-            Level inspectLevel = null;
-
-            for (Level l : levels) {
-                if (l.getMaxScore() >= inspectScore && inspectScore >= l.getMinScore()) {
-                    inspectLevel = l;
-                    break;
-                }
-            }
-
-            paper.setInspector(markerId);
-            paper.setInspectScore(inspectScore);
-            paper.setInspectLevel(inspectLevel.getCode());
-
-            paperRepo.save(paper);
-
-        }
-    }
 
 }

+ 106 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/InspectTaskController.java

@@ -0,0 +1,106 @@
+package cn.com.qmth.stmms.ms.marking.api;
+
+import cn.com.qmth.stmms.ms.core.domain.InspectRange;
+import cn.com.qmth.stmms.ms.core.domain.InspectTask;
+import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
+import cn.com.qmth.stmms.ms.core.repository.*;
+import cn.com.qmth.stmms.ms.marking.service.InspectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Created by yuanpan on 2017/11/22.
+ */
+@RestController
+@RequestMapping("/api/inspect-task")
+public class InspectTaskController {
+
+    @Autowired
+    private InspectRangeRepo inspectRangeRepo;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    @Autowired
+    private InspectTaskRepo inspectTaskRepo;
+
+    @Autowired
+    private InspectService inspectService;
+
+    @GetMapping
+    public List<InspectTask> list(@RequestParam(value = "rangeId") Long rangeId, @RequestParam(value = "markerId", required = false) Long markerId) {
+
+        return inspectTaskRepo.findAll((root, query, cb) -> {
+
+            List<Predicate> predicates = new ArrayList<>();
+
+            if (!StringUtils.isEmpty(rangeId)) {
+                predicates.add(cb.equal(root.get("inspectRangeId"), rangeId));
+            }
+
+            if (!StringUtils.isEmpty(markerId)) {
+                predicates.add(cb.equal(root.get("markerId"), markerId));
+            }
+
+            Predicate[] pre = new Predicate[predicates.size()];
+            return query.where(predicates.toArray(pre)).getRestriction();
+        });
+
+    }
+
+
+    @GetMapping(value = "/sort")
+    public List<Map<String, Object>> sort(@RequestParam(value = "workId") Long workId, @RequestParam(value = "markerId") Long markerId) {
+
+        InspectRange inspectRange = inspectRangeRepo.findByWorkIdAndActive(workId, true);
+
+        if (inspectRange == null) {
+            return new ArrayList<>();
+        }
+        MarkUser inspector = markUserRepo.findOne(markerId);
+
+        List<InspectTask> inspectTasks = inspectTaskRepo.findByMarkerIdAndInspectRangeId(inspector.getId(), inspectRange.getId());
+
+        Map<String, List<InspectTask>> group = inspectTasks.stream().collect(Collectors.groupingBy(task -> task.getPaper().getAreaCode()));
+
+        List<Map<String, Object>> resultList = new LinkedList<>();
+        group.forEach((k, v) -> {
+            Map<String, Object> map = new HashMap<>();
+            //将试卷按照分数大小从高到低排序
+            v.sort((t1, t2) -> t2.getPaper().getScore().intValue() - t1.getPaper().getScore().intValue());
+            map.put("area", k);
+            map.put("tasks", v);
+            resultList.add(map);
+        });
+
+        //按数量倒序排序
+        resultList.sort((o1, o2) -> {
+            List l1 = (List) o1.get("tasks");
+            List l2 = (List) o2.get("tasks");
+
+            return l2.size() - l1.size();
+        });
+        return resultList;
+    }
+
+    @PatchMapping(value = "{domain}")
+    public void inspect(@PathVariable(value = "domain") InspectTask inspectTask, @RequestBody Integer score) {
+
+        MarkUser inspector = markUserRepo.findOne(inspectTask.getMarkerId());
+        String level = inspectService.getLevel(inspectTask.getWorkId(), score);
+        inspectTask.setLevel(level);
+        inspectTask.setScore(score);
+        inspectTask.setMarkerName(inspector.getName());
+
+        inspectService.inspect(inspectTask);
+    }
+}

+ 70 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/InspectService.java

@@ -0,0 +1,70 @@
+package cn.com.qmth.stmms.ms.marking.service;
+
+import cn.com.qmth.stmms.ms.core.domain.InspectTask;
+import cn.com.qmth.stmms.ms.core.domain.Level;
+import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.repository.InspectTaskRepo;
+import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
+import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by yuanpan on 2017/11/22.
+ */
+@Service
+public class InspectService {
+
+    @Autowired
+    private InspectTaskRepo inspectTaskRepo;
+
+    @Autowired
+    private PaperRepo paperRepo;
+
+    @Autowired
+    private LevelRepo levelRepo;
+
+
+    @Transactional
+    public void inspect(InspectTask inspectTask) {
+
+        inspectTaskRepo.save(inspectTask);
+
+        Paper paper = inspectTask.getPaper();
+
+        List<InspectTask> inspectTasks = inspectTaskRepo.findByPaperId(paper.getId());
+        int unScoreCount = 0;
+        double sum = 0;
+        for (InspectTask task : inspectTasks) {
+
+            if (task.getScore() == null) {
+                unScoreCount++;
+            } else {
+                sum += task.getScore();
+            }
+        }
+        if (unScoreCount < 1) {
+            //计算平均分
+            double avg = sum / inspectTasks.size();
+            //计算平均分所在的档位
+            Paper p = paperRepo.getOne(paper.getId());
+            p.setInspectScore((double) Math.round(avg));
+            p.setInspectLevel(getLevel(paper.getWorkId(), p.getInspectScore()));
+            paperRepo.save(p);
+        }
+    }
+
+    public String getLevel(Long workId, double score) {
+        List<Level> levels = levelRepo.findByWorkId(workId);
+        for (Level l : levels) {
+            if (l.getMaxScore() >= score && score >= l.getMinScore()) {
+                return l.getCode();
+            }
+        }
+
+        return null;
+    }
+}

+ 14 - 17
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

@@ -73,17 +73,14 @@ public class StageControlService {
                 enterScoreStage(markSubject);
                 break;
             case SCORE:
-                // TODO: 2017/10/12 结束评卷
-                markSubject.setStage(MarkStage.END);
-
                 //TODO 进入抽查阶段
-//                markSubject.setStage(MarkStage.CHECK);
-//                enterCheckStage(markSubject);
+                markSubject.setStage(MarkStage.INSPECT);
+                enterInspectStage(markSubject);
+                break;
+            case INSPECT:
+                //TODO 结束评卷
+                markSubject.setStage(MarkStage.END);
                 break;
-//            case CHECK:
-//                //TODO 结束评卷
-//                markSubject.setStage(MarkStage.END);
-//                break;
         }
         markSubjectRepo.save(markSubject);
         statusMap.put(markSubject.getId(), false);
@@ -154,18 +151,18 @@ public class StageControlService {
      * 进入到抽查阶段
      *
      * @param markSubject
-        暂时不将抽查做成一个独立的stage
-    private void enterCheckStage(MarkSubject markSubject) {
+     */
+    private void enterInspectStage(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("没有设定复评专家");
-        }
+//        List<MarkUser> checkers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.INSPECTOR);
+//        if (checkers.size() == 0) {
+//            statusMap.put(markSubject.getId(), false);
+//            throw new RuntimeException("没有设定复评专家");
+//        }
 
-    }*/
+    }
 
     /**
      * 重置所有评卷数据,回到INIT状态