| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package cn.seecoder.data.server.schedule;
- import cn.seecoder.data.server.domain.CoderDao;
- import cn.seecoder.data.server.dto.coder.CoderDto;
- import cn.seecoder.data.server.dto.coder.Response;
- import cn.seecoder.data.server.repository.CoderRepository;
- import cn.seecoder.data.server.service.ExtractionLogService;
- import cn.seecoder.data.server.utils.aspects.dataExtraction.DataExtractor;
- import cn.seecoder.data.server.utils.enums.ErrorCodeEnum;
- import cn.seecoder.data.server.utils.exception.GlobalException;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.core.ParameterizedTypeReference;
- import org.springframework.http.HttpMethod;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Component;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.client.RestTemplate;
- import java.time.LocalDateTime;
- import java.util.HashMap;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Map;
- @Component
- public class CoderSchedule {
- @Value("${remoteUrls.coder}")
- private String coderBaseUrl;
- @Autowired
- private ExtractionLogService extractionLogService;
- @Autowired
- private CoderRepository coderRepository;
- @Autowired
- private RestTemplate restTemplate;
- private final String source1 = "coder1";
- // @Scheduled(cron = "00 00 00 * * ?")
- @DataExtractor(source1)
- @Transactional(rollbackFor = Exception.class)
- public void coderDataExtraction() throws Exception {
- LocalDateTime start = extractionLogService.getExtractionStartTime(source1,1);
- LocalDateTime middle = extractionLogService.getExtractionStartTime(source1);
- LocalDateTime end = extractionLogService.getExtractionEndTime(source1);
- Map<String,String> param1 = new HashMap<>();
- param1.put("startTime",start.toString());
- param1.put("endTime",middle.toString());
- System.out.println(param1);
- Map<String,String> param2 = new HashMap<>();
- param2.put("startTime",middle.toString());
- param2.put("endTime",end.toString());
- System.out.println(param2);
- String coderApi1 = "/xxx?startTime={startTime}&endTime={endTime}";
- String url = coderBaseUrl + coderApi1;
- ParameterizedTypeReference<Response<List<CoderDto>>> responseType = new ParameterizedTypeReference<Response<List<CoderDto>>>() {};
- //再pull一次上次pull的时间段的数据,将一些遗漏的数据存入数据库
- List<CoderDto> source = getCoderApi1Data(url,param1,responseType);
- source.forEach(data -> {
- CoderDao coderDao = coderRepository.findCoderDaoByRecordIdAndSubmitAt(data.getRecordId(),data.getSubmitAt());
- if (coderDao == null) {
- coderRepository.save(coderDtoAndDaoMapper(data));
- }
- });
- //pull本次的数据
- List<CoderDto> source2 = getCoderApi1Data(url,param2,responseType);
- source2.forEach(data -> {
- coderRepository.save(coderDtoAndDaoMapper(data));
- });
- }
- private List<CoderDto> getCoderApi1Data(String url1,Map<String,String> params,ParameterizedTypeReference<Response<List<CoderDto>>> responseType) throws Exception {
- ResponseEntity<Response<List<CoderDto>>> r = restTemplate.exchange(url1, HttpMethod.GET,null,responseType,params );
- Response<List<CoderDto>> body = r.getBody();
- if (body == null || body.getCode()!=200) throw new GlobalException(ErrorCodeEnum.SERVICE_ERROR_C0002);
- List<CoderDto> source = body.getSource();
- if(source == null || source.size()==0) throw new GlobalException(ErrorCodeEnum.SERVICE_ERROR_C0003);
- return source;
- }
- private CoderDao coderDtoAndDaoMapper(CoderDto data) {
- return CoderDao.builder()
- .commitId(data.getCommitId())
- .examId(data.getExamId())
- .endAt(data.getEndAt())
- .lastCommitAt(data.getLastCommitAt())
- .problemId(data.getProblemId())
- .recordId(data.getRecordId())
- .score(data.getScore())
- .userId(data.getUserId())
- .submitAt(data.getSubmitAt())
- .startAt(data.getStartAt())
- .id(null).createdAt(null).updatedAt(null)
- .build();
- }
- }
|