ExerciseService.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package com.qxgmat.service.extend;
  2. import com.github.pagehelper.Page;
  3. import com.nuliji.tools.AbstractService;
  4. import com.nuliji.tools.PageResult;
  5. import com.nuliji.tools.Tools;
  6. import com.nuliji.tools.Transform;
  7. import com.qxgmat.data.constants.enums.QuestionType;
  8. import com.qxgmat.data.constants.enums.logic.ExerciseLogic;
  9. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  10. import com.qxgmat.data.dao.entity.*;
  11. import com.qxgmat.data.relation.ExercisePaperRelationMapper;
  12. import com.qxgmat.data.relation.QuestionNoRelationMapper;
  13. import com.qxgmat.data.relation.UserPaperRelationMapper;
  14. import com.qxgmat.data.relation.UserReportRelationMapper;
  15. import com.qxgmat.data.relation.entity.QuestionNoRelation;
  16. import com.qxgmat.service.inline.ExercisePaperService;
  17. import com.qxgmat.service.UserPaperService;
  18. import com.qxgmat.service.inline.QuestionNoService;
  19. import com.qxgmat.service.inline.QuestionService;
  20. import com.qxgmat.service.inline.UserReportService;
  21. import org.springframework.beans.factory.annotation.Value;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import javax.annotation.Resource;
  25. import java.util.*;
  26. @Service
  27. public class ExerciseService extends AbstractService {
  28. @Value("${paper.exerciseLength}")
  29. public Integer paperLength;
  30. @Value("${paper.irLength}")
  31. public Integer irLength;
  32. @Value("${paper.awaLength}")
  33. public Integer awaLength;
  34. @Resource
  35. private QuestionService questionService;
  36. @Resource
  37. private QuestionNoService questionNoService;
  38. @Resource
  39. private ExercisePaperService exercisePaperService;
  40. @Resource
  41. private QuestionNoRelationMapper questionNoRelationMapper;
  42. @Resource
  43. private ExercisePaperRelationMapper exercisePaperRelationMapper;
  44. @Resource
  45. private UserPaperRelationMapper userPaperRelationMapper;
  46. @Resource
  47. private UserPaperService userPaperService;
  48. @Resource
  49. private UserReportRelationMapper userReportRelationMapper;
  50. @Resource
  51. private UserReportService userReportService;
  52. private Map<String, String> adminMap = new HashMap<String, String>(){{
  53. put("updateTime", "q");
  54. put("no", "ep");
  55. put("", "qn");
  56. }};
  57. /**
  58. *
  59. * @param page
  60. * @param pageSize
  61. * @param questionType
  62. * @param structId
  63. * @param questionNo
  64. * @param paperId
  65. * @param place
  66. * @param difficult
  67. * @param startTime
  68. * @param endTime
  69. * @param order
  70. * @param direction
  71. * @return
  72. */
  73. public Page<QuestionNoRelation> listAdmin(int page, int pageSize, String questionType, Number structId, Number questionNo, Number paperId, String place, String difficult, String startTime, String endTime, String order, DirectionStatus direction){
  74. if(order == null || order.isEmpty()){
  75. order = "id";
  76. }
  77. if(adminMap.containsKey(order)){
  78. order = adminMap.get(order)+".`"+Tools.underscoreName(order)+"`";
  79. }else{
  80. order = adminMap.get("")+".`"+Tools.underscoreName(order)+"`";
  81. }
  82. if (direction == null){
  83. direction = DirectionStatus.DESC;
  84. }
  85. String finalOrder = order;
  86. DirectionStatus finalDirection = direction;
  87. Page<QuestionNoRelation> p = page(() -> {
  88. questionNoRelationMapper.listExerciseAdmin(questionType, structId, questionNo, paperId, place, difficult, startTime, endTime, finalOrder, finalDirection.key);
  89. }, page, pageSize);
  90. Collection ids = Transform.getIds(p, QuestionNoRelation.class, "id");
  91. // 获取详细数据
  92. List<QuestionNoRelation> list = questionNoService.relation(questionNoService.select(ids));
  93. Transform.replace(p, list, QuestionNoRelation.class, "id");
  94. return p;
  95. }
  96. /**
  97. * 查找练习组卷
  98. * @param page
  99. * @param size
  100. * @param structId
  101. * @param userId
  102. * @param logic
  103. * @param logicExtend
  104. * @param times
  105. * @return
  106. */
  107. public Page<ExercisePaper> list(int page, int size, Number structId, Number userId, ExerciseLogic logic, String logicExtend, Integer times){
  108. String logicKey = logic != null ? logic.key : "";
  109. Page<ExercisePaper> p = page(()->{
  110. exercisePaperRelationMapper.listWithUser(structId, userId, logicKey, logicExtend, times);
  111. },page, size);
  112. Collection ids = Transform.getIds(p, ExercisePaper.class, "id");
  113. // 获取详细数据
  114. List<ExercisePaper> list = exercisePaperService.select(ids);
  115. Transform.replace(p, list, QuestionNoRelation.class, "id");
  116. return p;
  117. }
  118. /**
  119. * 根据题目创建组卷序列
  120. * @param logic
  121. * @param questionList
  122. * @return
  123. */
  124. @Transactional
  125. public List<ExercisePaper> createPaper(String prefixTitle, QuestionType questionType, Integer three, Integer four, Integer length, ExerciseLogic logic, String extend, List<QuestionNoRelation> questionList){
  126. Integer no = 0;
  127. List<ExercisePaper> list = new ArrayList<>();
  128. if (questionList == null || questionList.size() == 0) return list;
  129. List<Integer> tmp = new ArrayList<>(length);
  130. for(QuestionNo question : questionList){
  131. tmp.add(question.getId());
  132. if (tmp.size() == length){
  133. no += 1;
  134. ExercisePaper paper = ExercisePaper.builder()
  135. .logic(logic.key)
  136. .logicExtend(extend)
  137. .questionType(questionType.key)
  138. .structThree(three)
  139. .structFour(four)
  140. .no(no)
  141. .questionNumber(tmp.size())
  142. .status(0)
  143. .questionNoIds(tmp.toArray(new Integer[0])).build();
  144. paper.setTitle(exercisePaperService.generateTitle(prefixTitle, length, paper.getNo(), paper.getQuestionNumber()));
  145. paper = exercisePaperService.add(paper);
  146. list.add(paper);
  147. tmp.clear();
  148. }
  149. }
  150. if (tmp.size() > 0){
  151. no += 1;
  152. ExercisePaper paper = ExercisePaper.builder()
  153. .logic(logic.key)
  154. .logicExtend(extend)
  155. .questionType(questionType.key)
  156. .structThree(three)
  157. .structFour(four)
  158. .no(no)
  159. .questionNumber(tmp.size())
  160. .status(0)
  161. .questionNoIds(tmp.toArray(new Integer[0])).build();
  162. paper.setTitle(exercisePaperService.generateTitle(prefixTitle, length, paper.getNo(), paper.getQuestionNumber()));
  163. paper = exercisePaperService.add(paper);
  164. list.add(paper);
  165. }
  166. return list;
  167. }
  168. /**
  169. * 切换新组卷
  170. * @param logic
  171. * @param ids
  172. */
  173. @Transactional
  174. public void switchPaper(Integer three, Integer four, ExerciseLogic logic, Collection ids){
  175. // 先将可用卷删除
  176. List<ExercisePaper> list = exercisePaperService.listByLogic(three, four, logic, null);
  177. Collection oldIds = Transform.getIds(list, ExercisePaper.class, "id");
  178. exercisePaperService.updatePaper(oldIds, 0);
  179. // 将新组卷启用
  180. exercisePaperService.updatePaper(ids, 1);
  181. }
  182. }