FrontExamController.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package com.ruoyi.web.controller.front;
  2. import com.alibaba.fastjson2.JSONObject;
  3. import com.google.common.collect.Lists;
  4. import com.google.common.collect.Sets;
  5. import com.ruoyi.common.core.domain.AjaxResult;
  6. import com.ruoyi.common.core.domain.entity.SysUser;
  7. import com.ruoyi.common.enums.ExamType;
  8. import com.ruoyi.common.utils.SecurityUtils;
  9. import com.ruoyi.dz.domain.DzSubject;
  10. import com.ruoyi.dz.service.IDzSubjectService;
  11. import com.ruoyi.enums.PaperType;
  12. import com.ruoyi.learn.domain.AnswerSheet;
  13. import com.ruoyi.learn.domain.LearnCultureKnowledge;
  14. import com.ruoyi.learn.domain.LearnStudent;
  15. import com.ruoyi.learn.service.ILearnCultureKnowledgeService;
  16. import com.ruoyi.learn.service.ILearnStudentService;
  17. import com.ruoyi.mxjb.domain.MxjbContants;
  18. import com.ruoyi.system.service.ISysUserService;
  19. import com.ruoyi.web.domain.PaperDto;
  20. import com.ruoyi.web.service.*;
  21. import io.swagger.annotations.Api;
  22. import io.swagger.annotations.ApiOperation;
  23. import io.swagger.annotations.ApiParam;
  24. import org.springframework.web.bind.annotation.*;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.Set;
  28. import java.util.stream.Collectors;
  29. @RestController
  30. @RequestMapping("/front/exam")
  31. @Api(tags = "前台-学习-考试练习")
  32. public class FrontExamController {
  33. private final ExamService examService;
  34. private final SyTestMajorService syTestMajorService;
  35. private final CacheService cacheService;
  36. private final IDzSubjectService dzSubjectService;
  37. private final StudentService studentService;
  38. private final ISysUserService sysUserService;
  39. private final ILearnStudentService learnStudentService;
  40. private final ILearnCultureKnowledgeService learnCultureKnowledgeService;
  41. public FrontExamController(ExamService examService, SyTestMajorService syTestMajorService, CacheService cacheService, IDzSubjectService dzSubjectService, IDzSubjectService dzSubjectService1, StudentService studentService, ISysUserService sysUserService, ILearnStudentService learnStudentService, ILearnCultureKnowledgeService learnCultureKnowledgeService) {
  42. this.examService = examService;
  43. this.syTestMajorService = syTestMajorService;
  44. this.cacheService = cacheService;
  45. this.dzSubjectService = dzSubjectService1;
  46. this.studentService = studentService;
  47. this.sysUserService = sysUserService;
  48. this.learnStudentService = learnStudentService;
  49. this.learnCultureKnowledgeService = learnCultureKnowledgeService;
  50. }
  51. @GetMapping("/subjects")
  52. @ApiOperation("科目列表")
  53. public AjaxResult subjects()
  54. {
  55. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  56. Long[] subjectIds;
  57. if(ExamType.SVS.equals(sysUser.getExamType())) {
  58. Set<Long> subjectIdSet;
  59. LearnStudent ls = learnStudentService.selectLearnStudentByStudentId(sysUser.getUserId());
  60. if(null != ls && null != ls.getUniversityId()) {
  61. LearnCultureKnowledge ckCond = new LearnCultureKnowledge();
  62. ckCond.setUniversityId(ls.getUniversityId());
  63. ckCond.setExamineeTypes(sysUser.getExamType().name());
  64. subjectIdSet = learnCultureKnowledgeService.selectLearnCultureKnowledgeList(ckCond).stream().map(t -> Long.parseLong(t.getSubjects())).collect(Collectors.toSet());
  65. } else {
  66. subjectIdSet = Sets.newHashSet();
  67. }
  68. subjectIdSet.add(11L);
  69. subjectIds = subjectIdSet.toArray(new Long[subjectIdSet.size()]);
  70. } else {
  71. subjectIds = new Long[] {11L};
  72. }
  73. List<DzSubject> list = dzSubjectService.selectDzSubjectBySubjectIds(subjectIds); // 中职暂停 1L, 2L, 3L,
  74. JSONObject evalCounts = JSONObject.parseObject(sysUserService.selectUserById(sysUser.getUserId()).getEvalCounts());
  75. return AjaxResult.success(list.stream().map(t -> {
  76. JSONObject o = new JSONObject();
  77. o.put("subjectId", t.getSubjectId());
  78. o.put("subject", t.getSubjectName());
  79. o.put("examTime", evalCounts.getIntValue(t.getSubjectId().toString()));
  80. return o;
  81. }).collect(Collectors.toList()));
  82. }
  83. // 试卷: 真题卷,批次测试卷,自组卷, 生成考试记录
  84. // 定向模拟卷: 根据用户选择生成记录
  85. // 组卷: 知识点 错题 必刷题 实时组卷后才生成记录
  86. @ApiOperation("01 开卷")
  87. @PostMapping(value = "openExaminee")
  88. public AjaxResult openExaminee(@ApiParam("0默认1价值2职业3知识") @RequestParam(required = false) Integer testType,
  89. @ApiParam("定向") @RequestParam(defaultValue = "false") boolean directed,
  90. @ApiParam("考卷类型PaperType") @RequestParam(required = false) PaperType paperType,
  91. @ApiParam("考卷类型关联ID") @RequestParam(required = false) Long relateId,
  92. @ApiParam("考卷类型关联ID") @RequestParam(required = false) Long subjectId,
  93. @RequestBody JSONObject body) {
  94. if(null != testType && testType > 0) {
  95. PaperDto paperDto = syTestMajorService.loadPaperByTestMajorTypeId(testType);
  96. Map<String, String> stateMap = cacheService.selectDictDataMapByType(MxjbContants.StateTypeExaminee);
  97. paperDto.setStateStr(stateMap.get(String.valueOf(paperDto.getState())));
  98. paperDto.calculateAllow();
  99. return AjaxResult.success(paperDto);
  100. }
  101. if(null == subjectId && null == paperType) {
  102. subjectId = body.getLongValue("subjectId");
  103. paperType = PaperType.valueOf(body.getString("paperType"));
  104. }
  105. return AjaxResult.success(examService.openExaminee(directed, paperType, relateId, subjectId));
  106. }
  107. @ApiOperation("04 开始考试")
  108. @GetMapping(value = "beginExaminee")
  109. public AjaxResult beginExaminee(@ApiParam("答卷ID") Long examineeId) {
  110. // 检查状态,以决定是否返回答案
  111. return AjaxResult.success(examService.loadExaminee(examineeId, true));
  112. }
  113. @ApiOperation("04 取答卷")
  114. @GetMapping(value = "loadExaminee")
  115. public AjaxResult loadExaminee(@ApiParam("答卷ID") @RequestParam(required = false) Long examineeId) {
  116. return AjaxResult.success(examService.loadExaminee(examineeId, false));
  117. }
  118. @ApiOperation("02 交卷")
  119. @PostMapping(value = "commitExamineePaper")
  120. public AjaxResult commitExamineePaper(@RequestBody AnswerSheet answerSheet) {
  121. if(null == answerSheet.getIsDone()) {
  122. answerSheet.setIsDone(false);
  123. }
  124. examService.commitAnswerSheet(answerSheet);
  125. return AjaxResult.success();
  126. }
  127. @ApiOperation("02 原交卷,测试")
  128. @PostMapping(value = "commitTestPaper")
  129. public AjaxResult commitExamineePaper(@RequestBody PaperDto paperDto) {
  130. return syTestMajorService.saveTestPaper(paperDto);
  131. }
  132. /*@ApiOperation("02 答题")
  133. @PostMapping(value = "commitExamineeQuestion")
  134. public AjaxResult commitExamineeQuestion(@RequestBody PaperDto paperDto) {
  135. return adminExaminationService.saveQuestion(paperDto);
  136. }
  137. @ApiOperation("04 阅卷打分")
  138. @PostMapping(value = "scoreExamineeQuestions")
  139. public AjaxResult scoreExamineeQuestions(@RequestBody PaperDto paperDto) {
  140. if (MxjbContants.ExamineeTypeIeValue.equals(paperDto.getExamineeType())) {
  141. return mxjbPaperExamService.scoreExamineeQuestion(paperDto, true);
  142. }
  143. return AjaxResult.error("不支持: " + paperDto.getExamineeType());
  144. }
  145. @ApiOperation("05 阅卷结束")
  146. @PostMapping(value = "scoreFinish")
  147. public AjaxResult scoreFinish(
  148. @ApiParam("考生答卷Id") @RequestParam Long examineeId,
  149. @ApiParam("考生类型 1是测评evaluation(default),2是竞赛competitor 3 ai 5 homework 6 ie") @RequestParam(required = false, defaultValue = "1") Integer examineeType) {
  150. if (MxjbContants.ExamineeTypeIeValue.equals(examineeType)) {
  151. return mxjbPaperExamService.scoreFinish(examineeId);
  152. }
  153. return AjaxResult.error("不支持: " + examineeType);
  154. }
  155. @ApiOperation("06 查看题")
  156. @GetMapping(value = "openQuestion")
  157. public QuestionDto openQuestion(@ApiParam("考生答卷Id") @RequestParam Long examineeId, @ApiParam("考生试题ID") @RequestParam Long questionId,
  158. @ApiParam("考生类型 1是测评evaluation(default),2是竞赛competitor 3 ai 5 homework 6 ie") @RequestParam(required = false, defaultValue = "1") Integer examineeType) {
  159. LoginUser loginUser = SecurityUtils.getLoginUser();
  160. if (MxjbContants.ExamineeTypeIeValue.equals(examineeType)) {
  161. return mxjbPaperExamService.openQuestion(examineeId, loginUser.getUser().getUserId(), questionId);
  162. }
  163. return new QuestionDto();
  164. }
  165. */
  166. }