JudgeServiceImpl.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package cn.seecoder.ojserver.service.impl;
  2. import cn.seecoder.codejudge.client.JudgeDTO;
  3. import cn.seecoder.codejudge.client.JudgeResult;
  4. import cn.seecoder.ojserver.asyncPost.MQConsumer;
  5. import cn.seecoder.ojserver.dao.entity.Problem;
  6. import cn.seecoder.ojserver.dao.entity.TestCase;
  7. import cn.seecoder.ojserver.exception.ThirdPartyServiceException;
  8. import cn.seecoder.ojserver.manager.JudgeManager;
  9. import cn.seecoder.ojserver.manager.QuestionManager;
  10. import cn.seecoder.ojserver.model.vo.CodeJudgeVO;
  11. import cn.seecoder.ojserver.service.JudgeService;
  12. import cn.seecoder.ojserver.utils.PostHelper;
  13. import com.alibaba.fastjson.JSONObject;
  14. import com.nju.edu.paasMonitorClient.MonitorClient;
  15. import com.nju.edu.paasMonitorClient.entity.Call;
  16. import com.nju.edu.paasMonitorCommon.enums.SeecSystem;
  17. import okhttp3.*;
  18. import org.springframework.stereotype.Service;
  19. import com.alibaba.fastjson.JSON;
  20. import java.io.IOException;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.concurrent.TimeUnit;
  24. import java.util.stream.Collectors;
  25. @Service
  26. public class JudgeServiceImpl implements JudgeService {
  27. private final QuestionManager questionManager;
  28. private final JudgeManager judgeManager;
  29. public JudgeServiceImpl(QuestionManager questionManager, JudgeManager judgeManager) {
  30. this.questionManager = questionManager;
  31. this.judgeManager = judgeManager;
  32. }
  33. @Override
  34. public JudgeResult judgeCode(Integer questionId, CodeJudgeVO codeJudgeVO) {
  35. try {
  36. Call call = MonitorClient.createCall(SeecSystem.CODER,"ojtest119","buildJudge");
  37. call.start();
  38. JudgeDTO judgeDTO = new JudgeDTO();
  39. judgeDTO.setCode(codeJudgeVO.getCode());
  40. judgeDTO.setLanguage(codeJudgeVO.getLanguage());
  41. Problem problem = questionManager.getProblemById(questionId).get();
  42. List<TestCase> testCaseList = questionManager.getTestCaseByProblemId(questionId);
  43. judgeDTO.setMemoryLimit(problem.getMemoryLimit());
  44. judgeDTO.setTimeLimit(problem.getTimeLimit());
  45. List<String> inputList = testCaseList.stream().map(TestCase::getInput).collect(Collectors.toList());
  46. List<String> outputList = testCaseList.stream().map(TestCase::getOutput).collect(Collectors.toList());
  47. judgeDTO.setInputList(inputList);
  48. judgeDTO.setOutputList(outputList);
  49. call.end();
  50. return judgeManager.judgeCodeQuestionAnswers(judgeDTO);
  51. } catch (ThirdPartyServiceException exception) {
  52. throw exception;
  53. }
  54. }
  55. }