|
@@ -1,32 +1,33 @@
|
|
package cn.com.qmth.stmms.ms.marking.api;
|
|
package cn.com.qmth.stmms.ms.marking.api;
|
|
|
|
|
|
-import java.util.*;
|
|
|
|
-
|
|
|
|
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.domain.ExamQuestion;
|
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.MarkStage;
|
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.Paper;
|
|
|
|
+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.repository.ExamQuestionRepo;
|
|
|
|
+import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
|
|
|
|
+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.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.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.MarkingService;
|
|
import cn.com.qmth.stmms.ms.marking.service.MarkingService;
|
|
-
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
-import org.springframework.data.domain.*;
|
|
|
|
|
|
+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.data.jpa.domain.Specification;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
-
|
|
|
|
-import cn.com.qmth.stmms.ms.core.domain.MarkStage;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.domain.Paper;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.domain.Student;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
|
|
|
|
-
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.persistence.criteria.Predicate;
|
|
import javax.persistence.criteria.Predicate;
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 试卷相关api
|
|
* 试卷相关api
|
|
@@ -51,138 +52,142 @@ public class PaperApi {
|
|
@Autowired
|
|
@Autowired
|
|
private MarkingService markingService;
|
|
private MarkingService markingService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ ExamQuestionRepo examQuestionRepo;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 单个试卷信息
|
|
* 单个试卷信息
|
|
|
|
+ *
|
|
* @param paperId 试卷id
|
|
* @param paperId 试卷id
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "{paperId}",method = RequestMethod.GET)
|
|
|
|
- public PaperDTO get(@PathVariable Long paperId){
|
|
|
|
|
|
+ @RequestMapping(value = "{paperId}", method = RequestMethod.GET)
|
|
|
|
+ public PaperDTO get(@PathVariable Long paperId) {
|
|
return paperAssembler.toDTO(paperRepo.findOne(paperId));
|
|
return paperAssembler.toDTO(paperRepo.findOne(paperId));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 单个试卷信息
|
|
* 单个试卷信息
|
|
|
|
+ *
|
|
* @param questionId 试题id
|
|
* @param questionId 试题id
|
|
- * @param sn 密号
|
|
|
|
|
|
+ * @param sn 密号
|
|
* @param examNumber 准考证号
|
|
* @param examNumber 准考证号
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "/one",method = RequestMethod.GET)
|
|
|
|
|
|
+ @RequestMapping(value = "/one", method = RequestMethod.GET)
|
|
public PaperDTO getOne(@RequestParam Long questionId,
|
|
public PaperDTO getOne(@RequestParam Long questionId,
|
|
@RequestParam(required = false) String sn,
|
|
@RequestParam(required = false) String sn,
|
|
- @RequestParam(required = false) String examNumber){
|
|
|
|
|
|
+ @RequestParam(required = false) String examNumber) {
|
|
PaperDTO paperDTO = null;
|
|
PaperDTO paperDTO = null;
|
|
- Specification<Paper> specification = (root,query,builder) -> {
|
|
|
|
|
|
+ Specification<Paper> specification = (root, query, builder) -> {
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
- predicates.add(builder.equal(root.get("questionId"),questionId));
|
|
|
|
- if(sn != null){
|
|
|
|
- predicates.add(builder.equal(root.get("secretNumber"),sn));
|
|
|
|
|
|
+ predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
+ if (sn != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("secretNumber"), sn));
|
|
}
|
|
}
|
|
- if(examNumber != null){
|
|
|
|
- predicates.add(builder.equal(root.get("examNumber"),examNumber));
|
|
|
|
|
|
+ if (examNumber != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("examNumber"), examNumber));
|
|
}
|
|
}
|
|
|
|
|
|
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
};
|
|
};
|
|
- Optional<Paper> paperOptional = paperRepo.findAll(specification,new PageRequest(0,1))
|
|
|
|
|
|
+ Optional<Paper> paperOptional = paperRepo.findAll(specification, new PageRequest(0, 1))
|
|
.getContent().stream().findFirst();
|
|
.getContent().stream().findFirst();
|
|
- if(paperOptional.isPresent()){
|
|
|
|
|
|
+ if (paperOptional.isPresent()) {
|
|
paperDTO = paperAssembler.toDTO(paperOptional.get());
|
|
paperDTO = paperAssembler.toDTO(paperOptional.get());
|
|
}
|
|
}
|
|
return paperDTO;
|
|
return paperDTO;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
@RequestMapping(value = "search/byTaskSecretNumber", method = RequestMethod.GET)
|
|
@RequestMapping(value = "search/byTaskSecretNumber", method = RequestMethod.GET)
|
|
public PaperDTO getByTaskSecretNumber(@RequestParam Long questionId,
|
|
public PaperDTO getByTaskSecretNumber(@RequestParam Long questionId,
|
|
- @RequestParam String sn) {
|
|
|
|
- PaperDTO paperDTO = null;
|
|
|
|
- Specification<MarkTask> specification = (root,query,builder) -> {
|
|
|
|
|
|
+ @RequestParam String sn) {
|
|
|
|
+ PaperDTO paperDTO = null;
|
|
|
|
+ Specification<MarkTask> specification = (root, query, builder) -> {
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
- predicates.add(builder.equal(root.get("paper").get("questionId"),questionId));
|
|
|
|
- if(sn != null){
|
|
|
|
- predicates.add(builder.equal(root.get("secretNumber"),sn));
|
|
|
|
|
|
+ predicates.add(builder.equal(root.get("paper").get("questionId"), questionId));
|
|
|
|
+ if (sn != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("secretNumber"), sn));
|
|
}
|
|
}
|
|
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
};
|
|
};
|
|
- Optional<MarkTask> taskOptional = markTaskRepo.findAll(specification,new PageRequest(0,1))
|
|
|
|
|
|
+ Optional<MarkTask> taskOptional = markTaskRepo.findAll(specification, new PageRequest(0, 1))
|
|
.getContent().stream().findFirst();
|
|
.getContent().stream().findFirst();
|
|
- if(taskOptional.isPresent()){
|
|
|
|
|
|
+ if (taskOptional.isPresent()) {
|
|
paperDTO = paperAssembler.toDTO(taskOptional.get().getPaper());
|
|
paperDTO = paperAssembler.toDTO(taskOptional.get().getPaper());
|
|
}
|
|
}
|
|
return paperDTO;
|
|
return paperDTO;
|
|
}
|
|
}
|
|
|
|
|
|
- @RequestMapping(value="listByQuestion",method = RequestMethod.GET)
|
|
|
|
|
|
+ @RequestMapping(value = "listByQuestion", method = RequestMethod.GET)
|
|
public PageableDTO listByQuerion(@RequestParam Long workId,
|
|
public PageableDTO listByQuerion(@RequestParam Long workId,
|
|
- @RequestParam String areaCode,
|
|
|
|
|
|
+ @RequestParam String areaCode,
|
|
@RequestParam Subject subject,
|
|
@RequestParam Subject subject,
|
|
@RequestParam(required = false) Long startNumber,
|
|
@RequestParam(required = false) Long startNumber,
|
|
@RequestParam(required = false) Long endNumber,
|
|
@RequestParam(required = false) Long endNumber,
|
|
@RequestParam(required = false) Boolean isManual,
|
|
@RequestParam(required = false) Boolean isManual,
|
|
- Pageable pageable){
|
|
|
|
- Specification<Paper> specification = (root,query,builder) -> {
|
|
|
|
|
|
+ Pageable pageable) {
|
|
|
|
+ Specification<Paper> specification = (root, query, builder) -> {
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
- predicates.add(builder.equal(root.get("workId"),workId));
|
|
|
|
- predicates.add(builder.equal(root.get("areaCode"),areaCode));
|
|
|
|
- predicates.add(builder.equal(root.get("subject"),subject));
|
|
|
|
- if(startNumber != null && endNumber != null){
|
|
|
|
- predicates.add(builder.between(root.get("examNumber"),startNumber,endNumber));
|
|
|
|
- }
|
|
|
|
- else if(startNumber != null){
|
|
|
|
- predicates.add(builder.equal(root.get("examNumber"),startNumber));
|
|
|
|
|
|
+ predicates.add(builder.equal(root.get("workId"), workId));
|
|
|
|
+ predicates.add(builder.equal(root.get("areaCode"), areaCode));
|
|
|
|
+ predicates.add(builder.equal(root.get("subject"), subject));
|
|
|
|
+ if (startNumber != null && endNumber != null) {
|
|
|
|
+ predicates.add(builder.between(root.get("examNumber"), startNumber, endNumber));
|
|
|
|
+ } else if (startNumber != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("examNumber"), startNumber));
|
|
}
|
|
}
|
|
- if(isManual != null){
|
|
|
|
- predicates.add(builder.equal(root.get("isManual"),isManual));
|
|
|
|
|
|
+ if (isManual != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isManual"), isManual));
|
|
}
|
|
}
|
|
|
|
|
|
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
};
|
|
};
|
|
List<PaperDTO> paperDTOs = new ArrayList<>();
|
|
List<PaperDTO> paperDTOs = new ArrayList<>();
|
|
- Page<Paper> paperPage = paperRepo.findAll(specification,pageable);
|
|
|
|
|
|
+ Page<Paper> paperPage = paperRepo.findAll(specification, pageable);
|
|
paperPage.getContent().forEach(p -> {
|
|
paperPage.getContent().forEach(p -> {
|
|
paperDTOs.add(paperAssembler.toDTO(p));
|
|
paperDTOs.add(paperAssembler.toDTO(p));
|
|
});
|
|
});
|
|
- return new PageableDTO(paperDTOs,paperPage.getTotalElements(),paperPage.getTotalPages(),pageable.getPageNumber());
|
|
|
|
|
|
+ return new PageableDTO(paperDTOs, paperPage.getTotalElements(), paperPage.getTotalPages(), pageable.getPageNumber());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 试卷列表
|
|
* 试卷列表
|
|
|
|
+ *
|
|
* @param questionId 试题id
|
|
* @param questionId 试题id
|
|
- * @param level 档位,如果为空,则测序待评
|
|
|
|
- * @param arbi 是否仲裁
|
|
|
|
- * @param reject 是否打回
|
|
|
|
- * @param pageable 分页参数
|
|
|
|
|
|
+ * @param level 档位,如果为空,则测序待评
|
|
|
|
+ * @param arbi 是否仲裁
|
|
|
|
+ * @param reject 是否打回
|
|
|
|
+ * @param pageable 分页参数
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@RequestMapping(method = RequestMethod.GET)
|
|
@RequestMapping(method = RequestMethod.GET)
|
|
public PageableDTO list(@RequestParam Long questionId,
|
|
public PageableDTO list(@RequestParam Long questionId,
|
|
- @RequestParam(required = false) String level,
|
|
|
|
- @RequestParam(required = false) Boolean isSample,
|
|
|
|
- @RequestParam(required = false) Boolean markedLogic,
|
|
|
|
- @RequestParam(required = false) Boolean arbi,
|
|
|
|
- @RequestParam(required = false) Boolean reject,
|
|
|
|
- Pageable pageable) {
|
|
|
|
- Specification<Paper> specification = (root,query,builder) -> {
|
|
|
|
|
|
+ @RequestParam(required = false) String level,
|
|
|
|
+ @RequestParam(required = false) Boolean isSample,
|
|
|
|
+ @RequestParam(required = false) Boolean markedLogic,
|
|
|
|
+ @RequestParam(required = false) Boolean arbi,
|
|
|
|
+ @RequestParam(required = false) Boolean reject,
|
|
|
|
+ Pageable pageable) {
|
|
|
|
+ Specification<Paper> specification = (root, query, builder) -> {
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
List<Predicate> predicates = new ArrayList<>();
|
|
- predicates.add(builder.equal(root.get("questionId"),questionId));
|
|
|
|
- if(Objects.isNull(level)){
|
|
|
|
|
|
+ predicates.add(builder.equal(root.get("questionId"), questionId));
|
|
|
|
+ if (Objects.isNull(level)) {
|
|
predicates.add(builder.isNull(root.get("level")));
|
|
predicates.add(builder.isNull(root.get("level")));
|
|
|
|
+ } else {
|
|
|
|
+ predicates.add(builder.equal(root.get("level"), level));
|
|
}
|
|
}
|
|
- else{
|
|
|
|
- predicates.add(builder.equal(root.get("level"),level));
|
|
|
|
|
|
+ if (arbi != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isArbitrated"), arbi));
|
|
}
|
|
}
|
|
- if(arbi != null){
|
|
|
|
- predicates.add(builder.equal(root.get("isArbitrated"),arbi));
|
|
|
|
|
|
+ if (reject != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isRejected"), reject));
|
|
}
|
|
}
|
|
- if(reject != null){
|
|
|
|
- predicates.add(builder.equal(root.get("isRejected"),reject));
|
|
|
|
|
|
+ if (isSample != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isSample"), isSample));
|
|
}
|
|
}
|
|
- if(isSample != null){
|
|
|
|
- predicates.add(builder.equal(root.get("isSample"),isSample));
|
|
|
|
- }
|
|
|
|
- if(markedLogic != null){
|
|
|
|
- predicates.add(builder.equal(root.get("markedLogic"),markedLogic));
|
|
|
|
|
|
+ if (markedLogic != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("markedLogic"), markedLogic));
|
|
}
|
|
}
|
|
//空白卷不展示
|
|
//空白卷不展示
|
|
predicates.add(builder.equal(root.get("isMissing"), false));
|
|
predicates.add(builder.equal(root.get("isMissing"), false));
|
|
@@ -190,18 +195,50 @@ public class PaperApi {
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
- Page<Paper> papers = paperRepo.findAll(specification,pageable);
|
|
|
|
|
|
+ Page<Paper> papers = paperRepo.findAll(specification, pageable);
|
|
|
|
+ if (Objects.isNull(papers) || papers.getContent().size() == 0) {
|
|
|
|
+ if (Objects.nonNull(isSample) && isSample) {
|
|
|
|
+ ExamQuestion examQuestion = examQuestionRepo.findOne(questionId);
|
|
|
|
+ specification = (root, query, builder) -> {
|
|
|
|
+ List<Predicate> predicates = new ArrayList<>();
|
|
|
|
+ if (Objects.isNull(level)) {
|
|
|
|
+ predicates.add(builder.isNull(root.get("level")));
|
|
|
|
+ } else {
|
|
|
|
+ predicates.add(builder.equal(root.get("level"), level));
|
|
|
|
+ }
|
|
|
|
+ if (arbi != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isArbitrated"), arbi));
|
|
|
|
+ }
|
|
|
|
+ if (reject != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isRejected"), reject));
|
|
|
|
+ }
|
|
|
|
+ if (isSample != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("isSample"), isSample));
|
|
|
|
+ }
|
|
|
|
+ if (markedLogic != null) {
|
|
|
|
+ predicates.add(builder.equal(root.get("markedLogic"), markedLogic));
|
|
|
|
+ }
|
|
|
|
+ //空白卷不展示
|
|
|
|
+ predicates.add(builder.equal(root.get("isMissing"), false));
|
|
|
|
+ predicates.add(builder.equal(root.get("subject"), examQuestion.getSubject()));
|
|
|
|
+ predicates.add(builder.equal(root.get("test"), TrialEnum.START_TRIAL.getId()));
|
|
|
|
+ return builder.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
|
+ };
|
|
|
|
+ papers = paperRepo.findAll(specification, pageable);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
List<PaperDTO> paperDTOs = new ArrayList<>();
|
|
List<PaperDTO> paperDTOs = new ArrayList<>();
|
|
papers.forEach(p -> {
|
|
papers.forEach(p -> {
|
|
paperDTOs.add(paperAssembler.toDTO(p));
|
|
paperDTOs.add(paperAssembler.toDTO(p));
|
|
});
|
|
});
|
|
- return new PageableDTO(paperDTOs,papers.getTotalElements(),papers.getTotalPages(),pageable.getPageNumber());
|
|
|
|
|
|
+ return new PageableDTO(paperDTOs, papers.getTotalElements(), papers.getTotalPages(), pageable.getPageNumber());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 试卷处理。提交评卷
|
|
* 试卷处理。提交评卷
|
|
|
|
+ *
|
|
* @param paper 试卷id
|
|
* @param paper 试卷id
|
|
- * @param body 试卷信息
|
|
|
|
|
|
+ * @param body 试卷信息
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@RequestMapping(value = "{paper}", method = RequestMethod.PATCH)
|
|
@RequestMapping(value = "{paper}", method = RequestMethod.PATCH)
|
|
@@ -214,9 +251,9 @@ public class PaperApi {
|
|
String ranges = body.get("range");
|
|
String ranges = body.get("range");
|
|
if (action != null && level != null) {
|
|
if (action != null && level != null) {
|
|
if (action.equals("leveling")) {
|
|
if (action.equals("leveling")) {
|
|
- markingService.levelMarkPaper(paper, level,false);
|
|
|
|
|
|
+ markingService.levelMarkPaper(paper, level, false);
|
|
} else if (action.equals("sampling")) {
|
|
} else if (action.equals("sampling")) {
|
|
- markingService.levelMarkPaper(paper, level,true);
|
|
|
|
|
|
+ markingService.levelMarkPaper(paper, level, true);
|
|
} else if (action.equals("reject")) {
|
|
} else if (action.equals("reject")) {
|
|
markingService.reject(paper, level, ranges);
|
|
markingService.reject(paper, level, ranges);
|
|
}
|
|
}
|
|
@@ -231,6 +268,7 @@ public class PaperApi {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 标记试卷
|
|
* 标记试卷
|
|
|
|
+ *
|
|
* @param paper 试卷id
|
|
* @param paper 试卷id
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@@ -245,8 +283,9 @@ public class PaperApi {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 该试卷的评卷记录
|
|
* 该试卷的评卷记录
|
|
|
|
+ *
|
|
* @param paperId 试卷id
|
|
* @param paperId 试卷id
|
|
- * @param stage 评卷阶段
|
|
|
|
|
|
+ * @param stage 评卷阶段
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@RequestMapping(value = "{paperId}/marktasks", method = RequestMethod.GET)
|
|
@RequestMapping(value = "{paperId}/marktasks", method = RequestMethod.GET)
|