Procházet zdrojové kódy

采集账号管理,空白卷不分档

xiaof před 5 roky
rodič
revize
59f5271a67

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

@@ -57,6 +57,9 @@ public class AuthApi {
                     throw new RuntimeException("用户不存在");
                 }
             }
+            if(Objects.equals(Role.COLLECTOR, domain.getRole())){
+                throw new RuntimeException("该账户只能在采集端登录");
+            }
             if (!user.getPassword().equals(domain.getPassword())) {
                 throw new RuntimeException("用户或密码错误");
             }

+ 79 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -5,6 +5,7 @@ import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkRight;
 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.MarkLogRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
@@ -34,6 +35,9 @@ public class UserApi {
     @Autowired
     private MarkTaskRepo markTaskRepo;
 
+    @Autowired
+    private MarkLogRepo markLogRepo;
+
     @RequestMapping(value = "{userId}", method = RequestMethod.DELETE)
     public void remove(@PathVariable Long userId) {
         long count = markTaskRepo.countByMarkerId(userId);
@@ -74,8 +78,10 @@ public class UserApi {
             throw new RuntimeException("该登录名已经存在");
         }
         user.setLoginName(user.getLoginName());
-        if (Objects.equals(user.getRole().name(), Role.MARKER.name())) {
+        //非科组长
+        if (!Objects.equals(user.getRole().name(), Role.MARK_LEADER.name())) {
             user.setOneClickLevel(false);
+            user.setStandardVolume(false);
         }
         markUserRepo.save(user);
     }
@@ -93,5 +99,77 @@ public class UserApi {
         }
     }
 
+    /**
+     * 采集员列表查询
+     *
+     * @param role
+     * @return
+     */
+    @RequestMapping(value = "collect", method = RequestMethod.GET)
+    public List<MarkUser> listCollect(@RequestParam(required = false, defaultValue = "COLLECTOR") Role role) {
+        return markUserRepo.findByRole(role);
+    }
+
+    /**
+     * 采集员新增
+     *
+     * @param user
+     */
+    @RequestMapping(value = "collect", method = RequestMethod.POST)
+    public void collect(@RequestBody MarkUser user) {
+        MarkUser markUser = markUserRepo.findByLoginName(user.getLoginName());
+        if (markUser != null) {
+            throw new RuntimeException("该账号已经存在");
+        }
+        user.setName(user.getLoginName());
+        //采集员
+        user.setRole(Role.COLLECTOR);
+        //非空字段,随便设值,实际没用到
+        user.setSubject(Subject.SC);
+        //workid给默认值0
+        user.setWorkId(0L);
+        user.setOneClickLevel(false);
+        user.setStandardVolume(false);
+        markUserRepo.save(user);
+    }
+
+    /**
+     * 采集员修改
+     *
+     * @param domain
+     * @param user
+     */
+    @RequestMapping(value = "collect/{domain}", method = RequestMethod.PUT)
+    public void updateCollect(@PathVariable MarkUser domain, @RequestBody MarkUser user) {
+        //开始采集,不能修改
+        List<MarkUser> list = markLogRepo.findByCreateUserId(domain.getId());
+        if (list != null && list.size() > 0 && !domain.getLoginName().equals(user.getLoginName())) {
+            throw new RuntimeException("已有采集记录,不能修改账号");
+        }
+        MarkUser markUser = markUserRepo.findByLoginName(user.getLoginName());
+        if (markUser != null && !domain.getId().equals(markUser.getId())) {
+            throw new RuntimeException("该账号已经存在");
+        }
+        //修改用户名、密码
+        domain.setLoginName(user.getLoginName());
+        domain.setName(user.getLoginName());
+        domain.setPassword(user.getPassword());
+        markUserRepo.save(domain);
+    }
+
+    /**
+     * 采集员删除
+     *
+     * @param userId
+     */
+    @RequestMapping(value = "collect/{userId}", method = RequestMethod.DELETE)
+    public void removeCollect(@PathVariable Long userId) {
+        //开始采集,不能删除
+        List<MarkUser> list = markLogRepo.findByCreateUserId(userId);
+        if (list != null && list.size() > 0) {
+            throw new RuntimeException("已有采集记录,不能删除");
+        }
+        markUserRepo.delete(userId);
+    }
 
 }

+ 1 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -182,6 +182,7 @@ public class DataUploadService {
                 Paper paper = new Paper(student.getWorkId(), null, subject, examQuestion, student, false, random);
                 paper.setSheetMD5(sheetMD5);
                 paper.setSliceMD5(sliceMD5);
+                paper.setExamRoom(student.getExamRoom());
                 paperRepo.save(paper);
                 // 更新科目上传状态
                 /**

+ 39 - 20
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java

@@ -14,7 +14,10 @@ import cn.com.qmth.stmms.ms.commons.utils.image.ImageCompression;
 import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
 import cn.com.qmth.stmms.ms.core.domain.Student;
 import cn.com.qmth.stmms.ms.core.domain.Work;
+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.MarkSubjectRepo;
+import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
@@ -54,6 +57,9 @@ public class CollectApi {
     @Autowired
     private StudentRepo studentRepo;
 
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
@@ -71,27 +77,40 @@ public class CollectApi {
 
     @RequestMapping("user/login")
     public LoginDTO login(@RequestParam String loginname, @RequestParam String password) {
+        MarkUser markUser = markUserRepo.findByLoginName(loginname);
+        //账号不存在
+        if (Objects.isNull(markUser)) {
+            throw new RuntimeException("账号不存在");
+        }
+        //不是采集员账号
+        else if (!Objects.equals(Role.COLLECTOR, markUser.getRole())) {
+            throw new RuntimeException("非采集端账号");
+        }
+        //密码错误
+        else if (!Objects.equals(markUser.getPassword(), password)) {
+            throw new RuntimeException("密码错误");
+        }
         LoginDTO loginDTO = null;
-        if (loginname.equals(loginConfig.adminLoginConfig().getLoginName()) && password.equals(loginConfig.adminLoginConfig().getPassword()) ||
-                loginname.equals(loginConfig.clientLoginConfig().getLoginName()) && password.equals(loginConfig.clientLoginConfig().getPassword())) {
-            Work activeWork = workRepo.findByActiveTrue();
-            loginDTO = new LoginDTO();
-            loginDTO.setExamId(activeWork.getId());
-            loginDTO.setExamName(activeWork.getName());
-            loginDTO.setImageEnc(imageConfig.isImageEnc());
-            List<CollectSubjectDTO> collectSubjectDTOs = new ArrayList<>();
-            activeWork.getSubjects().forEach(s -> {
-                int id = s.getSubject().ordinal() + 1;
-                CollectSubjectDTO collectSubjectDTO = new CollectSubjectDTO(id, s.getName());
-                if (!Strings.isNullOrEmpty(s.getCollectConfig())) {
-                    JSONObject json = JSONObject.fromObject(s.getCollectConfig());
-                    collectSubjectDTO.setCollectConfig(json);
-                }
+//        if (loginname.equals(loginConfig.adminLoginConfig().getLoginName()) && password.equals(loginConfig.adminLoginConfig().getPassword()) ||
+//                loginname.equals(loginConfig.clientLoginConfig().getLoginName()) && password.equals(loginConfig.clientLoginConfig().getPassword())) {
+        Work activeWork = workRepo.findByActiveTrue();
+        loginDTO = new LoginDTO();
+        loginDTO.setExamId(activeWork.getId());
+        loginDTO.setExamName(activeWork.getName());
+        loginDTO.setImageEnc(imageConfig.isImageEnc());
+        List<CollectSubjectDTO> collectSubjectDTOs = new ArrayList<>();
+        activeWork.getSubjects().forEach(s -> {
+            int id = s.getSubject().ordinal() + 1;
+            CollectSubjectDTO collectSubjectDTO = new CollectSubjectDTO(id, s.getName());
+            if (!Strings.isNullOrEmpty(s.getCollectConfig())) {
+                JSONObject json = JSONObject.fromObject(s.getCollectConfig());
+                collectSubjectDTO.setCollectConfig(json);
+            }
 
-                collectSubjectDTOs.add(collectSubjectDTO);
-            });
-            loginDTO.setSubjects(collectSubjectDTOs);
-        }
+            collectSubjectDTOs.add(collectSubjectDTO);
+        });
+        loginDTO.setSubjects(collectSubjectDTOs);
+//        }
         return loginDTO;
     }
 
@@ -118,7 +137,7 @@ public class CollectApi {
             collectStuDTO.setExamNumber(s.getExamNumber());
             collectStuDTO.setName(s.getName());
             collectStuDTO.setSiteCode(s.getAreaName());
-            collectStuDTO.setRoomCode(s.getExamNumber());
+            collectStuDTO.setRoomCode(s.getExamRoom());
             list.add(collectStuDTO);
         };
         studentRepo.findByWorkId(activeWork.getId()).forEach(consumer);

+ 9 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -120,6 +120,8 @@ public class Paper implements Serializable {
 
     private Long randomSeq;
 
+    private String examRoom;
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }
@@ -443,4 +445,11 @@ public class Paper implements Serializable {
         this.sliceMD5 = sliceMD5;
     }
 
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
 }

+ 10 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/MarkUser.java

@@ -40,6 +40,8 @@ public class MarkUser extends AbstractUser {
 
     private boolean oneClickLevel;
 
+    private boolean standardVolume;
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }
@@ -149,5 +151,12 @@ public class MarkUser extends AbstractUser {
 	public void setWeight(Double weight) {
 		this.weight = weight;
 	}
-    
+
+    public boolean getStandardVolume() {
+        return standardVolume;
+    }
+
+    public void setStandardVolume(boolean standardVolume) {
+        this.standardVolume = standardVolume;
+    }
 }

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

@@ -4,7 +4,7 @@ package cn.com.qmth.stmms.ms.core.domain.user;
  * Created by zhengmin on 2016/10/9.
  */
 public enum Role {
-    MARKER("评卷员"), MARK_LEADER("科组长"), ADMIN("管理员"), INSPECTOR("复评专家"),INSPECTION("纪检员");
+    MARKER("评卷员"), MARK_LEADER("科组长"), ADMIN("管理员"), INSPECTOR("复评专家"),INSPECTION("纪检员"),COLLECTOR("采集员");
 
     private String name;
 

+ 5 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkLogRepo.java

@@ -1,10 +1,13 @@
 package cn.com.qmth.stmms.ms.core.repository;
 
 import cn.com.qmth.stmms.ms.core.domain.MarkLog;
+import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * @author ting.yin
  * @date 2016年10月21日
@@ -22,4 +25,6 @@ public interface MarkLogRepo extends JpaRepository<MarkLog, Long>, JpaSpecificat
      * @return
      */
     public MarkLog findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(Long createUserId, Integer operType, String subject, String examNumber);
+
+    List<MarkUser> findByCreateUserId(Long userId);
 }

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

@@ -22,4 +22,6 @@ public interface MarkUserRepo extends JpaRepository<MarkUser,Long>{
 	List<MarkUser> findByWorkId(Long workId);
 
 	long countByWorkIdAndRole(Long workId,Role role);
+
+	List<MarkUser> findByRole(Role role);
 }

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

@@ -22,6 +22,8 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject);
 
+    List<Paper> findByWorkIdAndSubjectAndIsMissing(Long workId, Subject subject, boolean isMissing);
+
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject, Sort sort);
 
     List<Paper> findByQuestionId(Long questionId, Sort sort);
@@ -45,7 +47,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      * @return
      */
     @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` = ?" +
+            "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ? AND p.`is_missing` = false " +
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
     List<Object[]> countGroupByQuestionForLevel(Long workId, String subject);
 
@@ -59,7 +61,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
             "SUM(IF(p.`is_rejected` = 1, 1, 0))," +
             "SUM(IF(p.`is_arbitrated` = 1, 1, 0))" +
             "FROM paper p " +
-            "WHERE p.`question_id` = ? " +
+            "WHERE p.`question_id` = ? and p.is_missing = false " +
             "GROUP BY p.`level` ORDER BY p.`level`", nativeQuery = true)
     List<Object[]> countGroupByLevel(Long questionId);
 

+ 2 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java

@@ -184,6 +184,8 @@ public class PaperApi {
             if(markedLogic != null){
                 predicates.add(builder.equal(root.get("markedLogic"),markedLogic));
             }
+            //空白卷不展示
+            predicates.add(builder.equal(root.get("isMissing"), false));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
 
         };

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

@@ -102,7 +102,7 @@ public class StageControlService {
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有设定档位");
         }
-        List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId, subject);
+        List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsMissing(workId, subject, false);
         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());
         if (levelMarkers.size() == 0) {