LearnTeacherService.java 24 KB

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