BatchScoreTest.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import cn.com.qmth.stmms.ms.Application;
  2. import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
  3. import cn.com.qmth.stmms.ms.core.domain.Level;
  4. import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
  5. import cn.com.qmth.stmms.ms.core.domain.Paper;
  6. import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
  7. import cn.com.qmth.stmms.ms.core.repository.*;
  8. import cn.com.qmth.stmms.ms.core.vo.Subject;
  9. import org.junit.Test;
  10. import org.junit.runner.RunWith;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.boot.test.context.SpringBootTest;
  15. import org.springframework.test.context.junit4.SpringRunner;
  16. import org.springframework.util.CollectionUtils;
  17. import org.springframework.util.StringUtils;
  18. import java.util.ArrayList;
  19. import java.util.Arrays;
  20. import java.util.List;
  21. import java.util.Objects;
  22. import java.util.stream.Collectors;
  23. @RunWith(SpringRunner.class)
  24. @SpringBootTest(classes = {Application.class})
  25. // 指定启动类
  26. public class BatchScoreTest {
  27. private static final Logger logger = LoggerFactory.getLogger(BatchScoreTest.class);
  28. @Autowired
  29. private ExamQuestionRepo examQuestionRepo;
  30. @Autowired
  31. private StudentRepo studentRepo;
  32. @Autowired
  33. private PaperRepo paperRepo;
  34. @Autowired
  35. private WorkRepo workRepo;
  36. @Autowired
  37. private MarkSubjectRepo markSubjectRepo;
  38. @Autowired
  39. private MarkUserRepo markUserRepo;
  40. @Autowired
  41. private MarkTaskRepo markTaskRepo;
  42. @Autowired
  43. private LevelRepo levelRepo;
  44. @Autowired
  45. RandomUtil randomUtil;
  46. // 工作id
  47. private static Long WORK_ID = 1L;
  48. // 生成科目
  49. private List<Subject> subjects = Arrays.asList(Subject.SC);
  50. /**
  51. * 批量打分
  52. *
  53. * @throws Exception
  54. */
  55. @Test
  56. public void level() {
  57. List<Level> levels = levelRepo.findByWorkIdOrderByCode(WORK_ID);
  58. doScore(levels);
  59. }
  60. private void doScore(List<Level> levels) {
  61. if (CollectionUtils.isEmpty(levels)) {
  62. throw new RuntimeException("档位值不存在");
  63. }
  64. for (Subject subject : subjects) {
  65. List<Paper> list = new ArrayList<>();
  66. List<MarkTask> listTask = new ArrayList<>();
  67. MarkSubject markSubject = markSubjectRepo.findOne(WORK_ID + "-" + subject.name());
  68. List<Paper> papers = paperRepo.findByWorkIdAndSubject(WORK_ID, subject);
  69. papers = papers.stream().filter(m -> Objects.nonNull(m.getScoreBatchNo()) && StringUtils.isEmpty(m.getScore())).collect(Collectors.toList());
  70. for (Paper paper : papers) {
  71. Double score = calcScore(levels, paper);
  72. paper.setScore(score);
  73. list.add(paper);
  74. List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), markSubject.getStage());
  75. for (MarkTask markTask : markTasks) {
  76. markTask.setResult(score.toString());
  77. listTask.add(markTask);
  78. }
  79. }
  80. List<Paper> data1 = new ArrayList<>();
  81. for (Paper p : list) {
  82. if (data1.size() == 2000) {
  83. paperRepo.save(data1);
  84. data1.clear();
  85. }
  86. data1.add(p);
  87. }
  88. //将剩下的数据也导入
  89. if (!data1.isEmpty()) {
  90. paperRepo.save(data1);
  91. }
  92. List<MarkTask> data2 = new ArrayList<>();
  93. for (MarkTask p : listTask) {
  94. if (data2.size() == 2000) {
  95. markTaskRepo.save(data2);
  96. data2.clear();
  97. }
  98. data2.add(p);
  99. }
  100. //将剩下的数据也导入
  101. if (!data2.isEmpty()) {
  102. markTaskRepo.save(data2);
  103. }
  104. }
  105. }
  106. private Double calcScore(List<Level> levels, Paper paper) {
  107. Level level = levels.stream().filter(m -> m.getCode().equals(paper.getLevel())).findFirst().orElseGet(null);
  108. Double score = 0D;
  109. if (level != null) {
  110. int random = getRandom(level.getMaxScore().intValue() - level.getMinScore().intValue());
  111. int scoreTemp = level.getMinScore().intValue() + random;
  112. if(scoreTemp - level.getMaxScore().intValue() > 0){
  113. scoreTemp = level.getMaxScore().intValue();
  114. }
  115. score = Double.valueOf(scoreTemp);
  116. }
  117. return score;
  118. }
  119. private int getRandom(int size) {
  120. return (int) (Math.random() * size);
  121. }
  122. }