Browse Source

增加报告中,诊断编号code生成,将报告中一些统计信息存储到PaperCount

4228306 6 năm trước cách đây
mục cha
commit
e41d0f2aee

+ 23 - 3
src/main/java/edu/math/diagnosis/controller/ReportController.java

@@ -3,13 +3,14 @@ package edu.math.diagnosis.controller;
 import edu.math.diagnosis.entity.Paper;
 import edu.math.diagnosis.entity.PaperResult;
 import edu.math.diagnosis.entity.UserInfo;
-import edu.math.diagnosis.model.Constants;
 import edu.math.diagnosis.model.Result;
 import edu.math.diagnosis.service.PaperResultService;
 import edu.math.diagnosis.service.PaperService;
+import edu.math.diagnosis.service.SubjectService;
 import edu.math.diagnosis.service.UserService;
 import edu.math.diagnosis.util.CommonUtil;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -30,6 +31,8 @@ public class ReportController {
     private PaperService paperService;
     @Resource
     private PaperResultService paperResultService;
+    @Resource
+    private SubjectService subjectService;
 
     @GetMapping("generate")
     public Result generateAll() {
@@ -43,21 +46,38 @@ public class ReportController {
     }
 
     @GetMapping("userInfo")
+    @ApiOperation("获取报告中用户的个人信息")
     public Result userInfo(Long uid, Long pid) {
         UserInfo info = userService.getSimpleUser(uid);
+        if (info == null) {
+            return Result.fail("未找到用户");
+        }
         Paper paper = paperService.getOnePaper(pid);
+        if (paper == null) {
+            return Result.fail("未找到试卷");
+        }
         List<PaperResult> paperResults = paperResultService.findByUidAndPid(String.valueOf(pid), String.valueOf(uid));
         if (CommonUtil.isEmpty(paperResults)) {
-            return Result.fail("未找到提交的试卷");
+            return Result.fail("未找到提交的试卷结果");
         }
         PaperResult paperResult = paperResults.get(0);
         Map<String, Object> result = new HashMap<>();
         result.put("name", info.getName());
         result.put("grade", paper.getGrade());
-        result.put("subject", Constants.SUBJECT_MAS);
+        result.put("subject", subjectService.get(paper.getSubjectId()));
         result.put("diagnosisTime", paperResult.getCreatetime());
         result.put("code", paperResult.getCode());
+        result.put("paperResultId", paperResult.getId());
         return Result.ok(result);
 
     }
+
+//    private Result check()
+
+    @GetMapping("globalResult")
+    public Result globalResult(Long paperResultId) {
+
+        return Result.fail("not implements");
+    }
+
 }

+ 2 - 0
src/main/java/edu/math/diagnosis/dao/PaperCommitRepo.java

@@ -19,4 +19,6 @@ public interface PaperCommitRepo extends JpaRepository<PaperCommit, Long> {
     List<PaperCommit> findByPid(Long pid);
 
     boolean existsByPidAndUid(Long pid, Long uid);
+
+    boolean existsByCode(String code);
 }

+ 35 - 0
src/main/java/edu/math/diagnosis/entity/PaperCount.java

@@ -0,0 +1,35 @@
+package edu.math.diagnosis.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.persistence.Entity;
+
+@Entity
+@ApiModel("试卷提交统计信息")
+public class PaperCount {
+
+    private Long id;
+    private Long pid;
+
+    /**
+     * {
+     *     '0':88.88
+     *     '1':25.33,
+     * }
+     */
+    @ApiModelProperty("各章节知识点平均掌握率")
+    private String knowledgeAvgRate;
+
+    /**
+     * 还是说直接一个数组?
+     * {
+     *     "1":20,
+     *     "2":20,
+     *     "3":20
+     * }
+     */
+    private String useTimeAgvRate;
+
+
+}

+ 18 - 0
src/main/java/edu/math/diagnosis/service/CommitService.java

@@ -8,6 +8,7 @@ import edu.math.diagnosis.entity.*;
 import edu.math.diagnosis.model.Answer;
 import edu.math.diagnosis.model.QuestionDetail;
 import edu.math.diagnosis.model.Result;
+import edu.math.diagnosis.util.CodeUtil;
 import edu.math.diagnosis.util.CommonUtil;
 import edu.math.diagnosis.util.ObjectUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -124,6 +125,10 @@ public class CommitService {
                 a.setUseTime(0L);
             }
         });
+
+        String code = generateCode();
+        paperCommit.setCode(code);
+
         String jsonAns = ObjectUtil.object2Json(answers);
         paperCommit.setJsonAns(jsonAns);
         paperCommitRepo.save(paperCommit);
@@ -155,4 +160,17 @@ public class CommitService {
         boolean exist = paperCommitRepo.existsByPidAndUid(pid, uid);
         return new Result(exist);
     }
+
+    private String generateCode() {
+        String code;
+        int count = 0;
+        do {
+            code = CodeUtil.generateByTime();
+            count++;
+        } while (paperCommitRepo.existsByCode(code) && count < 10);
+        if (count == 0) {
+            code = CodeUtil.generateByTime(CodeUtil.DEFAULT_LENGTH + 4, CodeUtil.DIGEST);
+        }
+        return code;
+    }
 }

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

@@ -38,6 +38,7 @@ public class PaperResultService {
         result.setPid(paperCommit.getPid());
         result.setName(paperCommit.getName());
         result.setUid(String.valueOf(paperCommit.getUid()));
+        result.setCode(paperCommit.getCode());
 //        result.setScore(0d);
 //        result.setJsonScore("");
 //        result.setCollectQuestion("");

+ 4 - 0
src/main/java/edu/math/diagnosis/service/SubjectService.java

@@ -15,4 +15,8 @@ public class SubjectService {
     public Subject findByName(String name) {
         return subjectRepo.findByName(name);
     }
+
+    public Subject get(Long id){
+        return subjectRepo.getOne(id);
+    }
 }

+ 58 - 0
src/main/java/edu/math/diagnosis/util/CodeUtil.java

@@ -0,0 +1,58 @@
+package edu.math.diagnosis.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+/**
+ * Created by Feick on 2018/07/25.
+ */
+public class CodeUtil {
+
+    public static final String DIGEST = "0123456789";
+    public static final String ALPHA = "abcdefghijklmnopqrstuvwxyzABCDEFGHIZJLMNOPQRSTUVWXYZ";
+    public static final String SPECIAL_CHAR = "~!@#$%^&*()_+<>?:\"{}|,./;'[]\\`-=";
+
+    public static final String DIGEST_ALPHA = DIGEST + ALPHA;
+
+    public static final int DEFAULT_LENGTH = 8;
+
+    public static final String DEFAULT_TIME_PATTERN = "yyyyMMdd";
+
+    public static final String DIGEST_ALPHA_SPECIAL_CHAR = DIGEST_ALPHA + SPECIAL_CHAR;
+
+    public static String generate(String pattern) {
+        return generate(DEFAULT_LENGTH, pattern);
+    }
+
+    public static String generate(int length, String patten) {
+        StringBuilder builder = new StringBuilder();
+        Random random = new Random(System.nanoTime());
+        for (int i = 0; i < length; i++) {
+            int index = random.nextInt(patten.length());
+            builder.append(patten.charAt(index));
+        }
+        return builder.toString();
+    }
+
+    public static String generate(String prefix, String suffix, String pattern) {
+        return generate(prefix, suffix, DEFAULT_LENGTH, pattern);
+    }
+
+    public static String generate(String prefix, String suffix, int length, String pattern) {
+        return prefix + generate(length, pattern) + suffix;
+    }
+
+    public static String generateByTime() {
+        return generateByTime(DEFAULT_TIME_PATTERN, DEFAULT_LENGTH, DIGEST);
+    }
+
+    public static String generateByTime(int length, String pattern) {
+        return generateByTime(DEFAULT_TIME_PATTERN, length, pattern);
+    }
+
+    public static String generateByTime(String timePattern, int length, String pattern) {
+        String date = new SimpleDateFormat(timePattern).format(new Date());
+        return generate(date, "", length, pattern);
+    }
+}