SentenceController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.qxgmat.controller.api;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.nuliji.tools.Response;
  4. import com.nuliji.tools.ResponseHelp;
  5. import com.nuliji.tools.Transform;
  6. import com.nuliji.tools.exception.AuthException;
  7. import com.qxgmat.data.constants.enums.SettingKey;
  8. import com.qxgmat.data.constants.enums.logic.SentenceLogic;
  9. import com.qxgmat.data.constants.enums.module.PaperModule;
  10. import com.qxgmat.data.dao.entity.*;
  11. import com.qxgmat.data.relation.entity.UserReportRelation;
  12. import com.qxgmat.dto.extend.QuestionExtendDto;
  13. import com.qxgmat.dto.extend.SentenceQuestionBaseExtendDto;
  14. import com.qxgmat.dto.request.*;
  15. import com.qxgmat.dto.response.*;
  16. import com.qxgmat.help.ShiroHelp;
  17. import com.qxgmat.service.SentencePaperService;
  18. import com.qxgmat.service.UserCollectQuestionService;
  19. import com.qxgmat.service.UsersService;
  20. import com.qxgmat.service.extend.QuestionFlowService;
  21. import com.qxgmat.service.inline.*;
  22. import io.swagger.annotations.Api;
  23. import io.swagger.annotations.ApiOperation;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.validation.annotation.Validated;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.servlet.http.HttpSession;
  28. import java.util.List;
  29. import java.util.Map;
  30. @RestController
  31. @RequestMapping("/api/sentence")
  32. @Api(tags = "长难句", description = "长难句接口")
  33. public class SentenceController
  34. {
  35. @Autowired
  36. private ShiroHelp shiroHelp;
  37. @Autowired
  38. private SentenceArticleService sentenceArticleService;
  39. @Autowired
  40. private SentenceQuestionService sentenceQuestionService;
  41. @Autowired
  42. private SentencePaperService sentencePaperService;
  43. @Autowired
  44. private SentenceCodeService sentenceCodeService;
  45. @Autowired
  46. private QuestionService questionService;
  47. @Autowired
  48. private SettingService settingService;
  49. @Autowired
  50. private UsersService usersService;
  51. @Autowired
  52. private UserSentenceProcessService userSentenceProcessService;
  53. @Autowired
  54. private UserCollectQuestionService userCollectQuestionService;
  55. @Autowired
  56. private QuestionFlowService questionFlowService;
  57. @RequestMapping(value = "/info", method = RequestMethod.GET)
  58. @ApiOperation(value = "所有长难句信息", httpMethod = "GET")
  59. public Response<JSONObject> sentenceInfo(HttpSession session) {
  60. Setting entity = settingService.getByKey(SettingKey.SENTENCE);
  61. JSONObject value = entity.getValue();
  62. // 用户code状态
  63. User user = (User) shiroHelp.getLoginUser();
  64. SentenceCode code = sentenceCodeService.isActive(user.getId());
  65. if (code != null){
  66. value.put("code", code.getCode());
  67. }
  68. // 查询用户进度
  69. List<UserSentenceProcess> processList = userSentenceProcessService.listTotal(user.getId());
  70. Map process = Transform.getMap(processList,UserSentenceProcess.class, "chapter", "process");
  71. value.put("process", process);
  72. return ResponseHelp.success(value);
  73. }
  74. @RequestMapping(value = "/active", method = RequestMethod.PUT)
  75. @ApiOperation(value = "激活长难句", httpMethod = "PUT")
  76. public Response<Boolean> active(@RequestBody @Validated UserSentenceCodeDto dto) {
  77. UserSentenceProcess entity = Transform.dtoToEntity(dto);
  78. User user = (User) shiroHelp.getLoginUser();
  79. if (user == null) throw new AuthException("需要登录");
  80. if (sentenceCodeService.isActive(user.getId()) == null){
  81. sentenceCodeService.active(user.getId(), dto.getCode());
  82. }
  83. return ResponseHelp.success(true);
  84. }
  85. @RequestMapping(value = "/article/list", method = RequestMethod.GET)
  86. @ApiOperation(value = "长难句文章列表", httpMethod = "GET")
  87. public Response<List<UserSentenceArticleDto>> listArticle(
  88. @RequestParam(required = true) Integer chapter,
  89. HttpSession session) {
  90. User user = (User) shiroHelp.getLoginUser();
  91. // 查询用户code
  92. if (user != null && sentenceCodeService.isActive(user.getId()) != null){
  93. List<SentenceArticle> p = sentenceArticleService.listByChapter(chapter);
  94. List<UserSentenceArticleDto> pr = Transform.convert(p, UserSentenceArticleDto.class);
  95. // 查询文章进度
  96. List<UserSentenceProcess> processList = userSentenceProcessService.listByChapter(user.getId(), chapter);
  97. Map process = Transform.getMap(processList,UserSentenceProcess.class, "part", "process");
  98. Transform.combine(pr, process, UserSentenceArticleDto.class, "part", "process");
  99. return ResponseHelp.success(pr);
  100. } else {
  101. List<SentenceArticle> p = sentenceArticleService.listByTrail();
  102. List<UserSentenceArticleDto> pr = Transform.convert(p, UserSentenceArticleDto.class);
  103. if (user != null){
  104. // 查询文章进度
  105. List<UserSentenceProcess> processList = userSentenceProcessService.listAllByTrail(user.getId());
  106. Map process = Transform.getMap(processList,UserSentenceProcess.class, "part", "process");
  107. Transform.combine(pr, process, UserSentenceArticleDto.class, "part", "process");
  108. }
  109. return ResponseHelp.success(pr);
  110. }
  111. }
  112. @RequestMapping(value = "/article/process", method = RequestMethod.PUT)
  113. @ApiOperation(value = "更新长难句文章进度", httpMethod = "PUT")
  114. public Response<Boolean> articleProcess(@RequestBody @Validated UserSentenceProcessDto dto) {
  115. UserSentenceProcess entity = Transform.dtoToEntity(dto);
  116. User user = (User) shiroHelp.getLoginUser();
  117. if (user == null) throw new AuthException("需要登录");
  118. // 获取本章节的最大part数
  119. Integer max = sentenceArticleService.maxPart(dto.getChapter());
  120. userSentenceProcessService.updateProcess(user.getId(), dto.getChapter(), dto.getPart(), dto.getProcess(), max);
  121. return ResponseHelp.success(true);
  122. }
  123. @RequestMapping(value = "/paper/list", method = RequestMethod.GET)
  124. @ApiOperation(value = "长难句组卷列表", httpMethod = "GET")
  125. public Response<List<UserSentencePaperDto>> listPaper(
  126. HttpSession session) {
  127. User user = (User) shiroHelp.getLoginUser();
  128. // 查询用户code
  129. if (user != null && sentenceCodeService.isActive(user.getId()) != null){
  130. List<SentencePaper> p = sentencePaperService.listByLogic(SentenceLogic.NO);
  131. List<UserSentencePaperDto> pr = Transform.convert(p, UserSentencePaperDto.class);
  132. return ResponseHelp.success(pr);
  133. } else {
  134. List<SentencePaper> p = sentencePaperService.listByLogic(SentenceLogic.TRAIL);
  135. List<UserSentencePaperDto> pr = Transform.convert(p, UserSentencePaperDto.class);
  136. return ResponseHelp.success(pr);
  137. }
  138. }
  139. @RequestMapping(value = "/question/detail", method = RequestMethod.GET)
  140. @ApiOperation(value = "获取题目详情", notes = "获取题目详情", httpMethod = "GET")
  141. public Response<UserSentenceQuestionDetailDto> detailQuestion(
  142. @RequestParam(required = true, name="id") Integer questionNoId
  143. ) {
  144. User user = (User) shiroHelp.getLoginUser();
  145. return ResponseHelp.success(null);
  146. }
  147. @RequestMapping(value = "/paper", method = RequestMethod.GET)
  148. @ApiOperation(value = "获取练习卷", notes = "获取练习卷", httpMethod = "GET")
  149. public Response<PaperBaseDto> detailPaper(
  150. @RequestParam(required = true, name="id") Integer paperId
  151. ) {
  152. User user = (User) shiroHelp.getLoginUser();
  153. SentencePaper paper = sentencePaperService.get(paperId);
  154. PaperBaseDto paperDto = Transform.convert(paper, PaperBaseDto.class);
  155. return ResponseHelp.success(paperDto);
  156. }
  157. @RequestMapping(value = "/start", method = RequestMethod.POST)
  158. @ApiOperation(value = "开始做题", notes = "提交考试设置", httpMethod = "POST")
  159. public Response<UserReportBaseDto> start(@RequestBody @Validated SentenceStartDto dto) {
  160. User user = (User) shiroHelp.getLoginUser();
  161. JSONObject setting = new JSONObject();
  162. UserReportRelation report = questionFlowService.start(user.getId(), PaperModule.SENTENCE, dto.getPaperId(), setting);
  163. UserReportBaseDto userReportBaseDto = Transform.convert(report, UserReportBaseDto.class);
  164. return ResponseHelp.success(userReportBaseDto);
  165. }
  166. @RequestMapping(value = "/continue", method = RequestMethod.POST)
  167. @ApiOperation(value = "继续做题", notes = "获取报告信息", httpMethod = "POST")
  168. public Response<UserReportBaseDto> continueReport(@RequestBody @Validated ReportContinueDto dto) {
  169. User user = (User) shiroHelp.getLoginUser();
  170. UserReportRelation report = questionFlowService.continueReport(user.getId(), dto.getUserReportId());
  171. UserReportBaseDto userReportBaseDto = Transform.convert(report, UserReportBaseDto.class);
  172. return ResponseHelp.success(userReportBaseDto);
  173. }
  174. @RequestMapping(value = "/next", method = RequestMethod.POST)
  175. @ApiOperation(value = "获取下一题", notes = "获取下一题", httpMethod = "POST")
  176. public Response<UserSentenceQuestionBaseDto> next(@RequestBody @Validated ReportNextDto dto) {
  177. User user = (User) shiroHelp.getLoginUser();
  178. UserQuestion userQuestion = questionFlowService.next(user.getId(), dto.getUserReportId());
  179. UserSentenceQuestionBaseDto baseDto = Transform.convert(userQuestion, UserSentenceQuestionBaseDto.class);
  180. // 绑定question
  181. baseDto.setQuestion(Transform.convert(questionService.get(userQuestion.getQuestionId()), QuestionExtendDto.class));
  182. // 绑定sentenceQuestion
  183. baseDto.setSentence(Transform.convert(sentenceQuestionService.get(userQuestion.getQuestionNoId()), SentenceQuestionBaseExtendDto.class));
  184. // 绑定collect
  185. baseDto.setCollect(userCollectQuestionService.getByUserAndQuestion(user.getId(), userQuestion.getQuestionId()) != null);
  186. return ResponseHelp.success(null);
  187. }
  188. @RequestMapping(value = "/submit", method = RequestMethod.POST)
  189. @ApiOperation(value = "提交题目答案", notes = "提交题目", httpMethod = "POST")
  190. public Response<Boolean> submit(@RequestBody @Validated QuestionSubmitDto dto) {
  191. User user = (User) shiroHelp.getLoginUser();
  192. Boolean result = questionFlowService.submit(user.getId(), dto.getUserQuestionId(), dto.getTime(), dto.getAnswer());
  193. return ResponseHelp.success(result);
  194. }
  195. @RequestMapping(value = "/finish", method = RequestMethod.POST)
  196. @ApiOperation(value = "完成考试", notes = "完成考试", httpMethod = "POST")
  197. public Response<Boolean> finish(@RequestBody @Validated ReportFinishDto dto) {
  198. User user = (User) shiroHelp.getLoginUser();
  199. Boolean result = questionFlowService.finish(user.getId(), dto.getUserReportId());
  200. return ResponseHelp.success(result);
  201. }
  202. @RequestMapping(value = "/restart", method = RequestMethod.POST)
  203. @ApiOperation(value = "重置考试", notes = "重置考试", httpMethod = "POST")
  204. public Response<Boolean> restart(@RequestBody @Validated PaperRestartDto dto) {
  205. User user = (User) shiroHelp.getLoginUser();
  206. questionFlowService.restart(dto.getUserPaperId(), user.getId());
  207. return ResponseHelp.success(true);
  208. }
  209. }