Browse Source

fix: 写入userId

haha 3 years ago
parent
commit
20fa6b84e3

+ 8 - 7
seec-oj-server/src/main/java/cn/seecoder/ojserver/controller/JudgeController.java

@@ -3,9 +3,6 @@ package cn.seecoder.ojserver.controller;
 import cn.seecoder.ojserver.model.vo.CodeJudgeVO;
 import cn.seecoder.ojserver.service.JudgeService;
 import cn.seecoder.ojserver.web.Response;
-import com.nju.edu.paasMonitorClient.MonitorClient;
-import com.nju.edu.paasMonitorClient.entity.Call;
-import com.nju.edu.paasMonitorCommon.enums.SeecSystem;
 import org.springframework.web.bind.annotation.*;
 
 @RestController
@@ -28,13 +25,17 @@ public class JudgeController {
     }
 
     @PostMapping("/code")
-    public Response judgeCode(@RequestParam(value = "problemId") Integer problemId, @RequestBody CodeJudgeVO codeJudgeVO) {
-        return Response.buildSuccess(judgeService.syncJudgeCode(problemId, codeJudgeVO));
+    public Response judgeCode(@RequestParam(value = "problemId") Integer problemId,
+                              @RequestParam(value = "userId")  Integer userId,
+                              @RequestBody CodeJudgeVO codeJudgeVO) {
+        return Response.buildSuccess(judgeService.syncJudgeCode(problemId,userId,codeJudgeVO));
     }
 
     @PostMapping("/asyncCode")
-    public Response asyncJudgeCode(@RequestParam(value = "problemId") Integer problemId, @RequestBody CodeJudgeVO codeJudgeVO) {
-        return Response.buildSuccess(judgeService.asyncJudgeCode(problemId, codeJudgeVO));
+    public Response asyncJudgeCode(@RequestParam(value = "problemId") Integer problemId,
+                                   @RequestParam(value = "userId")  Integer userId,
+                                   @RequestBody CodeJudgeVO codeJudgeVO) {
+        return Response.buildSuccess(judgeService.asyncJudgeCode(problemId,userId,codeJudgeVO));
     }
 
     @PostMapping("/rabbit")

+ 1 - 1
seec-oj-server/src/main/java/cn/seecoder/ojserver/dao/CommitDAO.java

@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import java.util.List;
 
 public interface CommitDAO extends JpaRepository<Commit,Integer> {
-    List<Commit> findByUserIdAndProblemId(Integer userId,Integer problemId);
+    List<Commit> findByUserIdAndProblemIdOrderByIdDesc(Integer userId,Integer problemId);
 
 
 }

+ 16 - 3
seec-oj-server/src/main/java/cn/seecoder/ojserver/rabbitmq/RabbitMQConsumer.java

@@ -29,8 +29,22 @@ public class RabbitMQConsumer {
     @RabbitHandler
     @RabbitListener(queuesToDeclare = @Queue("notice_queue"),concurrency = "20")
     public void process(CodeJudgeDTO codeJudgeDTO) {
-        JudgeResult judgeResult = judgeService.judgeCode(codeJudgeDTO.getProblemId(), codeJudgeDTO.getCodeJudgeVO());
-        System.out.println(judgeResult);
+        JudgeResult judgeResult;
+        try{
+            judgeResult = judgeService.judgeCode(codeJudgeDTO.getProblemId(), codeJudgeDTO.getCodeJudgeVO());
+        }catch (Exception e){
+            Optional<Commit> optionalCommit = commitDAO.findById(codeJudgeDTO.getCommitId());
+            if(optionalCommit.isPresent()){
+                Commit commit = optionalCommit.get();
+                commit.setResult("Internal Error");
+                commit.setScore(null);
+                commit.setJudgeTime(null);
+                commitDAO.save(commit);
+            }else{
+                throw new CodeJudgeException("找不到commit",103);
+            }
+            throw e;
+        }
         CodeJudgeResultType message = CodeJudgeResultType.values()[JudgeResultType.ACCEPT.ordinal()];
         for (JudgeResult.Item item : judgeResult.getResultList()) {
             if (item.getResult() != JudgeResultType.ACCEPT) {
@@ -46,7 +60,6 @@ public class RabbitMQConsumer {
             }
         }
 
-
         int score = (int)((acNum / judgeResult.getResultList().size())*100);
         
         Optional<Commit> optionalCommit = commitDAO.findById(codeJudgeDTO.getCommitId());

+ 2 - 2
seec-oj-server/src/main/java/cn/seecoder/ojserver/service/JudgeService.java

@@ -5,8 +5,8 @@ import cn.seecoder.ojserver.model.vo.CodeJudgeVO;
 
 public interface JudgeService {
     public JudgeResult judgeCode(Integer questionId, CodeJudgeVO codeJudgeVO);
-    public JudgeResult asyncJudgeCode(Integer questionId, CodeJudgeVO codeJudgeVO);
-    public JudgeResult syncJudgeCode(Integer questionId, CodeJudgeVO codeJudgeVO);
+    public JudgeResult asyncJudgeCode(Integer questionId, Integer userId,CodeJudgeVO codeJudgeVO);
+    public JudgeResult syncJudgeCode(Integer questionId,Integer userId, CodeJudgeVO codeJudgeVO);
     public JudgeResult rabbit(Integer questionId, CodeJudgeVO codeJudgeVO);
     public JudgeResult mysqlAndMQ(Integer questionId, CodeJudgeVO codeJudgeVO);
 }

+ 1 - 1
seec-oj-server/src/main/java/cn/seecoder/ojserver/service/impl/CommitServiceImpl.java

@@ -16,6 +16,6 @@ public class CommitServiceImpl implements CommitService {
     }
     @Override
     public List<Commit> getByUserIdAndProblemId(Integer userId, Integer problemId) {
-        return commitDAO.findByUserIdAndProblemId(userId,problemId);
+        return commitDAO.findByUserIdAndProblemIdOrderByIdDesc(userId,problemId);
     }
 }

+ 4 - 4
seec-oj-server/src/main/java/cn/seecoder/ojserver/service/impl/JudgeServiceImpl.java

@@ -68,9 +68,9 @@ public class JudgeServiceImpl implements JudgeService {
     }
 
     @Override
-    public JudgeResult asyncJudgeCode(Integer questionId, CodeJudgeVO codeJudgeVO) {
+    public JudgeResult asyncJudgeCode(Integer questionId, Integer userId,CodeJudgeVO codeJudgeVO) {
         Commit commit = new Commit();
-        commit.setUserId(0);
+        commit.setUserId(userId);
         commit.setProblemId(questionId);
         commit.setCode(codeJudgeVO.getCode());
         commit.setLanguage(codeJudgeVO.getLanguage());
@@ -82,9 +82,9 @@ public class JudgeServiceImpl implements JudgeService {
     }
 
     @Override
-    public JudgeResult syncJudgeCode(Integer questionId, CodeJudgeVO codeJudgeVO) {
+    public JudgeResult syncJudgeCode(Integer questionId, Integer userId,CodeJudgeVO codeJudgeVO) {
         Commit commit = new Commit();
-        commit.setUserId(0);
+        commit.setUserId(userId);
         commit.setProblemId(questionId);
         commit.setCode(codeJudgeVO.getCode());
         commit.setLanguage(codeJudgeVO.getLanguage());