UserPaperQuestionService.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.qxgmat.service.inline;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.AbstractService;
  4. import com.nuliji.tools.exception.ParameterException;
  5. import com.nuliji.tools.exception.SystemException;
  6. import com.nuliji.tools.mybatis.Example;
  7. import com.qxgmat.data.constants.enums.QuestionType;
  8. import com.qxgmat.data.constants.enums.module.PaperModule;
  9. import com.qxgmat.data.constants.enums.module.QuestionModule;
  10. import com.qxgmat.data.constants.enums.module.QuestionNoModule;
  11. import com.qxgmat.data.constants.enums.module.QuestionOrigin;
  12. import com.qxgmat.data.dao.UserPaperMapper;
  13. import com.qxgmat.data.dao.UserPaperQuestionMapper;
  14. import com.qxgmat.data.dao.entity.QuestionNo;
  15. import com.qxgmat.data.dao.entity.UserPaper;
  16. import com.qxgmat.data.dao.entity.UserPaperQuestion;
  17. import com.qxgmat.data.dao.entity.UserQuestion;
  18. import com.qxgmat.data.relation.UserPaperQuestionRelationMapper;
  19. import com.qxgmat.data.relation.entity.QuestionNoRelation;
  20. import org.slf4j.Logger;
  21. import org.slf4j.LoggerFactory;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import javax.annotation.Resource;
  25. import java.util.ArrayList;
  26. import java.util.Collection;
  27. import java.util.List;
  28. @Service
  29. public class UserPaperQuestionService extends AbstractService {
  30. private static final Logger logger = LoggerFactory.getLogger(UserPaperQuestionService.class);
  31. @Resource
  32. private UserPaperQuestionMapper userPaperQuestionMapper;
  33. @Resource
  34. private UserPaperQuestionRelationMapper userPaperQuestionRelationMapper;
  35. /**
  36. * 添加需要移除的错题
  37. * @param questionNoList
  38. */
  39. @Transactional
  40. public void addRemoveError(Integer userId, List<QuestionNoRelation> questionNoList){
  41. for(QuestionNoRelation questionNo : questionNoList){
  42. if (questionNo.getQuestion().getQuestionType().equals(QuestionType.AWA.key)){
  43. // 作文不算错题
  44. continue;
  45. }
  46. QuestionModule questionModule = QuestionModule.WithQuestionNo(QuestionNoModule.ValueOf(questionNo.getModule()));
  47. UserPaperQuestion paperQuestion = UserPaperQuestion.builder()
  48. .userId(userId)
  49. .questionModule(questionModule.key)
  50. .questionOrigin(QuestionOrigin.REMOVE_ERROR.key)
  51. .questionNoId(questionNo.getId())
  52. // 移出错题,没有对应paper
  53. .paperId(0)
  54. .build();
  55. UserPaperQuestion in = one(userPaperQuestionMapper, paperQuestion);
  56. if (in != null){
  57. continue;
  58. }
  59. add(paperQuestion);
  60. }
  61. }
  62. /**
  63. * 符合过滤次数的试题
  64. * @param userId
  65. * @param origin
  66. * @param questionNoIds
  67. * @param filterTimes
  68. * @return
  69. */
  70. public List<Integer> filterTimesQuestion(Integer userId, QuestionOrigin origin, QuestionModule module, List<Integer> questionNoIds, Integer filterTimes){
  71. List<UserPaperQuestion> filterQuestionList = userPaperQuestionRelationMapper.filterTimes(userId, origin.key, module.key, questionNoIds, filterTimes);
  72. if (filterQuestionList == null || filterQuestionList.size() == 0){
  73. return questionNoIds;
  74. }
  75. // 移除符合过滤条件的题目
  76. for(UserPaperQuestion question : filterQuestionList){
  77. questionNoIds.remove(question.getQuestionNoId());
  78. }
  79. return questionNoIds;
  80. }
  81. /**
  82. * 批量添加所有题目关系
  83. * @param userId
  84. * @param paperId
  85. * @param origin
  86. * @param module
  87. * @param questionNoIds
  88. */
  89. public void addOrigin(Integer userId, Integer paperId, QuestionOrigin origin, QuestionModule module, List<Integer> questionNoIds){
  90. for(Integer questionNoId : questionNoIds){
  91. UserPaperQuestion paperQuestion = UserPaperQuestion.builder()
  92. .userId(userId)
  93. .questionModule(module.key)
  94. .questionOrigin(origin.key)
  95. .questionNoId(questionNoId)
  96. .paperId(paperId)
  97. .build();
  98. add(paperQuestion);
  99. }
  100. }
  101. /**
  102. * 如果移除正确题目后,再次做错,就取消移除
  103. * @param userId
  104. * @param module
  105. * @param questionNoId
  106. */
  107. public void removeRemoveError(Integer userId, QuestionModule module, Integer questionNoId){
  108. Example example = new Example(UserPaperQuestion.class);
  109. example.and(
  110. example.createCriteria()
  111. .andEqualTo("userId", userId)
  112. .andEqualTo("questionModule", module.key)
  113. .andEqualTo("questionNoId", questionNoId)
  114. .andEqualTo("questionOrigin", QuestionOrigin.REMOVE_ERROR.key)
  115. );
  116. delete(userPaperQuestionMapper, example);
  117. }
  118. public UserPaperQuestion add(UserPaperQuestion paper){
  119. int result = insert(userPaperQuestionMapper, paper);
  120. paper = one(userPaperQuestionMapper, paper.getId());
  121. if(paper == null){
  122. throw new SystemException("组卷题目添加失败");
  123. }
  124. return paper;
  125. }
  126. public UserPaperQuestion edit(UserPaperQuestion paper){
  127. UserPaperQuestion in = one(userPaperQuestionMapper, paper.getId());
  128. if(in == null){
  129. throw new ParameterException("组卷题目不存在");
  130. }
  131. int result = update(userPaperQuestionMapper, paper);
  132. return paper;
  133. }
  134. public boolean delete(Number id){
  135. UserPaperQuestion in = one(userPaperQuestionMapper, id);
  136. if(in == null){
  137. throw new ParameterException("组卷题目不存在");
  138. }
  139. int result = delete(userPaperQuestionMapper, id);
  140. return result > 0;
  141. }
  142. public UserPaperQuestion get(Number id){
  143. UserPaperQuestion in = one(userPaperQuestionMapper, id);
  144. if(in == null){
  145. throw new ParameterException("组卷题目不存在");
  146. }
  147. return in;
  148. }
  149. public Page<UserPaperQuestion> select(int page, int pageSize){
  150. return select(userPaperQuestionMapper, page, pageSize);
  151. }
  152. public Page<UserPaperQuestion> select(Integer[] ids){
  153. return page(()->select(userPaperQuestionMapper, ids), 1, ids.length);
  154. }
  155. public List<UserPaperQuestion> select(Collection ids){
  156. return select(userPaperQuestionMapper, ids);
  157. }
  158. }