|
|
@@ -1,26 +1,49 @@
|
|
|
package cn.seecoder.data.server.schedule;
|
|
|
|
|
|
|
|
|
+import cn.seecoder.data.server.domain.DevcloudCommitDao;
|
|
|
import cn.seecoder.data.server.domain.GeneralRecordDao;
|
|
|
import cn.seecoder.data.server.domain.helper.HelperEventDao;
|
|
|
import cn.seecoder.data.server.domain.helper.HelperQuizDao;
|
|
|
+import cn.seecoder.data.server.dto.coder.Response;
|
|
|
+import cn.seecoder.data.server.dto.devcloud.DevcloudCommitDto;
|
|
|
+import cn.seecoder.data.server.dto.helper.HelperEventDto;
|
|
|
+import cn.seecoder.data.server.dto.helper.HelperQuizDto;
|
|
|
import cn.seecoder.data.server.repository.GeneralRecordRepository;
|
|
|
import cn.seecoder.data.server.repository.helper.HelperEventRepository;
|
|
|
import cn.seecoder.data.server.repository.helper.HelperQuizRepository;
|
|
|
+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 com.alibaba.fastjson.JSONObject;
|
|
|
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.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Component
|
|
|
public class HelperSchedule {
|
|
|
|
|
|
+ @Value("${sys.helper.url}")
|
|
|
+ private String helperBaseUrl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExtractionLogService extractionLogService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private GeneralRecordRepository generalRecordRepository;
|
|
|
|
|
|
@@ -30,74 +53,111 @@ public class HelperSchedule {
|
|
|
@Autowired
|
|
|
private HelperEventRepository helperEventRepository;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private RestTemplate restTemplate;
|
|
|
+
|
|
|
+ private final String source = "helper";
|
|
|
+
|
|
|
public HelperSchedule(GeneralRecordRepository generalRecordRepository,HelperQuizRepository helperQuizRepository,HelperEventRepository helperEventRepository){
|
|
|
this.generalRecordRepository = generalRecordRepository;
|
|
|
this.helperQuizRepository = helperQuizRepository;
|
|
|
this.helperEventRepository = helperEventRepository;
|
|
|
}
|
|
|
|
|
|
-// @Scheduled(cron = "0 0 2 * * ?")
|
|
|
+ // @Scheduled(cron = "0 0 2 * * ?")
|
|
|
+ @DataExtractor(source)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void helperQuizExtraction(){
|
|
|
- RestTemplate restTemplate = new RestTemplate();
|
|
|
- JSONArray temp;
|
|
|
- try{
|
|
|
- temp = restTemplate.getForObject(
|
|
|
- "http://localhost:8080/api/quiz/quiz-records/all?start={1}&end={2}",
|
|
|
- JSONArray.class,
|
|
|
- "2020-06-01 00:00:00",
|
|
|
- "2021-04-27 00:00:00"
|
|
|
- );
|
|
|
- for(int i=0;i<temp.size();i++){
|
|
|
- JSONObject quiz_record = temp.getJSONObject(i);
|
|
|
- for (Map.Entry entry : quiz_record.getJSONObject("answers").entrySet()) {
|
|
|
- GeneralRecordDao generalRecordDao = new GeneralRecordDao();
|
|
|
- HelperQuizDao helperQuizDao = new HelperQuizDao();
|
|
|
- generalRecordDao.setUserId(Integer.parseInt(quiz_record.getString("studentId")));
|
|
|
- generalRecordDao.setQuestionId(entry.getKey().toString());
|
|
|
- generalRecordDao.setAnswer(((JSONObject)JSONObject.toJSON(entry.getValue())).getString("answer"));
|
|
|
- generalRecordDao.setDataSource("helper");
|
|
|
- generalRecordDao.setScoreTotal(5);
|
|
|
- getTime(generalRecordDao,Integer.parseInt(quiz_record.getString("quizId")),restTemplate,quiz_record.getString("submitAt"));
|
|
|
- if(((JSONObject)JSONObject.toJSON(entry.getValue())).getBooleanValue("correct")) {
|
|
|
- generalRecordDao.setPass(1);
|
|
|
- generalRecordDao.setScore(5);
|
|
|
- }
|
|
|
- else{
|
|
|
- generalRecordDao.setPass(0);
|
|
|
- generalRecordDao.setScore(0);
|
|
|
- }
|
|
|
- GeneralRecordDao ans = generalRecordRepository.save(generalRecordDao);
|
|
|
- helperQuizDao.setQuizId(Integer.parseInt(quiz_record.getString("quizId")));
|
|
|
- helperQuizDao.setQuizName(quiz_record.getString("quizName"));
|
|
|
- helperQuizDao.setGeneralId(ans.getId());
|
|
|
- helperQuizDao.setSubmitNumber(quiz_record.getInteger("submitNumber"));
|
|
|
- helperQuizRepository.save(helperQuizDao);
|
|
|
- System.out.println(generalRecordDao);
|
|
|
- System.out.println(helperQuizDao);
|
|
|
- }
|
|
|
+ LocalDateTime start = extractionLogService.getExtractionStartTime(source);
|
|
|
+ LocalDateTime end = extractionLogService.getExtractionEndTime(source);
|
|
|
+ String helperQuizApi = "api/quiz/quiz_records/all";
|
|
|
+ String url = helperBaseUrl + helperQuizApi;
|
|
|
|
|
|
+ Map<String,String> params = buildParam(start,end);
|
|
|
+ ParameterizedTypeReference<Response<List<HelperQuizDto>>> responseType = new ParameterizedTypeReference<Response<List<HelperQuizDto>>>() {};
|
|
|
+
|
|
|
+
|
|
|
+ //List<HelperQuizDto> helperQuizDtos = getHelperEventData(url,params,responseType).stream().collect(Collectors.toList());
|
|
|
+
|
|
|
+ JSONArray temp = restTemplate.getForObject(
|
|
|
+ "http://localhost:8080/api/quiz/quiz-records/all?start={1}&end={2}",
|
|
|
+ JSONArray.class,
|
|
|
+ start,
|
|
|
+ end
|
|
|
+ );
|
|
|
+ for(int i=0;i<temp.size();i++){
|
|
|
+ JSONObject quiz_record = temp.getJSONObject(i);
|
|
|
+ for (Map.Entry entry : quiz_record.getJSONObject("answers").entrySet()) {
|
|
|
+ GeneralRecordDao generalRecordDao = new GeneralRecordDao();
|
|
|
+ HelperQuizDao helperQuizDao = new HelperQuizDao();
|
|
|
+ generalRecordDao.setUserId(Integer.parseInt(quiz_record.getString("studentId")));
|
|
|
+ generalRecordDao.setQuestionId(entry.getKey().toString());
|
|
|
+ generalRecordDao.setAnswer(((JSONObject)JSONObject.toJSON(entry.getValue())).getString("answer"));
|
|
|
+ generalRecordDao.setDataSource("helper");
|
|
|
+ generalRecordDao.setScoreTotal(5);
|
|
|
+ getTime(generalRecordDao,Integer.parseInt(quiz_record.getString("quizId")),restTemplate,quiz_record.getString("submitAt"));
|
|
|
+ if(((JSONObject)JSONObject.toJSON(entry.getValue())).getBooleanValue("correct")) {
|
|
|
+ generalRecordDao.setPass(1);
|
|
|
+ generalRecordDao.setScore(5);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ generalRecordDao.setPass(0);
|
|
|
+ generalRecordDao.setScore(0);
|
|
|
+ }
|
|
|
+ GeneralRecordDao ans = generalRecordRepository.save(generalRecordDao);
|
|
|
+ helperQuizDao.setQuizId(Integer.parseInt(quiz_record.getString("quizId")));
|
|
|
+ helperQuizDao.setQuizName(quiz_record.getString("quizName"));
|
|
|
+ helperQuizDao.setGeneralId(ans.getId());
|
|
|
+ helperQuizDao.setSubmitNumber(quiz_record.getInteger("submitNumber"));
|
|
|
+ helperQuizRepository.save(helperQuizDao);
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
- System.out.println(e);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Scheduled(cron = "0 0 2 * * ?")
|
|
|
+ @DataExtractor(source)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void helperEventExtraction(){
|
|
|
- RestTemplate restTemplate = new RestTemplate();
|
|
|
- JSONArray jsonArray = restTemplate.getForObject(
|
|
|
- "http://localhost:8080/api/event/time?start={1}&end={2}",
|
|
|
- JSONArray.class,
|
|
|
- "2000-01-01 00:00:00",
|
|
|
- "2021-04-30 00:00:00"
|
|
|
- );
|
|
|
- for(int i=0;i<jsonArray.size();i++){
|
|
|
- HelperEventDao helperEventDao = jsonArray.getObject(i,HelperEventDao.class);
|
|
|
- helperEventRepository.save(helperEventDao);
|
|
|
- }
|
|
|
+ LocalDateTime start = extractionLogService.getExtractionStartTime(source);
|
|
|
+ LocalDateTime end = extractionLogService.getExtractionEndTime(source);
|
|
|
+ String helperEventApi = "api/event/time";
|
|
|
+ String url = helperBaseUrl + helperEventApi;
|
|
|
+ Map<String,String> params = buildParam(start,end);
|
|
|
+ ParameterizedTypeReference<Response<List<HelperEventDto>>> responseType =
|
|
|
+ new ParameterizedTypeReference<Response<List<HelperEventDto>>>() {};
|
|
|
+ List<HelperEventDao> helperEventDaos = getHelperEventData(url,params,responseType)
|
|
|
+ .stream().map(this::dtoToDaoMapper).collect(Collectors.toList());
|
|
|
+ helperEventRepository.saveAll(helperEventDaos);
|
|
|
+ }
|
|
|
+
|
|
|
+ private HelperEventDao dtoToDaoMapper(HelperEventDto helperEventDto) {
|
|
|
+ return HelperEventDao.builder()
|
|
|
+ .userId(helperEventDto.getUserId())
|
|
|
+ .type(helperEventDto.getType())
|
|
|
+ .action(helperEventDto.getAction())
|
|
|
+ .time(helperEventDto.getTime())
|
|
|
+ .action(helperEventDto.getAction())
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String,String> buildParam(LocalDateTime start,LocalDateTime end) {
|
|
|
+ Map<String,String> param = new HashMap<>();
|
|
|
+ param.put("start",start.toString());
|
|
|
+ param.put("end",end.toString());
|
|
|
+ return param;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<HelperEventDto> getHelperEventData(String url, Map<String,String> param, ParameterizedTypeReference<Response<List<HelperEventDto>>> responseType) {
|
|
|
+ ResponseEntity<Response<List<HelperEventDto>>> r = restTemplate.exchange(url, HttpMethod.GET,null,responseType,param );
|
|
|
+ Response<List<HelperEventDto>> body = r.getBody();
|
|
|
+ if (body == null || body.getCode()!=200) throw new GlobalException(ErrorCodeEnum.SERVICE_ERROR_C0002);
|
|
|
+ List<HelperEventDto> source = body.getSource();
|
|
|
+ if(source == null || source.size()==0) throw new GlobalException(ErrorCodeEnum.SERVICE_ERROR_C0003);
|
|
|
+ return source;
|
|
|
}
|
|
|
|
|
|
- public void getTime(GeneralRecordDao generalRecordDao, int quizId, RestTemplate restTemplate, String submit){
|
|
|
+ private void getTime(GeneralRecordDao generalRecordDao, int quizId, RestTemplate restTemplate, String submit){
|
|
|
try {
|
|
|
JSONObject quiz = restTemplate.getForObject("http://localhost:8080/api/quiz/{1}",JSONObject.class,quizId);
|
|
|
String start = quiz.getString("createAt").replace('T',' ').split("\\.")[0];
|