瀏覽代碼

修改提交试题时,保存答案的错题对比情况

4228306 5 年之前
父節點
當前提交
93393bb44a

+ 8 - 0
buildAndRun.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+set -e
+cd diagnosis
+date=`date +%Y%m%d`
+git pull
+mvn -s /etc/maven/settings.xml -DskipTests=true clean package
+docker build -t feick/diagnosis:$date .
+docker run --rm -p 9090:8080 feick/diagnosis:$date --spring.profiles.active=docker

+ 8 - 0
src/main/java/edu/math/diagnosis/controller/PaperResultController.java

@@ -48,4 +48,12 @@ public class PaperResultController {
         paperResultService.checkAndDelete(paper.getId(), commit.getUid());
         return paperResultService.parseResult(commit, paper);
     }
+
+    @GetMapping("/listSimpleResult")
+    @ApiOperation("获取简单结果")
+    public Result listSimpleResult(Long pid, Long uid) {
+
+        return Result.ok();
+    }
+
 }

+ 43 - 21
src/main/java/edu/math/diagnosis/entity/PaperResult.java

@@ -50,7 +50,7 @@ public class PaperResult {
     @ApiModelProperty("答对的题目编号 1,2")
     private String collectQuestion;
 
-//    @Lob
+    //    @Lob
     @ApiModelProperty("知识掌握率,88.88")
     private Double knowledgeRate;
 
@@ -90,12 +90,12 @@ public class PaperResult {
 
     /**
      * {
-     *  "第一章":[{
-     *    "chapter":"1",
-     *    "number":1,
-     *    "knowledgeName":"⼩学⽔平计算",
-     *    "matter":"计算出错,学习动力问题"
-     *  }]
+     * "第一章":[{
+     * "chapter":"1",
+     * "number":1,
+     * "knowledgeName":"⼩学⽔平计算",
+     * "matter":"计算出错,学习动力问题"
+     * }]
      * }
      */
     @Lob
@@ -127,13 +127,13 @@ public class PaperResult {
     /**
      * 每章节能力掌握情况
      * {
-     *     "第一章":[{
-     *         "chapter":1,
-     *         "knowledgeContent":"1.10 因数和倍数"
-     *         "knowledgeCode":"A1",
-     *         "keep":1,
-     *         "abilityCodes": "A1A2"
-     *     }]
+     * "第一章":[{
+     * "chapter":1,
+     * "knowledgeContent":"1.10 因数和倍数"
+     * "knowledgeCode":"A1",
+     * "keep":1,
+     * "abilityCodes": "A1A2"
+     * }]
      * }
      */
     @Lob
@@ -143,13 +143,13 @@ public class PaperResult {
     /**
      * 各能力评价
      * {
-     *     "计算能力":{
-     *         "abilityCode":"A1",
-     *         "score":4.5,
-     *         "evaluate":"您的成绩...",
-     *         "keep":[1,0,1,2,0,1,0],
-     *         "explain":"这是示例与解释"
-     *     }
+     * "计算能力":{
+     * "abilityCode":"A1",
+     * "score":4.5,
+     * "evaluate":"您的成绩...",
+     * "keep":[1,0,1,2,0,1,0],
+     * "explain":"这是示例与解释"
+     * }
      * }
      */
     @Lob
@@ -159,6 +159,7 @@ public class PaperResult {
     @Transient
     private Map<String, AbilityEvaluateVo> abilityEvaluateVo;
 
+    @Lob
     @ApiModelProperty("答错的题目,先判断是否选择,没选择则答错;选择了,答错了算错误,若该题没答案,则不算错误")
     private String wrongQuestion;
 
@@ -171,6 +172,7 @@ public class PaperResult {
      * }
      * }
      */
+    @Lob
     private String commonMatters;
 
     /**
@@ -183,8 +185,20 @@ public class PaperResult {
      * }
      * }
      */
+    @Lob
     private String mistakeMatters;
 
+    /**
+     * [{
+     * "qid":1,
+     * "number":1,
+     * "options":"A",
+     * "answer":"B"
+     * }]
+     */
+    @Lob
+    private String wrongAnswerContrast;
+
     public PaperResult() {
     }
 
@@ -371,4 +385,12 @@ public class PaperResult {
     public void setAbilityEvaluateVo(Map<String, AbilityEvaluateVo> abilityEvaluateVo) {
         this.abilityEvaluateVo = abilityEvaluateVo;
     }
+
+    public String getWrongAnswerContrast() {
+        return wrongAnswerContrast;
+    }
+
+    public void setWrongAnswerContrast(String wrongAnswerContrast) {
+        this.wrongAnswerContrast = wrongAnswerContrast;
+    }
 }

+ 48 - 0
src/main/java/edu/math/diagnosis/model/AnswerContrast.java

@@ -0,0 +1,48 @@
+package edu.math.diagnosis.model;
+
+public class AnswerContrast {
+
+    private Long qid;
+    private Integer number;
+    private String options;
+    private String answer;
+
+    public AnswerContrast(Long qid, Integer number, String options, String answer) {
+        this.qid = qid;
+        this.number = number;
+        this.options = options;
+        this.answer = answer;
+    }
+
+    public Long getQid() {
+        return qid;
+    }
+
+    public void setQid(Long qid) {
+        this.qid = qid;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public String getOptions() {
+        return options;
+    }
+
+    public void setOptions(String options) {
+        this.options = options;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+}

+ 13 - 3
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -16,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -57,6 +58,8 @@ public class PaperResultService {
     public Result parseResult(PaperCommit paperCommit, Paper paper) {
         List<Question> questions = paper.getQuestions();
         List<Answer> answers = convertAnswer(paperCommit.getJsonAns());
+        //map化
+        Map<Integer, Answer> mapAnswers = answers.stream().collect(Collectors.toMap(Answer::getNumber, Function.identity()));
         List<Integer> collectQuestion = new ArrayList<>();
         PaperResult result = new PaperResult();
         result.setPid(paperCommit.getPid());
@@ -71,15 +74,20 @@ public class PaperResultService {
         //清空value为0
         pData.keySet().forEach(d -> pData.put(d, 0d));
         double score = 0d;
+        //分析对比答案
+        List<AnswerContrast> contrasts = new ArrayList<>();
         for (Question q : questions) {
             String ans = q.getAnswer();
             if (StringUtils.isBlank(ans)) {
                 continue;
             }
             //找到对应题目的答案
-            Answer a = answers.stream().filter(answer -> answer.getNumber() == q.getNumber())
-                    .findFirst().orElse(null);
+//            Answer a = answers.stream().filter(answer -> answer.getNumber() == q.getNumber())
+//                    .findFirst().orElse(null);
+            Answer a = mapAnswers.getOrDefault(q.getNumber(), null);
             if (a == null || StringUtils.isBlank(a.getOptions())) {
+                AnswerContrast contrast = new AnswerContrast(q.getId(), q.getNumber(), a == null ? "" : a.getOptions(), ans);
+                contrasts.add(contrast);
                 continue;
             }
             //检测答案的对错,如果答案为空或者全部对上该题目正确
@@ -97,6 +105,7 @@ public class PaperResultService {
         }
         //对的选项进行升序排序
         collectQuestion.sort(Integer::compareTo);
+        result.setWrongAnswerContrast(ObjectUtil.object2Json(contrasts));
         result.setCollectQuestion(StringUtils.join(collectQuestion, ","));
         //错误选项
         List<Integer> wrongQuestions = generateWrongQuestion(paper, collectQuestion);
@@ -108,7 +117,8 @@ public class PaperResultService {
         result.setScore(totalScore == 0 ? score : s);
         result.setTotalScore(totalScore);
         paperResultRepo.save(result);
-        logger.info("答案分析保存成功");
+        logger.info("答案分析保存成功,pid={},uid={},name={},score={},collectQuestion={}", paper.getId(),
+                paperCommit.getUid(), paperCommit.getName(), result.getScore(), result.getCollectQuestion());
         return Result.ok(result);
     }
 

+ 3 - 2
src/main/java/edu/math/diagnosis/util/MD5Util.java

@@ -3,6 +3,7 @@ package edu.math.diagnosis.util;
 import org.springframework.util.DigestUtils;
 
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 /**
  * @AUTHOR: DaiFengWen
@@ -13,7 +14,7 @@ public enum MD5Util {
     INSTANCE;
 
     public String md5(String value) {
-        byte[] bytes = DigestUtils.md5Digest(value.getBytes(Charset.forName("UTF-8")));
-        return new String(bytes, Charset.forName("UTF-8"));
+        byte[] bytes = DigestUtils.md5Digest(value.getBytes(StandardCharsets.UTF_8));
+        return new String(bytes, StandardCharsets.UTF_8);
     }
 }

+ 2 - 2
src/main/resources/application-dev.properties

@@ -24,8 +24,8 @@ spring.redis.database=0
 spring.redis.password=134679258Aa_
 spring.redis.host=${serverAddress}
 spring.redis.port=32578
-local.uploadUrl=http://${serverAddress}:9001/file/upload
-local.downloadUrl=http://${serverAddress}:9001/file/download/
+#local.uploadUrl=http://${serverAddress}:9001/file/upload
+#local.downloadUrl=http://${serverAddress}:9001/file/download/
 
 minio.url=http://${serverAddress}:30240/
 #minio.url=https://minio.yaoxiangedu.com/

+ 4 - 4
src/main/resources/application-docker.properties

@@ -14,10 +14,10 @@ spring.datasource.password=134679258Aa_
 
 spring.redis.database=0
 spring.redis.password=134679258Aa_
-spring.redis.host=${serverAddress}
-spring.redis.port=32578
-local.uploadUrl=http://${serverAddress}:9001/file/upload
-local.downloadUrl=http://${serverAddress}:9001/file/download/
+spring.redis.host=redis-master
+spring.redis.port=6379
+#local.uploadUrl=http://${serverAddress}:9001/file/upload
+#local.downloadUrl=http://${serverAddress}:9001/file/download/
 
 
 minio.url=http://${serverAddress}:30240/