Преглед изворни кода

feat:evaluate exam statistics

sky пре 5 година
родитељ
комит
a52ebe7ce6

+ 10 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/dto/evaluate/ExamQuestionAndScoreDto.java

@@ -0,0 +1,10 @@
+package cn.seecoder.data.server.dto.evaluate;
+
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+public class ExamQuestionAndScoreDto {
+    private Map<String, Integer> questionAndScore;
+}

+ 25 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/dto/evaluate/ExamRecordDto.java

@@ -0,0 +1,25 @@
+package cn.seecoder.data.server.dto.evaluate;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ExamRecordDto {
+    /*
+        "id": 162,
+        "questionId": "test-2",
+        "actualScore": 0,
+        "studentId": 839,
+        "submitAnswer": "#include <iostream>\nusing namespace std;\nint main() {\nint a, b;\ncin >>a>>b;\ncout<<a+b<<endl;\n}",
+        "submitTime": "2021-04-13 19:02:00",
+        "message": "Wrong Answer"
+    * */
+    private Integer id;
+    private String questionId;
+    private Integer actualScore;
+    private Integer studentId;
+    private String submitAnswer;
+    private LocalDateTime submitTime;
+    private String message;
+}

+ 35 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/dto/evaluate/Response.java

@@ -0,0 +1,35 @@
+package cn.seecoder.data.server.dto.evaluate;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class  Response<T> implements Serializable {
+
+    private Integer code;
+
+    private String msg;
+
+    private T result;
+
+    public Response(Integer code, String msg, T data) {
+        this.code = code;
+        this.msg = msg;
+        this.result = data;
+    }
+
+
+    public static Response buildSuccess() {
+        return new Response(200, "", null);
+    }
+
+
+    public static <T> Response<T> buildSuccess(T result) {
+        return new Response<T>(200, "", result);
+    }
+
+    public static Response buildFailure(Integer code, String message) {
+        return new Response(code,message, null);
+    }
+}

+ 4 - 0
seec-data-server/src/main/java/cn/seecoder/data/server/service/EvaluateService.java

@@ -1,6 +1,10 @@
 package cn.seecoder.data.server.service;
 package cn.seecoder.data.server.service;
 
 
+import java.util.Map;
+
 public interface EvaluateService {
 public interface EvaluateService {
 
 
     public double getQuestionScore(int userId,String dataSource);
     public double getQuestionScore(int userId,String dataSource);
+
+    public Map<String, Map<String,Integer>> analyzeEvalTest(Integer examId);
 }
 }

+ 23 - 2
seec-data-server/src/main/java/cn/seecoder/data/server/service/Impl/EvaluateServiceImpl.java

@@ -3,13 +3,15 @@ package cn.seecoder.data.server.service.Impl;
 import cn.seecoder.bok.client.SeecoderBokClient;
 import cn.seecoder.bok.client.SeecoderBokClient;
 import cn.seecoder.bok.common.vo.QuestionVO;
 import cn.seecoder.bok.common.vo.QuestionVO;
 import cn.seecoder.data.server.domain.GeneralRecordDao;
 import cn.seecoder.data.server.domain.GeneralRecordDao;
+import cn.seecoder.data.server.dto.evaluate.ExamQuestionAndScoreDto;
+import cn.seecoder.data.server.dto.evaluate.Response;
 import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.repository.GeneralRecordRepository;
 import cn.seecoder.data.server.service.EvaluateService;
 import cn.seecoder.data.server.service.EvaluateService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 
 @Service
 @Service
 public class EvaluateServiceImpl implements EvaluateService {
 public class EvaluateServiceImpl implements EvaluateService {
@@ -44,4 +46,23 @@ public class EvaluateServiceImpl implements EvaluateService {
         double ans = score/scoreTotal;
         double ans = score/scoreTotal;
         return ans;
         return ans;
     }
     }
+
+    @Override
+    public Map<String, Map<String, Integer>> analyzeEvalTest(Integer examId) {
+        Map<String, Map<String, Integer>> evalTestResult = new HashMap<>();
+        evalTestResult.put("all", new HashMap<>());
+        evalTestResult.put("avg", new HashMap<>());
+
+        RestTemplate restTemplate = new RestTemplate();
+//        Response<ExamQuestionAndScoreDto> response = Response.buildSuccess(new ExamQuestionAndScoreDto());
+        Map<String, Integer> param = new HashMap<>();
+        param.put("examId", examId);
+        try {
+            Response<ExamQuestionAndScoreDto> r = restTemplate.getForObject("http://47.111.95.164:8080/api/exam/{examId}/questions", Response.class,param);
+            System.out.println(r.getResult());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return evalTestResult;
+    }
 }
 }

+ 24 - 0
seec-data-server/src/test/java/cn/seecoder/data/server/service/EvaluateServiceTest.java

@@ -0,0 +1,24 @@
+package cn.seecoder.data.server.service;
+
+import config.EvaluateServiceTestConfig;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = EvaluateSe nrviceTestConfig.class)
+class EvaluateServiceTest {
+
+    @Autowired
+    EvaluateService evaluateService;
+
+    @Test
+    void analyzeEvalTest() {
+        evaluateService.analyzeEvalTest(1);
+    }
+}

+ 23 - 0
seec-data-server/src/test/java/config/EvaluateServiceTestConfig.java

@@ -0,0 +1,23 @@
+package config;
+
+import cn.seecoder.data.server.domain.GeneralRecordDao;
+import cn.seecoder.data.server.repository.GeneralRecordRepository;
+import cn.seecoder.data.server.service.EvaluateService;
+import cn.seecoder.data.server.service.Impl.EvaluateServiceImpl;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+
+import java.util.List;
+import java.util.Optional;
+
+@Configuration
+public class EvaluateServiceTestConfig {
+    @Bean
+    public EvaluateService evaluateService() {
+        return new EvaluateServiceImpl(null);
+    }
+}