|
@@ -19,6 +19,7 @@ import org.springframework.http.ResponseEntity;
|
|
import org.springframework.ui.ModelMap;
|
|
import org.springframework.ui.ModelMap;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
+import java.math.BigInteger;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -47,37 +48,76 @@ public class ScoreApi {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询
|
|
* 查询
|
|
- * @param workId 评卷工作id
|
|
|
|
|
|
+ *
|
|
|
|
+ * @param workId 评卷工作id
|
|
* @param examNumber 准考证号
|
|
* @param examNumber 准考证号
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "search/byExamNumber",method = RequestMethod.GET)
|
|
|
|
|
|
+ @RequestMapping(value = "search/byExamNumber", method = RequestMethod.GET)
|
|
public ScoreCheckDTO getByExamNumber(@RequestParam Long workId,
|
|
public ScoreCheckDTO getByExamNumber(@RequestParam Long workId,
|
|
- @RequestParam String examNumber){
|
|
|
|
- Student student = studentRepo.findByWorkIdAndExamNumber(workId,examNumber);
|
|
|
|
- List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId,examNumber);
|
|
|
|
- return scoreAssembler.toDTO(student,papers);
|
|
|
|
|
|
+ @RequestParam String examNumber) {
|
|
|
|
+ Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
|
|
|
|
+ List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId, examNumber);
|
|
|
|
+ return scoreAssembler.toDTO(student, papers);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "search/byTotalScore", method = RequestMethod.GET)
|
|
|
|
+ public ResponseEntity getByTotalScore(@RequestParam final Long workId,
|
|
|
|
+ @RequestParam final Long totalScore) {
|
|
|
|
+// List<Object[]> paperList = paperRepo.findByTotalScore(workId);
|
|
|
|
+// List<String> examNumbers = paperList.stream().filter(p -> {
|
|
|
|
+// Double t = (Double) p[1];
|
|
|
|
+// return t.longValue() > totalScore;
|
|
|
|
+// }).map(p -> {
|
|
|
|
+// return (String) p[0];
|
|
|
|
+// }).collect(Collectors.toList());
|
|
|
|
+//
|
|
|
|
+// List<Paper> papers = paperRepo.findByWorkIdAndExamNumberIn(workId, examNumbers);
|
|
|
|
+// return papers.stream().map(paper -> {
|
|
|
|
+// String examNumber = paper.getExamNumber();
|
|
|
|
+// Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
|
|
|
|
+// return scoreAssembler.toDTO(student, papers);
|
|
|
|
+// }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ List<ScoreCheckDTO> scoreDTOs = new ArrayList<>();
|
|
|
|
+ List<Paper> papers = paperRepo.findByWorkId(workId);
|
|
|
|
+ Map<String, List<Paper>> group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
|
|
|
|
+ group.forEach((k, v) -> {
|
|
|
|
+ //long ct = v.stream().mapToDouble(Paper::getScore).filter(s -> s >= hs).count();
|
|
|
|
+ long studentTotalScore = 0;
|
|
|
|
+ for (Paper p : v) {
|
|
|
|
+ studentTotalScore += p.getScore();
|
|
|
|
+ }
|
|
|
|
+ if (v.size() == 3 && studentTotalScore >= totalScore) {
|
|
|
|
+
|
|
|
|
+ Student student = studentRepo.findByWorkIdAndExamNumber(workId, k);
|
|
|
|
+ scoreDTOs.add(scoreAssembler.toDTO(student, v));
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return ResponseEntity.ok(scoreDTOs);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询任务两科成绩高于hs,另外一颗低于ls
|
|
* 查询任务两科成绩高于hs,另外一颗低于ls
|
|
|
|
+ *
|
|
* @param workId 评卷工作id
|
|
* @param workId 评卷工作id
|
|
- * @param hs 高分
|
|
|
|
- * @param ls 低分
|
|
|
|
|
|
+ * @param hs 高分
|
|
|
|
+ * @param ls 低分
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "search/byRange",method = RequestMethod.GET)
|
|
|
|
|
|
+ @RequestMapping(value = "search/byRange", method = RequestMethod.GET)
|
|
public ResponseEntity getByScoreRange(@RequestParam Long workId,
|
|
public ResponseEntity getByScoreRange(@RequestParam Long workId,
|
|
@RequestParam Double hs,
|
|
@RequestParam Double hs,
|
|
- @RequestParam Double ls){
|
|
|
|
|
|
+ @RequestParam Double ls) {
|
|
List<ScoreCheckDTO> scoreDTOs = new ArrayList<>();
|
|
List<ScoreCheckDTO> scoreDTOs = new ArrayList<>();
|
|
- List<Paper> papers = paperRepo.findByScoreRange(hs,ls);
|
|
|
|
- Map<String,List<Paper>> group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
|
|
|
|
- group.forEach((k,v) -> {
|
|
|
|
|
|
+ List<Paper> papers = paperRepo.findByScoreRange(hs, ls);
|
|
|
|
+ Map<String, List<Paper>> group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
|
|
|
|
+ group.forEach((k, v) -> {
|
|
long ct = v.stream().mapToDouble(Paper::getScore).filter(s -> s >= hs).count();
|
|
long ct = v.stream().mapToDouble(Paper::getScore).filter(s -> s >= hs).count();
|
|
- if(v.size() == 3 && ct == 2) {
|
|
|
|
|
|
+ if (v.size() == 3 && ct == 2) {
|
|
Student student = studentRepo.findByWorkIdAndExamNumber(workId, k);
|
|
Student student = studentRepo.findByWorkIdAndExamNumber(workId, k);
|
|
- scoreDTOs.add(scoreAssembler.toDTO(student,v));
|
|
|
|
|
|
+ scoreDTOs.add(scoreAssembler.toDTO(student, v));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
return ResponseEntity.ok(scoreDTOs);
|
|
return ResponseEntity.ok(scoreDTOs);
|
|
@@ -85,35 +125,36 @@ public class ScoreApi {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 更新分数
|
|
* 更新分数
|
|
|
|
+ *
|
|
* @param paperId 试卷id
|
|
* @param paperId 试卷id
|
|
- * @param body 分数
|
|
|
|
|
|
+ * @param body 分数
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- @RequestMapping(value = "update/{paperId}",method = RequestMethod.PUT)
|
|
|
|
- public ResponseEntity updateScore(@PathVariable Long paperId, @RequestBody ModelMap body){
|
|
|
|
|
|
+ @RequestMapping(value = "update/{paperId}", method = RequestMethod.PUT)
|
|
|
|
+ public ResponseEntity updateScore(@PathVariable Long paperId, @RequestBody ModelMap body) {
|
|
Paper paper = paperRepo.findOne(paperId);
|
|
Paper paper = paperRepo.findOne(paperId);
|
|
- if(paper == null || body.get("score") == null){
|
|
|
|
|
|
+ if (paper == null || body.get("score") == null) {
|
|
return new ResponseEntity(HttpStatus.OK);
|
|
return new ResponseEntity(HttpStatus.OK);
|
|
}
|
|
}
|
|
Double score = Double.valueOf(body.get("score").toString());
|
|
Double score = Double.valueOf(body.get("score").toString());
|
|
- if(score >= 0 && score <= 100){
|
|
|
|
|
|
+ if (score >= 0 && score <= 100) {
|
|
paper.setScore(score);
|
|
paper.setScore(score);
|
|
paperRepo.save(paper);
|
|
paperRepo.save(paper);
|
|
}
|
|
}
|
|
return new ResponseEntity(HttpStatus.OK);
|
|
return new ResponseEntity(HttpStatus.OK);
|
|
}
|
|
}
|
|
|
|
|
|
- @RequestMapping(value = "merge/{subject}",method = RequestMethod.GET)
|
|
|
|
- public ResponseEntity merge(@PathVariable Subject subject){
|
|
|
|
|
|
+ @RequestMapping(value = "merge/{subject}", method = RequestMethod.GET)
|
|
|
|
+ public ResponseEntity merge(@PathVariable Subject subject) {
|
|
Work activedWork = workRepo.findByActiveTrue();
|
|
Work activedWork = workRepo.findByActiveTrue();
|
|
- List<Paper> papers = paperRepo.findByWorkIdAndSubject(activedWork.getId(),subject);
|
|
|
|
|
|
+ List<Paper> papers = paperRepo.findByWorkIdAndSubject(activedWork.getId(), subject);
|
|
Iterator<Paper> paperIterator = papers.iterator();
|
|
Iterator<Paper> paperIterator = papers.iterator();
|
|
long count = 0;
|
|
long count = 0;
|
|
- while (paperIterator.hasNext()){
|
|
|
|
|
|
+ while (paperIterator.hasNext()) {
|
|
Paper paper = paperIterator.next();
|
|
Paper paper = paperIterator.next();
|
|
- List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(),MarkStage.SCORE);
|
|
|
|
|
|
+ List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.SCORE);
|
|
long leftCount = markTasks.stream().filter(i -> i.getResult() == null).count();
|
|
long leftCount = markTasks.stream().filter(i -> i.getResult() == null).count();
|
|
- if(leftCount == 0){
|
|
|
|
|
|
+ if (leftCount == 0) {
|
|
OptionalDouble finalScore = markTasks.stream().map(m -> m.getResult())
|
|
OptionalDouble finalScore = markTasks.stream().map(m -> m.getResult())
|
|
.mapToInt(Integer::valueOf).average();
|
|
.mapToInt(Integer::valueOf).average();
|
|
double fs = Math.round(finalScore.orElse(0));
|
|
double fs = Math.round(finalScore.orElse(0));
|
|
@@ -121,8 +162,8 @@ public class ScoreApi {
|
|
paperRepo.save(paper);
|
|
paperRepo.save(paper);
|
|
count++;
|
|
count++;
|
|
}
|
|
}
|
|
- if(count%500 == 0){
|
|
|
|
- System.out.println(subject.toString() + ":" +count);
|
|
|
|
|
|
+ if (count % 500 == 0) {
|
|
|
|
+ System.out.println(subject.toString() + ":" + count);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ResponseEntity.ok(null);
|
|
return ResponseEntity.ok(null);
|