Bläddra i källkod

Merge branch 'fix-recode-onlinejudge' into 'DEV'

重构增加了DTO 防止VO的改变带来更大的改动



See merge request !826

menduo 7 år sedan
förälder
incheckning
6940a0b7e1

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeAndCulScoreCallBack.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
 import cn.iselab.mooctest.site.web.logic.GeneralCalculateScoreLogic;
 import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
@@ -30,13 +31,13 @@ class OnlineJudgeAndCulScoreCallBack implements AsyncTaskCallBack {
     @Override
     public void onSuccess(Map<String, String> context, String result) throws Exception {
         log.info("submissionId:[{}] 执行成功! result:[{}]",context.get("submissionId"),result);
-        OnlineJudgeResultVO onlineJudgeResultVO = onlineJudgeLogic.generalOnlineJudgeResultVO(result);
-        onlineJudgeLogic.setResultToCache(context.get("submissionId"),onlineJudgeResultVO);
+        OnlineJudgeResultDTO onlineJudgeResultDTO = onlineJudgeLogic.generalOnlineJudgeResultDTO (result);
+        onlineJudgeLogic.setResultDTOToCache (context.get("submissionId"),onlineJudgeResultDTO);
         Long examId = Long.parseLong(context.get("examId"));
         Long userId = Long.parseLong(context.get("userId"));
         Long caseId = Long.parseLong(context.get("caseId"));
         //上传分数
-        double score = culScore(onlineJudgeResultVO.getRightCount(),onlineJudgeResultVO.getTotalCount());
+        double score = culScore(onlineJudgeResultDTO.getRightCount(),onlineJudgeResultDTO.getTotalCount());
         generalCalculateScoreLogic.uploadCaseScore(examId,caseId,userId,score);
 
     }

+ 3 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeCallBack.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
 import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
 import lombok.extern.slf4j.Slf4j;
@@ -25,8 +26,8 @@ public class OnlineJudgeCallBack implements AsyncTaskCallBack {
     @Override
     public void onSuccess(Map<String, String> context, String result) throws Exception {
         log.info("submissionId:[{}] 执行成功! result:[{}]",context.get("submissionId"),result);
-        OnlineJudgeResultVO onlineJudgeResultVO = onlineJudgeLogic.generalOnlineJudgeResultVO(result);
-        onlineJudgeLogic.setResultToCache(context.get("submissionId"),onlineJudgeResultVO);
+        OnlineJudgeResultDTO onlineJudgeResultDTO = onlineJudgeLogic.generalOnlineJudgeResultDTO (result);
+        onlineJudgeLogic.setResultDTOToCache(context.get("submissionId"),onlineJudgeResultDTO);
     }
 
     @Override

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeExecuteCallBack.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
 import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
@@ -24,9 +25,9 @@ public class OnlineJudgeExecuteCallBack implements AsyncTaskCallBack{
     @Override
     public void onSuccess(Map<String, String> context, String result) throws Exception {
         log.info("submissionId:[{}] 执行成功! result:[{}]",context.get("submissionId"),result);
-        OnlineJudgeResultsVO onlineJudgeResultsVO = onlineJudgeLogic.generalOnlineJudgeResultsVO(result);
-        onlineJudgeResultsVO.generalMatched();
-        onlineJudgeLogic.setResultsToCache(context.get("submissionId"),onlineJudgeResultsVO);
+        OnlineJudgeResultDTO onlineJudgeResultDTO = onlineJudgeLogic.generalOnlineJudgeResultDTO (result);
+        //onlineJudgeResultsVO.generalMatched();
+        onlineJudgeLogic.setResultDTOToCache (context.get("submissionId"),onlineJudgeResultDTO);
     }
 
     @Override

+ 28 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/OnlineJudgeResultDTO.java

@@ -0,0 +1,28 @@
+package cn.iselab.mooctest.site.data;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @program: mooctest-site
+ * @email: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2018/9/27 下午4:55
+ **/
+@Data
+@ToString
+public class OnlineJudgeResultDTO {
+    private String state;
+    private int resultCode;
+    private String resultMsg;
+    private int rightCount;
+    private int totalCount;
+    private List<String> expectOutput;
+    private List<String> realOutput;
+    private List<String> errorLog;
+    public OnlineJudgeResultDTO(String state) {
+        this.state = state;
+    }
+}

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/OnlineJudgeResultsVO.java

@@ -30,8 +30,8 @@ public class OnlineJudgeResultsVO {
     }
 
     public void generalMatched() {
-
         matched = new ArrayList<>();
+        if(expectOutput == null) return;
 
         for (int i = 0; i < expectOutput.size() ; i++) {
             if(expectOutput.get(i).equals(realOutput.get(i))) {

+ 46 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/OnlineJudgeResultVOWrapper.java

@@ -0,0 +1,46 @@
+package cn.iselab.mooctest.site.web.data.wrapper;
+
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
+import org.springframework.stereotype.Service;
+
+/**
+ * @program: mooctest-site
+ * @email: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2018/9/27 下午5:12
+ **/
+@Service
+public class OnlineJudgeResultVOWrapper extends BaseWrapper<OnlineJudgeResultVO, OnlineJudgeResultDTO> {
+
+    @Override
+    public OnlineJudgeResultVO wrap(OnlineJudgeResultDTO onlineJudgeResultDTO) {
+        OnlineJudgeResultVO onlineJudgeResultVO = new OnlineJudgeResultVO ();
+        onlineJudgeResultVO.setState (onlineJudgeResultDTO.getState ());
+        onlineJudgeResultVO.setResultCode (onlineJudgeResultDTO.getResultCode ());
+        onlineJudgeResultVO.setResultMsg (onlineJudgeResultDTO.getResultMsg ());
+        onlineJudgeResultVO.setRightCount (onlineJudgeResultDTO.getRightCount ());
+        onlineJudgeResultVO.setTotalCount (onlineJudgeResultDTO.getTotalCount ());
+        if (onlineJudgeResultDTO.getExpectOutput () != null && onlineJudgeResultDTO.getExpectOutput ().size () > 0)
+            onlineJudgeResultVO.setExpectOutput (onlineJudgeResultDTO.getExpectOutput ().get (0));
+        else
+            onlineJudgeResultVO.setExpectOutput ("");
+
+        if (onlineJudgeResultDTO.getExpectOutput () != null && onlineJudgeResultDTO.getRealOutput ().size () > 0)
+            onlineJudgeResultVO.setRealOutput (onlineJudgeResultDTO.getRealOutput ().get (0));
+        else
+            onlineJudgeResultVO.setRealOutput ("");
+
+        if (onlineJudgeResultDTO.getErrorLog () != null && onlineJudgeResultDTO.getErrorLog ().size () > 0)
+            onlineJudgeResultVO.setErrorLog (onlineJudgeResultDTO.getErrorLog ().get (0));
+        else
+            onlineJudgeResultVO.setErrorLog ("");
+
+        return onlineJudgeResultVO;
+    }
+
+    @Override
+    public OnlineJudgeResultDTO unwrap(OnlineJudgeResultVO data) {
+        return null;
+    }
+}

+ 36 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/OnlineJudgeResultsVOWrapper.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.site.web.data.wrapper;
+
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
+import org.springframework.stereotype.Service;
+
+/**
+ * @program: mooctest-site
+ * @email: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2018/9/27 下午5:12
+ **/
+@Service
+public class OnlineJudgeResultsVOWrapper extends BaseWrapper<OnlineJudgeResultsVO, OnlineJudgeResultDTO> {
+
+    @Override
+    public OnlineJudgeResultsVO wrap(OnlineJudgeResultDTO onlineJudgeResultDTO) {
+        OnlineJudgeResultsVO onlineJudgeResultsVO = new OnlineJudgeResultsVO ();
+        onlineJudgeResultsVO.setState (onlineJudgeResultDTO.getState ());
+        onlineJudgeResultsVO.setResultCode (onlineJudgeResultDTO.getResultCode ());
+        onlineJudgeResultsVO.setResultMsg (onlineJudgeResultDTO.getResultMsg ());
+        onlineJudgeResultsVO.setRightCount (onlineJudgeResultDTO.getRightCount ());
+        onlineJudgeResultsVO.setTotalCount (onlineJudgeResultDTO.getTotalCount ());
+        onlineJudgeResultsVO.setExpectOutput (onlineJudgeResultDTO.getExpectOutput ());
+        onlineJudgeResultsVO.setRealOutput (onlineJudgeResultDTO.getRealOutput ());
+        onlineJudgeResultsVO.setErrorLog (onlineJudgeResultDTO.getErrorLog ());
+        onlineJudgeResultsVO.generalMatched ();
+        return onlineJudgeResultsVO;
+    }
+
+    @Override
+    public OnlineJudgeResultDTO unwrap(OnlineJudgeResultsVO data) {
+        return null;
+    }
+}

+ 7 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/OnlineJudgeLogic.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.web.logic;
 
+import cn.iselab.mooctest.site.data.OnlineJudgeResultDTO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeVO;
@@ -20,12 +21,12 @@ public interface OnlineJudgeLogic {
     OnlineJudgeResultVO checkSubmissionById(String submissionId);
     OnlineJudgeResultsVO pcheckSubmissionById(String submissionId);
 
-    void setResultToCache(String submissionId,OnlineJudgeResultVO result);
-    OnlineJudgeResultVO getResultFromCache(String submissionId);
-    OnlineJudgeResultVO generalOnlineJudgeResultVO(String result);
+
     SubmissionResultVO getLatestAnswersForThisCaseAndExam(long examId,long caseId,long userId);
 
-    void setResultsToCache(String submissionId, OnlineJudgeResultsVO result);
-    OnlineJudgeResultsVO getResultsFromCache(String submissionId);
-    OnlineJudgeResultsVO generalOnlineJudgeResultsVO(String result);
+
+    void setResultDTOToCache(String submissionId, OnlineJudgeResultDTO result);
+    OnlineJudgeResultDTO getResultDTOFromCache(String submissionId);
+    OnlineJudgeResultDTO generalOnlineJudgeResultDTO(String result);
+
 }

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/OSSLogicImpl.java

@@ -282,9 +282,9 @@ public class OSSLogicImpl implements OSSLogic {
             customHeaders.put("Content-Type", "application/octet-stream");
             customHeaders.put("x-oss-meta-author", "aliy");
 
-            PutObjectResult result = ossClient.putObject(new URL(signedUrl), fin, localFilePath.length(), customHeaders);
+            PutObjectResult result = client.putObject(new URL(signedUrl), fin, localFilePath.length(), customHeaders);
             // 关闭OSSClient。
-            ossClient.shutdown();
+            client.shutdown();
             return true;
         } catch (IOException e) {
             e.printStackTrace();

+ 26 - 50
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/OnlineJudgeLogicImpl.java

@@ -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.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.service.CaseService;
 import cn.iselab.mooctest.site.service.TargetService;
 import cn.iselab.mooctest.site.service.updownload.DownloadService;
 import cn.iselab.mooctest.site.util.data.FileUtils;
 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.OnlineJudgeLogic;
 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.gson.*;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.time.LocalTime;
 import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
-import java.util.zip.ZipInputStream;
 
 /**
  * @program: mooctest-site
@@ -58,24 +53,22 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
     private UpDownloadLogic upDownloadLogic;
     @Autowired
     private DownloadService downloadService;
-
+    @Autowired
+    private OnlineJudgeResultVOWrapper onlineJudgeResultVOWrapper;
+    @Autowired
+    private OnlineJudgeResultsVOWrapper onlineJudgeResultsVOWrapper;
     @Value("${featureSwitch.client.oss}")
     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 STORE_ANSWERS_DIR = System.getProperty("java.io.tmpdir")+ 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()
             .initialCapacity(50)
             .concurrencyLevel(5)
@@ -198,22 +191,23 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
 
     @Override
     public OnlineJudgeResultVO checkSubmissionById(String submissionId) {
-        OnlineJudgeResultVO result = getResultFromCache(submissionId);
+        OnlineJudgeResultDTO result = getResultDTOFromCache (submissionId);
         if (result == null) {
-            return STARTED;
+           return onlineJudgeResultVOWrapper.wrap (STARTED);
         }
         result.setState("success");
-        return result;
+        return onlineJudgeResultVOWrapper.wrap (result);
     }
 
     @Override
     public OnlineJudgeResultsVO pcheckSubmissionById(String submissionId) {
-        OnlineJudgeResultsVO result = getResultsFromCache(submissionId);
+        OnlineJudgeResultDTO result = getResultDTOFromCache (submissionId);
         if (result == null) {
-            return PSTARTED;
+            return onlineJudgeResultsVOWrapper.wrap (STARTED);
         }
         result.setState("success");
-        return result;
+
+        return onlineJudgeResultsVOWrapper.wrap (result);
     }
     @Override
     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
-    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
-    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();
-        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
-    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);
     }