ExerciseController.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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.dto.admin.extend.ExercisePaperExtendDto;
  13. import com.qxgmat.dto.admin.extend.QuestionExtendDto;
  14. import com.qxgmat.dto.admin.extend.QuestionNoExtendDto;
  15. import com.qxgmat.dto.admin.request.ExerciseStructDto;
  16. import com.qxgmat.dto.admin.response.ExercisePaperListDto;
  17. import com.qxgmat.dto.admin.response.ExerciseQuestionListDto;
  18. import com.qxgmat.service.ExercisePaperService;
  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.Collection;
  30. import java.util.List;
  31. @RestController("AdminExerciseController")
  32. @RequestMapping("/admin/exercise")
  33. @Api(tags = "练习接口", description = "练习相关", produces = MediaType.APPLICATION_JSON_VALUE)
  34. public class ExerciseController {
  35. @Autowired
  36. private ManagerLogService managerLogService;
  37. @Autowired
  38. private ExerciseStructService exerciseStructService;
  39. @Autowired
  40. private ExercisePaperService exercisePaperService;
  41. @Autowired
  42. private ExerciseQuestionService exerciseQuestionService;
  43. @Autowired
  44. private QuestionNoService questionNoService;
  45. @Autowired
  46. private QuestionService questionService;
  47. @Autowired
  48. private SettingService settingService;
  49. @Autowired
  50. private AsyncTask asyncTask;
  51. @RequestMapping(value = "/struct/add", method = RequestMethod.POST)
  52. @ApiOperation(value = "添加练习层级", httpMethod = "POST")
  53. public Response<ExerciseStruct> add(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) {
  54. ExerciseStruct entity = Transform.dtoToEntity(dto);
  55. entity = exerciseStructService.add(entity);
  56. managerLogService.log(request);
  57. return ResponseHelp.success(entity);
  58. }
  59. @RequestMapping(value = "/struct/edit", method = RequestMethod.PUT)
  60. @ApiOperation(value = "编辑练习层级", httpMethod = "PUT")
  61. public Response<Boolean> edit(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) {
  62. ExerciseStruct entity = Transform.dtoToEntity(dto);
  63. entity = exerciseStructService.edit(entity);
  64. managerLogService.log(request);
  65. return ResponseHelp.success(true);
  66. }
  67. @RequestMapping(value = "/struct/delete", method = RequestMethod.DELETE)
  68. @ApiOperation(value = "删除练习层级", httpMethod = "DELETE")
  69. public Response<Boolean> delete(@RequestParam int id, HttpServletRequest request) {
  70. managerLogService.log(request);
  71. return ResponseHelp.success(exerciseStructService.delete(id));
  72. }
  73. @RequestMapping(value = "/struct/all", method = RequestMethod.GET)
  74. @ApiOperation(value = "所有练习层级", httpMethod = "GET")
  75. public Response<List<ExerciseStruct>> all(HttpSession session) {
  76. List<ExerciseStruct> p = exerciseStructService.all();
  77. return ResponseHelp.success(p);
  78. }
  79. @RequestMapping(value = "/paper/list", method = RequestMethod.GET)
  80. @ApiOperation(value = "练习册列表", httpMethod = "GET")
  81. public Response<PageMessage<ExercisePaperListDto>> listPaper(
  82. @RequestParam(required = false, defaultValue = "1") int page,
  83. @RequestParam(required = false, defaultValue = "100") int size,
  84. @RequestParam(required = false, defaultValue = "") String keyword,
  85. @RequestParam(required = false) Integer[] ids,
  86. HttpSession session) {
  87. Page<ExercisePaper> p;
  88. if (ids != null && ids.length > 0){
  89. p = exercisePaperService.select(ids);
  90. }else{
  91. p = exercisePaperService.select(page, size, keyword);
  92. }
  93. List<ExercisePaperListDto> pr = Transform.convert(p, ExercisePaperListDto.class);
  94. return ResponseHelp.success(pr, page, size, p.getTotal());
  95. }
  96. @RequestMapping(value = "/question/list", method = RequestMethod.GET)
  97. @ApiOperation(value = "练习册试题列表", httpMethod = "GET")
  98. public Response<PageMessage<ExerciseQuestionListDto>> listQuestion(
  99. @RequestParam(required = false, defaultValue = "1") int page,
  100. @RequestParam(required = false, defaultValue = "100") int size,
  101. @RequestParam(required = false) String type,
  102. @RequestParam(required = false) Integer structId,
  103. @RequestParam(required = false) Integer questionNoId,
  104. @RequestParam(required = false) Integer paperId,
  105. @RequestParam(required = false) String place,
  106. @RequestParam(required = false) String difficult,
  107. @RequestParam(required = false) String startTime,
  108. @RequestParam(required = false) String endTime,
  109. @RequestParam(required = false, defaultValue = "id") String order,
  110. @RequestParam(required = false, defaultValue = "desc") String direction,
  111. HttpSession session) {
  112. Page<ExercisePaperQuestion> p = exerciseQuestionService.listAdmin(page, size, type, structId, questionNoId, paperId, place, difficult, startTime, endTime, order, DirectionStatus.ValueOf(direction));
  113. List<ExerciseQuestionListDto> pr = Transform.convert(p, ExerciseQuestionListDto.class);
  114. // 绑定题目
  115. Collection questionIds = Transform.getIds(p, ExercisePaperQuestion.class, "questionId");
  116. List<Question> questionList = questionService.select(questionIds);
  117. Transform.combine(pr, questionList, ExerciseQuestionListDto.class, "questionId", "question", Question.class, "id", QuestionExtendDto.class);
  118. // 绑定题目编号
  119. Collection questionNoIds = Transform.getIds(p, ExercisePaperQuestion.class, "questionNoId");
  120. List<QuestionNo> questionNoList = questionNoService.select(questionNoIds);
  121. Transform.combine(pr, questionNoList, ExerciseQuestionListDto.class, "questionNoId", "questionNo", QuestionNo.class, "id", QuestionNoExtendDto.class);
  122. // 绑定练习册
  123. Collection paperIds = Transform.getIds(p, ExercisePaperQuestion.class, "paperId");
  124. List<ExercisePaper> paperList = exercisePaperService.select(paperIds);
  125. Transform.combine(pr, paperList, ExerciseQuestionListDto.class, "paperId", "paper", ExercisePaper.class, "id", ExercisePaperExtendDto.class);
  126. return ResponseHelp.success(pr, page, size, p.getTotal());
  127. }
  128. @RequestMapping(value = "/paper/auto", method = RequestMethod.POST)
  129. @ApiOperation(value = "自动组卷", httpMethod = "POST")
  130. public Response<Boolean> autoPaper(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) {
  131. // 判断当前组卷状态
  132. Setting setting = settingService.getByKey(SettingKey.EXERCISE_PAPER_STATUS);
  133. JSONObject status = setting.getValue();
  134. if (status.getInteger("process")<100){
  135. throw new ParameterException("组卷进行中,请稍后再试");
  136. }
  137. asyncTask.autoExercisePaper();
  138. return ResponseHelp.success(true);
  139. }
  140. @RequestMapping(value = "/paper/auto", method = RequestMethod.GET)
  141. @ApiOperation(value = "自动组卷状态", httpMethod = "GET")
  142. public Response<JSONObject> autoPaperStatus(HttpServletRequest request) {
  143. // 判断当前组卷状态
  144. Setting setting = settingService.getByKey(SettingKey.EXERCISE_PAPER_STATUS);
  145. JSONObject status = setting.getValue();
  146. return ResponseHelp.success(status);
  147. }
  148. }