CoderSchedule.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package cn.seecoder.data.server.schedule;
  2. import cn.seecoder.data.server.domain.CoderDao;
  3. import cn.seecoder.data.server.dto.coder.CoderDto;
  4. import cn.seecoder.data.server.dto.coder.Response;
  5. import cn.seecoder.data.server.repository.CoderRepository;
  6. import cn.seecoder.data.server.service.ExtractionLogService;
  7. import cn.seecoder.data.server.utils.aspects.dataExtraction.DataExtractor;
  8. import cn.seecoder.data.server.utils.enums.ErrorCodeEnum;
  9. import cn.seecoder.data.server.utils.exception.GlobalException;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.beans.factory.annotation.Value;
  12. import org.springframework.core.ParameterizedTypeReference;
  13. import org.springframework.http.HttpMethod;
  14. import org.springframework.http.ResponseEntity;
  15. import org.springframework.stereotype.Component;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.web.client.RestTemplate;
  18. import java.time.LocalDateTime;
  19. import java.util.HashMap;
  20. import java.util.LinkedList;
  21. import java.util.List;
  22. import java.util.Map;
  23. @Component
  24. public class CoderSchedule {
  25. @Value("${remoteUrls.coder}")
  26. private String coderBaseUrl;
  27. @Autowired
  28. private ExtractionLogService extractionLogService;
  29. @Autowired
  30. private CoderRepository coderRepository;
  31. @Autowired
  32. private RestTemplate restTemplate;
  33. private final String source1 = "coder1";
  34. // @Scheduled(cron = "00 00 00 * * ?")
  35. @DataExtractor(source1)
  36. @Transactional(rollbackFor = Exception.class)
  37. public void coderDataExtraction() throws Exception {
  38. LocalDateTime start = extractionLogService.getExtractionStartTime(source1,1);
  39. LocalDateTime middle = extractionLogService.getExtractionStartTime(source1);
  40. LocalDateTime end = extractionLogService.getExtractionEndTime(source1);
  41. Map<String,String> param1 = new HashMap<>();
  42. param1.put("startTime",start.toString());
  43. param1.put("endTime",middle.toString());
  44. System.out.println(param1);
  45. Map<String,String> param2 = new HashMap<>();
  46. param2.put("startTime",middle.toString());
  47. param2.put("endTime",end.toString());
  48. System.out.println(param2);
  49. String coderApi1 = "/xxx?startTime={startTime}&endTime={endTime}";
  50. String url = coderBaseUrl + coderApi1;
  51. ParameterizedTypeReference<Response<List<CoderDto>>> responseType = new ParameterizedTypeReference<Response<List<CoderDto>>>() {};
  52. //再pull一次上次pull的时间段的数据,将一些遗漏的数据存入数据库
  53. List<CoderDto> source = getCoderApi1Data(url,param1,responseType);
  54. source.forEach(data -> {
  55. CoderDao coderDao = coderRepository.findCoderDaoByRecordIdAndSubmitAt(data.getRecordId(),data.getSubmitAt());
  56. if (coderDao == null) {
  57. coderRepository.save(coderDtoAndDaoMapper(data));
  58. }
  59. });
  60. //pull本次的数据
  61. List<CoderDto> source2 = getCoderApi1Data(url,param2,responseType);
  62. source2.forEach(data -> {
  63. coderRepository.save(coderDtoAndDaoMapper(data));
  64. });
  65. }
  66. private List<CoderDto> getCoderApi1Data(String url1,Map<String,String> params,ParameterizedTypeReference<Response<List<CoderDto>>> responseType) throws Exception {
  67. ResponseEntity<Response<List<CoderDto>>> r = restTemplate.exchange(url1, HttpMethod.GET,null,responseType,params );
  68. Response<List<CoderDto>> body = r.getBody();
  69. if (body == null || body.getCode()!=200) throw new GlobalException(ErrorCodeEnum.SERVICE_ERROR_C0002);
  70. List<CoderDto> source = body.getSource();
  71. if(source == null || source.size()==0) throw new GlobalException(ErrorCodeEnum.SERVICE_ERROR_C0003);
  72. return source;
  73. }
  74. private CoderDao coderDtoAndDaoMapper(CoderDto data) {
  75. return CoderDao.builder()
  76. .commitId(data.getCommitId())
  77. .examId(data.getExamId())
  78. .endAt(data.getEndAt())
  79. .lastCommitAt(data.getLastCommitAt())
  80. .problemId(data.getProblemId())
  81. .recordId(data.getRecordId())
  82. .score(data.getScore())
  83. .userId(data.getUserId())
  84. .submitAt(data.getSubmitAt())
  85. .startAt(data.getStartAt())
  86. .id(null).createdAt(null).updatedAt(null)
  87. .build();
  88. }
  89. }