Bläddra i källkod

多机构需求

xiaof 4 år sedan
förälder
incheckning
e1f60c7cb2
27 ändrade filer med 711 tillägg och 96 borttagningar
  1. 1 2
      sql/美术阅卷改版-表结构20200905.sql
  2. 1 1
      stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java
  3. 123 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/OrganizationApi.java
  4. 17 9
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java
  5. 18 8
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/WorkApi.java
  6. 61 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/ChangeLevelExpDTO.java
  7. 42 11
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/PaperExporter.java
  8. 120 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/OrganizationService.java
  9. 1 1
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/WorkService.java
  10. 33 23
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/BultInAccountUtil.java
  11. 70 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/RandomUtils.java
  12. 40 33
      stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java
  13. 9 0
      stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/dto/LoginDTO.java
  14. 82 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Organization.java
  15. 22 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Work.java
  16. 22 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/MarkUser.java
  17. 1 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/Role.java
  18. 3 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ChangeLevelRepo.java
  19. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskRepo.java
  20. 8 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkUserRepo.java
  21. 14 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/OrganizationRepo.java
  22. 3 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java
  23. 6 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/WorkRepo.java
  24. 0 6
      stmms-ms-main/src/main/java/cn/com/qmth/stmms/ms/StartRunning.java
  25. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java
  26. 1 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkerAssembler.java
  27. 10 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkerDTO.java

+ 1 - 2
sql/美术阅卷改版-表结构20200905.sql

@@ -55,13 +55,12 @@ CREATE TABLE `change_level` (
   `subject` varchar(50) DEFAULT NULL,
   `paper_id` bigint(20) DEFAULT NULL,
   `original_level` varchar(45) DEFAULT NULL COMMENT '原档位',
-  `suggest_stage` varchar(45) DEFAULT NULL COMMENT '建议档位',
   `audit_status` tinyint(1) DEFAULT NULL COMMENT '改档审核:0-申请,1-同意,2-不同意',
   `create_id` bigint(20) DEFAULT NULL COMMENT '申请改档用户id',
   `create_date` datetime DEFAULT NULL COMMENT '申请改档时间',
   `audit_id` bigint(20) DEFAULT NULL COMMENT '审核用户id',
   `audit_date` datetime DEFAULT NULL COMMENT '审核时间',
-  `suggest_level` varchar(255) DEFAULT NULL,
+  `suggest_level` varchar(255) DEFAULT NULL COMMENT '建议档位',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='改档记录表';
 /*!40101 SET character_set_client = @saved_cs_client */;

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

@@ -32,7 +32,7 @@ public class AuthApi {
 
         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.ADMIN, null);
+            domain = new MarkUser(loginConfig.adminLoginConfig().getLoginName(), loginConfig.adminLoginConfig().getPassword(), null, null, "系统管理员", Role.SUPER_ADMIN, null);
         }
 //        else if (loginConfig.clientLoginConfig().getLoginName().equals(user.getLoginName()) &&
 //                loginConfig.clientLoginConfig().getPassword().equals(user.getPassword())) {

+ 123 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/OrganizationApi.java

@@ -0,0 +1,123 @@
+package cn.com.qmth.stmms.ms.admin.api;
+
+import cn.com.qmth.stmms.ms.admin.service.OrganizationService;
+import cn.com.qmth.stmms.ms.commons.utils.specification.PagingAndSortingDTO;
+import cn.com.qmth.stmms.ms.core.domain.Organization;
+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.MarkUserRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.web.bind.annotation.*;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 机构api
+ */
+@RestController
+@RequestMapping("api/admin/organization")
+public class OrganizationApi {
+
+    @Autowired
+    private OrganizationService organizationService;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    /**
+     * 机构管理列表
+     *
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    public PagingAndSortingDTO list(@RequestParam(required = false) String name,
+                                    @RequestParam Integer curPage,
+                                   @RequestParam Integer pageSize) {
+        Sort sort = new Sort(Sort.Direction.DESC, "id");
+        Pageable pageable = new PageRequest(curPage, pageSize, sort);
+        Specification<Organization> specification = (root, query, cb) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            if (Objects.nonNull(name)) {
+                predicates.add(cb.like(root.get("name"), "%" +name+ "%"));
+            }
+
+            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        Page<Organization> organizations = organizationService.findAll(specification, pageable);
+        List<Organization> organizations1 = organizations.getContent();
+        organizations1.stream().map(o -> {
+            List<MarkUser> markUsers = markUserRepo.findByOrganizationIdAndRole(o.getId(), Role.ADMIN);
+            o.setMarkUsers(markUsers);
+            return o;
+        }).collect(Collectors.toList());
+        return new PagingAndSortingDTO(organizations.getNumber(), organizations.getSize(), organizations.getTotalPages(),
+                organizations.getTotalElements(), organizations1);
+    }
+
+    /**
+     * 单个机构信息
+     *
+     * @param organization
+     * @return
+     */
+    @RequestMapping(value = "{organization}", method = RequestMethod.GET)
+    public Organization getOne(@PathVariable Organization organization) {
+        return organization;
+    }
+
+    /**
+     * 启用/禁用
+     *
+     * @param markUser
+     * @return
+     */
+    @RequestMapping(value = "{markUser}", method = RequestMethod.POST)
+    public MarkUser enabled(@PathVariable MarkUser markUser) {
+        if (markUser != null) {
+            markUser.setEnabled(!markUser.isEnabled());
+        }
+        return markUserRepo.save(markUser);
+    }
+
+    /**
+     * 新增机构及管理员用户
+     *
+     * @param organization
+     */
+    @RequestMapping(method = RequestMethod.POST)
+    public Organization add(@RequestBody Organization organization) {
+        return organizationService.save(organization);
+    }
+
+    /**
+     * 修改
+     *
+     * @param markUser
+     * @return
+     */
+    @RequestMapping(method = RequestMethod.PUT)
+    public MarkUser updateOne(@RequestBody MarkUser markUser) {
+        return organizationService.updateOne(markUser);
+    }
+
+
+    /**
+     * 删除
+     *
+     * @param organizationId
+     */
+    @RequestMapping(value = "{organizationId}", method = RequestMethod.DELETE)
+    public void remove(@PathVariable Long organizationId) {
+        organizationService.delete(organizationId);
+    }
+
+}

+ 17 - 9
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -25,6 +25,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.persistence.criteria.Predicate;
+import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -84,7 +85,8 @@ public class UserApi {
     }
 
     @RequestMapping(method = RequestMethod.POST)
-    public void create(@RequestBody MarkUser user) {
+    public void create(HttpServletRequest request, @RequestBody MarkUser user) {
+        Long organizationId = Long.valueOf(request.getHeader("organizationId"));
         MarkSubject markSubject = markSubjectRepo.findOne(user.getWorkId() + "-" + user.getSubject().toString());
         if (markSubject == null) {
             throw new RuntimeException("该科目不存在");
@@ -103,6 +105,7 @@ public class UserApi {
             user.setStandardVolume(false);
             user.setLevelCallback(false);
         }
+        user.setOrganizationId(organizationId);
         markUserRepo.save(user);
     }
 
@@ -114,7 +117,7 @@ public class UserApi {
             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)
+            return markUserRepo.findByWorkId(workId).stream().filter(u -> u.getSubject() == subject && (Objects.equals(u.getRole().name(), Role.MARKER.name()) || Objects.equals(u.getRole().name(), Role.MARK_LEADER.name())))
                     .collect(Collectors.toList());
         }
     }
@@ -126,12 +129,16 @@ public class UserApi {
      * @return
      */
     @RequestMapping(value = "collect", method = RequestMethod.GET)
-    public PageableDTO listCollect(@RequestParam(required = false, defaultValue = "COLLECTOR") Role role, Pageable pageable) {
+    public PageableDTO listCollect(HttpServletRequest request,@RequestParam Long workId, @RequestParam(required = false, defaultValue = "COLLECTOR") Role role, Pageable pageable) {
 //        return markUserRepo.findByRole(role);
 
+        Long organizationId = Long.valueOf(request.getHeader("organizationId"));
+
         Specification<MarkUser> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             predicates.add(builder.equal(root.get("role"), role));
+            predicates.add(builder.equal(root.get("workId"), workId));
+            predicates.add(builder.equal(root.get("organizationId"), organizationId));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
         Page<MarkUser> markUsers = markUserRepo.findAll(specification, pageable);
@@ -148,7 +155,8 @@ public class UserApi {
      * @param user
      */
     @RequestMapping(value = "collect", method = RequestMethod.POST)
-    public void collect(@RequestBody MarkUser user) {
+    public void collect(HttpServletRequest request, @RequestBody MarkUser user) {
+        Long organizationId = Long.valueOf(request.getHeader("organizationId"));
         MarkUser markUser = markUserRepo.findByLoginName(user.getLoginName());
         if (markUser != null) {
             throw new RuntimeException("该账号已经存在");
@@ -158,11 +166,10 @@ public class UserApi {
         user.setRole(Role.COLLECTOR);
         //非空字段,随便设值,实际没用到
         user.setSubject(Subject.SC);
-        //workid给默认值0
-        user.setWorkId(0L);
         user.setOneClickLevel(false);
         user.setStandardVolume(false);
         user.setLevelCallback(false);
+        user.setOrganizationId(organizationId);
         markUserRepo.save(user);
     }
 
@@ -213,14 +220,15 @@ public class UserApi {
 
 
     /**
-     * 纪检员列表查询
+     * 纪检员/质检列表查询
      *
      * @param role
      * @return
      */
     @RequestMapping(value = "inspection", method = RequestMethod.GET)
-    public List<MarkUser> listInspection(@RequestParam(required = false, defaultValue = "INSPECTION") Role role) {
-        return markUserRepo.findByRole(role);
+    public List<MarkUser> listInspection(HttpServletRequest request, @RequestParam(required = false, defaultValue = "INSPECTION") Role role) {
+        Long organizationId = Long.valueOf(request.getHeader("organizationId"));
+        return markUserRepo.findByOrganizationIdAndRoleIn(organizationId, role, Role.QC);
     }
 
     /**

+ 18 - 8
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/WorkApi.java

@@ -5,6 +5,7 @@ import cn.com.qmth.stmms.ms.admin.dto.WorkOverview;
 import cn.com.qmth.stmms.ms.admin.service.WorkService;
 import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
 import cn.com.qmth.stmms.ms.core.domain.Level;
+import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
 import cn.com.qmth.stmms.ms.core.domain.Work;
 import cn.com.qmth.stmms.ms.core.repository.*;
@@ -12,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Sort;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
 
@@ -47,6 +49,9 @@ public class WorkApi {
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
+    @Autowired
+    private MarkTaskRepo markTaskRepo;
+
     @Autowired
     RandomUtil randomUtil;
 
@@ -56,9 +61,10 @@ public class WorkApi {
      * @return
      */
     @RequestMapping(method = RequestMethod.GET)
-    public List<Work> list() {
-        Sort sort = new Sort(Sort.Direction.DESC, "id");
-        return workRepo.findAll(sort);
+    public List<Work> list(HttpServletRequest request) {
+        String organizationId = request.getHeader("organizationId");
+//        Sort sort = new Sort(Sort.Direction.DESC, "id");
+        return workRepo.findByOrganizationIdOrderByIdDesc(Long.valueOf(organizationId));
     }
 
     /**
@@ -72,6 +78,8 @@ public class WorkApi {
         if (work.isActive()) {
             randomUtil.getRandom(work.getId(), false);
         }
+        int count = markTaskRepo.countByWorkIdAndStageAndResultNotNull(work.getId(), MarkStage.LEVEL);
+        work.setModifyOtherVal(count == 0);
         return work;
     }
 
@@ -81,7 +89,9 @@ public class WorkApi {
      * @param work
      */
     @RequestMapping(method = RequestMethod.POST)
-    public void create(@RequestBody Work work) {
+    public void create(HttpServletRequest request, @RequestBody Work work) {
+        String organizationId = request.getHeader("organizationId");
+        work.setOrganizationId(Long.valueOf(organizationId));
         workService.save(work);
         //生成随机数
         randomUtil.getRandom(work.getId(), false);
@@ -97,10 +107,10 @@ public class WorkApi {
     @RequestMapping(value = "{workId}", method = RequestMethod.PUT)
     public Work update(@PathVariable Long workId, @RequestBody Work work) {
         List<MarkSubject> subjects = markSubjectRepo.findAllByWorkId(workId);
-        long count = subjects.stream().filter(m->m.getStage().ordinal() != 0).count();
-        if(count > 0){
-            throw new RuntimeException("档位参数只能采集阶段修改");
-        }
+//        long count = subjects.stream().filter(m->m.getStage().ordinal() != 0).count();
+//        if(count > 0){
+//            throw new RuntimeException("已有分档数据,不可更改");
+//        }
 
         work.setCreatedOn(new Date());
         return workRepo.save(work);

+ 61 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/ChangeLevelExpDTO.java

@@ -0,0 +1,61 @@
+package cn.com.qmth.stmms.ms.admin.dto;
+
+import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelProperty;
+
+public class ChangeLevelExpDTO {
+
+    @ExcelProperty(name = "科目", index = 0, type = 1)
+    private String subject;
+
+    @ExcelProperty(name = "序号", index = 1, type = 1)
+    private Integer seqNo;
+
+    @ExcelProperty(name = "考号", index = 2, type = 1)
+    private String examNumber;
+
+    @ExcelProperty(name = "原档位", index = 3, type = 1)
+    private String originLevel;
+
+    @ExcelProperty(name = "复审后档位", index = 4, type = 1)
+    private String level;
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public Integer getSeqNo() {
+        return seqNo;
+    }
+
+    public void setSeqNo(Integer seqNo) {
+        this.seqNo = seqNo;
+    }
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public String getOriginLevel() {
+        return originLevel;
+    }
+
+    public void setOriginLevel(String originLevel) {
+        this.originLevel = originLevel;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+}

+ 42 - 11
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/PaperExporter.java

@@ -1,11 +1,9 @@
 package cn.com.qmth.stmms.ms.admin.exporter;
 
-import cn.com.qmth.stmms.ms.admin.dto.OneClickExpDTO;
-import cn.com.qmth.stmms.ms.admin.dto.PaperExpDTO;
-import cn.com.qmth.stmms.ms.admin.dto.SampleExpDTO;
-import cn.com.qmth.stmms.ms.admin.dto.ScoreDTO;
+import cn.com.qmth.stmms.ms.admin.dto.*;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExportUtils;
 import cn.com.qmth.stmms.ms.core.domain.*;
+import cn.com.qmth.stmms.ms.core.repository.ChangeLevelRepo;
 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.PaperRepo;
@@ -37,6 +35,9 @@ public class PaperExporter {
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
+    @Autowired
+    private ChangeLevelRepo changeLevelRepo;
+
     @Value("${sys.config.imageDir}")
     private String imagesFolder;
 
@@ -61,13 +62,14 @@ public class PaperExporter {
 
     /**
      * 导出标准卷信息
+     *
      * @param workId
      * @param subject
      * @param response
      */
     @GetMapping("{workId}/{subject}/sample")
-    public void exportSample(@PathVariable Long workId, @PathVariable Subject subject, HttpServletResponse response){
-        MarkSubject markSubject = markSubjectRepo.findOne(workId+"-"+subject.name());
+    public void exportSample(@PathVariable Long workId, @PathVariable Subject subject, HttpServletResponse response) {
+        MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
         //科目名称
         String subjectName = Objects.isNull(markSubject) ? subject.name() : markSubject.getName();
         List<SampleExpDTO> sampleExpDTOS = new ArrayList<>();
@@ -84,31 +86,60 @@ public class PaperExporter {
 
     /**
      * 一键定档导出
+     *
      * @param workId
      * @param subject
      * @param response
      */
     @GetMapping("{workId}/{subject}/oneClick")
-    public void exportOneClick(@PathVariable Long workId, @PathVariable Subject subject, HttpServletResponse response){
-        MarkSubject markSubject = markSubjectRepo.findOne(workId+"-"+subject.name());
+    public void exportOneClick(@PathVariable Long workId, @PathVariable Subject subject, HttpServletResponse response) {
+        MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
         //科目名称
         String subjectName = Objects.isNull(markSubject) ? subject.name() : markSubject.getName();
         List<OneClickExpDTO> oneClickExpDTOS = new ArrayList<>();
         List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsOneClickTrue(workId, subject);
-        if(papers != null && papers.size() >0) {
+        if (papers != null && papers.size() > 0) {
             List<Long> paperIds = papers.stream().map(Paper::getId).collect(Collectors.toList());
             List<MarkLog> marklogs = markLogRepo.findByWorkIdAndSubjectAndOperTypeAndPaperIdIn(workId, subject.name(), MarkLogOperType.ONE_CLICK_LEVEl.getId(), paperIds);
             for (int i = 0; i < marklogs.size(); i++) {
                 MarkLog markLog = marklogs.get(i);
                 OneClickExpDTO oneClickExpDTO = new OneClickExpDTO();
                 oneClickExpDTO.setSubject(subjectName);
-                oneClickExpDTO.setSeqNo(i+1);
+                oneClickExpDTO.setSeqNo(i + 1);
                 oneClickExpDTO.setExamNumber(markLog.getExamNumber());
-                oneClickExpDTO.setOriginLevel(markLog.getOperDataBefore() == null ? "":markLog.getOperDataBefore());
+                oneClickExpDTO.setOriginLevel(markLog.getOperDataBefore() == null ? "" : markLog.getOperDataBefore());
                 oneClickExpDTO.setLevel(markLog.getOperDataAfter());
                 oneClickExpDTOS.add(oneClickExpDTO);
             }
             ExportUtils.exportEXCEL("专家复评导出", OneClickExpDTO.class, oneClickExpDTOS, response);
         }
     }
+
+    /**
+     * 改档信息导出
+     *
+     * @param workId
+     * @param subject
+     * @param response
+     */
+    @GetMapping("{workId}/{subject}/changeLevel")
+    public void exportChangeLevel(@PathVariable Long workId, @PathVariable Subject subject, HttpServletResponse response) {
+        MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
+        //科目名称
+        String subjectName = Objects.isNull(markSubject) ? subject.name() : markSubject.getName();
+        List<ChangeLevelExpDTO> changeLevelExpDTOS = new ArrayList<>();
+        List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatus(workId, subject.name());
+        for (int i = 0; i < changeLevels.size(); i++) {
+            ChangeLevel changeLevel = changeLevels.get(i);
+            ChangeLevelExpDTO changeLevelExpDTO = new ChangeLevelExpDTO();
+            changeLevelExpDTO.setSubject(subjectName);
+            changeLevelExpDTO.setSeqNo(i + 1);
+            Paper paper = paperRepo.findOne(changeLevel.getPaperId());
+            changeLevelExpDTO.setExamNumber(paper.getExamNumber());
+            changeLevelExpDTO.setOriginLevel(changeLevel.getOriginalLevel());
+            changeLevelExpDTO.setLevel(changeLevel.getSuggestLevel());
+            changeLevelExpDTOS.add(changeLevelExpDTO);
+        }
+        ExportUtils.exportEXCEL("改档信息导出", ChangeLevelExpDTO.class, changeLevelExpDTOS, response);
+    }
 }

+ 120 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/OrganizationService.java

@@ -0,0 +1,120 @@
+package cn.com.qmth.stmms.ms.admin.service;
+
+import cn.com.qmth.stmms.ms.admin.utils.RandomUtils;
+import cn.com.qmth.stmms.ms.core.domain.MarkLog;
+import cn.com.qmth.stmms.ms.core.domain.Organization;
+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.domain.user.Role;
+import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
+import cn.com.qmth.stmms.ms.core.repository.OrganizationRepo;
+import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import cn.com.qmth.stmms.ms.core.vo.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 机构
+ */
+@Service
+public class OrganizationService {
+
+    @Autowired
+    private OrganizationRepo organizationRepo;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    @Autowired
+    private PaperRepo paperRepo;
+
+    @Autowired
+    RandomUtils randomUtils;
+
+    public Page<Organization> findAll(Specification<Organization> specification, Pageable pageable) {
+        return organizationRepo.findAll(specification, pageable);
+    }
+
+    @Transactional
+    public Organization save(Organization organization) {
+        //机构
+        MarkUser markUser = organization.getMarkUsers().stream().filter(m -> Objects.equals(m.getUserType(), "1")).findFirst().get();
+        if (markUser == null) {
+            throw new RuntimeException("机构信息有误");
+        }
+        Organization organization1 = organizationRepo.findByName(organization.getName());
+        if (organization1 != null) {
+            throw new RuntimeException("机构名称已存在");
+        }
+        //机构名称
+        organization.setName(markUser.getName());
+        //默认启用
+        organization.setEnabled(true);
+        organization.setCreatedOn(new Date());
+        //机构id号
+        String abbreviation = randomUtils.organAbbreviation();
+        organization.setAbbreviation(abbreviation);
+        organizationRepo.save(organization);
+
+        //保存用户
+        List<MarkUser> markUsers = organization.getMarkUsers().stream().map(m -> {
+            //账号(机构id-账号)
+            m.setLoginName(abbreviation.toLowerCase() + "-" + m.getLoginName());
+            //密码
+            m.setPassword(randomUtils.alphanumericPassword());
+            m.setEnabled(true);
+            m.setOrganizationId(organization.getId());
+            m.setRole(Role.ADMIN);
+            m.setWorkId(0l);
+            m.setSubject(Subject.SC);
+            return m;
+        }).collect(Collectors.toList());
+        markUserRepo.save(markUsers);
+        return organization;
+    }
+
+    @Transactional
+    public void delete(Long organizationId) {
+        //机构下有采集数据,不允许删除
+        Paper paper = paperRepo.findOneByOrganizationId(organizationId);
+        if (paper != null) {
+            throw new RuntimeException("机构下有采集数据,不允许删除");
+        }
+        //删除机构
+        organizationRepo.delete(organizationId);
+        //删除机构用户
+        markUserRepo.deleteByOrganizationIdAndRole(organizationId, Role.ADMIN);
+    }
+
+    @Transactional
+    public MarkUser updateOne(MarkUser markUser) {
+        MarkUser markUser1 = markUserRepo.findOne(markUser.getId());
+        Organization organization = organizationRepo.findByName(markUser1.getName());
+        if (organization != null && Objects.equals(markUser1.getUserType(), "1")) {
+            //机构名称不能重复
+            Organization organization1 = organizationRepo.findByName(markUser.getName());
+            if (organization1 != null && organization.getId() != organization1.getId()) {
+                throw new RuntimeException("机构名称已存在");
+            }
+            organization.setName(markUser.getName());
+            organizationRepo.save(organization);
+        }
+
+        if (!Objects.equals(markUser.getLoginName(), markUser1.getLoginName())) {
+            throw new RuntimeException("账号不允许修改");
+        }
+        markUser1.setName(markUser.getName());
+        markUser1.setPassword(markUser.getPassword());
+        return markUserRepo.save(markUser1);
+    }
+}

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

@@ -109,7 +109,7 @@ public class WorkService {
         levelRepo.save(levels);
 
         //生成内置账号
-        bultInAccountUtil.createAccout();
+        bultInAccountUtil.createAccout(work);
     }
 
 }

+ 33 - 23
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/BultInAccountUtil.java

@@ -1,49 +1,75 @@
 package cn.com.qmth.stmms.ms.admin.utils;
 
+import cn.com.qmth.stmms.ms.core.domain.Organization;
+import cn.com.qmth.stmms.ms.core.domain.Work;
 import cn.com.qmth.stmms.ms.core.domain.enums.BuiltInAccountEnum;
 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.MarkUserRepo;
+import cn.com.qmth.stmms.ms.core.repository.OrganizationRepo;
+import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
 
+/**
+ * 根据机构生成账号纪检
+ */
 @Component
 public class BultInAccountUtil {
 
     @Autowired
     MarkUserRepo markUserRepo;
 
-    public void createAccout() {
+    @Autowired
+    OrganizationRepo organizationRepo;
+
+    @Autowired
+    RandomUtils randomUtils;
+
+    public void createAccout(Work work) {
         List<MarkUser> userList = new ArrayList<>();
+
+        Organization organization = organizationRepo.findOne(work.getOrganizationId());
+        if (organization == null) {
+            throw new RuntimeException("机构不存在");
+        }
         List<Map> mapList = BuiltInAccountEnum.listAccounts();
         if (mapList.size() > 0) {
             for (Map map : mapList) {
                 //采集账号
                 if (Objects.equals(BuiltInAccountEnum.SCAN.name(), map.get("type").toString())) {
                     for (int i = 1; i <= 10; i++) {
-                        String loginName = map.get("code").toString().toLowerCase() + lpad(2, i);
+                        StringJoiner stringJoiner = new StringJoiner("-");
+                        String tempName = map.get("code").toString().toLowerCase() + lpad(2, i);
+                        stringJoiner.add(organization.getAbbreviation().toLowerCase()).add(work.getId().toString()).add(tempName);
+                        String loginName = stringJoiner.toString();
                         MarkUser markUser = markUserRepo.findByLoginName(loginName);
                         if (markUser != null) {
                             continue;
                         }
                         //默认密码123456
-                        //随机密码randomPassword()
-                        String password = "123456";
-                        markUser = new MarkUser(loginName, password, 0L, Subject.SC, loginName, Role.findByName((String) map.get("name")), null);
+                        String password = randomUtils.alphanumericPassword();
+                        markUser = new MarkUser(loginName, password, work.getId(), Subject.SC, loginName, Role.findByName((String) map.get("name")), null);
+                        markUser.setOrganizationId(organization.getId());
                         //默认为禁用
                         markUser.setEnabled(false);
                         userList.add(markUser);
                     }
                 } else {
-                    String loginName = map.get("code").toString().toLowerCase();
+                    StringJoiner stringJoiner = new StringJoiner("-");
+                    String tempName = map.get("code").toString().toLowerCase();
+                    stringJoiner.add(organization.getAbbreviation().toLowerCase()).add(tempName);
+                    String loginName = stringJoiner.toString();
                     MarkUser markUser = markUserRepo.findByLoginName(loginName.toLowerCase());
                     if (markUser != null) {
                         continue;
                     }
-                    markUser = new MarkUser(loginName, "123456", 0L, Subject.SC, loginName, Role.findByName((String) map.get("name")), null);
+                    String password = randomUtils.alphanumericPassword();
+                    markUser = new MarkUser(loginName, password, 0l, Subject.SC, loginName, Role.findByName((String) map.get("name")), null);
+                    markUser.setOrganizationId(organization.getId());
                     userList.add(markUser);
                 }
             }
@@ -51,22 +77,6 @@ public class BultInAccountUtil {
         }
     }
 
-    private String randomPassword(){
-        String sources = "0123456789";
-        String password = "123456";
-        for (int i = 0; i <= 100; i++)
-        {
-            Random rand = new Random();
-            StringBuffer flag = new StringBuffer();
-            for (int j = 0; j < 6; j++)
-            {
-                flag.append(sources.charAt(rand.nextInt(10)) + "");
-            }
-            password = flag.toString();
-        }
-        return password;
-    }
-
     /**
      * 补齐不足长度
      *

+ 70 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/RandomUtils.java

@@ -0,0 +1,70 @@
+package cn.com.qmth.stmms.ms.admin.utils;
+
+import cn.com.qmth.stmms.ms.core.domain.Organization;
+import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
+import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
+import cn.com.qmth.stmms.ms.core.repository.OrganizationRepo;
+import org.apache.commons.lang.RandomStringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Random;
+
+@Component
+public class RandomUtils {
+
+    @Autowired
+    private OrganizationRepo organizationRepo;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    public String numericPassword() {
+        String sources = "0123456789";
+        String password = "123456";
+        for (int i = 0; i <= 100; i++) {
+            Random rand = new Random();
+            StringBuffer flag = new StringBuffer();
+            for (int j = 0; j < 6; j++) {
+                flag.append(sources.charAt(rand.nextInt(10)) + "");
+            }
+            password = flag.toString();
+        }
+        return password;
+    }
+
+
+    /**
+     * 生成3位a-z随机机构唯一编码
+     *
+     * @return
+     */
+    public String organAbbreviation() {
+        //3位a-z的字母
+        String string = RandomStringUtils.randomAlphabetic(3);
+
+        Organization organization = organizationRepo.findByAbbreviation(string.toUpperCase());
+        //已使用,重新生成
+        while (organization != null) {
+            organAbbreviation();
+        }
+        return string.toUpperCase();
+    }
+
+    /**
+     * 生成6位字母+数字组合随机密码(区分大小写)
+     *
+     * @return
+     */
+    public String alphanumericPassword() {
+        //6位字母+数字混合
+        String string = RandomStringUtils.randomAlphanumeric(6);
+
+        MarkUser markUser = markUserRepo.findByPassword(string);
+        //已存在,重新生成
+        while (markUser != null) {
+            alphanumericPassword();
+        }
+        return string;
+    }
+}

+ 40 - 33
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java

@@ -23,7 +23,6 @@ import net.sf.json.JSONObject;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.StringUtils;
-import org.assertj.core.util.Compatibility;
 import org.assertj.core.util.Strings;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,7 +38,6 @@ import javax.servlet.http.HttpServletResponse;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.*;
-import java.net.URLEncoder;
 import java.security.MessageDigest;
 import java.text.SimpleDateFormat;
 import java.util.List;
@@ -120,7 +118,7 @@ public class CollectApi {
     public LoginDTO login(@RequestParam String loginname, @RequestParam String password) throws Exception {
         LoginDTO loginDTO = null;
         Work activeWork = null;
-        if (loginname.equals(loginConfig.uploadLoginConfig().getLoginName()) && password.equals(loginConfig.uploadLoginConfig().getPassword())) {
+        /*if (loginname.equals(loginConfig.uploadLoginConfig().getLoginName()) && password.equals(loginConfig.uploadLoginConfig().getPassword())) {
             activeWork = workRepo.findByActiveTrue();
             if (Objects.isNull(activeWork)) {
                 throw new Exception("没有work");
@@ -137,33 +135,42 @@ public class CollectApi {
             loginDTO.setExamId(activeWork.getId());
             loginDTO.setExamName(activeWork.getName());
             loginDTO.setRoleCode("ADMIN");
-        } else {
-            MarkUser markUser = markUserRepo.findByLoginName(loginname);
-            //账号不存在
-            if (Objects.isNull(markUser)) {
-                throw new RuntimeException("账号不存在");
-            }
-            if (!markUser.isEnabled()) {
-                throw new RuntimeException("账号已禁用");
-            }
-            //不是采集员账号
-            else if (!Objects.equals(Role.COLLECTOR, markUser.getRole())) {
-                throw new RuntimeException("非采集端账号");
-            }
-            //密码错误
-            else if (!Objects.equals(markUser.getPassword(), password)) {
-                throw new RuntimeException("密码错误");
-            }
-            activeWork = workRepo.findByActiveTrue();
-            if (Objects.isNull(activeWork)) {
-                throw new Exception("没有work");
-            }
-            loginDTO = new LoginDTO();
-            loginDTO.setUserId(markUser.getId());
-            loginDTO.setExamId(activeWork.getId());
-            loginDTO.setExamName(activeWork.getName());
-            loginDTO.setImageEnc(ParamCache.paramMap.get(activeWork.getId()).getImageEncrypt() == 1);
+        } else {*/
+        MarkUser markUser = markUserRepo.findByLoginName(loginname);
+        //账号不存在
+        if (Objects.isNull(markUser)) {
+            throw new RuntimeException("账号不存在");
+        }
+        if (!markUser.isEnabled()) {
+            throw new RuntimeException("账号已禁用");
+        }
+        //不是采集员账号
+        else if (!Objects.equals(Role.COLLECTOR, markUser.getRole())
+                && !Objects.equals(Role.ADMIN, markUser.getRole())) {
+            throw new RuntimeException("非采集端账号或者机构管理员账号");
+        }
+        //密码错误
+        else if (!Objects.equals(markUser.getPassword(), password)) {
+            throw new RuntimeException("密码错误");
         }
+//            activeWork = workRepo.findByActiveTrue();
+        activeWork = workRepo.findByActiveTrueAndOrganizationId(markUser.getOrganizationId());
+        if (Objects.isNull(activeWork)) {
+            throw new Exception("没有work");
+        }
+
+        //采集用户工作与当前工作不匹配
+        if (Objects.equals(Role.COLLECTOR, markUser.getRole()) && markUser.getWorkId() != activeWork.getId()) {
+            throw new RuntimeException("此采集账号与当前工作文件夹不匹配");
+        }
+
+        loginDTO = new LoginDTO();
+        loginDTO.setOrganizationId(activeWork.getOrganizationId());
+        loginDTO.setUserId(markUser.getId());
+        loginDTO.setExamId(activeWork.getId());
+        loginDTO.setExamName(activeWork.getName());
+        loginDTO.setImageEnc(ParamCache.paramMap.get(activeWork.getId()).getImageEncrypt() == 1);
+//        }
         List<CollectSubjectDTO> collectSubjectDTOs = new ArrayList<>();
         activeWork.getSubjects().forEach(s -> {
             int id = s.getSubject().ordinal() + 1;
@@ -1199,7 +1206,7 @@ public class CollectApi {
         List<Map<String, Object>> paperList = jdbcTemplate.queryForList(sql.toString());
         //图片后缀
         String suffix = ".jpg";
-        String dir,localUrl;
+        String dir, localUrl;
         if (Objects.equals("1", imageType)) {
             dir = systemConfig.getSheetDir();
             localUrl = imageServerConfig.getImageServer() + "/sheet";
@@ -1209,8 +1216,8 @@ public class CollectApi {
         } else {
             throw new RuntimeException("图片类型有误");
         }
-        if(paperList != null && paperList.size() >0){
-            paperList.stream().map(m->{
+        if (paperList != null && paperList.size() > 0) {
+            paperList.stream().map(m -> {
                 Long studentId = Long.valueOf(m.get("studentId").toString());
                 String subject = m.get("subject").toString();
                 Subject subject1 = Subject.valueOf(subject);
@@ -1421,7 +1428,7 @@ public class CollectApi {
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
-                if(isDeleteLocal){
+                if (isDeleteLocal) {
                     file.delete();
                 }
             }

+ 9 - 0
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/dto/LoginDTO.java

@@ -18,6 +18,7 @@ public class LoginDTO {
     private ParamSetting paramSetting;
     private List<CollectSubjectDTO> subjects = new ArrayList<>();
     private String roleCode;
+    private Long organizationId;
 
     public boolean isImageEnc() {
         return imageEnc;
@@ -82,4 +83,12 @@ public class LoginDTO {
     public void setRoleCode(String roleCode) {
         this.roleCode = roleCode;
     }
+
+    public Long getOrganizationId() {
+        return organizationId;
+    }
+
+    public void setOrganizationId(Long organizationId) {
+        this.organizationId = organizationId;
+    }
 }

+ 82 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Organization.java

@@ -0,0 +1,82 @@
+package cn.com.qmth.stmms.ms.core.domain;
+
+import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *机构
+ */
+@Entity
+public class Organization implements Serializable{
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private String name;
+
+    private String abbreviation;
+
+    private boolean enabled;
+
+    @Temporal(value = TemporalType.DATE)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createdOn;
+
+    @Transient
+    private List<MarkUser> markUsers = new ArrayList<>();
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAbbreviation() {
+        return abbreviation;
+    }
+
+    public void setAbbreviation(String abbreviation) {
+        this.abbreviation = abbreviation;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    public Date getCreatedOn() {
+        return createdOn;
+    }
+
+    public void setCreatedOn(Date createdOn) {
+        this.createdOn = createdOn;
+    }
+
+    public List<MarkUser> getMarkUsers() {
+        return markUsers;
+    }
+
+    public void setMarkUsers(List<MarkUser> markUsers) {
+        this.markUsers = markUsers;
+    }
+}

+ 22 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Work.java

@@ -30,6 +30,8 @@ public class Work implements Serializable{
      */
     private boolean active;
 
+    private Long organizationId;
+
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "workId")
     @OrderBy("code")
@@ -44,6 +46,10 @@ public class Work implements Serializable{
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createdOn;
 
+    //是否可以修改档位信息中除了阈值以外其它数据
+    @Transient
+    private Boolean modifyOtherVal;
+
     public Work(String name) {
         this.name = name;
         this.createdOn = new Date();
@@ -101,4 +107,20 @@ public class Work implements Serializable{
     public void setActive(boolean active) {
         this.active = active;
     }
+
+    public Long getOrganizationId() {
+        return organizationId;
+    }
+
+    public void setOrganizationId(Long organizationId) {
+        this.organizationId = organizationId;
+    }
+
+    public Boolean getModifyOtherVal() {
+        return modifyOtherVal;
+    }
+
+    public void setModifyOtherVal(Boolean modifyOtherVal) {
+        this.modifyOtherVal = modifyOtherVal;
+    }
 }

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

@@ -23,6 +23,9 @@ public class MarkUser extends AbstractUser {
     @NotNull
     private Long workId;
 
+    @NotNull
+    private Long organizationId;
+
     @Enumerated(value = EnumType.STRING)
     private Role role;
 
@@ -51,6 +54,9 @@ public class MarkUser extends AbstractUser {
 
     private Boolean defaultAccount;
 
+    //机构账号类型(临时字段,1-机构,2-项目经理)
+    private String userType;
+
     public boolean getLevelCallback() {
         return levelCallback;
     }
@@ -192,4 +198,20 @@ public class MarkUser extends AbstractUser {
     public void setDefaultAccount(Boolean defaultAccount) {
         this.defaultAccount = defaultAccount;
     }
+
+    public Long getOrganizationId() {
+        return organizationId;
+    }
+
+    public void setOrganizationId(Long organizationId) {
+        this.organizationId = organizationId;
+    }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
 }

+ 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("纪检员"), COLLECTOR("采集员"), UPLOAD("图片客户端"), QC("质检员");
+    MARKER("评卷员"), MARK_LEADER("科组长"), ADMIN("管理员"), INSPECTOR("复评专家"), INSPECTION("纪检员"), COLLECTOR("采集员"), UPLOAD("图片客户端"), QC("质检员"), SUPER_ADMIN("超级管理员"),;
 
     private String name;
 

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

@@ -14,4 +14,7 @@ import java.util.List;
 @Repository
 public interface ChangeLevelRepo extends JpaRepository<ChangeLevel, Long>, JpaSpecificationExecutor {
     ChangeLevel findByWorkIdAndSubjectAndPaperId(Long workId, String subject, Long paperId);
+
+    @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.auditStatus = 1")
+    List<ChangeLevel> findByWorkIdAndSubjectAndAuditStatus(Long workId, String name);
 }

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

@@ -211,4 +211,6 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
     int countByQuestionIdAndMarkerIdAndStageAndIsRejectedTrueAndIsMissing(Long questionId, Long markerId, int ordinal,boolean isMissing);
 
     List<MarkTask> findByWorkIdAndSubjectAndMarkerIdAndStage(Long workId, Subject subject, Long valueOf, MarkStage stage);
+
+    int countByWorkIdAndStageAndResultNotNull(Long id, MarkStage level);
 }

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

@@ -25,4 +25,12 @@ public interface MarkUserRepo extends JpaRepository<MarkUser,Long>, JpaSpecifica
 	long countByWorkIdAndRole(Long workId,Role role);
 
 	List<MarkUser> findByRole(Role role);
+
+    List<MarkUser> findByOrganizationIdAndRole(Long id, Role admin);
+
+	void deleteByOrganizationIdAndRole(Long organizationId, Role admin);
+
+    MarkUser findByPassword(String string);
+
+    List<MarkUser> findByOrganizationIdAndRoleIn(Long organizationId, Role... role);
 }

+ 14 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/OrganizationRepo.java

@@ -0,0 +1,14 @@
+package cn.com.qmth.stmms.ms.core.repository;
+
+import cn.com.qmth.stmms.ms.core.domain.Organization;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+/**
+ *
+ */
+public interface OrganizationRepo extends JpaRepository<Organization, Long>, JpaSpecificationExecutor<Organization> {
+    Organization findByAbbreviation(String toUpperCase);
+
+    Organization findByName(String name);
+}

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

@@ -364,5 +364,8 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     List<Paper> findByWorkIdAndQuestionIdAndSubjectAndLevelAndIsMissingFalseAndActiveTrueAndScoreBatchNoIsNull(Long workId, Long questionId0, Subject subject, String code, Sort sort);
 
+    @Query(value = "select p.* from paper p left join work w on p.work_id = w.id where w.organization_id = ?1 limit 1", nativeQuery = true)
+    Paper findOneByOrganizationId(Long organizationId);
+
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

+ 6 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/WorkRepo.java

@@ -3,6 +3,8 @@ package cn.com.qmth.stmms.ms.core.repository;
 import cn.com.qmth.stmms.ms.core.domain.Work;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 /**
  * Created by zhengmin on 2016/10/9.
  */
@@ -11,4 +13,8 @@ public interface WorkRepo extends JpaRepository<Work,Long>{
     Work findByActiveTrue();
 
     Work findByName(String name);
+
+    Work findByActiveTrueAndOrganizationId(Long organizationId);
+
+    List<Work> findByOrganizationIdOrderByIdDesc(Long valueOf);
 }

+ 0 - 6
stmms-ms-main/src/main/java/cn/com/qmth/stmms/ms/StartRunning.java

@@ -1,20 +1,15 @@
 package cn.com.qmth.stmms.ms;
 
-import cn.com.qmth.stmms.ms.admin.utils.BultInAccountUtil;
 import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
 import cn.com.qmth.stmms.ms.core.domain.Work;
-import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
-import cn.com.qmth.stmms.ms.quartz.ScheduledTask;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.Resource;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * @Description: 服务启动时初始化运行,哪个微服务模块需要则拿此模版去用
@@ -34,7 +29,6 @@ public class StartRunning implements CommandLineRunner {
     RandomUtil randomUtil;
 
 
-
     @Override
     public void run(String... args) {
         LOGGER.info("服务器启动时执行 start");

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -434,7 +434,7 @@ public class MarkTaskApi {
             levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
 
             //调整
-            int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
+            int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
             levelDetailDTO.setAdjustmentCount(adjustment);
 
             list.add(levelDetailDTO);

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

@@ -45,6 +45,7 @@ public class MarkerAssembler {
             markerDTO.setWorkId(marker.getWorkId());
             markerDTO.setPassword(marker.getPassword());
             markerDTO.setEnabled(marker.isEnabled());
+            markerDTO.setRole(marker.getRole());
         }
         return markerDTO;
     }

+ 10 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkerDTO.java

@@ -5,6 +5,7 @@ import java.io.Serializable;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelProperty;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkRight;
+import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 
 /**
@@ -26,6 +27,7 @@ public class MarkerDTO implements Serializable{
     private String loginName;
     private String password;
     private boolean enabled;
+    private Role role;
 
     public Long getId() {
         return id;
@@ -114,4 +116,12 @@ public class MarkerDTO implements Serializable{
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
+
+    public Role getRole() {
+        return role;
+    }
+
+    public void setRole(Role role) {
+        this.role = role;
+    }
 }