SentenceService.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.qxgmat.service.extend;
  2. import com.nuliji.tools.Transform;
  3. import com.nuliji.tools.exception.ParameterException;
  4. import com.qxgmat.data.constants.enums.QuestionType;
  5. import com.qxgmat.data.constants.enums.logic.SentenceLogic;
  6. import com.qxgmat.data.constants.enums.module.QuestionModule;
  7. import com.qxgmat.data.constants.enums.module.QuestionNoModule;
  8. import com.qxgmat.data.dao.entity.*;
  9. import com.qxgmat.data.relation.entity.SentenceQuestionRelation;
  10. import com.qxgmat.data.relation.entity.UserRecordStatRelation;
  11. import com.qxgmat.service.UserPaperService;
  12. import com.qxgmat.service.inline.*;
  13. import org.springframework.beans.factory.annotation.Value;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import javax.annotation.Resource;
  17. import java.util.ArrayList;
  18. import java.util.Collection;
  19. import java.util.Date;
  20. import java.util.List;
  21. @Service
  22. public class SentenceService {
  23. @Value("${paper.sentenceLength}")
  24. private Integer paperLength;
  25. @Resource
  26. private QuestionService questionService;
  27. @Resource
  28. private QuestionNoService questionNoService;
  29. @Resource
  30. private SentenceQuestionService sentenceQuestionService;
  31. @Resource
  32. private SentencePaperService sentencePaperService;
  33. @Resource
  34. private UserReportService userReportService;
  35. @Resource
  36. private UserPaperService userPaperService;
  37. @Resource
  38. private UserSentenceRecordService userSentenceRecordService;
  39. @Resource
  40. private SentenceCodeService sentenceCodeService;
  41. /**
  42. * 添加长难句题目:加入题库,关联题目,并关联长难句paper
  43. * @param relation
  44. * @return
  45. */
  46. @Transactional
  47. public SentenceQuestion addQuestion(SentenceQuestionRelation relation){
  48. SentenceQuestion in = sentenceQuestionService.getByNo(relation.getNo());
  49. if (in != null){
  50. throw new ParameterException("序号已经存在");
  51. }
  52. Question question = relation.getQuestion();
  53. question.setQuestionType(QuestionType.SENTENCE.key);
  54. question.setQuestionModule(QuestionModule.SENTENCE.key);
  55. question = questionService.add(question);
  56. QuestionNo questionNo = QuestionNo.builder()
  57. .questionId(question.getId())
  58. .title(String.format("CNG%d", relation.getNo()))
  59. .no(relation.getNo())
  60. .module(QuestionNoModule.SENTENCE.key)
  61. .build();
  62. questionNo = questionNoService.add(questionNo);
  63. // 绑定关系
  64. relation.setQuestionId(question.getId());
  65. relation.setQuestionNoId(questionNo.getId());
  66. relation.setSubject(String.format("CNG%d", relation.getNo()));
  67. SentenceQuestion sentenceQuestion = sentenceQuestionService.add(relation);
  68. // 绑定关系:统一组卷
  69. // addQuestionToPaperWithNo(sentenceQuestion);
  70. //
  71. // if (sentenceQuestion.getIsTrail() > 0){
  72. // addQuestionToPaperWithTrail(sentenceQuestion);
  73. // }
  74. return sentenceQuestion;
  75. }
  76. /**
  77. * 更新长难句题目:更新题库,,变更长难句paper
  78. * @param relation
  79. * @return
  80. */
  81. @Transactional
  82. public SentenceQuestion editQuestion(SentenceQuestionRelation relation){
  83. SentenceQuestion in = sentenceQuestionService.getByNo(relation.getNo());
  84. if (in != null && !in.getId().equals(relation.getId())){
  85. throw new ParameterException("序号已经存在");
  86. }
  87. Question question = relation.getQuestion();
  88. question.setQuestionType(QuestionType.SENTENCE.key);
  89. question = questionService.edit(question);
  90. if(in == null){
  91. in = sentenceQuestionService.get(relation.getId());
  92. }
  93. QuestionNo questionNo = questionNoService.get(in.getQuestionNoId());
  94. if(relation.getTitle() != null) questionNo.setTitle(relation.getTitle());
  95. if(relation.getNo() != null) questionNo.setNo(relation.getNo());
  96. questionNoService.edit(questionNo);
  97. relation.setSubject(String.format("CNG%d", relation.getNo()));
  98. // 根据序号调整分组:移出原有关系 - 绑定关系
  99. // if (!in.getNo().equals(relation.getNo())){
  100. // removeQuestionFromPaper(in, SentenceLogic.NO);
  101. // addQuestionToPaperWithNo(relation);
  102. // }
  103. // 根据试用调整
  104. // if (!in.getIsTrail().equals(relation.getIsTrail())){
  105. // if (relation.getIsTrail() > 0){
  106. // addQuestionToPaperWithTrail(relation);
  107. // }else{
  108. // removeQuestionFromPaper(in, SentenceLogic.TRAIL);
  109. // }
  110. // }
  111. SentenceQuestion sentenceQuestion = sentenceQuestionService.edit(relation);
  112. return sentenceQuestion;
  113. }
  114. /**
  115. * 根据题目创建组卷序列
  116. * @param logic
  117. * @param questionList
  118. * @return
  119. */
  120. @Transactional
  121. public List<SentencePaper> createPaper(String prefixTitle, SentenceLogic logic, List<SentenceQuestion> questionList){
  122. Integer no = 0;
  123. List<SentencePaper> list = new ArrayList<>();
  124. if (questionList == null || questionList.size() == 0) return list;
  125. List<Integer> questionNoList = new ArrayList<>(paperLength);
  126. List<Integer> sentenceList = new ArrayList<>(paperLength);
  127. for(SentenceQuestion question : questionList){
  128. questionNoList.add(question.getQuestionNoId());
  129. sentenceList.add(question.getId());
  130. if (sentenceList.size() == paperLength){
  131. no += 1;
  132. SentencePaper paper = SentencePaper.builder()
  133. .logic(logic.key)
  134. .no(no)
  135. .questionNumber(sentenceList.size())
  136. .status(0)
  137. .questionNoIds(questionNoList.toArray(new Integer[0]))
  138. .questionSIds(sentenceList.toArray(new Integer[0]))
  139. .build();
  140. paper.setTitle(sentencePaperService.generateTitle(prefixTitle, paperLength, paper.getNo(), paper.getQuestionNumber()));
  141. sentencePaperService.add(paper);
  142. list.add(paper);
  143. questionNoList.clear();
  144. sentenceList.clear();
  145. }
  146. }
  147. if (sentenceList.size() > 0){
  148. no += 1;
  149. SentencePaper paper = SentencePaper.builder()
  150. .logic(logic.key)
  151. .no(no)
  152. .questionNumber(sentenceList.size())
  153. .status(0)
  154. .questionNoIds(questionNoList.toArray(new Integer[0]))
  155. .questionSIds(sentenceList.toArray(new Integer[0]))
  156. .build();
  157. paper.setTitle(sentencePaperService.generateTitle(prefixTitle, paperLength, paper.getNo(), paper.getQuestionNumber()));
  158. paper = sentencePaperService.add(paper);
  159. list.add(paper);
  160. }
  161. return list;
  162. }
  163. /**
  164. * 切换新组卷
  165. * @param logic
  166. * @param ids
  167. */
  168. @Transactional
  169. public void switchPaper(SentenceLogic logic, Collection ids){
  170. // 先将可用卷删除
  171. List<SentencePaper> list = sentencePaperService.listByLogic(logic);
  172. Collection oldIds = Transform.getIds(list, SentencePaper.class, "id");
  173. sentencePaperService.updatePaper(oldIds, 0);
  174. // 将新组卷启用
  175. sentencePaperService.updatePaper(ids, 1);
  176. }
  177. /**
  178. * 累计长难句学习时间
  179. * @param userId
  180. * @return
  181. */
  182. public Integer studyTime(Integer userId, Date startTime, Date endTime){
  183. UserRecordStatRelation record = userSentenceRecordService.stat(userId, startTime, endTime);
  184. return record != null ? record.getUserTime() : 0;
  185. }
  186. /**
  187. * 全站平均时间
  188. * @return
  189. */
  190. public Integer studyAvgTime(Date startTime, Date endTime){
  191. UserRecordStatRelation record = userSentenceRecordService.statAvg(startTime, endTime);
  192. return record != null ? record.getUserTime() : 0;
  193. }
  194. /**
  195. * 激活长难句
  196. * @param userId
  197. * @param code
  198. */
  199. public void active(Integer userId, String code){
  200. if (sentenceCodeService.isActive(userId) == null){
  201. sentenceCodeService.active(userId, code);
  202. }
  203. }
  204. }