2 Commits d631acdfdb ... 4f71418f74

Author SHA1 Message Date
  Miaomz 4f71418f74 完成日志数据解析功能 4 years ago
  Miaomz 76dc182676 分离DTO和DAO 4 years ago

+ 0 - 8
src/main/java/com/seecoder/dataanalysis/data/entity/eval/EvalExamInfo.java

@@ -1,7 +1,6 @@
 package com.seecoder.dataanalysis.data.entity.eval;
 package com.seecoder.dataanalysis.data.entity.eval;
 
 
 
 
-import com.alibaba.fastjson.annotation.JSONField;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
@@ -23,42 +22,35 @@ public class EvalExamInfo {
      * 试卷Id
      * 试卷Id
      */
      */
     @Id
     @Id
-    @JSONField(name="exam_id")
     private Integer examId;
     private Integer examId;
 
 
     /**
     /**
      * 试卷总分
      * 试卷总分
      */
      */
-    @JSONField(name="exam_score")
     private Double examScore;
     private Double examScore;
 
 
     /**
     /**
      * 试题id及分值
      * 试题id及分值
      */
      */
-    @JSONField(name="questions")
     private Map<Integer, Double> questionAndScore;
     private Map<Integer, Double> questionAndScore;
 
 
     /**
     /**
      * 试题难度
      * 试题难度
      */
      */
-    @JSONField(name="difficulty")
     private Integer difficulty;
     private Integer difficulty;
 
 
     /**
     /**
      * 试卷更新时间
      * 试卷更新时间
      */
      */
-    @JSONField(name="update_time", format="yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
     private Date updateTime;
 
 
     /**
     /**
      * 考试开始时间
      * 考试开始时间
      */
      */
-    @JSONField(name="start_time", format="yyyy-MM-dd HH:mm:ss")
     private Date startTime;
     private Date startTime;
 
 
     /**
     /**
      * 考试结束时间
      * 考试结束时间
      */
      */
-    @JSONField(name="end_time", format="yyyy-MM-dd HH:mm:ss")
     private Date endTime;
     private Date endTime;
 }
 }

+ 5 - 5
src/main/java/com/seecoder/dataanalysis/logic/parser/impl/LogParsingServiceImpl.java

@@ -1,10 +1,10 @@
 package com.seecoder.dataanalysis.logic.parser.impl;
 package com.seecoder.dataanalysis.logic.parser.impl;
 
 
 import com.alibaba.fastjson.JSONException;
 import com.alibaba.fastjson.JSONException;
-import com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo;
-import com.seecoder.dataanalysis.data.entity.eval.EvalExamRecord;
 import com.seecoder.dataanalysis.logic.parser.LogParsingService;
 import com.seecoder.dataanalysis.logic.parser.LogParsingService;
 import com.seecoder.dataanalysis.util.JsonUtil;
 import com.seecoder.dataanalysis.util.JsonUtil;
+import com.seecoder.dataanalysis.vo.EvalExamInfoDTO;
+import com.seecoder.dataanalysis.vo.EvalExamRecordDTO;
 import com.seecoder.dataanalysis.vo.SimpleLog;
 import com.seecoder.dataanalysis.vo.SimpleLog;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -59,8 +59,8 @@ public class LogParsingServiceImpl implements LogParsingService {
     @PostConstruct
     @PostConstruct
     protected void buildOpTypesTable(){
     protected void buildOpTypesTable(){
         opTypesTable = new HashMap<>();
         opTypesTable = new HashMap<>();
-        opTypesTable.put(0, EvalExamInfo.class.getName());  //试卷数据
-        opTypesTable.put(1, EvalExamInfo.class.getName());  //诗句更新数据
-        opTypesTable.put(2, EvalExamRecord.class.getName());  //学生提交试卷
+        opTypesTable.put(0, EvalExamInfoDTO.class.getName());  //试卷数据
+        opTypesTable.put(1, EvalExamInfoDTO.class.getName());  //诗句更新数据
+        opTypesTable.put(2, EvalExamRecordDTO.class.getName());  //学生提交试卷
     }
     }
 }
 }

+ 18 - 0
src/main/java/com/seecoder/dataanalysis/vo/AnswerDTO.java

@@ -0,0 +1,18 @@
+package com.seecoder.dataanalysis.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+/**
+ * @author miaomuzhi
+ * @since 2022/2/6
+ */
+@Data
+public class AnswerDTO {
+
+    @JSONField(name = "question_id")
+    private String questionId;
+
+    @JSONField(name = "question_score")
+    private double questionScore;
+}

+ 57 - 0
src/main/java/com/seecoder/dataanalysis/vo/EvalExamInfoDTO.java

@@ -0,0 +1,57 @@
+package com.seecoder.dataanalysis.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author miaomuzhi
+ * @since 2022/2/6
+ */
+@Data
+public class EvalExamInfoDTO {
+
+    /**
+     * 试卷Id
+     */
+    @JSONField(name = "exam_id")
+    private Integer examId;
+
+    /**
+     * 试卷总分
+     */
+    @JSONField(name = "exam_score")
+    private Double examScore;
+
+    /**
+     * 试题id及分值
+     */
+    @JSONField(name = "questions")
+    private List<AnswerDTO> questionAndScore;
+
+    /**
+     * 试题难度
+     */
+    @JSONField(name = "difficulty")
+    private Integer difficulty;
+
+    /**
+     * 试卷更新时间
+     */
+    @JSONField(name = "update_time")
+    private Date updateTime;
+
+    /**
+     * 考试开始时间
+     */
+    @JSONField(name = "start_time")
+    private Date startTime;
+
+    /**
+     * 考试结束时间
+     */
+    @JSONField(name = "end_time")
+    private Date endTime;
+}

+ 45 - 0
src/main/java/com/seecoder/dataanalysis/vo/EvalExamRecordDTO.java

@@ -0,0 +1,45 @@
+package com.seecoder.dataanalysis.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author miaomuzhi
+ * @since 2022/2/6
+ */
+@Data
+public class EvalExamRecordDTO {
+
+    /**
+     * 试卷Id
+     */
+    @JSONField(name="exam_id")
+    private Integer examId;
+
+    /**
+     * 用户Id
+     */
+    @JSONField(name="student_id")
+    private Integer studentId;
+
+    /**
+     * 提交时间
+     */
+    @JSONField(name="submit_time", format="yyyy-MM-dd HH:mm:ss")
+    private Date submitTime;
+
+    /**
+     * 得分
+     */
+    @JSONField(name="score")
+    private Double score;
+
+    /**
+     * 得分
+     */
+    @JSONField(name="error_ques")
+    private List<AnswerDTO> errorQuestions;
+}

+ 10 - 2
src/test/java/com/seecoder/dataanalysis/logic/parser/impl/LogParsingServiceImplTest.java

@@ -1,13 +1,13 @@
 package com.seecoder.dataanalysis.logic.parser.impl;
 package com.seecoder.dataanalysis.logic.parser.impl;
 
 
 import com.seecoder.dataanalysis.util.FileUtil;
 import com.seecoder.dataanalysis.util.FileUtil;
+import com.seecoder.dataanalysis.vo.EvalExamInfoDTO;
 import com.seecoder.dataanalysis.vo.SimpleLog;
 import com.seecoder.dataanalysis.vo.SimpleLog;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
 /**
  * @author miaomuzhi
  * @author miaomuzhi
@@ -19,6 +19,7 @@ class LogParsingServiceImplTest {
     @BeforeEach
     @BeforeEach
     void setUp() {
     void setUp() {
         parsingService = new LogParsingServiceImpl();
         parsingService = new LogParsingServiceImpl();
+        parsingService.buildOpTypesTable();
     }
     }
 
 
     @AfterEach
     @AfterEach
@@ -36,9 +37,16 @@ class LogParsingServiceImplTest {
 
 
     @Test
     @Test
     void parseLogData() {
     void parseLogData() {
+        String logContent = FileUtil.readFile(getClass().getResource("/sample_logs/gen0.log").getFile());
+        SimpleLog simpleLog = parsingService.parseLog(logContent);
+        Object o = parsingService.parseLogData(simpleLog, false);
+        assertTrue(o instanceof EvalExamInfoDTO);
+        System.out.println(o);
     }
     }
 
 
     @Test
     @Test
     void parseOpType() {
     void parseOpType() {
+        assertEquals("com.seecoder.dataanalysis.data.entity.eval.EvalExamInfo", parsingService.parseOpType(0));
+        assertNull(parsingService.parseOpType(-1));
     }
     }
 }
 }