|
@@ -2,14 +2,15 @@ package cn.iselab.mooctest.site.web.logic.impl;
|
|
|
|
|
|
import cn.iselab.mooctest.site.common.constant.Constants;
|
|
import cn.iselab.mooctest.site.common.constant.Constants;
|
|
import cn.iselab.mooctest.site.common.enums.OnlineJudgeMode;
|
|
import cn.iselab.mooctest.site.common.enums.OnlineJudgeMode;
|
|
-import cn.iselab.mooctest.site.data.OnlineJudgeIODataDTO;
|
|
|
|
|
|
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
|
|
import cn.iselab.mooctest.site.models.Target;
|
|
import cn.iselab.mooctest.site.models.Target;
|
|
import cn.iselab.mooctest.site.service.CaseService;
|
|
import cn.iselab.mooctest.site.service.CaseService;
|
|
import cn.iselab.mooctest.site.service.TargetService;
|
|
import cn.iselab.mooctest.site.service.TargetService;
|
|
import cn.iselab.mooctest.site.service.updownload.DownloadService;
|
|
import cn.iselab.mooctest.site.service.updownload.DownloadService;
|
|
import cn.iselab.mooctest.site.util.data.FileUtils;
|
|
import cn.iselab.mooctest.site.util.data.FileUtils;
|
|
import cn.iselab.mooctest.site.web.data.*;
|
|
import cn.iselab.mooctest.site.web.data.*;
|
|
-import cn.iselab.mooctest.site.web.logic.CaseLogic;
|
|
|
|
|
|
+import cn.iselab.mooctest.site.web.data.wrapper.OnlineJudgeResultVOWrapper;
|
|
|
|
+import cn.iselab.mooctest.site.web.data.wrapper.OnlineJudgeResultsVOWrapper;
|
|
import cn.iselab.mooctest.site.web.logic.OSSLogic;
|
|
import cn.iselab.mooctest.site.web.logic.OSSLogic;
|
|
import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
|
|
import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
|
|
import cn.iselab.mooctest.site.web.logic.asyncProgress.OnlineJudgeProcessLogic;
|
|
import cn.iselab.mooctest.site.web.logic.asyncProgress.OnlineJudgeProcessLogic;
|
|
@@ -19,21 +20,15 @@ import com.google.common.cache.CacheBuilder;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.gson.*;
|
|
import com.google.gson.*;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
|
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
|
|
|
|
|
|
import java.io.*;
|
|
import java.io.*;
|
|
-import java.net.MalformedURLException;
|
|
|
|
-import java.net.URL;
|
|
|
|
import java.time.LocalTime;
|
|
import java.time.LocalTime;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
import java.util.UUID;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
-import java.util.zip.ZipInputStream;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
* @program: mooctest-site
|
|
* @program: mooctest-site
|
|
@@ -58,24 +53,22 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
|
|
private UpDownloadLogic upDownloadLogic;
|
|
private UpDownloadLogic upDownloadLogic;
|
|
@Autowired
|
|
@Autowired
|
|
private DownloadService downloadService;
|
|
private DownloadService downloadService;
|
|
-
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private OnlineJudgeResultVOWrapper onlineJudgeResultVOWrapper;
|
|
|
|
+ @Autowired
|
|
|
|
+ private OnlineJudgeResultsVOWrapper onlineJudgeResultsVOWrapper;
|
|
@Value("${featureSwitch.client.oss}")
|
|
@Value("${featureSwitch.client.oss}")
|
|
private boolean ossFeatureSwitch;
|
|
private boolean ossFeatureSwitch;
|
|
|
|
|
|
- private OnlineJudgeResultVO STARTED = new OnlineJudgeResultVO("started");
|
|
|
|
- private OnlineJudgeResultsVO PSTARTED = new OnlineJudgeResultsVO("started");
|
|
|
|
|
|
+ private OnlineJudgeResultDTO STARTED = new OnlineJudgeResultDTO("started");
|
|
|
|
+
|
|
private static final String BASE_DIR = "code";
|
|
private static final String BASE_DIR = "code";
|
|
|
|
|
|
private static final String STORE_ANSWERS_DIR = System.getProperty("java.io.tmpdir")+ File.separator+
|
|
private static final String STORE_ANSWERS_DIR = System.getProperty("java.io.tmpdir")+ File.separator+
|
|
Constants.ANSWER_PATH+File.separator;
|
|
Constants.ANSWER_PATH+File.separator;
|
|
|
|
|
|
- private final static Cache<String,OnlineJudgeResultVO> RESULT_CACHE_FROM_CELERY = CacheBuilder
|
|
|
|
- .newBuilder()
|
|
|
|
- .initialCapacity(50)
|
|
|
|
- .concurrencyLevel(5)
|
|
|
|
- .expireAfterWrite(30, TimeUnit.SECONDS)
|
|
|
|
- .build();
|
|
|
|
- private final static Cache<String,OnlineJudgeResultsVO> RESULTS_CACHE_FROM_CELERY = CacheBuilder
|
|
|
|
|
|
+
|
|
|
|
+ private final static Cache<String, OnlineJudgeResultDTO> RESULTDTO_CACHE_FROM_CELERY = CacheBuilder
|
|
.newBuilder()
|
|
.newBuilder()
|
|
.initialCapacity(50)
|
|
.initialCapacity(50)
|
|
.concurrencyLevel(5)
|
|
.concurrencyLevel(5)
|
|
@@ -198,22 +191,23 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public OnlineJudgeResultVO checkSubmissionById(String submissionId) {
|
|
public OnlineJudgeResultVO checkSubmissionById(String submissionId) {
|
|
- OnlineJudgeResultVO result = getResultFromCache(submissionId);
|
|
|
|
|
|
+ OnlineJudgeResultDTO result = getResultDTOFromCache (submissionId);
|
|
if (result == null) {
|
|
if (result == null) {
|
|
- return STARTED;
|
|
|
|
|
|
+ return onlineJudgeResultVOWrapper.wrap (STARTED);
|
|
}
|
|
}
|
|
result.setState("success");
|
|
result.setState("success");
|
|
- return result;
|
|
|
|
|
|
+ return onlineJudgeResultVOWrapper.wrap (result);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public OnlineJudgeResultsVO pcheckSubmissionById(String submissionId) {
|
|
public OnlineJudgeResultsVO pcheckSubmissionById(String submissionId) {
|
|
- OnlineJudgeResultsVO result = getResultsFromCache(submissionId);
|
|
|
|
|
|
+ OnlineJudgeResultDTO result = getResultDTOFromCache (submissionId);
|
|
if (result == null) {
|
|
if (result == null) {
|
|
- return PSTARTED;
|
|
|
|
|
|
+ return onlineJudgeResultsVOWrapper.wrap (STARTED);
|
|
}
|
|
}
|
|
result.setState("success");
|
|
result.setState("success");
|
|
- return result;
|
|
|
|
|
|
+
|
|
|
|
+ return onlineJudgeResultsVOWrapper.wrap (result);
|
|
}
|
|
}
|
|
@Override
|
|
@Override
|
|
public SubmissionResultVO getLatestAnswersForThisCaseAndExam(long examId, long caseId,long userId) {
|
|
public SubmissionResultVO getLatestAnswersForThisCaseAndExam(long examId, long caseId,long userId) {
|
|
@@ -318,45 +312,27 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
|
|
//
|
|
//
|
|
// }
|
|
// }
|
|
|
|
|
|
- @Override
|
|
|
|
- public OnlineJudgeResultVO getResultFromCache(String submissionId) {
|
|
|
|
- return RESULT_CACHE_FROM_CELERY.getIfPresent(submissionId);
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public OnlineJudgeResultsVO getResultsFromCache(String submissionId) {
|
|
|
|
- return RESULTS_CACHE_FROM_CELERY.getIfPresent(submissionId);
|
|
|
|
|
|
+ public OnlineJudgeResultDTO getResultDTOFromCache(String submissionId) {
|
|
|
|
+ return RESULTDTO_CACHE_FROM_CELERY.getIfPresent(submissionId);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public OnlineJudgeResultVO generalOnlineJudgeResultVO(String result) {
|
|
|
|
- if("".equals(result)) {
|
|
|
|
- return new OnlineJudgeResultVO("failed");
|
|
|
|
|
|
+ public OnlineJudgeResultDTO generalOnlineJudgeResultDTO(String result) {
|
|
|
|
+ if("".equals(result.trim ())) {
|
|
|
|
+ return new OnlineJudgeResultDTO("failed");
|
|
}
|
|
}
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
- return gson.fromJson(result, OnlineJudgeResultVO.class);
|
|
|
|
- }
|
|
|
|
|
|
+ return gson.fromJson(result, OnlineJudgeResultDTO.class);
|
|
|
|
|
|
- @Override
|
|
|
|
- public OnlineJudgeResultsVO generalOnlineJudgeResultsVO(String result) {
|
|
|
|
- if("".equals(result)) {
|
|
|
|
- return new OnlineJudgeResultsVO("failed");
|
|
|
|
- }
|
|
|
|
- Gson gson = new Gson();
|
|
|
|
- return gson.fromJson(result, OnlineJudgeResultsVO.class);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void setResultToCache(String submissionId, OnlineJudgeResultVO result) {
|
|
|
|
- RESULT_CACHE_FROM_CELERY.put(submissionId, result);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public void setResultsToCache(String submissionId, OnlineJudgeResultsVO result) {
|
|
|
|
- RESULTS_CACHE_FROM_CELERY.put(submissionId, result);
|
|
|
|
|
|
+ public void setResultDTOToCache(String submissionId, OnlineJudgeResultDTO result) {
|
|
|
|
+ RESULTDTO_CACHE_FROM_CELERY.put(submissionId, result);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|