瀏覽代碼

机构版-3.0.0-bug修复

xiaof 2 年之前
父節點
當前提交
2cafd12310

+ 13 - 17
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/WorkApi.java

@@ -8,9 +8,11 @@ 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.*;
+import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
+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.WorkRepo;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Sort;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
@@ -37,18 +39,9 @@ public class WorkApi {
     @Autowired
     private LevelRepo levelRepo;
 
-    @Autowired
-    private MarkUserRepo markUserRepo;
-
-    @Autowired
-    private ExamQuestionRepo questionRepo;
-
     @Autowired
     private WorkService workService;
 
-    @Autowired
-    private StudentRepo studentRepo;
-
     @Autowired
     private WorkOverviewAssembler workOverviewAssembler;
 
@@ -99,6 +92,11 @@ public class WorkApi {
         String organizationId = request.getHeader("organizationId");
         work.setOrganizationId(Long.valueOf(organizationId));
         workService.save(work);
+
+        //生成随机数,已生成的工作,直接跳过
+        if (randomUtil.getRandomMap().get(work.getId()) == null) {
+            randomUtil.getRandom(work.getId(), false);
+        }
     }
 
     /**
@@ -139,7 +137,7 @@ public class WorkApi {
 
         //根据A~Z排序后,重新设置levelValue
         AtomicInteger ai = new AtomicInteger(0);
-        levels.stream().sorted(Comparator.comparing(Level::getCode)).map(l->{
+        levels.stream().sorted(Comparator.comparing(Level::getCode)).map(l -> {
             l.setId(null);
             l.setLevelValue(ai.getAndIncrement());
             return l;
@@ -171,14 +169,13 @@ public class WorkApi {
     /**
      * 删除
      *
-     * @param workId
+     * @param workId 工作ID
      */
-    @RequestMapping(value = "{workId}", method = RequestMethod.DELETE)
+    @DeleteMapping("{workId}")
     public void remove(@PathVariable Long workId) {
         workService.delete(workId);
     }
 
-    //////////////////////    levels
 
     /**
      * 档位设定列表
@@ -201,7 +198,6 @@ public class WorkApi {
     public void deleteLevel(@PathVariable Long workId, @PathVariable Long levelId) {
         levelRepo.delete(levelId);
     }
-    //////////////////////   overview
 
     /**
      * 总览,各统计数据
@@ -212,7 +208,7 @@ public class WorkApi {
     @RequestMapping(value = "{work}/overview", method = RequestMethod.GET)
     public WorkOverview overview(@PathVariable Work work) {
         //生成随机数,已生成的工作,直接跳过
-        if(randomUtil.getRandomMap().get(work.getId()) == null) {
+        if (randomUtil.getRandomMap().get(work.getId()) == null) {
             randomUtil.getRandom(work.getId(), false);
         }
         return workOverviewAssembler.toDTO(work);

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

@@ -39,6 +39,12 @@ public class WorkService {
     @Autowired
     private LevelRepo levelRepo;
 
+    @Resource
+    private MarkUserRepo markUserRepo;
+
+    @Resource
+    private StudentRepo studentRepo;
+
     @Resource
     ImageConfig imageConfig;
 
@@ -48,7 +54,7 @@ public class WorkService {
     /**
      * 删除评卷工作
      *
-     * @param workId
+     * @param workId 工作ID
      */
     @Transactional
     public void delete(Long workId) {
@@ -57,7 +63,8 @@ public class WorkService {
             throw new RuntimeException("该评卷工作已有数据,不能删除");
         }
         workRepo.delete(workId);
-
+        markUserRepo.deleteByWorkId(workId);
+        paramSettingRepo.deleteByWorkId(workId);
     }
 
     /**

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

@@ -58,9 +58,6 @@ public class CollectApi {
 
     private static final String SHEET = "SHEET", THUMB = "THUMB", IMAGE = "IMAGE";
 
-    @Autowired
-    private LoginConfig loginConfig;
-
     @Autowired
     private WorkRepo workRepo;
 
@@ -82,9 +79,6 @@ public class CollectApi {
     @Autowired
     private LevelRepo levelRepo;
 
-    @Autowired
-    private PaperRepo paperRepo;
-
     @Autowired
     private SystemConfig systemConfig;
 
@@ -112,30 +106,15 @@ public class CollectApi {
     @Autowired
     ImageServerConfig imageServerConfig;
 
+    @Autowired
+    RandomUtil randomUtil;
+
     ExecutorService executors = Executors.newFixedThreadPool(10);
 
     @RequestMapping("user/login")
     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())) {
-            activeWork = workRepo.findByActiveTrue();
-            if (Objects.isNull(activeWork)) {
-                throw new Exception("没有work");
-            }
-            loginDTO = new LoginDTO();
-            loginDTO.setExamId(activeWork.getId());
-            loginDTO.setExamName(activeWork.getName());
-        } else if (loginname.equals(loginConfig.adminLoginConfig().getLoginName()) && password.equals(loginConfig.adminLoginConfig().getPassword())) {
-            activeWork = workRepo.findByActiveTrue();
-            if (Objects.isNull(activeWork)) {
-                throw new Exception("没有work");
-            }
-            loginDTO = new LoginDTO();
-            loginDTO.setExamId(activeWork.getId());
-            loginDTO.setExamName(activeWork.getName());
-            loginDTO.setRoleCode("ADMIN");
-        } else {*/
         MarkUser markUser = markUserRepo.findByLoginName(loginname);
         //账号不存在
         if (Objects.isNull(markUser)) {
@@ -153,15 +132,10 @@ public class CollectApi {
         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("未开启工作任务");
-        }
 
-        //采集用户工作与当前工作不匹配
-        if (Objects.equals(Role.COLLECTOR, markUser.getRole()) && markUser.getWorkId() != activeWork.getId()) {
-            throw new RuntimeException("此采集账号与当前工作文件夹不匹配");
+        activeWork = workRepo.findOne(markUser.getWorkId());
+        if (Objects.isNull(activeWork)) {
+            throw new RuntimeException("工作已删除");
         }
 
         loginDTO = new LoginDTO();
@@ -171,7 +145,7 @@ public class CollectApi {
         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;
@@ -184,6 +158,11 @@ public class CollectApi {
         });
         loginDTO.setSubjects(collectSubjectDTOs);
 
+        //生成随机数,已生成的工作,直接跳过
+        if (randomUtil.getRandomMap().get(activeWork.getId()) == null) {
+            randomUtil.getRandom(activeWork.getId(), false);
+        }
+
         //采集参数
         ParamSetting paramSetting = paramSettingRepo.findByWorkId(activeWork.getId());
         loginDTO.setParamSetting(paramSetting);

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

@@ -41,4 +41,6 @@ public interface MarkUserRepo extends JpaRepository<MarkUser,Long>, JpaSpecifica
     @Modifying
     @Query("update MarkUser set groupId = null where workId = ?1 and subject = ?2")
     void updateByWorkIdAndSubject(Long workId, Subject subject);
+
+    void deleteByWorkId(Long workId);
 }

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

@@ -7,4 +7,6 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface ParamSettingRepo extends JpaRepository<ParamSetting, Long> {
     ParamSetting findByWorkId(Long id);
+
+    void deleteByWorkId(Long workId);
 }

+ 1 - 1
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/controller/MarkLogController.java

@@ -263,7 +263,7 @@ public class MarkLogController {
             JSONObject object = new JSONObject();
             object.put("createUserName", markUser.getName());
             Paper paper = paperRepo.findByScanUserIdOrderByUpdatedOnDescLimit(markUser.getId());
-            PaperDTO paperDTO = paperAssembler.toDTOForEquipmentMonitor(paper, true);
+            PaperDTO paperDTO = paperAssembler.toDTOForEquipmentMonitor(paper, false);
             object.put("imgSrc", paper == null ? null : paperDTO.getImgSrc());
             object.put("thumbSrc", paper == null ? null : paperDTO.getThumbSrc());
             object.put("sheetSrc", paper == null ? null : paperDTO.getSheetSrc());

+ 1 - 7
stmms-ms-main/src/main/java/cn/com/qmth/stmms/ms/StartRunning.java

@@ -32,14 +32,8 @@ public class StartRunning implements CommandLineRunner {
     @Override
     public void run(String... args) {
         LOGGER.info("服务器启动时执行 start");
-        /*Work work = workRepo.findByActiveTrue();
-        if (Objects.isNull(work)) {
-            LOGGER.info("没有创建工作区");
-        } else {
-            randomUtil.getRandom(work.getId(), false);
-        }*/
         //对所有当前工作都生成随机数
-        List<Work> works = workRepo.findAllByActiveTrue();
+        List<Work> works = workRepo.findAll();
         for (Work work : works) {
             randomUtil.getRandom(work.getId(), false);
         }

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

@@ -323,7 +323,7 @@ public class MarkTaskApi {
         boolean oldRejected = markTask.isRejected();
         boolean oldShift = markTask.getPaper().isShift();
         boolean oldShiftScore = markTask.getPaper().isShiftScore();
-        if (stage == null || result == null) {
+        if (result == null) {
             return new ResponseEntity(HttpStatus.BAD_REQUEST);
         }
         switch (stage) {
@@ -417,7 +417,7 @@ public class MarkTaskApi {
     }
 
     /**
-     * 跳过评卷任务
+     * 标记任务
      *
      * @param markTaskId 评卷你任务id
      */

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

@@ -152,11 +152,11 @@ public class PaperApi {
                                      @RequestParam(required = false) String sortBy,
                                      Pageable pageable) {
         Sort sort = null;
-        if (Objects.equals("1", sortBy)) {
-            sort = new Sort(Sort.Direction.DESC, "uploadedOn");
-        }
         if (Objects.equals("2", sortBy)) {
             sort = new Sort(Sort.Direction.ASC, "examNumber");
+        } else {
+            // 默认按时间倒序
+            sort = new Sort(Sort.Direction.DESC, "uploadedOn");
         }
         Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
         Specification<Paper> specification = (root, query, builder) -> {

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

@@ -273,6 +273,7 @@ public class MarkTaskAssembler {
             }
             markTaskDTO.setShift(paper.isShift());
             markTaskDTO.setShiftScore(paper.isShiftScore());
+            markTaskDTO.setMark(markTask.isMark());
         }
         return markTaskDTO;
     }

+ 19 - 12
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -11,7 +11,6 @@ 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 cn.com.qmth.stmms.ms.marking.api.MarkTaskApi;
 import cn.com.qmth.stmms.ms.marking.config.MarkingConfig;
 import cn.com.qmth.stmms.ms.marking.service.arbitration.ArbitrationService;
 import com.alibaba.fastjson.JSONObject;
@@ -132,7 +131,7 @@ public class MarkingService {
         MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
 
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
-        Level level = levels.stream().filter(m->levelCode.equals(m.getCode())).findFirst().get();
+        Level level = levels.stream().filter(m -> levelCode.equals(m.getCode())).findFirst().get();
 
         markTask.setResult(levelCode);
         markTask.setLevelValue(level.getLevelValue());
@@ -155,8 +154,8 @@ public class MarkingService {
             Integer majority = Optional.ofNullable(ParamCache.paramMap.get(markTask.getWorkId()).getMajority()).orElse(1);
             // 是否取优(过半定档和权重,取最优值)
             Integer takeBest = Optional.ofNullable(ParamCache.paramMap.get(markTask.getWorkId()).getTakeBest()).orElse(1);
-            DeterResult determine = determineLevelService.determine(majority == 1,takeBest == 1, levels, markTasks.toArray(sources));
-            if(Objects.nonNull(determine) && Objects.nonNull(determine.getResult())){
+            DeterResult determine = determineLevelService.determine(majority == 1, takeBest == 1, levels, markTasks.toArray(sources));
+            if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult())) {
                 markTask.setDateMineResult(determine.getResult());
             }
             //1.过半定档
@@ -348,7 +347,7 @@ public class MarkingService {
                 String operResult = "-";
                 Date date = new Date();
                 for (String r : range) {
-                    if (Objects.equals(String.valueOf(markTask.getMarkerId()), r)) {
+                    if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && !redoLevel.equals(markTask.getResult())) {
                         markTask.setRejected(true);
                         markTask.setOriginLevel(markTask.getResult());
                         markTask.setResult(null);
@@ -386,12 +385,20 @@ public class MarkingService {
         markTask.setUpdatedOn(new Date());
         MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
         markTask.setMarkerName(maker.getName());
+        // 如果手动输入的分数在档位范围内,属于正常试卷
+        if (markTask.getManualScore() == 1) {
+            Level level = levelRepo.findByWorkIdAndCode(markTask.getWorkId(), markTask.getLevel());
+            if (level != null) {
+                boolean isMatch = level.getMinScore() <= score && level.getMaxScore() >= score;
+                markTask.setManualScore(isMatch ? 0 : 1);
+            }
+        }
         markTaskRepo.save(markTask);
         Paper paper = markTask.getPaper();
         List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), markTask.getStage());
         long leftCount = markTasks.stream().filter(i -> i.getResult() == null).count();
         if (leftCount == 0) {
-            OptionalDouble finalScore = markTasks.stream().map(m -> m.getResult())
+            OptionalDouble finalScore = markTasks.stream().map(MarkTask::getResult)
                     .mapToInt(Integer::valueOf).average();
             //湖北省,平均分非零进一
             Integer roundUp = Optional.ofNullable(ParamCache.paramMap.get(markTask.getWorkId()).getRoundUp()).orElse(1);
@@ -461,8 +468,8 @@ public class MarkingService {
 
         // 所有用户强制退出
         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)){
+        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());
             }
@@ -489,12 +496,12 @@ public class MarkingService {
         return null;
     }
 
-    public static Integer calcSortNum(Paper paper, List<MarkTask> markTaskList, List<Level> levels){
+    public static Integer calcSortNum(Paper paper, List<MarkTask> markTaskList, List<Level> levels) {
         //计算levelValue和(试评阶段不用)
-        if(paper.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
-            if(!levels.isEmpty() && levels.size() > 0){
+        if (paper.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
+            if (!levels.isEmpty() && levels.size() > 0) {
                 Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getWeight));
-                int sum = markTaskList.stream().mapToInt(m-> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
+                int sum = markTaskList.stream().mapToInt(m -> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
                 return sum;
             }
         }