package cn.seecoder.ojserver.service.impl; import cn.seecoder.codejudge.client.JudgeDTO; import cn.seecoder.codejudge.client.JudgeResult; import cn.seecoder.ojserver.asyncPost.MQConsumer; import cn.seecoder.ojserver.dao.entity.Problem; import cn.seecoder.ojserver.dao.entity.TestCase; import cn.seecoder.ojserver.exception.ThirdPartyServiceException; import cn.seecoder.ojserver.manager.JudgeManager; import cn.seecoder.ojserver.manager.QuestionManager; import cn.seecoder.ojserver.model.vo.CodeJudgeVO; import cn.seecoder.ojserver.service.JudgeService; import cn.seecoder.ojserver.utils.PostHelper; import com.alibaba.fastjson.JSONObject; import com.nju.edu.paasMonitorClient.MonitorClient; import com.nju.edu.paasMonitorClient.entity.Call; import com.nju.edu.paasMonitorCommon.enums.SeecSystem; import okhttp3.*; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSON; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service public class JudgeServiceImpl implements JudgeService { private final QuestionManager questionManager; private final JudgeManager judgeManager; public JudgeServiceImpl(QuestionManager questionManager, JudgeManager judgeManager) { this.questionManager = questionManager; this.judgeManager = judgeManager; } @Override public JudgeResult judgeCode(Integer questionId, CodeJudgeVO codeJudgeVO) { try { Call call = MonitorClient.createCall(SeecSystem.CODER,"ojtest119","buildJudge"); call.start(); JudgeDTO judgeDTO = new JudgeDTO(); judgeDTO.setCode(codeJudgeVO.getCode()); judgeDTO.setLanguage(codeJudgeVO.getLanguage()); Problem problem = questionManager.getProblemById(questionId).get(); List testCaseList = questionManager.getTestCaseByProblemId(questionId); judgeDTO.setMemoryLimit(problem.getMemoryLimit()); judgeDTO.setTimeLimit(problem.getTimeLimit()); List inputList = testCaseList.stream().map(TestCase::getInput).collect(Collectors.toList()); List outputList = testCaseList.stream().map(TestCase::getOutput).collect(Collectors.toList()); judgeDTO.setInputList(inputList); judgeDTO.setOutputList(outputList); call.end(); return judgeManager.judgeCodeQuestionAnswers(judgeDTO); } catch (ThirdPartyServiceException exception) { throw exception; } } }