LearnTeacherService.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. package com.ruoyi.web.service;
  2. import cn.hutool.core.lang.Dict;
  3. import com.google.common.collect.Lists;
  4. import com.google.common.collect.Maps;
  5. import com.google.common.collect.Sets;
  6. import com.ruoyi.common.core.domain.entity.SysUser;
  7. import com.ruoyi.common.utils.SecurityUtils;
  8. import com.ruoyi.dz.domain.DzClasses;
  9. import com.ruoyi.dz.mapper.DzClassesMapper;
  10. import com.ruoyi.enums.PaperType;
  11. import com.ruoyi.ie.domain.AMarjorPlan;
  12. import com.ruoyi.ie.mapper.AMarjorPlanMapper;
  13. import com.ruoyi.learn.domain.*;
  14. import com.ruoyi.learn.mapper.*;
  15. import com.ruoyi.syzy.domain.BBusiWishUniversities;
  16. import com.ruoyi.syzy.mapper.BBusiWishUniversitiesMapper;
  17. import lombok.Data;
  18. import org.apache.commons.lang3.ArrayUtils;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.apache.commons.lang3.tuple.Pair;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.util.CollectionUtils;
  24. import javax.validation.ValidationException;
  25. import java.util.*;
  26. import java.util.stream.Collectors;
  27. import java.util.stream.Stream;
  28. @Service
  29. public class LearnTeacherService {
  30. private final DzClassesMapper dzClassesMapper;
  31. private final LearnKnowledgeTreeMapper learnKnowledgeTreeMapper;
  32. private final LearnStudentMapper learnStudentMapper;
  33. private final AMarjorPlanMapper marjorPlanMapper;
  34. private final BBusiWishUniversitiesMapper busiWishUniversitiesMapper;
  35. private final LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper;
  36. private final PaperService paperService;
  37. private final LearnTestPaperMapper learnTestPaperMapper;
  38. private final LearnQuestionsMapper learnQuestionsMapper;
  39. public LearnTeacherService(DzClassesMapper dzClassesMapper, LearnKnowledgeTreeMapper learnKnowledgeTreeMapper, LearnStudentMapper learnStudentMapper, AMarjorPlanMapper marjorPlanMapper, BBusiWishUniversitiesMapper busiWishUniversitiesMapper, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, PaperService paperService, LearnTestPaperMapper learnTestPaperMapper, LearnQuestionsMapper learnQuestionsMapper) {
  40. this.dzClassesMapper = dzClassesMapper;
  41. this.learnKnowledgeTreeMapper = learnKnowledgeTreeMapper;
  42. this.learnStudentMapper = learnStudentMapper;
  43. this.marjorPlanMapper = marjorPlanMapper;
  44. this.busiWishUniversitiesMapper = busiWishUniversitiesMapper;
  45. this.learnDirectedKnowledgeMapper = learnDirectedKnowledgeMapper;
  46. this.paperService = paperService;
  47. this.learnTestPaperMapper = learnTestPaperMapper;
  48. this.learnQuestionsMapper = learnQuestionsMapper;
  49. }
  50. public List<DzClasses> getClasses(Long teacherId)
  51. {
  52. return dzClassesMapper.selectClassesForTeacher(teacherId);
  53. }
  54. public List<LearnStudent> getStudents(Long batchId, Long classId) {
  55. return learnStudentMapper.selectClassStudents(batchId, new Long[] {classId});
  56. }
  57. public List<BBusiWishUniversities> selectUniversityList(Long teacherId, Long batchId) {
  58. return busiWishUniversitiesMapper.selectUniversityListForTeacher(teacherId, batchId);
  59. }
  60. public List<Dict> selectMajorList(Long universityId, Integer year, Long batchId) {
  61. return marjorPlanMapper.selectMajorForUniversity(universityId, year, batchId).stream().map(t -> Dict.create().set("id", t.getId()).set("majorGroup", t.getMajorGroup())
  62. .set("majorName", t.getMajorName()).set("count", t.getXuefei()).set("total", t.getPlanTotal())).collect(Collectors.toList());
  63. }
  64. @Transactional(rollbackFor = Exception.class)
  65. public String buildPapersAuto(TestPaperVO.TestPapersBuildAutoReq req) {
  66. // 查询 院校,专业组,专业计划范围, 明细一级时只有一个,否则就是批量
  67. List<LearnStudent> studentList = learnStudentMapper.selectLearnStudentsByMap(req.toMap());
  68. if(CollectionUtils.isEmpty(studentList)) {
  69. throw new ValidationException("无可用计划可检查");
  70. }
  71. Set<Long> planIdSet = Sets.newHashSet();
  72. Map<Long, List<LearnStudent>> universityMap = Maps.newHashMap();
  73. for(LearnStudent ls : studentList){
  74. planIdSet.add(ls.getMajorPlanId());
  75. List<LearnStudent> list = universityMap.get(ls.getUniversityId());
  76. if(null == list) {
  77. list = Lists.newArrayList();
  78. universityMap.put(ls.getUniversityId(), list);
  79. }
  80. list.add(ls);
  81. }
  82. // 查询已经生成的
  83. Map<Long, Map<String, LearnTestPaper>> universityDirectPaperMap = learnTestPaperMapper.selectByBatchAndUniversityIds(req.getBatchId(), universityMap.keySet()).stream()
  84. .collect(Collectors.groupingBy(LearnTestPaper::getUniversityId, Collectors.toMap(LearnTestPaper::getDirectKey, a -> a)));
  85. if(null == req.getDirectType() || !req.getDirectType()) { // 全量
  86. LearnPaper paper = new LearnPaper();
  87. paper.setPaperName(req.getTitle());
  88. paper.setYear(Calendar.getInstance().get(Calendar.YEAR));
  89. paper.setPaperType(PaperType.Test.name());
  90. paper.setSubjectId(req.getSubjectId());
  91. paper.setDirectKey("");
  92. for(Long universityId : universityMap.keySet()) {
  93. Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
  94. if(null != directPaperMap && directPaperMap.containsKey("")) {
  95. continue;
  96. }
  97. if(null == paper.getId()) {
  98. Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = paperService.buildPaper(null, paper, req.getPaperDef());
  99. paperService.savePaper(paper, paperResult.getRight());
  100. }
  101. LearnTestPaper testPaper = new LearnTestPaper();
  102. testPaper.setBatchId(req.getBatchId());
  103. testPaper.setUniversityId(universityId);
  104. testPaper.setDirectKey("");
  105. testPaper.setPaperId(paper.getId());
  106. learnTestPaperMapper.insertLearnTestPaper(testPaper);
  107. }
  108. return "";
  109. }
  110. TestPaperVO.PaperDef paperDef = req.getPaperDef();
  111. if(null != req.getPlanIds() && req.getPlanIds().size() == 1) {
  112. if(!CollectionUtils.isEmpty(paperDef.getKnowIds())) {
  113. throw new ValidationException("批量时不支持自定义知识点");
  114. }
  115. }
  116. Map<Long, Map<String, LearnDirectedKnowledge>> universityDirectedKnowledgeMap = learnDirectedKnowledgeMapper.selectByUniversityIds(universityMap.keySet().toArray(new Long[universityMap.size()])).stream().collect(
  117. Collectors.groupingBy(LearnDirectedKnowledge::getUniversityId, Collectors.toMap(LearnDirectedKnowledge::getDirectKey, a -> a)));
  118. Map<Long, AMarjorPlan> planMap = marjorPlanMapper.selectAMarjorPlanByIds(planIdSet.toArray(new Long[planIdSet.size()])).stream().collect(Collectors.toMap(AMarjorPlan::getId, a -> a));
  119. LearnDirectedKnowledge directedKnowledge = null;
  120. String directedKey = null;
  121. for(Long universityId : universityMap.keySet()) {
  122. Map<String, LearnDirectedKnowledge> directedKnowledgeMap = universityDirectedKnowledgeMap.get(universityId);
  123. for(LearnStudent ls : universityMap.get(universityId)) {
  124. AMarjorPlan plan = planMap.get(ls.getMajorPlanId());
  125. String groupName = StringUtils.trimToEmpty(plan.getMajorGroup());
  126. if(CollectionUtils.isEmpty(paperDef.getKnowIds())) {
  127. if(null != (directedKnowledge = directedKnowledgeMap.get((directedKey = groupName + "_" + plan.getMajorName())))) {
  128. paperDef.setKnowIds(Stream.of(directedKnowledge.getKnowledges().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
  129. } else if(null != (directedKnowledge = directedKnowledgeMap.get(directedKey = groupName))) {
  130. paperDef.setKnowIds(Stream.of(directedKnowledge.getKnowledges().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
  131. } else {
  132. throw new ValidationException("院校没有配置定向知识点,生成失败: " + universityId + ":" + groupName + ":" + plan.getMajorName());
  133. }
  134. } else if(null != directedKnowledgeMap) {
  135. if(null != (directedKnowledge = directedKnowledgeMap.get((directedKey = groupName + "_" + plan.getMajorName())))) {
  136. } else if(null != (directedKnowledge = directedKnowledgeMap.get(directedKey = groupName))) {
  137. } else {
  138. throw new ValidationException("院校没有配置定向知识点,生成失败" + universityId + ":" + directedKey);
  139. }
  140. } else {
  141. throw new ValidationException("院校没有配置定向知识点,生成失败: " + universityId);
  142. }
  143. Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
  144. if(null != directPaperMap && directPaperMap.containsKey(directedKey)) {
  145. continue;
  146. }
  147. LearnPaper paper = new LearnPaper();
  148. paper.setSubjectId(req.getSubjectId());
  149. paper.setPaperName(req.getTitle());
  150. paper.setYear(plan.getYear());
  151. paper.setPaperType(PaperType.Test.name());
  152. paper.setDirectKey(directedKey);
  153. Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = paperService.buildPaper(null, paper, paperDef);
  154. paperService.savePaper(paperResult.getKey(), paperResult.getValue());
  155. LearnTestPaper testPaper = new LearnTestPaper();
  156. testPaper.setBatchId(req.getBatchId());
  157. testPaper.setUniversityId(universityId);
  158. testPaper.setDirectKey(directedKey);
  159. testPaper.setPaperId(paper.getId());
  160. learnTestPaperMapper.insertLearnTestPaper(testPaper);
  161. directPaperMap.put(directedKey, testPaper);
  162. }
  163. }
  164. return "";
  165. }
  166. @Transactional(rollbackFor = Exception.class)
  167. public String buildPapersManual(TestPaperVO.TestPapersBuildManualReq req) {
  168. if(null == req.getSubjectId()) {
  169. throw new ValidationException("未选择科目");
  170. }
  171. // 查询 院校,专业组,专业计划范围, 明细一级时只有一个,否则就是批量
  172. List<LearnStudent> studentList = learnStudentMapper.selectLearnStudentsByMap(req.toMap());
  173. if(CollectionUtils.isEmpty(studentList)) {
  174. throw new ValidationException("无可用计划可检查");
  175. }
  176. Set<Long> planIdSet = Sets.newHashSet();
  177. Map<Long, List<LearnStudent>> universityMap = Maps.newHashMap();
  178. for(LearnStudent ls : studentList){
  179. planIdSet.add(ls.getMajorPlanId());
  180. List<LearnStudent> list = universityMap.get(ls.getUniversityId());
  181. if(null == list) {
  182. list = Lists.newArrayList();
  183. universityMap.put(ls.getUniversityId(), list);
  184. }
  185. list.add(ls);
  186. }
  187. // 查询已经生成的
  188. Map<Long, Map<String, LearnTestPaper>> universityDirectPaperMap = learnTestPaperMapper.selectByBatchAndUniversityIds(req.getBatchId(), universityMap.keySet()).stream()
  189. .collect(Collectors.groupingBy(LearnTestPaper::getUniversityId, Collectors.toMap(LearnTestPaper::getDirectKey, a -> a)));
  190. LearnPaper paper = new LearnPaper();
  191. paper.setPaperName(req.getTitle());
  192. paper.setYear(Calendar.getInstance().get(Calendar.YEAR));
  193. paper.setPaperType(PaperType.Test.name());
  194. if(null == req.getDirectType() || !req.getDirectType()) { // 全量
  195. paper.setSubjectId(req.getSubjectId());
  196. paper.setDirectKey("");
  197. for(Long universityId : universityMap.keySet()) {
  198. Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
  199. if(null != directPaperMap && directPaperMap.containsKey("")) {
  200. continue;
  201. }
  202. if(null == paper.getId()) {
  203. paperService.savePaper(paper, req.getQuestions());
  204. }
  205. LearnTestPaper testPaper = new LearnTestPaper();
  206. testPaper.setBatchId(req.getBatchId());
  207. testPaper.setUniversityId(universityId);
  208. testPaper.setDirectKey("");
  209. testPaper.setPaperId(paper.getId());
  210. testPaper.setConditions("");
  211. testPaper.setCreatorId(SecurityUtils.getUserId());
  212. learnTestPaperMapper.insertLearnTestPaper(testPaper);
  213. }
  214. return "";
  215. } // 定向
  216. // 准备定向数据
  217. Map<Long, Map<String, LearnDirectedKnowledge>> universityDirectedKnowledgeMap = learnDirectedKnowledgeMapper.selectByUniversityIds(universityMap.keySet().toArray(new Long[universityMap.size()])).stream().collect(
  218. Collectors.groupingBy(LearnDirectedKnowledge::getUniversityId, Collectors.toMap(LearnDirectedKnowledge::getDirectKey, a -> a)));
  219. Map<Long, AMarjorPlan> planMap = marjorPlanMapper.selectAMarjorPlanByIds(planIdSet.toArray(new Long[planIdSet.size()])).stream().collect(Collectors.toMap(AMarjorPlan::getId, a -> a));
  220. String directedKey = null;
  221. for(Long universityId : universityMap.keySet()) {
  222. Map<String, LearnTestPaper> directPaperMap = universityDirectPaperMap.get(universityId);
  223. Map<String, LearnDirectedKnowledge> directedKnowledgeMap = universityDirectedKnowledgeMap.get(universityId);
  224. for(LearnStudent ls : universityMap.get(universityId)) { // Group+Name
  225. AMarjorPlan plan = planMap.get(ls.getMajorPlanId());
  226. String groupName = StringUtils.trimToEmpty(plan.getMajorGroup());
  227. if(null != (directedKnowledgeMap.get(directedKey = groupName + "_" + plan.getMajorName()))) {
  228. if(null != directPaperMap.get(directedKey)) {
  229. continue;
  230. }
  231. } else if(null != directedKnowledgeMap.get(directedKey = groupName)) {
  232. if(null != directPaperMap.get(directedKey)) {
  233. continue;
  234. }
  235. } else {
  236. continue;
  237. }
  238. if(null == paper.getId()) {
  239. paperService.savePaper(paper, req.getQuestions());
  240. }
  241. LearnTestPaper testPaper = new LearnTestPaper();
  242. testPaper.setBatchId(req.getBatchId());
  243. testPaper.setUniversityId(universityId);
  244. testPaper.setDirectKey(directedKey);
  245. testPaper.setPaperId(paper.getId());
  246. learnTestPaperMapper.insertLearnTestPaper(testPaper);
  247. directPaperMap.put(directedKey, testPaper);
  248. }
  249. }
  250. return "";
  251. }
  252. public List<TreeNode> getKnowledgeTree(Long subjectId, Set<Long> knowledgeIdSet, boolean count) {
  253. LearnKnowledgeTree ktCond = new LearnKnowledgeTree();
  254. ktCond.setSubjectId(subjectId);
  255. List<LearnKnowledgeTree> ktList = learnKnowledgeTreeMapper.selectLearnKnowledgeTreeList(ktCond);
  256. Map<Long, Integer[]> knowCountMap = null;
  257. if(count) {
  258. Map cond = Maps.newHashMap();
  259. cond.put("studentId", SecurityUtils.getUserId());
  260. cond.put("knowIds", ktList.stream().map(LearnKnowledgeTree::getId).collect(Collectors.toList()));
  261. cond.put("types", Lists.newArrayList("单选题", "判断题"));
  262. knowCountMap = Maps.newHashMap();
  263. for(LearnQuestions qs : learnQuestionsMapper.statByKnowledge(cond)) {
  264. knowCountMap.put(qs.getKnowledgeId(), new Integer[] { qs.getNumber().intValue(), qs.getId().intValue()} );
  265. }
  266. }
  267. return buildTree(ktList, knowledgeIdSet, knowCountMap);
  268. }
  269. public String updateDirected(Long studentId, Long universityId, Long planId) {
  270. LearnStudent upStudent = new LearnStudent();
  271. upStudent.setStudentId(studentId);
  272. upStudent.setUniversityId(universityId);
  273. upStudent.setMajorPlanId(planId);
  274. upStudent.setDirectKey("");
  275. AMarjorPlan plan = marjorPlanMapper.selectAMarjorPlanById(planId);
  276. LearnDirectedKnowledge dkCond = new LearnDirectedKnowledge();
  277. dkCond.setUniversityId(plan.getUniversityId());
  278. dkCond.setYear(plan.getYear());
  279. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  280. dkCond.setLocations(sysUser.getLocation());
  281. dkCond.setExamineeTypes(sysUser.getExamType().name());
  282. Map<String, LearnDirectedKnowledge> directedKnowledgeMap = learnDirectedKnowledgeMapper.selectLearnDirectedKnowledgeList(dkCond).stream().collect(Collectors.toMap(LearnDirectedKnowledge::getDirectKey, t -> t));
  283. LearnDirectedKnowledge directedKnowledge = getBestLearnDirectedKnowledge(plan, directedKnowledgeMap);
  284. String modules = null;
  285. if(null != directedKnowledge) {
  286. upStudent.setDirectKey(directedKnowledge.getDirectKey());
  287. modules = directedKnowledge.getModules();
  288. }
  289. learnStudentMapper.updateLearnStudent(upStudent);
  290. Set<String> moduleSet = Sets.newHashSet(StringUtils.trimToEmpty(modules).split(","));
  291. return moduleSet.size() == 1 && moduleSet.contains("技能展示") ? "专业只考技能展示" : "";
  292. }
  293. private LearnDirectedKnowledge getBestLearnDirectedKnowledge(AMarjorPlan plan, Map<String, LearnDirectedKnowledge> directedKnowledgeMap) {
  294. LearnDirectedKnowledge directedKnowledge = null;
  295. String groupName = StringUtils.trimToEmpty(plan.getMajorGroup());
  296. if(null != (directedKnowledge = directedKnowledgeMap.get(groupName + "_" + plan.getMajorName()))) {
  297. return directedKnowledge;
  298. }
  299. for(String directKey : directedKnowledgeMap.keySet()) {
  300. if(directKey.contains("、") && (directKey.startsWith(groupName + "_"))) {
  301. Set<String> marjorSet = Arrays.stream(directKey.split("_|、")).filter(t -> !t.isEmpty()).collect(Collectors.toSet());
  302. if(marjorSet.contains(plan.getMajorName())) {
  303. return directedKnowledgeMap.get(directKey);
  304. }
  305. }
  306. }
  307. if(null != (directedKnowledge = directedKnowledgeMap.get(groupName))) {
  308. return directedKnowledge;
  309. }
  310. if(null != (directedKnowledge = directedKnowledgeMap.get(""))) {
  311. return directedKnowledge;
  312. }
  313. return directedKnowledge;
  314. }
  315. public Set<Long> getSubjectIdSet(Long[] planIds) {
  316. Set<Long> subjectIdSet = Sets.newHashSet();
  317. if(ArrayUtils.isNotEmpty(planIds)) {
  318. List<AMarjorPlan> planList = marjorPlanMapper.selectAMarjorPlanByIds(planIds);
  319. AMarjorPlan curr = planList.get(0);
  320. LearnDirectedKnowledge dkCond = new LearnDirectedKnowledge();
  321. dkCond.setUniversityId(curr.getUniversityId());
  322. dkCond.setYear(curr.getYear());
  323. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  324. dkCond.setLocations(sysUser.getLocation());
  325. dkCond.setExamineeTypes(sysUser.getExamType().name());
  326. Map<String, LearnDirectedKnowledge> directedKnowledgeMap = learnDirectedKnowledgeMapper.selectLearnDirectedKnowledgeList(dkCond).stream().collect(Collectors.toMap(LearnDirectedKnowledge::getDirectKey, t -> t));
  327. LearnDirectedKnowledge directedKnowledge = null;
  328. for(AMarjorPlan plan : planList) {
  329. if(null != (directedKnowledge = getBestLearnDirectedKnowledge(plan, directedKnowledgeMap))) {
  330. subjectIdSet.addAll(Stream.of(directedKnowledge.getSubjects().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
  331. }
  332. }
  333. }
  334. return subjectIdSet;
  335. }
  336. public Set<Long> getKnowledgeIdSet(Long[] planIds) {
  337. Set<Long> knowledgeIdSet = Sets.newHashSet();
  338. if(ArrayUtils.isNotEmpty(planIds)) {
  339. List<AMarjorPlan> planList = marjorPlanMapper.selectAMarjorPlanByIds(planIds);
  340. AMarjorPlan curr = planList.get(0);
  341. LearnDirectedKnowledge dkCond = new LearnDirectedKnowledge();
  342. dkCond.setUniversityId(curr.getUniversityId());
  343. dkCond.setYear(curr.getYear());
  344. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  345. dkCond.setLocations(sysUser.getLocation());
  346. dkCond.setExamineeTypes(sysUser.getExamType().name());
  347. Map<String, LearnDirectedKnowledge> directedKnowledgeMap = learnDirectedKnowledgeMapper.selectLearnDirectedKnowledgeList(dkCond).stream().collect(Collectors.toMap(LearnDirectedKnowledge::getDirectKey, t -> t));
  348. LearnDirectedKnowledge directedKnowledge = null;
  349. for(AMarjorPlan plan : planList) {
  350. if(null != (directedKnowledge = getBestLearnDirectedKnowledge(plan, directedKnowledgeMap))) {
  351. knowledgeIdSet.addAll(Stream.of(directedKnowledge.getKnowledges().split(",")).map(t -> Long.parseLong(t.trim())).collect(Collectors.toList()));
  352. }
  353. }
  354. }
  355. return knowledgeIdSet;
  356. }
  357. public List<TreeNode> buildTree(List<LearnKnowledgeTree> ktList, Set<Long> knowledgeIdSet, Map<Long, Integer[]> knowCountMap) {
  358. List<TreeNode> treeNodeList = Lists.newArrayList();
  359. Map<Long, TreeNode> teMap = Maps.newHashMap();
  360. for(LearnKnowledgeTree kt : ktList) {
  361. TreeNode tn = new TreeNode(kt.getId(), kt.getName(), knowCountMap.get(kt.getId()));
  362. teMap.put(kt.getId(), tn);
  363. }
  364. for(LearnKnowledgeTree kt : ktList) {
  365. if(null == kt.getPid()) {
  366. treeNodeList.add(teMap.get(kt.getId()));
  367. continue;
  368. }
  369. TreeNode parent = teMap.get(kt.getPid());
  370. TreeNode node = teMap.get(kt.getId());
  371. if(null != node.getQuestionCount()) {
  372. parent.setQuestionCount(parent.getQuestionCount() + node.getQuestionCount());
  373. }
  374. parent.getChildren().add(node);
  375. }
  376. if(!CollectionUtils.isEmpty(knowledgeIdSet)) {
  377. for(TreeNode tn : treeNodeList) {
  378. tn.setChecked(knowledgeIdSet);
  379. }
  380. }
  381. return treeNodeList;
  382. }
  383. @Data
  384. public static class TreeNode {
  385. private Long id;
  386. private String name;
  387. private Integer status;
  388. private Integer questionCount;
  389. private Integer finishedCount;
  390. List<TreeNode> children = Lists.newArrayList();
  391. public TreeNode(Long id, String name, Integer[] counts) {
  392. this.id = id;
  393. this.name = name;
  394. this.status = 0;
  395. this.questionCount = null != counts ? counts[0] : 0;
  396. this.finishedCount = null != counts ? counts[1] : 0;
  397. }
  398. public boolean setChecked(Set<Long> idSet) {
  399. boolean checkSelf = idSet.contains(id);
  400. if(CollectionUtils.isEmpty(children)) {
  401. this.status = checkSelf ? 1 : 0;
  402. return true;
  403. }
  404. int count = 0;
  405. for(TreeNode tn : children) {
  406. if(checkSelf || idSet.contains(tn.getId())) {
  407. tn.setStatus(1);
  408. count++;
  409. }
  410. }
  411. if(children.size() == count) {
  412. this.status = 1;
  413. return true;
  414. }
  415. return false;
  416. }
  417. }
  418. }