Преглед изворни кода

Merge branch 'dev' of feick/diagnosis into master

feick пре 5 година
родитељ
комит
7bff412318

+ 1 - 0
src/main/frontend/nginx.conf

@@ -26,6 +26,7 @@ http {
         #error_log /usr/share/nginx/logs/error.log;
         #access_log  /usr/share/nginx/logs/host.access.log;
 
+        # /rest/diagnosis/login  --> /login
     	location /rest/diagnosis/ {
     	    proxy_pass http://diagnosis:8080/;
     	    #proxy_set_header   Host             $host;

+ 3 - 0
src/main/java/com/yaoxiang/diagnosis/config/Constants.java

@@ -112,4 +112,7 @@ public class Constants {
     public static final int PAPER_STATUS_PREPARE = 0;
     public static final int PAPER_STATUS_READY = 1;
     public static final int PAPER_STATUS_INVALIDATE = 2;
+
+    public static final String SPECIAL_KNOWLEDGE_MASTER = "掌握";
+    public static final String SPECIAL_KNOWLEDGE_UNMASTER  = "未掌握";
 }

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

@@ -57,14 +57,14 @@ public class PaperController {
         return paperService.getOnePaper(id);
     }
 
-//    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    //    @PreAuthorize("hasRole('ROLE_ADMIN')")
     @ApiOperation(value = "新增试卷")
     @RequestMapping(value = "/add", method = RequestMethod.POST)
     public Result add(@RequestBody Paper paper) {
         return paperService.add(paper);
     }
 
-//    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    //    @PreAuthorize("hasRole('ROLE_ADMIN')")
     @ApiOperation(value = "编辑试卷")
     @RequestMapping(value = "/update", method = RequestMethod.POST)
     public Result update(@RequestBody Paper paper) {
@@ -73,13 +73,13 @@ public class PaperController {
 
     @PostMapping("/invalidate")
     @ApiOperation(value = "作废试卷")
-    public Result invalidate(Long pid){
+    public Result invalidate(Long pid) {
         Paper paper = paperService.getOnePaper(pid);
         paper.setStatus(Constants.PAPER_STATUS_INVALIDATE);
         return paperService.update(paper);
     }
 
-//    @PreAuthorize("hasRole('ROLE_ADMIN')")
+    //    @PreAuthorize("hasRole('ROLE_ADMIN')")
     @ApiOperation(value = "删除试卷")
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
     public void delete(@RequestParam Long id) {

+ 11 - 0
src/main/java/com/yaoxiang/diagnosis/controller/SpecialReportController.java

@@ -1,13 +1,24 @@
 package com.yaoxiang.diagnosis.controller;
 
+import com.yaoxiang.diagnosis.entity.SpecialResult;
+import com.yaoxiang.diagnosis.service.SpecialReportService;
 import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+
 @Api(tags="专项诊断报告")
 @RestController
 @RequestMapping("/specialReport")
 public class SpecialReportController {
 
+    @Resource
+    private SpecialReportService specialReportService;
 
+    @GetMapping("/generate")
+    public SpecialResult generate(Long pid,Long uid){
+        return specialReportService.generate(pid,uid);
+    }
 }

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

@@ -85,6 +85,9 @@ public class Paper {
     @ApiModelProperty("科目类别Id")
     private Long subjectId;
 
+    @ApiModelProperty("是否使用能力机制")
+    private Boolean useAbility;
+
     @Lob
     @Column
     @ApiModelProperty("试卷分数 可无")
@@ -274,4 +277,12 @@ public class Paper {
     public void setScores(List<AbilityScore> scores) {
         this.scores = scores;
     }
+
+    public Boolean getUseAbility() {
+        return useAbility;
+    }
+
+    public void setUseAbility(Boolean useAbility) {
+        this.useAbility = useAbility;
+    }
 }

+ 29 - 4
src/main/java/com/yaoxiang/diagnosis/entity/SpecialKnowledge.java

@@ -1,5 +1,6 @@
 package com.yaoxiang.diagnosis.entity;
 
+import com.yaoxiang.diagnosis.config.Constants;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.persistence.*;
@@ -54,10 +55,18 @@ public class SpecialKnowledge {
 
     @Transient
     @ApiModelProperty("掌握率")
-    private Double master;
+    private Double master = 100.0;
     @Transient
     @ApiModelProperty("掌握情况")
-    private Double masterStatus;
+    private String masterStatus = Constants.SPECIAL_KNOWLEDGE_MASTER;
+
+    @Transient
+    @ApiModelProperty("该知识点拥有的题目数量")
+    private Integer questionNum;
+
+    @Transient
+    @ApiModelProperty("该知识点答对的数量")
+    private Integer collectNum;
 
     @Transient
     private SpecialKnowledge parent;
@@ -161,14 +170,30 @@ public class SpecialKnowledge {
         this.master = master;
     }
 
-    public Double getMasterStatus() {
+    public String getMasterStatus() {
         return masterStatus;
     }
 
-    public void setMasterStatus(Double masterStatus) {
+    public void setMasterStatus(String masterStatus) {
         this.masterStatus = masterStatus;
     }
 
+    public Integer getQuestionNum() {
+        return questionNum;
+    }
+
+    public void setQuestionNum(Integer questionNum) {
+        this.questionNum = questionNum;
+    }
+
+    public Integer getCollectNum() {
+        return collectNum;
+    }
+
+    public void setCollectNum(Integer collectNum) {
+        this.collectNum = collectNum;
+    }
+
     @Override
     public String toString() {
         return "SpecialKnowledge{" +

+ 4 - 0
src/main/java/com/yaoxiang/diagnosis/service/CommitService.java

@@ -165,6 +165,10 @@ public class CommitService {
         return paperCommitRepo.findByPidOrNameContaining(pid, name);
     }
 
+    public PaperCommit getPaperCommit(Long pid, Long uid) {
+        return paperCommitRepo.findByPidAndUid(pid, uid);
+    }
+
     public boolean hasCommit(Long pid, Long uid) {
         return paperCommitRepo.existsByPidAndUid(pid, uid);
     }

+ 9 - 3
src/main/java/com/yaoxiang/diagnosis/service/PaperService.java

@@ -130,7 +130,7 @@ public class PaperService {
     }
 
     public Result add(Paper paper) {
-        if (hasPaper(paper.getName())) {
+        if (hasPaper(paper.getName(), paper.getTypeId())) {
             return Result.fail("存在同名试卷");
         }
         paper.setId(null);
@@ -142,7 +142,7 @@ public class PaperService {
 
     @Transactional(rollbackFor = Exception.class)
     public Result addWithQuestion(Paper paper) {
-        if (hasPaper(paper.getName())) {
+        if (hasPaper(paper.getName(), paper.getTypeId())) {
             String msg = "存在同名试卷";
             logger.info(msg + " " + paper.getName());
             return Result.fail(msg);
@@ -181,6 +181,11 @@ public class PaperService {
             //保存段落
             sectionService.add(section);
         }
+        //不使用能力计分,并且能力数量大于0
+        if (!paper.getUseAbility() && abilities.size() > 0) {
+            //put第一个能力进去
+            data.put(abilities.get(0).getCode(), (double) paper.getQuestions().size());
+        }
         String jsonScore = ObjectUtil.object2Json(data);
         paper.setTotalScore((int) totalScore);
         paper.setJsonScore(jsonScore);
@@ -189,9 +194,10 @@ public class PaperService {
         return Result.ok(paper);
     }
 
-    public boolean hasPaper(String name) {
+    public boolean hasPaper(String name, Long typeId) {
         Paper check = new Paper();
         check.setName(name);
+        check.setTypeId(typeId);
         check.setStatus(Constants.READY);
         Example<Paper> example = Example.of(check);
         List<Paper> papers = paperRepo.findAll(example);

+ 82 - 0
src/main/java/com/yaoxiang/diagnosis/service/SpecialReportService.java

@@ -1,8 +1,19 @@
 package com.yaoxiang.diagnosis.service;
 
+import com.yaoxiang.diagnosis.entity.*;
+import com.yaoxiang.diagnosis.util.CommonUtil;
+import io.swagger.models.auth.In;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.transaction.Transactional;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 public class SpecialReportService {
@@ -10,5 +21,76 @@ public class SpecialReportService {
     @Resource
     private CommitService commitService;
 
+    @Resource
+    private PaperResultService paperResultService;
+
+    @Resource
+    private PaperService paperService;
+
+    @Resource
+    private SpecialKnowledgeService specialKnowledgeService;
+
+    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);
+    }
+
+    @Transactional(rollbackOn = Exception.class)
+    public SpecialResult generate(PaperCommit commit, Paper paper) {
+        PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid());
+        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());
+            return null;
+        }
+        if (result == null) {
+            result = (PaperResult) paperResultService.parseResult(commit, paper).getT();
+        }
+        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));
+        }
+
+        List<SpecialKnowledge> tree = specialKnowledgeService.toTree(list);
+        logger.info(tree.toString());
+        return null;
+    }
+
+    private Integer getCount(List<Question> qs, List<Integer> collects) {
+        int count = 0;
+        for (Question q : qs) {
+            if (collects.contains(q.getNumber())) {
+                count++;
+            }
+        }
+        return count;
+    }
 
 }