ClosedExamChecker.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package com.moekr.moocoder.logic.service.impl;
  2. import com.moekr.moocoder.data.dao.ExamDAO;
  3. import com.moekr.moocoder.data.dao.ResultDAO;
  4. import com.moekr.moocoder.data.entity.Exam;
  5. import com.moekr.moocoder.data.entity.Result;
  6. import com.moekr.moocoder.logic.api.GitlabApi;
  7. import com.moekr.moocoder.logic.api.JenkinsApi;
  8. import com.moekr.moocoder.util.ToolKit;
  9. import com.moekr.moocoder.util.enums.ExamStatus;
  10. import lombok.extern.apachecommons.CommonsLog;
  11. import org.springframework.stereotype.Component;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import java.time.LocalDateTime;
  14. import java.util.List;
  15. import java.util.stream.Collectors;
  16. @Component
  17. @CommonsLog
  18. public class ClosedExamChecker {
  19. private final ExamDAO examDAO;
  20. private final ResultDAO resultDAO;
  21. private final GitlabApi gitlabApi;
  22. private final JenkinsApi jenkinsApi;
  23. public ClosedExamChecker(ExamDAO examDAO, ResultDAO resultDAO, GitlabApi gitlabApi, JenkinsApi jenkinsApi) {
  24. this.examDAO = examDAO;
  25. this.resultDAO = resultDAO;
  26. this.gitlabApi = gitlabApi;
  27. this.jenkinsApi = jenkinsApi;
  28. }
  29. @Transactional
  30. public void check() {
  31. List<Exam> examList = examDAO.findAllByStatus(ExamStatus.AVAILABLE);
  32. // XXX 等待30分钟所有提交均完成测试
  33. LocalDateTime now = LocalDateTime.now().minusMinutes(30);
  34. examList = examList.stream()
  35. .filter(e -> e.getEndAt().isBefore(now))
  36. .peek(e -> e.setStatus(ExamStatus.CLOSED))
  37. .collect(Collectors.toList());
  38. examList = examDAO.saveAll(examList);
  39. for (Exam exam : examList) {
  40. for (Result result : exam.getResults()) {
  41. try {
  42. gitlabApi.archiveProject(result.getId());
  43. jenkinsApi.deleteJob(result.getId());
  44. result.setDeleted(true);
  45. } catch (Exception e) {
  46. log.error("归档试卷" + result.getId() + "时发生异常" + ToolKit.format(e));
  47. }
  48. }
  49. resultDAO.saveAll(exam.getResults());
  50. }
  51. }
  52. }