|
@@ -26,6 +26,7 @@ import org.springframework.http.ResponseEntity;
|
|
import org.springframework.orm.jpa.vendor.OpenJpaDialect;
|
|
import org.springframework.orm.jpa.vendor.OpenJpaDialect;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
import javax.persistence.criteria.Predicate;
|
|
import javax.persistence.criteria.Predicate;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -91,7 +92,9 @@ public class MarkTaskApi {
|
|
List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
Specification<MarkTask> specification = (root, query, builder) -> {
|
|
Specification<MarkTask> specification = (root, query, builder) -> {
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
- predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
|
|
+ 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("markerId"), markerId));
|
|
predicates.add(builder.equal(root.get("stage"), stage));
|
|
predicates.add(builder.equal(root.get("stage"), stage));
|
|
if (level == null) {
|
|
if (level == null) {
|
|
@@ -104,6 +107,8 @@ public class MarkTaskApi {
|
|
predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
|
|
predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
|
|
}
|
|
}
|
|
} else if (stage == MarkStage.SCORE) {
|
|
} else if (stage == MarkStage.SCORE) {
|
|
|
|
+// predicates.add(builder.isNotNull(root.get("result")));
|
|
|
|
+ predicates.add(builder.equal(root.get("paper").get("level"), level));
|
|
predicates.add(builder.isNotNull(root.get("result")));
|
|
predicates.add(builder.isNotNull(root.get("result")));
|
|
}
|
|
}
|
|
if (isSample != null) {
|
|
if (isSample != null) {
|
|
@@ -153,6 +158,41 @@ public class MarkTaskApi {
|
|
return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 评卷员的评卷任务
|
|
|
|
+ *
|
|
|
|
+ * @param markerId 评卷员用户id
|
|
|
|
+ * @param questionId 试题id
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping(value = "/shift", method = RequestMethod.GET)
|
|
|
|
+ public PageableDTO list(@RequestParam Long markerId,
|
|
|
|
+ @RequestParam(required = false) Boolean isShift,
|
|
|
|
+ @RequestParam(required = false) Boolean isShiftScore,
|
|
|
|
+ @RequestParam Long questionId,
|
|
|
|
+ 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 (isShiftScore != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("paper").get("isShiftScore"), isShiftScore));
|
|
|
|
+ }
|
|
|
|
+ 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排序
|
|
* randomSeqNew排序
|
|
*
|
|
*
|
|
@@ -225,15 +265,15 @@ public class MarkTaskApi {
|
|
*/
|
|
*/
|
|
@RequestMapping(value = "/reviewPaper", method = RequestMethod.GET)
|
|
@RequestMapping(value = "/reviewPaper", method = RequestMethod.GET)
|
|
public List<MarkTaskDTO> reviewPaper(@RequestParam Long markerId,
|
|
public List<MarkTaskDTO> reviewPaper(@RequestParam Long markerId,
|
|
- @RequestParam MarkStage stage,
|
|
|
|
- @RequestParam Long questionId,
|
|
|
|
- @RequestParam(required = false) String areaCode) {
|
|
|
|
|
|
+ @RequestParam MarkStage stage,
|
|
|
|
+ @RequestParam Long questionId,
|
|
|
|
+ @RequestParam(required = false) String areaCode) {
|
|
List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
|
|
Sort sort = new Sort(Sort.Direction.DESC, "updatedOn");
|
|
Sort sort = new Sort(Sort.Direction.DESC, "updatedOn");
|
|
Pageable pageable = new PageRequest(0, 5, sort);
|
|
Pageable pageable = new PageRequest(0, 5, sort);
|
|
Specification<MarkTask> specification = (root, query, builder) -> {
|
|
Specification<MarkTask> specification = (root, query, builder) -> {
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
- if(Objects.nonNull(questionId)) {
|
|
|
|
|
|
+ if (Objects.nonNull(questionId)) {
|
|
predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
}
|
|
}
|
|
predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
predicates.add(builder.equal(root.get("markerId"), markerId));
|
|
@@ -272,17 +312,17 @@ public class MarkTaskApi {
|
|
*/
|
|
*/
|
|
@RequestMapping(value = "/levelStatDetail", method = RequestMethod.GET)
|
|
@RequestMapping(value = "/levelStatDetail", method = RequestMethod.GET)
|
|
public List<LevelDetailDTO> levelStatDetail(@RequestParam Long workId,
|
|
public List<LevelDetailDTO> levelStatDetail(@RequestParam Long workId,
|
|
- @RequestParam Subject subject,
|
|
|
|
- @RequestParam(required = false) Long questionId) {
|
|
|
|
|
|
+ @RequestParam Subject subject,
|
|
|
|
+ @RequestParam(required = false) Long questionId) {
|
|
|
|
|
|
List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
List<Paper> papers;
|
|
List<Paper> papers;
|
|
if (questionId == null) {
|
|
if (questionId == null) {
|
|
- papers = paperRepo.findByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.DEFAULT.getId());
|
|
|
|
|
|
+ papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, TrialEnum.DEFAULT.getId());
|
|
} else {
|
|
} else {
|
|
- papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndTest(workId, subject, questionId, TrialEnum.DEFAULT.getId());
|
|
|
|
|
|
+ papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, TrialEnum.DEFAULT.getId());
|
|
}
|
|
}
|
|
- MarkSubject markSubject = markSubjectRepo.findOne(workId+"-"+subject.name());
|
|
|
|
|
|
+ MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
|
|
|
|
|
|
List<LevelDetailDTO> list = new ArrayList<>();
|
|
List<LevelDetailDTO> list = new ArrayList<>();
|
|
for (Level level : levels) {
|
|
for (Level level : levels) {
|
|
@@ -294,9 +334,9 @@ public class MarkTaskApi {
|
|
levelDetailDTO.setMinScore(level.getMinScore());
|
|
levelDetailDTO.setMinScore(level.getMinScore());
|
|
levelDetailDTO.setMaxScore(level.getMaxScore());
|
|
levelDetailDTO.setMaxScore(level.getMaxScore());
|
|
//数量
|
|
//数量
|
|
- 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 = new BigDecimal(String.valueOf(count*100)).divide(new BigDecimal(String.valueOf(papers.size())),2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
+ BigDecimal prop = 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());
|
|
//预设占比
|
|
//预设占比
|
|
@@ -305,14 +345,14 @@ public class MarkTaskApi {
|
|
BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
|
|
BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
|
|
levelDetailDTO.setDiffProp(diff.doubleValue());
|
|
levelDetailDTO.setDiffProp(diff.doubleValue());
|
|
//累计数量
|
|
//累计数量
|
|
- int sumCount = list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum();
|
|
|
|
|
|
+ int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
|
|
levelDetailDTO.setCumulateCount(sumCount + (int) count);
|
|
levelDetailDTO.setCumulateCount(sumCount + (int) count);
|
|
//累计占比
|
|
//累计占比
|
|
- double sumProp = list.stream().mapToDouble(LevelDetailDTO::getLevelProp).sum();
|
|
|
|
- levelDetailDTO.setCumulateProp(sumProp + prop.doubleValue());
|
|
|
|
|
|
+ BigDecimal cumulateProp = new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
|
|
|
|
|
|
//调整
|
|
//调整
|
|
- int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff).intValue();
|
|
|
|
|
|
+ int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
|
|
levelDetailDTO.setAdjustmentCount(adjustment);
|
|
levelDetailDTO.setAdjustmentCount(adjustment);
|
|
|
|
|
|
list.add(levelDetailDTO);
|
|
list.add(levelDetailDTO);
|