|
@@ -1,26 +1,25 @@
|
|
package cn.com.qmth.stmms.ms.marking.api;
|
|
package cn.com.qmth.stmms.ms.marking.api;
|
|
|
|
|
|
-import cn.com.qmth.stmms.ms.commons.config.ScoreConfig;
|
|
|
|
import cn.com.qmth.stmms.ms.commons.lock.LockService;
|
|
import cn.com.qmth.stmms.ms.commons.lock.LockService;
|
|
-import cn.com.qmth.stmms.ms.commons.lock.LockType;
|
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
|
|
import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
|
|
-import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
|
|
|
|
import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
|
|
import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
|
|
-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.enums.TrialEnum;
|
|
|
|
-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.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.Paper;
|
|
import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
|
|
import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
|
|
-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.PaperRepo;
|
|
import cn.com.qmth.stmms.ms.core.vo.Subject;
|
|
import cn.com.qmth.stmms.ms.core.vo.Subject;
|
|
-import cn.com.qmth.stmms.ms.marking.assembler.MarkTaskAssembler;
|
|
|
|
import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
|
|
import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
|
|
import cn.com.qmth.stmms.ms.marking.dto.LevelDetailDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.LevelDetailDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
|
|
|
|
+import cn.com.qmth.stmms.ms.marking.service.MarkTaskLevelService;
|
|
|
|
+import cn.com.qmth.stmms.ms.marking.service.MarkTaskRoughLevelService;
|
|
|
|
+import cn.com.qmth.stmms.ms.marking.service.MarkTaskScoreService;
|
|
import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
|
|
import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
|
|
-import cn.com.qmth.stmms.ms.marking.service.MarkingService;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -35,13 +34,15 @@ import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
|
-import javax.persistence.criteria.Join;
|
|
|
|
-import javax.persistence.criteria.JoinType;
|
|
|
|
import javax.persistence.criteria.Predicate;
|
|
import javax.persistence.criteria.Predicate;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
-import java.util.*;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Objects;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -53,44 +54,32 @@ import java.util.stream.Collectors;
|
|
public class MarkTaskApi {
|
|
public class MarkTaskApi {
|
|
private static Logger LOGGER = LoggerFactory.getLogger(MarkTaskApi.class);
|
|
private static Logger LOGGER = LoggerFactory.getLogger(MarkTaskApi.class);
|
|
|
|
|
|
- @Autowired
|
|
|
|
- private MarkTaskRepo markTaskRepo;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private MarkingService markingService;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private MarkTaskAssembler markTaskAssembler;
|
|
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private PaperAssembler paperAssembler;
|
|
private PaperAssembler paperAssembler;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- ExamQuestionRepo examQuestionRepo;
|
|
|
|
|
|
+ private PaperRepo paperRepo;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- PaperRepo paperRepo;
|
|
|
|
|
|
+ private LevelRepo levelRepo;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- MarkUserRepo markUserRepo;
|
|
|
|
|
|
+ private MarkSubjectRepo markSubjectRepo;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- ScoreConfig scoreConfig;
|
|
|
|
|
|
+ private LockService lockService;
|
|
|
|
|
|
- @Autowired
|
|
|
|
- LevelRepo levelRepo;
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkerGroupLeaderService markerGroupLeaderService;
|
|
|
|
|
|
- @Autowired
|
|
|
|
- MarkSubjectRepo markSubjectRepo;
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkTaskRoughLevelService markTaskRoughLevelService;
|
|
|
|
|
|
- @Autowired
|
|
|
|
- SqlUtil sqlUtil;
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkTaskLevelService markTaskLevelService;
|
|
|
|
|
|
- @Autowired
|
|
|
|
- LockService lockService;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- MarkerGroupLeaderService markerGroupLeaderService;
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkTaskScoreService markTaskScoreService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 评卷员的评卷任务
|
|
* 评卷员的评卷任务
|
|
@@ -100,7 +89,6 @@ public class MarkTaskApi {
|
|
* @param level 档位
|
|
* @param level 档位
|
|
* @param sn 密号
|
|
* @param sn 密号
|
|
* @param questionId 试题id
|
|
* @param questionId 试题id
|
|
- * @return
|
|
|
|
*/
|
|
*/
|
|
@RequestMapping(method = RequestMethod.GET)
|
|
@RequestMapping(method = RequestMethod.GET)
|
|
public PageableDTO list(@RequestParam Long markerId,
|
|
public PageableDTO list(@RequestParam Long markerId,
|
|
@@ -113,109 +101,13 @@ public class MarkTaskApi {
|
|
@RequestParam Long questionId,
|
|
@RequestParam Long questionId,
|
|
@RequestParam(required = false) String areaCode,
|
|
@RequestParam(required = false) String areaCode,
|
|
Pageable pageable) throws Exception {
|
|
Pageable pageable) throws Exception {
|
|
- List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
|
- MarkUser markUser = markUserRepo.findOne(markerId);
|
|
|
|
- Long batchNo = null;
|
|
|
|
- Long scoreBatchNo = null;
|
|
|
|
- if (stage == MarkStage.LEVEL) {
|
|
|
|
- List<Object> batchNos = paperRepo.findBatchNoByWorkIdAndSubject(workId, markUser.getSubject().name());
|
|
|
|
- if (batchNos != null && !batchNos.isEmpty()) {
|
|
|
|
- Object object = batchNos.get(0);
|
|
|
|
- batchNo = Long.valueOf(object.toString());
|
|
|
|
- }
|
|
|
|
- } else if (stage == MarkStage.SCORE) {
|
|
|
|
- List<Object> batchNos = paperRepo.findScoreBatchNoByWorkIdAndSubject(workId, markUser.getSubject().name());
|
|
|
|
- if (batchNos != null && !batchNos.isEmpty()) {
|
|
|
|
- Object object = batchNos.get(0);
|
|
|
|
- scoreBatchNo = Long.valueOf(object.toString());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- Long finalBatchNo = batchNo;
|
|
|
|
- Long finalScoreBatchNo = scoreBatchNo;
|
|
|
|
- Integer levelShowAllPaper = ParamCache.levelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper();
|
|
|
|
- Integer scoreShowAllPaper = ParamCache.scoreConfigMap.get(String.valueOf(workId)).getScoreShowAllPaper();
|
|
|
|
- Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
|
- List<Predicate> predicates = new ArrayList<>();
|
|
|
|
- List<Predicate> onPredicates = new ArrayList<>();
|
|
|
|
- Join<MarkTask, Paper> join = root.join("paper", JoinType.INNER);
|
|
|
|
- if (Objects.nonNull(questionId)) {
|
|
|
|
- predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
- }
|
|
|
|
- predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
|
|
- predicates.add(builder.equal(root.get("stage"), stage));
|
|
|
|
- if (level == null) {
|
|
|
|
- predicates.add(builder.isNull(root.get("result")));
|
|
|
|
- if (stage == MarkStage.SCORE) {
|
|
|
|
- onPredicates.add(builder.equal(join.get("isShift"), false));
|
|
|
|
- onPredicates.add(builder.equal(join.get("isShiftScore"), false));
|
|
|
|
- }
|
|
|
|
- } else if (stage == MarkStage.LEVEL) {
|
|
|
|
- //查询
|
|
|
|
- predicates.add(builder.equal(root.get("result"), level));
|
|
|
|
- if (levelShowAllPaper == 0) {
|
|
|
|
- if (!Objects.isNull(finalBatchNo)) {
|
|
|
|
-// predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
|
|
|
|
- onPredicates.add(builder.equal(join.get("batchNo"), finalBatchNo));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } else if (stage == MarkStage.SCORE) {
|
|
|
|
- onPredicates.add(builder.equal(join.get("level"), level));
|
|
|
|
- predicates.add(builder.isNotNull(root.get("result")));
|
|
|
|
- onPredicates.add(builder.equal(join.get("isShift"), false));
|
|
|
|
- if (scoreShowAllPaper == 1) {
|
|
|
|
- onPredicates.add(builder.isNotNull(join.get("scoreBatchNo")));
|
|
|
|
- } else {
|
|
|
|
- onPredicates.add(builder.equal(join.get("scoreBatchNo"), finalScoreBatchNo));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (isSample != null) {
|
|
|
|
- onPredicates.add(builder.equal(join.get("isSample"), isSample));
|
|
|
|
- }
|
|
|
|
- if (reject != null && reject) {
|
|
|
|
- onPredicates.add(builder.equal(join.get("isRejected"), reject));
|
|
|
|
- } else {
|
|
|
|
- predicates.add(builder.equal(root.get("isRejected"), reject));
|
|
|
|
- }
|
|
|
|
- onPredicates.add(builder.equal(join.get("active"), true));
|
|
|
|
- //过滤考区
|
|
|
|
- if (Objects.nonNull(areaCode)) {
|
|
|
|
- onPredicates.add(builder.equal(join.get("areaCode"), areaCode));
|
|
|
|
- }
|
|
|
|
- join.on(onPredicates.toArray(new Predicate[onPredicates.size()]));
|
|
|
|
- return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
|
- };
|
|
|
|
- Sort sort = new Sort("randomSeq", "randomSeqNew");
|
|
|
|
- Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
|
|
|
|
- Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable1);
|
|
|
|
-
|
|
|
|
- if (Objects.isNull(markTasks) || markTasks.getContent().size() == 0) {
|
|
|
|
- if (Objects.nonNull(isSample) && isSample) {
|
|
|
|
- ExamQuestion examQuestion = examQuestionRepo.findOne(questionId);
|
|
|
|
- MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + examQuestion.getSubject());
|
|
|
|
- if (markSubject.getTest() == TrialEnum.DEFAULT.getId()) {
|
|
|
|
- List<Paper> paperList = paperRepo.findSample(level, isSample, false, examQuestion.getSubject().name(), TrialEnum.DEFAULT.getId(), examQuestion.getAreaCode(), examQuestion.getWorkId());
|
|
|
|
- if (Objects.nonNull(paperList) && !paperList.isEmpty()) {
|
|
|
|
- for (Paper p : paperList) {
|
|
|
|
- MarkTask markTask = new MarkTask(markUser, p, stage, 1L);
|
|
|
|
- markTaskDTOs.add(markTaskAssembler.toDTO(markTask));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- markTasks.getContent().forEach(m -> {
|
|
|
|
- markTaskDTOs.add(markTaskAssembler.toDTO(m));
|
|
|
|
- });
|
|
|
|
- if (stage == MarkStage.SCORE && Objects.isNull(level)) {
|
|
|
|
-// if (Objects.nonNull(scoreConfig) && Objects.nonNull(scoreConfig.getTaskSort()) && Objects.equals("paper", scoreConfig.getTaskSort())) {
|
|
|
|
-// Collections.sort(markTaskDTOs, Comparator.comparing(MarkTaskDTO::getPaperId));
|
|
|
|
-// } else {
|
|
|
|
-// randomSeqNewSort(markTaskDTOs);
|
|
|
|
-// }
|
|
|
|
- } else if (stage == MarkStage.LEVEL && Objects.isNull(level)) {
|
|
|
|
- randomSeqNewSort(markTaskDTOs);
|
|
|
|
|
|
+ if (MarkStage.ROUGH_LEVEL.equals(stage)) {
|
|
|
|
+ return markTaskRoughLevelService.listMarkTaskLevel(markerId, isSample, reject, level, questionId, areaCode, pageable);
|
|
|
|
+ } else if (MarkStage.LEVEL.equals(stage)) {
|
|
|
|
+ return markTaskLevelService.listMarkTaskLevel(markerId, isSample, reject, level, questionId, areaCode, pageable);
|
|
|
|
+ } else {
|
|
|
|
+ return markTaskScoreService.listMarkTaskScore(markerId, isSample, reject, level, questionId, areaCode, pageable);
|
|
}
|
|
}
|
|
- return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -232,52 +124,43 @@ public class MarkTaskApi {
|
|
@RequestParam(required = false) Boolean isShiftScore,
|
|
@RequestParam(required = false) Boolean isShiftScore,
|
|
@RequestParam Long questionId,
|
|
@RequestParam Long questionId,
|
|
Pageable pageable) {
|
|
Pageable pageable) {
|
|
- List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
|
- Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
|
- List<Predicate> predicates = new ArrayList<>();
|
|
|
|
- predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
- predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
|
|
- if (isShift != null) {
|
|
|
|
- //查询
|
|
|
|
- predicates.add(builder.equal(root.get("paper").get("isShift"), isShift));
|
|
|
|
- if (isShift) {
|
|
|
|
- predicates.add(builder.equal(root.get("stage"), MarkStage.LEVEL));
|
|
|
|
- predicates.add(builder.isNull(root.get("result")));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (isShiftScore != null && isShiftScore && !isShift) {
|
|
|
|
- predicates.add(builder.equal(root.get("paper").get("isShiftScore"), isShiftScore));
|
|
|
|
- if (isShiftScore) {
|
|
|
|
- predicates.add(builder.equal(root.get("stage"), MarkStage.SCORE));
|
|
|
|
- predicates.add(builder.isNull(root.get("result")));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
|
- };
|
|
|
|
- Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
|
|
|
|
- Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
|
|
|
|
- Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable1);
|
|
|
|
-
|
|
|
|
- markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskAssembler.toShiftDTO(m)));
|
|
|
|
- return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
|
|
- }
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- * randomSeqNew排序
|
|
|
|
- *
|
|
|
|
- * @param markTaskDTOs
|
|
|
|
- */
|
|
|
|
- public void randomSeqNewSort(List<MarkTaskDTO> markTaskDTOs) {
|
|
|
|
- boolean isSort = true;
|
|
|
|
- for (MarkTaskDTO m : markTaskDTOs) {
|
|
|
|
- if (Objects.nonNull(m.getRandomSeq())) {
|
|
|
|
- isSort = false;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ if (isShift != null && isShift) {
|
|
|
|
+ return markTaskLevelService.shiftLevel(markerId, workId, isShift, isShiftScore, questionId, pageable);
|
|
}
|
|
}
|
|
- if (isSort) {
|
|
|
|
- Collections.sort(markTaskDTOs, Comparator.comparing(MarkTaskDTO::getRandomSeqNew));
|
|
|
|
|
|
+ if (isShiftScore != null && isShiftScore && !isShift && isShiftScore) {
|
|
|
|
+ return markTaskScoreService.shiftScore(markerId, workId, isShift, isShiftScore, questionId, pageable);
|
|
}
|
|
}
|
|
|
|
+ return null;
|
|
|
|
+
|
|
|
|
+// List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
|
+// Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
|
+// List<Predicate> predicates = new ArrayList<>();
|
|
|
|
+// predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
+// predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
|
|
+// if (isShift != null) {
|
|
|
|
+// //查询
|
|
|
|
+// predicates.add(builder.equal(root.get("paper").get("isShift"), isShift));
|
|
|
|
+// if (isShift) {
|
|
|
|
+// predicates.add(builder.equal(root.get("stage"), MarkStage.LEVEL));
|
|
|
|
+// predicates.add(builder.isNull(root.get("result")));
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// if (isShiftScore != null && isShiftScore && !isShift) {
|
|
|
|
+// predicates.add(builder.equal(root.get("paper").get("isShiftScore"), isShiftScore));
|
|
|
|
+// if (isShiftScore) {
|
|
|
|
+// predicates.add(builder.equal(root.get("stage"), MarkStage.SCORE));
|
|
|
|
+// predicates.add(builder.isNull(root.get("result")));
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
|
+// };
|
|
|
|
+// Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
|
|
|
|
+// Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
|
|
|
|
+// Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable1);
|
|
|
|
+//
|
|
|
|
+// markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskAssembler.toShiftDTO(m)));
|
|
|
|
+// return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -286,40 +169,17 @@ public class MarkTaskApi {
|
|
* @param markTask 评卷你任务id
|
|
* @param markTask 评卷你任务id
|
|
* @param body 评卷内容
|
|
* @param body 评卷内容
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "{markTask}", method = RequestMethod.PATCH)
|
|
|
|
- public ResponseEntity marking(@PathVariable MarkTask markTask, @RequestBody HashMap<String, String> body) {
|
|
|
|
|
|
+ @PatchMapping("{markTask}")
|
|
|
|
+ public ResponseEntity marking(@PathVariable Long markTask, @RequestBody HashMap<String, String> body) {
|
|
MarkStage stage = MarkStage.valueOf(body.get("stage"));
|
|
MarkStage stage = MarkStage.valueOf(body.get("stage"));
|
|
- String result = body.get("result");
|
|
|
|
- boolean oldRejected = markTask.isRejected();
|
|
|
|
- boolean oldShift = markTask.getPaper().isShift();
|
|
|
|
- boolean oldShiftScore = markTask.getPaper().isShiftScore();
|
|
|
|
- if (result == null) {
|
|
|
|
- return new ResponseEntity(HttpStatus.BAD_REQUEST);
|
|
|
|
|
|
+ if (stage.equals(MarkStage.ROUGH_LEVEL)) {
|
|
|
|
+ return markTaskRoughLevelService.markingLevel(markTask, body);
|
|
|
|
+ } else if (stage.equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.markingLevel(markTask, body);
|
|
|
|
+ } else if (stage.equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.markingScore(markTask, body);
|
|
}
|
|
}
|
|
- switch (stage) {
|
|
|
|
- case LEVEL:
|
|
|
|
- try {
|
|
|
|
- lockService.waitlock(LockType.LEVEL, markTask.getPaper().getId());
|
|
|
|
- markingService.levelMark(markTask, result);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- throw new RuntimeException("分档异常");
|
|
|
|
- } finally {
|
|
|
|
- lockService.unlock(LockType.LEVEL, markTask.getPaper().getId());
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case SCORE:
|
|
|
|
- int score = Integer.parseInt(result);
|
|
|
|
- try {
|
|
|
|
- lockService.waitlock(LockType.SCORE, markTask.getPaper().getId());
|
|
|
|
- markingService.scoring(markTask, score);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- throw new RuntimeException("打分异常");
|
|
|
|
- } finally {
|
|
|
|
- lockService.unlock(LockType.SCORE, markTask.getPaper().getId());
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- return new ResponseEntity(markTaskAssembler.toDTO(markTask, oldRejected, oldShift, oldShiftScore), HttpStatus.OK);
|
|
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -331,40 +191,19 @@ public class MarkTaskApi {
|
|
public ResponseEntity batch(@RequestBody HashMap<String, String> body) {
|
|
public ResponseEntity batch(@RequestBody HashMap<String, String> body) {
|
|
MarkStage stage = MarkStage.valueOf(body.get("stage"));
|
|
MarkStage stage = MarkStage.valueOf(body.get("stage"));
|
|
String markIds = body.get("taskIds");
|
|
String markIds = body.get("taskIds");
|
|
- String result = body.get("result");
|
|
|
|
if (Objects.isNull(markIds)) {
|
|
if (Objects.isNull(markIds)) {
|
|
throw new RuntimeException("请选择待评试卷");
|
|
throw new RuntimeException("请选择待评试卷");
|
|
}
|
|
}
|
|
String[] ids = markIds.split(",");
|
|
String[] ids = markIds.split(",");
|
|
List<MarkTaskDTO> list = new ArrayList<>();
|
|
List<MarkTaskDTO> list = new ArrayList<>();
|
|
for (String id : ids) {
|
|
for (String id : ids) {
|
|
- MarkTask markTask = markTaskRepo.findOne(Long.valueOf(id));
|
|
|
|
- boolean oldRejected = markTask.isRejected();
|
|
|
|
- boolean oldShift = markTask.getPaper().isShift();
|
|
|
|
- boolean oldShiftScore = markTask.getPaper().isShiftScore();
|
|
|
|
- if (result == null) {
|
|
|
|
- return new ResponseEntity(HttpStatus.BAD_REQUEST);
|
|
|
|
- }
|
|
|
|
- switch (stage) {
|
|
|
|
- case LEVEL:
|
|
|
|
- try {
|
|
|
|
- lockService.waitlock(LockType.LEVEL, markTask.getPaper().getId());
|
|
|
|
- markingService.levelMark(markTask, result);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- throw new RuntimeException("分档异常");
|
|
|
|
- } finally {
|
|
|
|
- lockService.unlock(LockType.LEVEL, markTask.getPaper().getId());
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case SCORE:
|
|
|
|
- int score = Integer.parseInt(result);
|
|
|
|
- synchronized (this) {
|
|
|
|
- markingService.scoring(markTask, score);
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
|
|
+ if (stage.equals(MarkStage.ROUGH_LEVEL)) {
|
|
|
|
+ return markTaskRoughLevelService.markingLevel(Long.valueOf(id), body);
|
|
|
|
+ } else if (stage.equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.markingLevel(Long.valueOf(id), body);
|
|
|
|
+ } else if (stage.equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.markingScore(Long.valueOf(id), body);
|
|
}
|
|
}
|
|
- MarkTaskDTO markTaskDTO = markTaskAssembler.toDTO(markTask, oldRejected, oldShift, oldShiftScore);
|
|
|
|
- list.add(markTaskDTO);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return new ResponseEntity(list, HttpStatus.OK);
|
|
return new ResponseEntity(list, HttpStatus.OK);
|
|
@@ -376,88 +215,63 @@ public class MarkTaskApi {
|
|
* @param markTaskId 评卷你任务id
|
|
* @param markTaskId 评卷你任务id
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "{markTaskId}/skip", method = RequestMethod.POST)
|
|
|
|
- public ResponseEntity skip(@PathVariable Long markTaskId) {
|
|
|
|
- MarkTask markTask = markingService.skip(markTaskId);
|
|
|
|
- return new ResponseEntity(markTaskAssembler.toDTO(markTask), HttpStatus.OK);
|
|
|
|
|
|
+ @RequestMapping(value = "{stage}/{markTaskId}/skip", method = RequestMethod.POST)
|
|
|
|
+ public ResponseEntity skip(@PathVariable MarkStage stage, @PathVariable Long markTaskId) {
|
|
|
|
+ if (stage.equals(MarkStage.ROUGH_LEVEL)) {
|
|
|
|
+ return markTaskRoughLevelService.skipLevel(markTaskId);
|
|
|
|
+ } else if (stage.equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.skipLevel(markTaskId);
|
|
|
|
+ } else if (stage.equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.skipScore(markTaskId);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 跳过评卷任务
|
|
|
|
|
|
+ * 查询标记试卷
|
|
*
|
|
*
|
|
* @param markTaskId 评卷你任务id
|
|
* @param markTaskId 评卷你任务id
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "/mark_task", method = RequestMethod.POST)
|
|
|
|
|
|
+ @RequestMapping(value = "/{stage}/mark_task", method = RequestMethod.POST)
|
|
@Transactional
|
|
@Transactional
|
|
- public Object markTask(@RequestParam Long markTaskId,
|
|
|
|
|
|
+ public Object markTask(@PathVariable MarkStage stage,
|
|
|
|
+ @RequestParam Long markTaskId,
|
|
@RequestParam Boolean isMark) {
|
|
@RequestParam Boolean isMark) {
|
|
- markTaskRepo.updateMarkTaskMarkById(markTaskId, isMark);
|
|
|
|
|
|
+ if (stage.equals(MarkStage.ROUGH_LEVEL)) {
|
|
|
|
+ return markTaskRoughLevelService.updateMarkTaskMarkById(markTaskId, isMark);
|
|
|
|
+ } else if (stage.equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.updateMarkTaskMarkById(markTaskId, isMark);
|
|
|
|
+ } else if (stage.equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.updateMarkTaskMarkById(markTaskId, isMark);
|
|
|
|
+ }
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 已评试卷回显
|
|
* 已评试卷回显
|
|
*
|
|
*
|
|
- * @param markerId
|
|
|
|
- * @param stage
|
|
|
|
- * @param questionId
|
|
|
|
- * @param areaCode
|
|
|
|
- * @return
|
|
|
|
|
|
+ * @param markerId 工用ID
|
|
|
|
+ * @param stage 阶段
|
|
|
|
+ * @param questionId 考区ID
|
|
|
|
+ * @param areaCode 考区
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "/reviewPaper", method = RequestMethod.GET)
|
|
|
|
|
|
+ @GetMapping("/reviewPaper")
|
|
public List<MarkTaskDTO> reviewPaper(@RequestParam Long markerId,
|
|
public List<MarkTaskDTO> reviewPaper(@RequestParam Long markerId,
|
|
@RequestParam MarkStage stage,
|
|
@RequestParam MarkStage stage,
|
|
@RequestParam Long questionId,
|
|
@RequestParam Long questionId,
|
|
@RequestParam(required = false) String areaCode) {
|
|
@RequestParam(required = false) String areaCode) {
|
|
- List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
|
- Sort sort = new Sort(Sort.Direction.DESC, "updatedOn");
|
|
|
|
- Pageable pageable = new PageRequest(0, 5, sort);
|
|
|
|
- Long batchNo = null;
|
|
|
|
- Long socreBatchNo = null;
|
|
|
|
- if (stage == MarkStage.LEVEL) {
|
|
|
|
- batchNo = paperRepo.findByQuestionId(questionId);
|
|
|
|
- } else if (stage == MarkStage.SCORE) {
|
|
|
|
- socreBatchNo = paperRepo.findScoreBatchNoByQuestionId(questionId);
|
|
|
|
|
|
+ if (stage.equals(MarkStage.ROUGH_LEVEL)) {
|
|
|
|
+ return markTaskRoughLevelService.reviewPaperLevel(markerId, questionId, areaCode);
|
|
|
|
+ } else if (stage.equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.reviewPaperLevel(markerId, questionId, areaCode);
|
|
|
|
+ } else if (stage.equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.reviewPaperScore(markerId, questionId, areaCode);
|
|
}
|
|
}
|
|
-
|
|
|
|
- Long finalBatchNo = batchNo;
|
|
|
|
- Long finalSocreBatchNo = socreBatchNo;
|
|
|
|
- Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
|
- List<Predicate> predicates = new ArrayList<>();
|
|
|
|
- if (Objects.nonNull(questionId)) {
|
|
|
|
- predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
- }
|
|
|
|
- predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
|
|
- predicates.add(builder.equal(root.get("stage"), stage));
|
|
|
|
- if (stage == MarkStage.LEVEL) {
|
|
|
|
- //查询
|
|
|
|
- if (!Objects.isNull(finalBatchNo)) {
|
|
|
|
- predicates.add(builder.equal(root.get("paper").get("batchNo"), finalBatchNo));
|
|
|
|
- }
|
|
|
|
- predicates.add(builder.isNotNull(root.get("result")));
|
|
|
|
- //分档需要过滤标准卷
|
|
|
|
- predicates.add(builder.equal(root.get("paper").get("isSample"), false));
|
|
|
|
- } else if (stage == MarkStage.SCORE) {
|
|
|
|
- predicates.add(builder.isNotNull(root.get("result")));
|
|
|
|
- if (!Objects.isNull(finalSocreBatchNo)) {
|
|
|
|
- predicates.add(builder.equal(root.get("paper").get("scoreBatchNo"), finalSocreBatchNo));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //过滤考区
|
|
|
|
- if (Objects.nonNull(areaCode)) {
|
|
|
|
- predicates.add(builder.equal(root.get("paper").get("areaCode"), areaCode));
|
|
|
|
- }
|
|
|
|
- return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
|
- };
|
|
|
|
- Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable);
|
|
|
|
- markTasks.getContent().forEach(m -> {
|
|
|
|
- markTaskDTOs.add(markTaskAssembler.toDTO(m));
|
|
|
|
- });
|
|
|
|
- return markTaskDTOs;
|
|
|
|
|
|
+ return new ArrayList<>();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- @RequestMapping(value = "/kzzReviewPaper", method = RequestMethod.GET)
|
|
|
|
|
|
+ @GetMapping("/kzzReviewPaper")
|
|
public List<PaperDTO> reviewPaper(@RequestParam Long workId,
|
|
public List<PaperDTO> reviewPaper(@RequestParam Long workId,
|
|
@RequestParam Subject subject,
|
|
@RequestParam Subject subject,
|
|
@RequestParam Long questionId) {
|
|
@RequestParam Long questionId) {
|
|
@@ -467,7 +281,7 @@ public class MarkTaskApi {
|
|
List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderService.listByWorkIdAndSubjectAndStageAndMarkLeaderId(markSubject.getWorkId(), markSubject, markerId);
|
|
List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderService.listByWorkIdAndSubjectAndStageAndMarkLeaderId(markSubject.getWorkId(), markSubject, markerId);
|
|
List<Long> paperIds = null;
|
|
List<Long> paperIds = null;
|
|
if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
|
|
if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
|
|
- List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
|
|
|
|
|
|
+ List<Long> markers = markerGroupLeaders.stream().map(MarkerGroupLeader::getMarkerId).distinct().collect(Collectors.toList());
|
|
paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(workId, markSubject.getSubject(), markSubject.getStage(), markers);
|
|
paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(workId, markSubject.getSubject(), markSubject.getStage(), markers);
|
|
}
|
|
}
|
|
List<Long> finalPaperIds = paperIds;
|
|
List<Long> finalPaperIds = paperIds;
|
|
@@ -522,13 +336,6 @@ public class MarkTaskApi {
|
|
@RequestParam Subject subject,
|
|
@RequestParam Subject subject,
|
|
@RequestParam(required = false) Long questionId) {
|
|
@RequestParam(required = false) Long questionId) {
|
|
MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
|
|
MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
|
|
- Long markerId = ServletUtil.getUserId();
|
|
|
|
- /*List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderService.listByWorkIdAndSubjectAndStageAndMarkLeaderId(markSubject.getWorkId(), markSubject, markerId);
|
|
|
|
- List<Long> paperIds = null;
|
|
|
|
- if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
|
|
|
|
- List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
|
|
|
|
- paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
|
|
|
|
- }*/
|
|
|
|
|
|
|
|
List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
List<Paper> papers;
|
|
List<Paper> papers;
|
|
@@ -552,7 +359,7 @@ public class MarkTaskApi {
|
|
//数量
|
|
//数量
|
|
long count = papers.stream().filter(m -> Objects.nonNull(m.getLevel()) && Objects.equals(level.getCode(), m.getLevel())).count();
|
|
long count = papers.stream().filter(m -> Objects.nonNull(m.getLevel()) && Objects.equals(level.getCode(), m.getLevel())).count();
|
|
levelDetailDTO.setLevelCount((int) count);
|
|
levelDetailDTO.setLevelCount((int) count);
|
|
- BigDecimal prop = papers.size() == 0 ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
+ BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
//占比
|
|
//占比
|
|
levelDetailDTO.setLevelProp(prop.doubleValue());
|
|
levelDetailDTO.setLevelProp(prop.doubleValue());
|
|
//预设占比
|
|
//预设占比
|
|
@@ -564,7 +371,7 @@ public class MarkTaskApi {
|
|
int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
|
|
int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
|
|
levelDetailDTO.setCumulateCount(sumCount);
|
|
levelDetailDTO.setCumulateCount(sumCount);
|
|
//累计占比
|
|
//累计占比
|
|
- BigDecimal cumulateProp = papers.size() == 0 ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
+ BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
|
|
levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
|
|
|
|
|
|
//调整
|
|
//调整
|
|
@@ -595,11 +402,16 @@ public class MarkTaskApi {
|
|
* @param secretNumber 密号
|
|
* @param secretNumber 密号
|
|
*/
|
|
*/
|
|
@RequestMapping(value = "/get_by_secret_number", method = RequestMethod.GET)
|
|
@RequestMapping(value = "/get_by_secret_number", method = RequestMethod.GET)
|
|
- public List<MarkTask> getBySecretNumber(@RequestParam Long workId,
|
|
|
|
- @RequestParam Subject subject,
|
|
|
|
- @RequestParam String secretNumber) {
|
|
|
|
|
|
+ public List getBySecretNumber(@RequestParam Long workId,
|
|
|
|
+ @RequestParam Subject subject,
|
|
|
|
+ @RequestParam String secretNumber) {
|
|
MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject);
|
|
MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject);
|
|
- return markTaskRepo.findByWorkIdAndSubjectAndSecretNumberAndTest(workId, subject, secretNumber, markSubject.getTest());
|
|
|
|
|
|
+ if (markSubject.getStage().equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.getBySecretNumberLevel(workId, subject, secretNumber, markSubject.getTest());
|
|
|
|
+ } else if (markSubject.getStage().equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.getBySecretNumberScore(workId, subject, secretNumber, markSubject.getTest());
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -610,32 +422,17 @@ public class MarkTaskApi {
|
|
* @param stage 阶段
|
|
* @param stage 阶段
|
|
* @param markerId 评卷员ID
|
|
* @param markerId 评卷员ID
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "/list_mark_task", method = RequestMethod.GET)
|
|
|
|
|
|
+ @GetMapping("/list_mark_task")
|
|
public PageableDTO listMarkTask(@RequestParam Long workId,
|
|
public PageableDTO listMarkTask(@RequestParam Long workId,
|
|
@RequestParam Subject subject,
|
|
@RequestParam Subject subject,
|
|
@RequestParam MarkStage stage,
|
|
@RequestParam MarkStage stage,
|
|
@RequestParam Long markerId,
|
|
@RequestParam Long markerId,
|
|
Pageable pageable) {
|
|
Pageable pageable) {
|
|
- /*List<MarkTask> markTasks = markTaskRepo.findByWorkIdAndSubjectAndStageAndMarkerIdAndIsMarkTrue(workId, subject, stage, markerId);
|
|
|
|
- List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
|
- markTasks.forEach(m -> {
|
|
|
|
- markTaskDTOs.add(markTaskAssembler.toDTO(m));
|
|
|
|
- });
|
|
|
|
- return markTaskDTOs;*/
|
|
|
|
-
|
|
|
|
- List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
|
- Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
|
- List<Predicate> predicates = new ArrayList<>();
|
|
|
|
- predicates.add(builder.equal(root.get("workId"), workId));
|
|
|
|
- predicates.add(builder.equal(root.get("subject"), subject));
|
|
|
|
- predicates.add(builder.equal(root.get("stage"), stage));
|
|
|
|
- predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
|
|
- predicates.add(builder.equal(root.get("isMark"), true));
|
|
|
|
- return builder.and(predicates.toArray(new Predicate[0]));
|
|
|
|
- };
|
|
|
|
- Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable);
|
|
|
|
-
|
|
|
|
- markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskAssembler.toDTO(m)));
|
|
|
|
- return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
|
|
|
|
+ if (stage.equals(MarkStage.LEVEL)) {
|
|
|
|
+ return markTaskLevelService.listMarkedTaskLevel(workId, subject, markerId, pageable);
|
|
|
|
+ } else if (stage.equals(MarkStage.SCORE)) {
|
|
|
|
+ return markTaskScoreService.listMarkedTaskScore(workId, subject, markerId, pageable);
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
}
|
|
}
|