ExerciseController.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package com.qxgmat.controller.admin;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.github.pagehelper.Page;
  4. import com.nuliji.tools.PageMessage;
  5. import com.nuliji.tools.Response;
  6. import com.nuliji.tools.ResponseHelp;
  7. import com.nuliji.tools.Transform;
  8. import com.nuliji.tools.exception.ParameterException;
  9. import com.qxgmat.data.constants.enums.SettingKey;
  10. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  11. import com.qxgmat.data.dao.entity.*;
  12. import com.qxgmat.data.relation.entity.QuestionNoRelation;
  13. import com.qxgmat.dto.admin.extend.ExercisePaperExtendDto;
  14. import com.qxgmat.dto.admin.request.ExerciseStructDto;
  15. import com.qxgmat.dto.admin.response.ExercisePaperListDto;
  16. import com.qxgmat.dto.admin.response.ExerciseQuestionListDto;
  17. import com.qxgmat.service.inline.ExercisePaperService;
  18. import com.qxgmat.service.extend.ExerciseService;
  19. import com.qxgmat.service.inline.*;
  20. import com.qxgmat.task.AsyncTask;
  21. import io.swagger.annotations.Api;
  22. import io.swagger.annotations.ApiOperation;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.http.MediaType;
  25. import org.springframework.validation.annotation.Validated;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.servlet.http.HttpServletRequest;
  28. import javax.servlet.http.HttpSession;
  29. import java.util.Arrays;
  30. import java.util.List;
  31. import java.util.stream.Collectors;
  32. @RestController("AdminExerciseController")
  33. @RequestMapping("/admin/exercise")
  34. @Api(tags = "练习接口", description = "练习相关", produces = MediaType.APPLICATION_JSON_VALUE)
  35. public class ExerciseController {
  36. @Autowired
  37. private ManagerLogService managerLogService;
  38. @Autowired
  39. private ExerciseStructService exerciseStructService;
  40. @Autowired
  41. private ExercisePaperService exercisePaperService;
  42. @Autowired
  43. private ExerciseService exerciseService;
  44. @Autowired
  45. private QuestionNoService questionNoService;
  46. @Autowired
  47. private QuestionService questionService;
  48. @Autowired
  49. private SettingService settingService;
  50. @Autowired
  51. private AsyncTask asyncTask;
  52. @RequestMapping(value = "/struct/add", method = RequestMethod.POST)
  53. @ApiOperation(value = "添加练习层级", httpMethod = "POST")
  54. public Response<ExerciseStruct> add(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) {
  55. ExerciseStruct entity = Transform.dtoToEntity(dto);
  56. entity = exerciseStructService.add(entity);
  57. managerLogService.log(request);
  58. return ResponseHelp.success(entity);
  59. }
  60. @RequestMapping(value = "/struct/edit", method = RequestMethod.PUT)
  61. @ApiOperation(value = "编辑练习层级", httpMethod = "PUT")
  62. public Response<Boolean> edit(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) {
  63. ExerciseStruct entity = Transform.dtoToEntity(dto);
  64. entity = exerciseStructService.edit(entity);
  65. managerLogService.log(request);
  66. return ResponseHelp.success(true);
  67. }
  68. @RequestMapping(value = "/struct/delete", method = RequestMethod.DELETE)
  69. @ApiOperation(value = "删除练习层级", httpMethod = "DELETE")
  70. public Response<Boolean> delete(@RequestParam int id, HttpServletRequest request) {
  71. managerLogService.log(request);
  72. return ResponseHelp.success(exerciseStructService.delete(id));
  73. }
  74. @RequestMapping(value = "/struct/all", method = RequestMethod.GET)
  75. @ApiOperation(value = "所有练习层级", httpMethod = "GET")
  76. public Response<List<ExerciseStruct>> all(HttpSession session) {
  77. List<ExerciseStruct> p = exerciseStructService.all();
  78. return ResponseHelp.success(p);
  79. }
  80. @RequestMapping(value = "/paper/list", method = RequestMethod.GET)
  81. @ApiOperation(value = "练习册列表", httpMethod = "GET")
  82. public Response<PageMessage<ExercisePaperListDto>> listPaper(
  83. @RequestParam(required = false, defaultValue = "1") int page,
  84. @RequestParam(required = false, defaultValue = "100") int size,
  85. @RequestParam(required = false, defaultValue = "") String keyword,
  86. @RequestParam(required = false) Integer[] ids,
  87. @RequestParam(required = false, defaultValue = "id") String order,
  88. @RequestParam(required = false, defaultValue = "desc") String direction,
  89. HttpSession session) {
  90. Page<ExercisePaper> p;
  91. if (ids != null && ids.length > 0){
  92. p = exercisePaperService.select(ids);
  93. }else{
  94. p = exercisePaperService.select(page, size, keyword);
  95. }
  96. List<ExercisePaperListDto> pr = Transform.convert(p, ExercisePaperListDto.class);
  97. return ResponseHelp.success(pr, page, size, p.getTotal());
  98. }
  99. @RequestMapping(value = "/question/list", method = RequestMethod.GET)
  100. @ApiOperation(value = "练习册试题列表", httpMethod = "GET")
  101. public Response<PageMessage<ExerciseQuestionListDto>> listQuestion(
  102. @RequestParam(required = false, defaultValue = "1") int page,
  103. @RequestParam(required = false, defaultValue = "100") int size,
  104. @RequestParam(required = false) String questionType,
  105. @RequestParam(required = false) Integer structId,
  106. @RequestParam(required = false) Integer questionNoId,
  107. @RequestParam(required = false) Integer paperId,
  108. @RequestParam(required = false) String place,
  109. @RequestParam(required = false) String difficult,
  110. @RequestParam(required = false) String startTime,
  111. @RequestParam(required = false) String endTime,
  112. @RequestParam(required = false, defaultValue = "id") String order,
  113. @RequestParam(required = false, defaultValue = "desc") String direction,
  114. HttpSession session) {
  115. Page<QuestionNoRelation> p = exerciseService.listAdmin(page, size, questionType, structId, questionNoId, paperId, place, difficult, startTime, endTime, order, DirectionStatus.ValueOf(direction));
  116. List<ExerciseQuestionListDto> pr = Transform.convert(p, ExerciseQuestionListDto.class);
  117. // 绑定练习册
  118. if (paperId != null && paperId > 0){
  119. ExercisePaper paper = exercisePaperService.get(paperId);
  120. if (paper != null){
  121. ExercisePaperExtendDto paperDto = Transform.convert(paper, ExercisePaperExtendDto.class);
  122. List<Integer> questionNoIds = Arrays.stream(paper.getQuestionNoIds()).collect(Collectors.toList());
  123. for(ExerciseQuestionListDto dto : pr){
  124. dto.setPaper(paperDto);
  125. // 绑定题目序号
  126. int index = questionNoIds.indexOf(dto.getId());
  127. if (index >= 0){
  128. dto.setNo(index + 1);
  129. }
  130. }
  131. }
  132. }
  133. return ResponseHelp.success(pr, page, size, p.getTotal());
  134. }
  135. @RequestMapping(value = "/paper/auto", method = RequestMethod.POST)
  136. @ApiOperation(value = "自动组卷", httpMethod = "POST")
  137. public Response<Boolean> autoPaper(HttpServletRequest request) {
  138. // 判断当前组卷状态
  139. Setting setting = settingService.getByKey(SettingKey.EXERCISE_PAPER_STATUS);
  140. JSONObject status = setting.getValue();
  141. if (status != null && status.getInteger("progress") != null && status.getInteger("progress")<100){
  142. throw new ParameterException("组卷进行中,请稍后再试");
  143. }
  144. asyncTask.autoExercisePaper();
  145. return ResponseHelp.success(true);
  146. }
  147. @RequestMapping(value = "/paper/auto", method = RequestMethod.GET)
  148. @ApiOperation(value = "自动组卷状态", httpMethod = "GET")
  149. public Response<JSONObject> autoPaperStatus(HttpServletRequest request) {
  150. // 判断当前组卷状态
  151. Setting setting = settingService.getByKey(SettingKey.EXERCISE_PAPER_STATUS);
  152. JSONObject status = setting.getValue();
  153. return ResponseHelp.success(status);
  154. }
  155. }