|
@@ -3,15 +3,14 @@ package com.yaoxiang.diagnosis.service;
|
|
|
import com.yaoxiang.diagnosis.entity.*;
|
|
|
import com.yaoxiang.diagnosis.util.CommonUtil;
|
|
|
import io.swagger.models.auth.In;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
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.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -46,6 +45,20 @@ public class SpecialReportService {
|
|
|
return generate(commit, paper);
|
|
|
}
|
|
|
|
|
|
+ public SpecialResult generate2(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 generate2(commit, paper);
|
|
|
+ }
|
|
|
+
|
|
|
@Transactional(rollbackOn = Exception.class)
|
|
|
public SpecialResult generate(PaperCommit commit, Paper paper) {
|
|
|
PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid());
|
|
@@ -58,9 +71,11 @@ public class SpecialReportService {
|
|
|
return null;
|
|
|
}
|
|
|
if (result == null) {
|
|
|
+ //重新生成PaperResult
|
|
|
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();
|
|
@@ -95,6 +110,54 @@ public class SpecialReportService {
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
+ public SpecialResult generate2(PaperCommit commit, Paper paper) {
|
|
|
+ PaperResult result = paperResultService.findByPidAndUid(commit.getPid(), commit.getUid());
|
|
|
+ List<SpecialKnowledge> list = specialKnowledgeService.listByPid(paper.getId());
|
|
|
+
|
|
|
+ if (CommonUtil.isEmpty(list)) {
|
|
|
+ logger.error("未上传专项诊断知识点,subjectId={},grade={}", paper.getSubjectId(), paper.getGrade());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (result == null) {
|
|
|
+ //重新生成PaperResult
|
|
|
+ result = (PaperResult) paperResultService.parseResult(commit, paper).getT();
|
|
|
+ }
|
|
|
+ String collect = result.getCollectQuestion();
|
|
|
+ //答对的选项
|
|
|
+ List<Long> collects = Arrays.stream(collect.split(","))
|
|
|
+ .map(Long::parseLong).collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (SpecialKnowledge knowledge : list) {
|
|
|
+ //过滤掉非叶子节点
|
|
|
+ if (StringUtils.isBlank(knowledge.getQids())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //这个知识点对应的题号
|
|
|
+ Set<Long> number = Arrays.stream(knowledge.getQids().split(","))
|
|
|
+ .map(Long::parseLong).collect(Collectors.toSet());
|
|
|
+ //该知识点的题目数量
|
|
|
+ knowledge.setQuestionNum(number.size());
|
|
|
+ number.retainAll(collects);
|
|
|
+ knowledge.setCollectNum(number.size());
|
|
|
+
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
private Integer getCount(List<Question> qs, List<Integer> collects) {
|
|
|
int count = 0;
|
|
|
for (Question q : qs) {
|