Browse Source

完成学生测评后的结果记录接口

4228306 6 years ago
parent
commit
dca5cbacbf

+ 26 - 6
src/main/java/edu/math/diagnosis/entity/PaperResult.java

@@ -45,8 +45,19 @@ public class PaperResult {
     @ApiModelProperty("试卷分数")
     private String jsonScore;
 
-    @Transient
-    private List<AbilityScore> scores;
+    @Lob
+    @Column(nullable = false)
+    @ApiModelProperty("正确情况")
+    /**
+     *
+     * 1,2
+     */
+    private String collectQuestion;
+
+//    @Transient
+//    private List<AbilityScore> scores;
+
+    public PaperResult(){}
 
     public Long getId() {
         return id;
@@ -152,11 +163,20 @@ public class PaperResult {
         this.jsonScore = jsonScore;
     }
 
-    public List<AbilityScore> getScores() {
-        return scores;
+//    public List<AbilityScore> getScores() {
+//        return scores;
+//    }
+//
+//    public void setScores(List<AbilityScore> scores) {
+//        this.scores = scores;
+//    }
+
+
+    public String getCollectQuestion() {
+        return collectQuestion;
     }
 
-    public void setScores(List<AbilityScore> scores) {
-        this.scores = scores;
+    public void setCollectQuestion(String collectQuestion) {
+        this.collectQuestion = collectQuestion;
     }
 }

+ 53 - 1
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -4,10 +4,19 @@ import edu.math.diagnosis.dao.PaperResultRepo;
 import edu.math.diagnosis.entity.Paper;
 import edu.math.diagnosis.entity.PaperCommit;
 import edu.math.diagnosis.entity.PaperResult;
+import edu.math.diagnosis.entity.Question;
+import edu.math.diagnosis.model.Answer;
 import edu.math.diagnosis.model.Result;
+import edu.math.diagnosis.util.ObjectUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 @Service
 public class PaperResultService {
@@ -17,8 +26,51 @@ public class PaperResultService {
     @Resource
     private PaperService paperService;
 
-    public Result parseResult(PaperCommit paperCommit, Paper paper) {
+    private static final Logger logger = LoggerFactory.getLogger(PaperResultService.class);
 
+    @SuppressWarnings("unchecked")
+    public Result parseResult(PaperCommit paperCommit, Paper paper) {
+        List<Question> questions = paper.getQuestions();
+        List<Answer> answers = paperCommit.getAnswers();
+        List<Integer> collectQuestion = new ArrayList<>();
+        PaperResult result = new PaperResult();
+        result.setPid(paperCommit.getPid());
+        result.setName(paperCommit.getName());
+        result.setUid(String.valueOf(paperCommit.getUid()));
+//        result.setScore(0d);
+//        result.setJsonScore("");
+//        result.setCollectQuestion("");
+        //TODO 需要修改强转
+        Map<String,Double> pData = ObjectUtil.json2Object(paper.getJsonScore(),Map.class);
+        //清空value为0
+        pData.keySet().forEach(d->pData.put(d,0d));
+        int count = 0;
+        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);
+            if(a == null || StringUtils.isBlank(a.getOptions())){
+                continue;
+            }
+            if(ans.equalsIgnoreCase(a.getOptions())){
+                count++;
+                collectQuestion.add(q.getNumber());
+                String jsonScore = q.getJsonScore();
+                Map<String,Double> qData = ObjectUtil.json2Object(jsonScore,Map.class);
+                pData.keySet().forEach(d->{
+                    Double pData0 = qData.getOrDefault(d,0d) + pData.get(d);
+                    pData.put(d,pData0);
+                });
+            }
+        }
+        result.setCollectQuestion(StringUtils.join(collectQuestion,","));
+        result.setJsonScore(ObjectUtil.object2Json(pData));
+        result.setScore((double) count);
+        paperResultRepo.save(result);
+        logger.info("答案分析保存成功");
         return Result.ok();
     }
 

+ 21 - 6
src/main/java/edu/math/diagnosis/service/PaperService.java

@@ -111,12 +111,12 @@ public class PaperService {
         paper.setQuestions(questions);
         for (Question question : questions) {
             List<QuestionOption> options = optionRepo.findByQid(question.getId());
-            for (QuestionOption option : options) {
+//            for (QuestionOption option : options) {
                 //todo 判断是否考生,如是  将答案设为null
-/*                option.setCorrect(null);
-                option.setUpdatetime(null);
-                option.setCreatetime(null);*/
-            }
+//               option.setCorrect(null);
+//                option.setUpdatetime(null);
+//                option.setCreatetime(null);
+//            }
             question.setOptions(options);
         }
         return paper;
@@ -144,11 +144,21 @@ public class PaperService {
         if (save == null) {
             return Result.fail("保存失败,请重试");
         }
+        //init json score
+        Map<String,Double> data = new HashMap<>();
+        List<SubjectAbility> abilities = subjectAbilityService.list(String.valueOf(paper.getSubjectId()));
+        //初始化数据
+        abilities.forEach(a->data.put(a.getCode(),0d));
+        data.put("A0", (double) save.getQuestions().size());
+
         for (Question question : save.getQuestions()) {
             question.setPid(save.getId());
             //保存问题
             questionService.addQuestion(question);
             for (AbilityScore score:question.getScores()) {
+                Double d = data.getOrDefault(score.getAbilityCode(),0d);
+                d+=score.getScore();
+                data.put(score.getAbilityCode(),d);
                 score.setGrade(paper.getGrade());
                 score.setPid(save.getId());
                 score.setQid(question.getId());
@@ -161,6 +171,9 @@ public class PaperService {
             //保存段落
             sectionService.add(section);
         }
+        String jsonScore = ObjectUtil.object2Json(data);
+        paper.setJsonScore(jsonScore);
+        paperRepo.saveAndFlush(paper);
         logger.info("试卷增加成功");
         return Result.ok(paper);
     }
@@ -373,7 +386,9 @@ public class PaperService {
 
     private Paper init(PaperVo paperVo, String url) {
         Paper paper = ObjectUtil.convert(paperVo, Paper.class);
-        paper.setDocxUrl(url);
+        if(paper != null) {
+            paper.setDocxUrl(url);
+        }
         return paper;
     }