Przeglądaj źródła

机构版-迭代

xiaof 4 lat temu
rodzic
commit
0c0014a6d4

+ 23 - 32
stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java

@@ -3,15 +3,21 @@ package cn.com.qmth.stmms.ms.accesscontrol.api;
 import cn.com.qmth.stmms.ms.accesscontrol.config.LoginConfig;
 import cn.com.qmth.stmms.ms.commons.utils.AesUtil;
 import cn.com.qmth.stmms.ms.core.cache.CacheService;
+import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
 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.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -30,42 +36,26 @@ public class AuthApi {
     @Autowired
     private CacheService cacheService;
 
+    @Autowired
+    private MarkTaskRepo markTaskRepo;
+
+    @Autowired
+    private MarkSubjectRepo markSubjectRepo;
+
     @RequestMapping(value = "/login", method = RequestMethod.POST)
     public MarkUser login(MarkUser user, HttpServletRequest request) throws Exception {
         MarkUser domain = null;
-
-
         if (loginConfig.adminLoginConfig().getLoginName().equals(user.getLoginName()) &&
                 loginConfig.adminLoginConfig().getPassword().equals(user.getPassword())) {
             domain = new MarkUser(loginConfig.adminLoginConfig().getLoginName(), loginConfig.adminLoginConfig().getPassword(), null, null, "系统管理员", Role.SUPER_ADMIN, null);
             domain.setId(0l);
-        }
-//        else if (loginConfig.clientLoginConfig().getLoginName().equals(user.getLoginName()) &&
-//                loginConfig.clientLoginConfig().getPassword().equals(user.getPassword())) {
-//            domain = new MarkUser(loginConfig.clientLoginConfig().getLoginName(), loginConfig.clientLoginConfig().getPassword(), null, null, "系统管理员", Role.ADMIN, null);
-//        }
-//        else if (loginConfig.inspectionLoginConfig().getLoginName().equals(user.getLoginName()) &&
-//                loginConfig.inspectionLoginConfig().getPassword().equals(user.getPassword())) {
-//            domain = new MarkUser(loginConfig.inspectionLoginConfig().getLoginName(), loginConfig.inspectionLoginConfig().getPassword(), null, null, "纪检员", Role.INSPECTION, null);
-//        }
-        else {
-//            Work activeWork = workRepo.findByActiveTrue();
-//            String loginName = activeWork.getId() + "-" + user.getLoginName();
-//            domain = markUserRepo.findByLoginName(loginName);
+        } else {
             domain = markUserRepo.findByLoginName(user.getLoginName());
             if (domain == null) {
                 if ((loginConfig.adminLoginConfig().getLoginName().equals(user.getLoginName()) && !loginConfig.adminLoginConfig().getPassword().equals(user.getPassword()))
-//                        || (loginConfig.inspectionLoginConfig().getLoginName().equals(user.getLoginName()) && !loginConfig.inspectionLoginConfig().getPassword().equals(user.getPassword()))
                 ) {
                     throw new RuntimeException("用户或密码错误");
-                }
-//                else if (loginConfig.clientLoginConfig().getLoginName().equals(user.getLoginName())) {
-//                    throw new RuntimeException("该账户只能在采集端登录");
-//                }
-//                else if (loginConfig.uploadLoginConfig().getLoginName().equals(user.getLoginName())) {
-//                    throw new RuntimeException("该账户只能在图片客户端登录");
-//                }
-                else {
+                } else {
                     throw new RuntimeException("用户不存在");
                 }
             }
@@ -81,16 +71,17 @@ public class AuthApi {
             domain.setSessionId(request.getSession().getId());
             markUserRepo.save(domain);
         }
-//        HttpSession session = request.getSession();
-//        String token = (String) request.getSession().getAttribute("token");
-//        if (!StringUtils.isEmpty(token)) {
-//            session.setAttribute("token", null);
-//        }
-        //session过期时间
-//        session.setMaxInactiveInterval(-1);
+
+        if (Objects.equals(Role.MARKER, domain.getRole())) {
+            MarkSubject markSubject = markSubjectRepo.findOne(domain.getWorkId() + "-" + domain.getSubject().name());
+            List<MarkTask> markTasks = markTaskRepo.findByWorkIdAndSubjectAndMarkerIdAndStage(domain.getWorkId(), domain.getSubject(), domain.getId(), markSubject.getStage());
+            if (CollectionUtils.isEmpty(markTasks)) {
+                throw new RuntimeException("没有评卷任务");
+            }
+        }
+
         String token = System.currentTimeMillis() + "#" + domain.getLoginName() + "#" + domain.getId();
         token = AesUtil.encoder(token, "token", null);
-//        session.setAttribute("token", System.currentTimeMillis() + "#" + domain.getLoginName() + "#" + domain.getId());
         cacheService.saveTokenCache(domain.getId().toString(), token);
         domain.setToken(token);
         return domain;

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

@@ -395,7 +395,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     void updateScoreByWorkIdAndSubject(Long workId, String subject);
 
     @Modifying
-    @Query(value = "update paper p set p.level = null, p.redo_level = null, p.batch_no = null, p.is_arbitrated = false, p.is_manual = false, p.is_rejected = false, p.is_tagged = false, p.mark_by_leader = false, p.is_one_click = false where p.work_id = ?1 and p.subject = ?2", nativeQuery = true)
+    @Query(value = "update paper p set p.level = null, p.redo_level = null, p.batch_no = null, p.is_active = false, p.is_arbitrated = false, p.is_manual = false, p.is_rejected = false, p.is_tagged = false, p.mark_by_leader = false, p.is_one_click = false where p.work_id = ?1 and p.subject = ?2", nativeQuery = true)
     void updateLevelByWorkIdAndSubject(Long workId, String subject);
 
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);

+ 58 - 33
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/specification/StudentSpecification.java

@@ -6,6 +6,7 @@ import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.Predicate;
 import java.util.ArrayList;
@@ -137,8 +138,11 @@ public class StudentSpecification extends PagingAndSortingSpecification {
         return (root, query, cb) -> {
             List<Predicate> predicates = new ArrayList<Predicate>();
             List<Predicate> listPermission = new ArrayList<>();
+            List<Predicate> listPermission1 = new ArrayList<>();
+            List<Predicate> listPermission2 = new ArrayList<>();
+            List<Predicate> listPermission3 = new ArrayList<>();
             predicates.add(cb.equal(root.get("test"), String.valueOf(TrialEnum.DEFAULT.getId())));
-            if (getStudentName() != null) {
+            if (!StringUtils.isEmpty(getStudentName())) {
                 predicates.add(cb.like(root.get("name"), "%" + getStudentName() + "%"));
             }
 //            if(getExamNumber() != null){
@@ -150,23 +154,48 @@ public class StudentSpecification extends PagingAndSortingSpecification {
             if (getAreaCode() != null && getAreaCode() != "") {
                 predicates.add(cb.equal(root.get("areaCode"), getAreaCode()));
             }
-            if (getIsAbsent() != null) {
+
+            if ("ONE".equals(getSubject())) {
+                listPermission1.add(cb.equal(root.get("scMissing"), true));
+                listPermission1.add(cb.equal(root.get("sxMissing"), false));
+                listPermission1.add(cb.equal(root.get("smMissing"), false));
+
+                listPermission2.add(cb.equal(root.get("scMissing"), false));
+                listPermission2.add(cb.equal(root.get("sxMissing"), true));
+                listPermission2.add(cb.equal(root.get("smMissing"), false));
+
+                listPermission3.add(cb.equal(root.get("scMissing"), false));
+                listPermission3.add(cb.equal(root.get("sxMissing"), false));
+                listPermission3.add(cb.equal(root.get("smMissing"), true));
+            } else {
+                if (getIsAbsent() != null) {
 //                predicates.add(cb.equal(root.get("isAbsent"), getIsAbsent()));
-                if (getSubject().equals(Subject.SC.name())) {
-                    predicates.add(cb.equal(root.get("scMissing"), true));
-                } else if (getSubject().equals(Subject.SX.name())) {
-                    predicates.add(cb.equal(root.get("sxMissing"), true));
-                } else if (getSubject().equals(Subject.SM.name())) {
-                    predicates.add(cb.equal(root.get("smMissing"), true));
-                } else {
-                    listPermission.add(cb.equal(root.get("scMissing"), true));
-                    listPermission.add(cb.equal(root.get("sxMissing"), true));
-                    listPermission.add(cb.equal(root.get("smMissing"), true));
+                    if (Subject.SC.name().equals(getSubject())) {
+                        predicates.add(cb.equal(root.get("scMissing"), true));
+                    } else if (Subject.SX.name().equals(getSubject())) {
+                        predicates.add(cb.equal(root.get("sxMissing"), true));
+                    } else if (Subject.SM.name().equals(getSubject())) {
+                        predicates.add(cb.equal(root.get("smMissing"), true));
+                    } else {
+                        listPermission.add(cb.equal(root.get("scMissing"), true));
+                        listPermission.add(cb.equal(root.get("sxMissing"), true));
+                        listPermission.add(cb.equal(root.get("smMissing"), true));
+                    }
+                }
+                if (getUpload() != null && !getUpload()) {
+                    if (Objects.nonNull(getSubject()) && !getSubject().isEmpty()) {
+                        predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":0" + "%"));
+                    } else {
+                        predicates.add(cb.equal(root.get("uploadStatus"), "SX:0,SC:0,SM:0"));
+                    }
+                } else if (getUpload() != null && getUpload()) {
+                    if (Objects.nonNull(getSubject()) && !getSubject().isEmpty()) {
+                        predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":1" + "%"));
+                    } else {
+                        predicates.add(cb.equal(root.get("uploadStatus"), "SX:1,SC:1,SM:1"));
+                    }
                 }
             }
-//            if (getUploadStatus() != null) {
-//                predicates.add(cb.like(root.get("uploadStatus"), "%" + getUploadStatus() + "%"));
-//            }
             if (startNumber != null && endNumber != null) {
                 predicates.add(cb.between(root.get("examNumber"), startNumber, endNumber));
             } else if (startNumber != null) {
@@ -174,19 +203,6 @@ public class StudentSpecification extends PagingAndSortingSpecification {
             } else if (endNumber != null) {
                 predicates.add(cb.equal(root.get("examNumber"), endNumber));
             }
-            if (getUpload() != null && !getUpload()) {
-                if (Objects.nonNull(getSubject()) && !getSubject().isEmpty()) {
-                    predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":0" + "%"));
-                } else {
-                    predicates.add(cb.equal(root.get("uploadStatus"), "SX:0,SC:0,SM:0"));
-                }
-            } else if (getUpload() != null && getUpload()) {
-                if (Objects.nonNull(getSubject()) && !getSubject().isEmpty()) {
-                    predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":1" + "%"));
-                } else {
-                    predicates.add(cb.equal(root.get("uploadStatus"), "SX:1,SC:1,SM:1"));
-                }
-            }
             if (getSchool() != null && getSchool() != "") {
                 predicates.add(cb.equal(root.get("school"), getSchool()));
             }
@@ -194,13 +210,22 @@ public class StudentSpecification extends PagingAndSortingSpecification {
                 predicates.add(cb.equal(root.get("examRoom"), getExamRoom()));
             }
             Predicate Pre_And = cb.and(predicates.toArray(new Predicate[predicates.size()]));
-            if (!CollectionUtils.isEmpty(listPermission)) {
-                Predicate[] predicatesPermissionArr = new Predicate[listPermission.size()];
-                Predicate Pre_Or = cb.or(listPermission.toArray(predicatesPermissionArr));
-                return query.where(Pre_And, Pre_Or).getRestriction();
+            if ("ONE".equals(getSubject())) {
+                if (!CollectionUtils.isEmpty(listPermission1) && !CollectionUtils.isEmpty(listPermission2) && !CollectionUtils.isEmpty(listPermission3)) {
+                    Predicate Pre_Or1 = cb.and(listPermission1.toArray(new Predicate[listPermission1.size()]));
+                    Predicate Pre_Or2 = cb.and(listPermission2.toArray(new Predicate[listPermission2.size()]));
+                    Predicate Pre_Or3 = cb.and(listPermission3.toArray(new Predicate[listPermission3.size()]));
+                    Predicate preOrAll = cb.or(Pre_Or1, Pre_Or2, Pre_Or3);
+                    return query.where(Pre_And, preOrAll).getRestriction();
+                }
             } else {
-                return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+                if (!CollectionUtils.isEmpty(listPermission)) {
+                    Predicate Pre_Or = cb.or(listPermission.toArray(new Predicate[listPermission.size()]));
+                    return query.where(Pre_And, Pre_Or).getRestriction();
+                }
+
             }
+            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
         };
     }
 }

+ 4 - 3
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/aop/MarkLogAop.java

@@ -279,8 +279,8 @@ public class MarkLogAop {
                 Integer deviation = Optional.ofNullable(ParamCache.paramMap.get(work.getId()).getDeviation()).orElse(3);
                 js.put("deviation", deviation.intValue());
                 MarkTaskJob markTaskJob = new MarkTaskJob(js.toJSONString(), false, paper.getWorkId());
-                autoCallback(markTasks, deviation.intValue(), paper, markTaskJob, work.getName());
                 markTaskJobRepo.save(markTaskJob);
+                autoCallback(markTasks, deviation.intValue(), paper, markTaskJob, work.getName());
             }
         }
         //20191107wangliang加入仲裁自动打回算法 end
@@ -302,7 +302,7 @@ public class MarkLogAop {
             markTaskJobRepo.updateMarkTaskJobByVersion(markTaskJob.getId(), markTaskJob.getVersion());
             return;
         }
-
+        LOGGER.info("paper111:"+ JSONObject.toJSONString(paper));
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
         Map<String, Integer> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getLevelValue));
 
@@ -311,7 +311,7 @@ public class MarkLogAop {
         arbitrateCallback.judge(levelsMap, deviation, new ArbitrateResult() {
             @Override
             public void callback(List<ArbitrateCallback.Distance> list) {
-                LOGGER.info("this:{} callback markLogAop异步回调进来了", this);
+                LOGGER.info("this:{} callback markLogAop异步回调进来了", JSONObject.toJSONString(list));
                 String operResult = DEFAULT_RESULT;
                 //全部打回则不触发自动仲裁
                 if (Objects.nonNull(list) && list.size() > 0 && markTasks.size() != list.size()) {
@@ -340,6 +340,7 @@ public class MarkLogAop {
                     if (count > 0) {
                         markTaskRepo.save(markTasks);
                         paperRepo.save(paper);
+                        LOGGER.info("paper222:"+ JSONObject.toJSONString(paper));
                         markLogRepo.save(markLogList);
                     }
                 }

+ 1 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -102,6 +102,7 @@ public class MarkTaskAssembler {
             //打回总次数
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), Objects.nonNull(paper.isRejectedByLeader()) && paper.isRejectedByLeader() ? MarkLogOperType.CALLBACK_LEVEl.getId() : MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId());
             markTaskDTO.setRejectedCount(rejectedCount);
+            markTaskDTO.setDeviationDirection(markTask.getDeviationDirection());
         }
         return markTaskDTO;
     }

+ 9 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkTaskDTO.java

@@ -38,6 +38,7 @@ public class MarkTaskDTO implements Serializable{
     private Boolean isRejectedByLeader;
     //打回总次数
     private Integer rejectedCount;
+    private String deviationDirection;
 
     public Integer getRandomSeq() {
         return randomSeq;
@@ -250,4 +251,12 @@ public class MarkTaskDTO implements Serializable{
     public void setLoginName(String loginName) {
         this.loginName = loginName;
     }
+
+    public String getDeviationDirection() {
+        return deviationDirection;
+    }
+
+    public void setDeviationDirection(String deviationDirection) {
+        this.deviationDirection = deviationDirection;
+    }
 }

+ 14 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 import cn.com.qmth.stmms.ms.commons.config.LevelConfig;
 import cn.com.qmth.stmms.ms.commons.constant.ArbitrateCallback;
 import cn.com.qmth.stmms.ms.commons.constant.ArbitrateResult;
+import cn.com.qmth.stmms.ms.core.cache.CacheService;
 import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
@@ -18,6 +19,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -73,6 +75,9 @@ public class MarkingService {
     @Autowired
     TaskPublishSettingRepo taskPublishSettingRepo;
 
+    @Autowired
+    private CacheService cacheService;
+
     /**
      * 提交分档。如果每个评卷都提交了,则进行仲裁判定,如果没有触发仲裁就定档
      *
@@ -433,5 +438,14 @@ public class MarkingService {
         } else {
             throw new RuntimeException("当前阶段无法重置数据");
         }
+
+        // 所有用户强制退出
+        List<MarkUser> userList = markUserRepo.findByWorkIdAndSubject(workId, subject);
+        userList = userList.stream().filter(m-> Role.MARKER.equals(m.getRole()) || Role.MARK_LEADER.equals(m.getRole())).collect(Collectors.toList());
+        if(!CollectionUtils.isEmpty(userList)){
+            for (MarkUser user : userList) {
+                cacheService.deleteTokenCache(user.getId().toString());
+            }
+        }
     }
 }