Browse Source

Merge remote-tracking branch 'origin/master'

zengxj 5 năm trước cách đây
mục cha
commit
ec83817c5b

+ 1 - 1
src/main/java/com/yaoxiang/diagnosis/controller/PaperController.java

@@ -54,7 +54,7 @@ public class PaperController {
     @ApiOperation(value = "查询单个试卷  ")
     @RequestMapping(value = "/getOnePaper/{id}", method = RequestMethod.GET)
     public Paper getOnePaper(@PathVariable Long id) {
-        return paperService.getOnePaper(id);
+        return paperService.getOneWithAuth(id);
     }
 
     //    @PreAuthorize("hasRole('ROLE_ADMIN')")

+ 1 - 1
src/main/java/com/yaoxiang/diagnosis/controller/PaperResultController.java

@@ -46,7 +46,7 @@ public class PaperResultController {
     @GetMapping("/rebuildByPidAndUid")
     @ApiOperation("重新生成报告结果,方便测试")
     public Result rebuild(Long pid, Long uid) {
-        PaperCommit commit = paperCommitRepo.findByPidAndUid(pid, uid);
+        PaperCommit commit = paperCommitRepo.findByPidAndUidOrderByCreatetimeDesc(pid, uid).get(0);
         Paper paper = paperService.getOnePaper(commit.getPid());
         paperResultService.checkAndDelete(paper.getId(), commit.getUid());
         return paperResultService.parseResult(commit, paper);

+ 16 - 2
src/main/java/com/yaoxiang/diagnosis/controller/SpecialReportController.java

@@ -23,9 +23,15 @@ public class SpecialReportController {
     private SpecialReportService specialReportService;
 
     @GetMapping("/generate")
-    @ApiOperation("生成专项诊断第一页知识点报告")
+    @ApiOperation("学生端 生成专项诊断第一页知识点报告 ")
     public SpecialResult generate(Long pid, Long uid) {
-        return specialReportService.generate2(pid, uid);
+        return specialReportService.generate(pid, uid);
+    }
+
+    @GetMapping("/generate1")
+    @ApiOperation("管理端 生成专项诊断第一页知识点报告")
+    public SpecialResult generate(Long resultId) {
+        return specialReportService.generate(resultId);
     }
 
     @GetMapping("/generateMind")
@@ -36,6 +42,14 @@ public class SpecialReportController {
         return list;
     }
 
+    @GetMapping("/generateMind1")
+    @ApiOperation("管理端 生成专项诊断第二页思维过程报告")
+    public List<SpecialMindVo> generateMind(Long resultId) {
+        List<SpecialMindVo> list = specialReportService.generateMind(resultId);
+        list.sort(Comparator.comparingInt(SpecialMindVo::getSort));
+        return list;
+    }
+
 //    @GetMapping("/generate2")
 //    public SpecialResult generate2(Long pid,Long uid){
 //        return specialReportService.generate2(pid,uid);

+ 1 - 1
src/main/java/com/yaoxiang/diagnosis/dao/PaperCommitRepo.java

@@ -20,7 +20,7 @@ public interface PaperCommitRepo extends JpaRepository<PaperCommit, Long> {
 
     boolean existsByPidAndUid(Long pid, Long uid);
 
-    PaperCommit findByPidAndUid(Long pid, Long uid);
+    List<PaperCommit> findByPidAndUidOrderByCreatetimeDesc(Long pid, Long uid);
 
     boolean existsByCode(String code);
 }

+ 1 - 1
src/main/java/com/yaoxiang/diagnosis/dao/PaperResultRepo.java

@@ -15,7 +15,7 @@ import java.util.List;
 @Repository
 public interface PaperResultRepo extends JpaRepository<PaperResult, Long> {
 
-    List<PaperResult> findByPidAndUid(Long pid, Long uid);
+    List<PaperResult> findByPidAndUidOrderByCreatetimeDesc(Long pid, Long uid);
 
     int deleteByPidAndUid(Long pid, Long uid);
 

+ 11 - 0
src/main/java/com/yaoxiang/diagnosis/entity/PaperResult.java

@@ -4,6 +4,7 @@ import com.yaoxiang.diagnosis.model.AbilityEvaluateVo;
 import com.yaoxiang.diagnosis.model.AnswerContrast;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
 import org.hibernate.annotations.CreationTimestamp;
 
 import javax.persistence.*;
@@ -29,6 +30,8 @@ public class PaperResult {
     private Long uid;
     @Column(nullable = false)
     private Long pid;
+    @ApiModelProperty("commitId")
+    private Long cid;
 
     @ApiModelProperty("试卷编号")
     private String code;
@@ -257,6 +260,14 @@ public class PaperResult {
         this.pid = pid;
     }
 
+    public Long getCid() {
+        return cid;
+    }
+
+    public void setCid(Long cid) {
+        this.cid = cid;
+    }
+
     public Date getCreatetime() {
         return createtime;
     }

+ 9 - 0
src/main/java/com/yaoxiang/diagnosis/model/PaperResultVo.java

@@ -17,6 +17,7 @@ public class PaperResultVo {
     private String uname;
     private String username;
     private String region;
+    private Long cid;
 
     public Long getId() {
         return id;
@@ -121,4 +122,12 @@ public class PaperResultVo {
     public void setRegion(String region) {
         this.region = region;
     }
+
+    public Long getCid() {
+        return cid;
+    }
+
+    public void setCid(Long cid) {
+        this.cid = cid;
+    }
 }

+ 6 - 2
src/main/java/com/yaoxiang/diagnosis/service/CommitService.java

@@ -167,8 +167,12 @@ public class CommitService {
         return paperCommitRepo.findByPidOrNameContaining(pid, name);
     }
 
-    public PaperCommit getPaperCommit(Long pid, Long uid) {
-        return paperCommitRepo.findByPidAndUid(pid, uid);
+    public List<PaperCommit> getPaperCommit(Long pid, Long uid) {
+        return paperCommitRepo.findByPidAndUidOrderByCreatetimeDesc(pid, uid);
+    }
+
+    public PaperCommit findByCommit(Long commitId) {
+        return paperCommitRepo.getOne(commitId);
     }
 
     public boolean hasCommit(Long pid, Long uid) {

+ 11 - 5
src/main/java/com/yaoxiang/diagnosis/service/PaperResultService.java

@@ -56,9 +56,9 @@ public class PaperResultService {
     private static final Logger logger = LoggerFactory.getLogger(PaperResultService.class);
 
     public Result parseResult(Long pid, Long uid) {
-        PaperCommit commit = paperCommitRepo.findByPidAndUid(pid, uid);
+        List<PaperCommit> commit = paperCommitRepo.findByPidAndUidOrderByCreatetimeDesc(pid, uid);
         Paper paper = paperService.getOnePaper(pid);
-        return parseResult(commit, paper);
+        return parseResult(commit.get(0), paper);
     }
 
     @SuppressWarnings("unchecked")
@@ -69,10 +69,12 @@ public class PaperResultService {
         Map<Integer, Answer> mapAnswers = answers.stream().collect(Collectors.toMap(Answer::getNumber, Function.identity()));
         List<Integer> collectQuestion = new ArrayList<>();
         PaperResult result = new PaperResult();
+        result.setCid(paperCommit.getId());
         result.setPid(paperCommit.getPid());
         result.setName(paperCommit.getName());
         result.setUid(paperCommit.getUid());
         result.setCode(paperCommit.getCode());
+        logger.info("commit paper,pid={},uid={},answer={}", paperCommit.getPid(), paperCommit.getUid(), paperCommit.getJsonAns());
 //        result.setScore(0d);
 //        result.setJsonScore("");
 //        result.setCollectQuestion("");
@@ -92,6 +94,7 @@ public class PaperResultService {
 //            Answer a = answers.stream().filter(answer -> answer.getNumber() == q.getNumber())
 //                    .findFirst().orElse(null);
             Answer a = mapAnswers.getOrDefault(q.getNumber(), null);
+            logger.info("number={},answer={},options={}", q.getNumber(), ans, a.getOptions());
             if (a == null || StringUtils.isBlank(a.getOptions())) {
                 String options = a == null ? "" : a.getOptions();
                 Long useTime = a == null ? 0L : a.getUseTime() == null ? 0L : a.getUseTime();
@@ -119,10 +122,13 @@ public class PaperResultService {
         }
         //对的选项进行升序排序
         collectQuestion.sort(Integer::compareTo);
+        logger.info("collect question={}", collectQuestion);
+        logger.info("answer contrasts={}", contrasts);
         result.setWrongAnswerContrast(ObjectUtil.object2Json(contrasts));
         result.setCollectQuestion(StringUtils.join(collectQuestion, ","));
         //错误选项
         List<Integer> wrongQuestions = generateWrongQuestion(paper, collectQuestion);
+        logger.info("wrong question={}", wrongQuestions);
         result.setWrongQuestion(StringUtils.join(wrongQuestions, ","));
         result.setJsonScore(ObjectUtil.object2Json(pData));
         //转换分数为百分制
@@ -149,7 +155,7 @@ public class PaperResultService {
     }
 
     public List<PaperResult> findByPidAndUid(Long pid, Long uid) {
-        return paperResultRepo.findByPidAndUid(pid, uid);
+        return paperResultRepo.findByPidAndUidOrderByCreatetimeDesc(pid, uid);
     }
 
     public int delete(Long pid, Long uid) {
@@ -164,7 +170,7 @@ public class PaperResultService {
     }
 
     public void globalResult(PaperResult r) {
-        PaperCommit commit = paperCommitRepo.findByPidAndUid(r.getPid(), r.getUid());
+        PaperCommit commit = paperCommitRepo.findByPidAndUidOrderByCreatetimeDesc(r.getPid(), r.getUid()).get(0);
         Paper paper = paperService.getOnePaper(r.getPid());
         //知识点掌握率
         r.setKnowledgeRate(knowledgeRate(r, paper));
@@ -685,7 +691,7 @@ public class PaperResultService {
             return paperResultRepo.findByUidOrderByCreatetimeDesc(uid);
         }
         if (uid != null) {
-            return paperResultRepo.findByPidAndUid(pid, uid);
+            return paperResultRepo.findByPidAndUidOrderByCreatetimeDesc(pid, uid);
         }
         return paperResultRepo.findByPidOrderByCreatetimeDesc(pid);
     }

+ 20 - 5
src/main/java/com/yaoxiang/diagnosis/service/PaperService.java

@@ -96,7 +96,7 @@ public class PaperService {
         return papers;
     }
 
-    public Paper getOnePaper(Long id) {
+    public Paper getOneWithAuth(Long id) {
         AuthUser user = SecurityUtil.getCurrentUser();
         boolean student = Constants.USER_TYPE_STUDENT.equals(user.getUser().getUserType());
         Paper paper = paperRepo.findById(id).orElse(null);
@@ -106,18 +106,21 @@ public class PaperService {
         List<Question> questions = questionRepo.findByPidOrderBySectionAscNumberAsc(id);
         List<Section> sections = sectionService.findByPid(id);
         paper.setSections(sections);
-        paper.setQuestions(questions);
+//        paper.setQuestions(questions);
         List<Long> qids = questions.stream().map(Question::getId).collect(Collectors.toList());
         //一次查出该试卷所有的选项
         List<QuestionOption> options = optionRepo.findByQidIn(qids);
         //然后根据Id进行分组
+        List<Question> qs = new ArrayList<>();
         Map<Long, List<QuestionOption>> group = options.stream().collect(Collectors.groupingBy(QuestionOption::getQid));
         for (Question question : questions) {
+            Question q = ObjectUtil.convert(question, Question.class);
             List<QuestionOption> optionList = group.get(question.getId());
             List<QuestionOption> os = new ArrayList<>();
             //学生要去掉答案
             if (student) {
-                question.setCorrectNum(0);
+                q.setCorrectNum(0);
+                q.setAnswer(null);
                 //避免自动持久化
                 for (QuestionOption o : optionList) {
                     QuestionOption option = new QuestionOption();
@@ -127,11 +130,23 @@ public class PaperService {
                     option.setQid(o.getQid());
                     os.add(option);
                 }
-                question.setOptions(os);
+                q.setOptions(os);
             } else {
-                question.setOptions(optionList);
+                q.setOptions(optionList);
             }
+            qs.add(q);
+        }
+        paper.setQuestions(qs);
+        return paper;
+    }
+
+    public Paper getOnePaper(Long id) {
+        Paper paper = paperRepo.findById(id).orElse(null);
+        if (paper == null || paper.getStatus() == Constants.NOTREADY) {
+            return null;
         }
+        List<Question> questions = questionRepo.findByPidOrderBySectionAscNumberAsc(id);
+        paper.setQuestions(questions);
         return paper;
     }
 

+ 44 - 81
src/main/java/com/yaoxiang/diagnosis/service/SpecialReportService.java

@@ -43,87 +43,42 @@ public class SpecialReportService {
 
     private static final Logger logger = LoggerFactory.getLogger(SpecialReportService.class);
 
-//    public SpecialResult generate(Long pid, Long uid) {
-//        Paper paper = paperService.getOnePaper(pid);
-//        if (paper == null) {
-//            logger.error("未找到试卷 pid={}", pid);
-//            return null;
-//        }
-//        PaperCommit commit = commitService.getPaperCommit(pid, uid);
-//        if (commit == null) {
-//            logger.error("用户未提交 pid={},uid={}", pid, uid);
-//            return null;
-//        }
-//        return generate(commit, paper);
-//    }
-
-    public SpecialResult generate2(Long pid, Long uid) {
+    public SpecialResult generate(Long pid, Long uid) {
         logger.info("正在生成专项诊断报告");
         Paper paper = paperService.getOnePaper(pid);
         if (paper == null) {
             logger.error("未找到试卷 pid={}", pid);
             return null;
         }
-        PaperCommit commit = commitService.getPaperCommit(pid, uid);
+        PaperCommit commit = commitService.getPaperCommit(pid, uid).get(0);
         if (commit == null) {
             logger.error("用户未提交 pid={},uid={}", pid, uid);
             return null;
         }
-        return generate2(commit, paper);
+        return generate(commit, paper);
     }
 
-    @Transactional(rollbackOn = Exception.class)
-    public SpecialResult generate(PaperCommit commit, Paper paper) {
-        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
-        List<SpecialKnowledge> list = specialKnowledgeService.list(paper.getSubjectId(), paper.getGrade());
-        //找出叶子节点
-        Map<String, SpecialKnowledge> map = list.stream().filter(s -> s.getCode() != null)
-                .collect(Collectors.toMap(SpecialKnowledge::getCode, Function.identity()));
-        if (CommonUtil.isEmpty(list)) {
-            logger.error("未上传专项诊断知识点,subjectId={},grade={}", paper.getSubjectId(), paper.getGrade());
+    public SpecialResult generate(Long resultId) {
+        logger.info("正在生成专项诊断报告");
+        PaperResult result = paperResultService.get(resultId);
+        if (result == null) {
+            logger.error("未找到报告 paperResultId={}", resultId);
             return null;
         }
-        if (result == null) {
-            //重新生成PaperResult
-            result = (PaperResult) paperResultService.parseResult(commit, paper).getT();
+        Paper paper = paperService.getOnePaper(result.getPid());
+        if (paper == null) {
+            logger.error("未找到试卷 pid={}", result.getPid());
+            return null;
         }
-        String collect = result.getCollectQuestion();
-        //答对的选项
-        List<Integer> collects = Arrays.stream(collect.split(","))
-                .map(Integer::parseInt).collect(Collectors.toList());
-//        String wrong = result.getWrongQuestion();
-//        String wrongs[] = wrong.split(",");
-        List<Question> questions = paper.getQuestions();
-        Map<String, List<Question>> group = questions.stream().collect(Collectors.groupingBy(Question::getTag));
-        for (Map.Entry<String, List<Question>> entry : group.entrySet()) {
-            String code = entry.getKey();
-            List<Question> qs = entry.getValue();
-            SpecialKnowledge knowledge = map.get(code);
-            if (knowledge == null) {
-                continue;
-            }
-            knowledge.setQuestionNum(qs.size());
-            knowledge.setCollectNum(getCount(qs, collects));
+        PaperCommit commit = commitService.findByCommit(result.getCid());
+        if (commit == null) {
+            logger.error("用户未提交 pid={},uid={}", result.getPid(), result.getUid());
+            return null;
         }
-
-        List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
-        //统计结果并且剪枝,剪掉>3的层级
-        specialKnowledgeService.calcCount(list);
-
-        logger.info(tree.toString());
-        SpecialResult r = new SpecialResult();
-        r.setCode(paper.getCode());
-        r.setCollectQuestion(collect);
-        r.setWrongQuestion(result.getWrongQuestion());
-        r.setScore(result.getScore());
-        r.setTotalScore(result.getTotalScore());
-        r.setPid(result.getPid());
-        r.setUid(result.getUid());
-        r.setKnowledges(tree);
-        return r;
+        return generate(commit, paper);
     }
 
-    public SpecialResult generate2(PaperCommit commit, Paper paper) {
+    public SpecialResult generate(PaperCommit commit, Paper paper) {
         PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
         List<SpecialKnowledge> list = specialKnowledgeService.listByPid(paper.getId());
 
@@ -137,9 +92,11 @@ public class SpecialReportService {
         }
         String collect = result.getCollectQuestion();
         //答对的选项
-        List<Long> collects = Arrays.stream(collect.split(","))
-                .map(Long::parseLong).collect(Collectors.toList());
-
+        List<Long> collects = new ArrayList<>();
+        if (StringUtils.isNotBlank(collect)) {
+            collects = Arrays.stream(collect.split(","))
+                    .map(Long::parseLong).collect(Collectors.toList());
+        }
         boolean complexMaster = list.stream().anyMatch(s -> Constants.SPECIAL_MASTER_STATUS.contains(s.getContent()));
 
         for (SpecialKnowledge knowledge : list) {
@@ -183,20 +140,6 @@ public class SpecialReportService {
         return r;
     }
 
-    private void calcMind(List<SpecialMind> list) {
-
-    }
-
-    private Integer getCount(List<Question> qs, List<Integer> collects) {
-        int count = 0;
-        for (Question q : qs) {
-            if (collects.contains(q.getNumber())) {
-                count++;
-            }
-        }
-        return count;
-    }
-
     public List<SpecialMindVo> generateMind(Long pid, Long uid) {
         logger.info("正在生成专项诊断报告");
         Paper paper = paperService.getOnePaper(pid);
@@ -204,7 +147,7 @@ public class SpecialReportService {
             logger.error("未找到试卷 pid={}", pid);
             return null;
         }
-        PaperCommit commit = commitService.getPaperCommit(pid, uid);
+        PaperCommit commit = commitService.getPaperCommit(pid, uid).get(0);
         if (commit == null) {
             logger.error("用户未提交 pid={},uid={}", pid, uid);
             return null;
@@ -212,6 +155,26 @@ public class SpecialReportService {
         return generateMind(commit, paper);
     }
 
+    public List<SpecialMindVo> generateMind(Long resultId) {
+        logger.info("正在生成专项诊断报告");
+        PaperResult result = paperResultService.get(resultId);
+        if (result == null) {
+            logger.error("未找到报告 paperResultId={}", resultId);
+            return null;
+        }
+        Paper paper = paperService.getOnePaper(result.getPid());
+        if (paper == null) {
+            logger.error("未找到试卷 pid={}", result.getPid());
+            return null;
+        }
+        PaperCommit commit = commitService.findByCommit(result.getCid());
+        if (commit == null) {
+            logger.error("用户未提交 pid={},uid={}", result.getPid(), result.getUid());
+            return null;
+        }
+        return generateMind(commit, paper);
+    }
+
     public List<SpecialMindVo> generateMind(PaperCommit commit, Paper paper) {
         PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid()).get(0);
         List<SpecialMind> list = specialMindService.findByPid(paper.getId());

+ 18 - 0
src/main/resources/application-pre.properties

@@ -0,0 +1,18 @@
+server.port=8080
+spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/
+
+spring.datasource.url=jdbc:mysql://mysql:3306/OnlinePapers?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
+spring.datasource.username=onlinepapers
+spring.datasource.password=134679258Aa_
+
+spring.redis.database=0
+spring.redis.password=134679258Aa_
+spring.redis.host=redis-master
+spring.redis.port=6379
+
+minio.url=https://minio.yaoxiangedu.com/
+minio.secure=true
+minio.buckets=prod
+minio.defaultBucket=prod
+minio.accessKey=admin
+minio.secretKey=#admin123!