|
@@ -33,11 +33,13 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
import javax.persistence.criteria.Join;
|
|
|
import javax.persistence.criteria.JoinType;
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 评卷任务数据api
|
|
@@ -294,25 +296,26 @@ public class MarkTaskApi {
|
|
|
|
|
|
/**
|
|
|
* 评卷员的标记试卷查询
|
|
|
- * @param markerId 评卷员ID
|
|
|
- * @param workId 工作ID
|
|
|
- * @param subject 科目
|
|
|
+ *
|
|
|
+ * @param markerId 评卷员ID
|
|
|
+ * @param workId 工作ID
|
|
|
+ * @param subject 科目
|
|
|
* @param questionId 考区ID
|
|
|
- * @param pageable 分页
|
|
|
+ * @param pageable 分页
|
|
|
*/
|
|
|
@GetMapping("/markedPapers")
|
|
|
public PageableDTO listMarkedPapers(@RequestParam(required = false) Long workId,
|
|
|
@RequestParam Long markerId,
|
|
|
- @RequestParam Subject subject,
|
|
|
- @RequestParam MarkStage stage,
|
|
|
- @RequestParam Long questionId,
|
|
|
- Pageable pageable) {
|
|
|
+ @RequestParam Subject subject,
|
|
|
+ @RequestParam MarkStage stage,
|
|
|
+ @RequestParam Long questionId,
|
|
|
+ Pageable pageable) {
|
|
|
List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
|
Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
|
|
|
|
if (ParamCache.paramMap.get(workId).getScoreShowAllPaper() == 0) {
|
|
|
- if(MarkStage.LEVEL.equals(stage)){
|
|
|
+ if (MarkStage.LEVEL.equals(stage)) {
|
|
|
Long batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubject(workId, subject);
|
|
|
predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
|
|
|
} else {
|
|
@@ -539,22 +542,54 @@ public class MarkTaskApi {
|
|
|
public List<PaperDTO> reviewPaper(@RequestParam Long workId,
|
|
|
@RequestParam Subject subject,
|
|
|
@RequestParam Long questionId) {
|
|
|
- Specification<Paper> 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));
|
|
|
- if (Objects.nonNull(questionId)) {
|
|
|
- predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
+ MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject);
|
|
|
+ Specification<Paper> specification;
|
|
|
+ if (MarkStage.LEVEL.equals(markSubject.getStage())) {
|
|
|
+ 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));
|
|
|
+ if (Objects.nonNull(questionId)) {
|
|
|
+ predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
+ }
|
|
|
+ predicates.add(builder.equal(root.get("markByLeader"), true));
|
|
|
+ List<Predicate> list = new ArrayList<>();
|
|
|
+ list.add(builder.equal(root.get("isSample"), true));
|
|
|
+ list.add(builder.equal(root.get("isOneClick"), true));
|
|
|
+ list.add(builder.equal(root.get("isRejectedByLeader"), true));
|
|
|
+ Predicate Pre_And = builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
+ Predicate Pre_Or = builder.or(list.toArray(new Predicate[list.size()]));
|
|
|
+ return query.where(Pre_And, Pre_Or).getRestriction();
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ List<MarkTask> markTasks = markTaskRepo.findByWorkIdAndQuestionIdAndStageAndManualScore(workId, questionId, MarkStage.SCORE, 1);
|
|
|
+ List<Long> paperIds = markTasks.stream().map(m -> m.getPaper().getId()).distinct().collect(Collectors.toList());
|
|
|
+ List<MarkTask> markTaskList = markTaskRepo.findByPaperIdInAndStage(paperIds, MarkStage.SCORE);
|
|
|
+ Map<Long, List<MarkTask>> markTaskMap = markTaskList.stream().collect(Collectors.groupingBy(m -> m.getPaper().getId()));
|
|
|
+ Set<Long> paperIdSet = new HashSet();
|
|
|
+ for (Map.Entry<Long, List<MarkTask>> entry : markTaskMap.entrySet()) {
|
|
|
+ long count = entry.getValue().stream().filter(m -> Objects.isNull(m.getResult())).count();
|
|
|
+ if (count == 0) {
|
|
|
+ paperIdSet.add(entry.getKey());
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- predicates.add(builder.equal(root.get("markByLeader"), true));
|
|
|
- List<Predicate> list = new ArrayList<>();
|
|
|
- list.add(builder.equal(root.get("isSample"), true));
|
|
|
- list.add(builder.equal(root.get("isOneClick"), true));
|
|
|
- list.add(builder.equal(root.get("isRejectedByLeader"), true));
|
|
|
- Predicate Pre_And = builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
- Predicate Pre_Or = builder.or(list.toArray(new Predicate[list.size()]));
|
|
|
- return query.where(Pre_And, Pre_Or).getRestriction();
|
|
|
- };
|
|
|
+ specification = (root, query, builder) -> {
|
|
|
+ List<Predicate> predicates = new ArrayList<>();
|
|
|
+ predicates.add(builder.isNotNull(root.get("score")));
|
|
|
+ if (paperIdSet != null && paperIdSet.size() > 0) {
|
|
|
+ CriteriaBuilder.In<Object> in = builder.in(root.get("id"));
|
|
|
+ for (Long paperId : paperIdSet) {
|
|
|
+ in.value(paperId);
|
|
|
+ }
|
|
|
+ predicates.add(builder.and(builder.and(in)));
|
|
|
+ } else {
|
|
|
+ // 必查空
|
|
|
+ predicates.add(builder.isNull(root.get("id")));
|
|
|
+ }
|
|
|
+ return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
+ };
|
|
|
+ }
|
|
|
|
|
|
Sort sort = new Sort(Sort.Direction.DESC, "updatedOn");
|
|
|
Pageable pageable = new PageRequest(0, 5, sort);
|
|
@@ -656,7 +691,7 @@ public class MarkTaskApi {
|
|
|
@RequestParam Long markerId,
|
|
|
Pageable pageable) {
|
|
|
MarkUser markUser = markUserRepo.findOne(markerId);
|
|
|
- if(Role.MARKER.equals(markUser.getRole())) {
|
|
|
+ if (Role.MARKER.equals(markUser.getRole())) {
|
|
|
List<PaperDTO> paperDTOS = new ArrayList<>();
|
|
|
Specification<MarkTask> specification = (root, query, builder) -> {
|
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
@@ -671,7 +706,7 @@ public class MarkTaskApi {
|
|
|
|
|
|
markTasks.getContent().forEach(m -> paperDTOS.add(paperAssembler.toDTO(m.getPaper())));
|
|
|
return new PageableDTO(paperDTOS, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
|
- } else if(Role.MARK_LEADER.equals(markUser.getRole())){
|
|
|
+ } else if (Role.MARK_LEADER.equals(markUser.getRole())) {
|
|
|
List<PaperDTO> paperDTOS = new ArrayList<>();
|
|
|
Specification<Paper> specification = (root, query, builder) -> {
|
|
|
List<Predicate> predicates = new ArrayList<>();
|