TextbookService.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package com.qxgmat.service.extend;
  2. import com.nuliji.tools.Tools;
  3. import com.qxgmat.data.constants.enums.logic.SentenceLogic;
  4. import com.qxgmat.data.constants.enums.logic.TextbookLogic;
  5. import com.qxgmat.data.constants.enums.module.QuestionModule;
  6. import com.qxgmat.data.dao.entity.Question;
  7. import com.qxgmat.data.dao.entity.TextbookLibrary;
  8. import com.qxgmat.data.dao.entity.TextbookPaper;
  9. import com.qxgmat.data.dao.entity.TextbookQuestion;
  10. import com.qxgmat.data.relation.entity.TextbookQuestionRelation;
  11. import com.qxgmat.service.inline.TextbookPaperService;
  12. import com.qxgmat.service.inline.QuestionService;
  13. import com.qxgmat.service.inline.TextbookLibraryService;
  14. import com.qxgmat.service.inline.TextbookQuestionService;
  15. import org.springframework.beans.factory.annotation.Value;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import javax.annotation.Resource;
  19. import java.text.ParseException;
  20. import java.text.SimpleDateFormat;
  21. import java.util.Arrays;
  22. import java.util.Date;
  23. import java.util.List;
  24. import java.util.stream.Collectors;
  25. @Service
  26. public class TextbookService {
  27. SimpleDateFormat stringToDate = new SimpleDateFormat("yyyy-MM-dd");
  28. SimpleDateFormat dateToString = new SimpleDateFormat("yyyy年MM月dd日");
  29. SimpleDateFormat dateToDay = new SimpleDateFormat("dd日");
  30. @Value("${paper.textbookLength}")
  31. private Integer paperLength;
  32. @Resource
  33. private TextbookPaperService textbookPaperService;
  34. @Resource
  35. private QuestionService questionService;
  36. @Resource
  37. private TextbookQuestionService textbookQuestionService;
  38. @Resource
  39. private TextbookLibraryService textbookLibraryService;
  40. /**
  41. * 添加新一期的换库
  42. * @param entity
  43. * @return
  44. */
  45. @Transactional
  46. public TextbookLibrary replace(TextbookLibrary entity){
  47. TextbookLibrary last = textbookLibraryService.getLatest();
  48. if (last != null){
  49. // 将最后一期设定库尾
  50. last.setEndDate(entity.getStartDate());
  51. textbookLibraryService.edit(last);
  52. String prefixTitle = generatePrefixTitle(last);
  53. textbookPaperService.updateTitle(last.getId(), prefixTitle, paperLength);
  54. textbookQuestionService.updateTitle(last.getId(), prefixTitle);
  55. }
  56. return textbookLibraryService.add(entity);
  57. }
  58. /**
  59. * 添加机经题目:加入题库,关联题目,并关联机经paper
  60. * @param relation
  61. * @return
  62. */
  63. @Transactional
  64. public TextbookQuestion addQuestion(TextbookQuestionRelation relation){
  65. Question question = relation.getQuestion();
  66. question.setQuestionModule(QuestionModule.TEXTBOOK.key);
  67. question = questionService.add(question);
  68. // 绑定关系
  69. relation.setQuestionId(question.getId());
  70. TextbookLibrary library = textbookLibraryService.get(relation.getLibraryId());
  71. String prefixTitle = generatePrefixTitle(library);
  72. relation.setTitle(textbookQuestionService.generateTitle(prefixTitle, relation.getNo()));
  73. // 保存年份
  74. relation.setYear(String.valueOf(Tools.year(library.getStartDate())));
  75. TextbookQuestion textbookQuestion = textbookQuestionService.add(relation);
  76. // 绑定关系
  77. if (question.getQuestionType().equals(TextbookLogic.DS.key)){
  78. addQuestionToPaper(library, textbookQuestion, TextbookLogic.DS);
  79. addQuestionToPaper(library, textbookQuestion, TextbookLogic.DS_PS);
  80. }else if (question.getQuestionType().equals(TextbookLogic.PS.key)){
  81. addQuestionToPaper(library, textbookQuestion, TextbookLogic.PS);
  82. addQuestionToPaper(library, textbookQuestion, TextbookLogic.DS_PS);
  83. }
  84. textbookQuestionService.edit(textbookQuestion);
  85. return textbookQuestion;
  86. }
  87. /**
  88. * 更新机经题目:更新题库
  89. * @param relation
  90. * @return
  91. */
  92. @Transactional
  93. public TextbookQuestion editQuestion(TextbookQuestionRelation relation){
  94. Question question = relation.getQuestion();
  95. question = questionService.edit(question);
  96. TextbookQuestion textbookQuestion = textbookQuestionService.edit(relation);
  97. return textbookQuestion;
  98. }
  99. private void addQuestionToPaper(TextbookLibrary library, TextbookQuestion question, TextbookLogic logic){
  100. String prefixTitle = generatePrefixTitle(library);
  101. // 获取最后一个paper
  102. TextbookPaper paper = textbookPaperService.getLastByLibrary(logic, question.getLibraryId());
  103. Integer no = 0;
  104. if (paper == null || paper.getQuestionNumber().equals(paperLength)){
  105. if (paper != null){
  106. no = paper.getNo();
  107. }
  108. paper = textbookPaperService.add(TextbookPaper.builder()
  109. .logic(SentenceLogic.NO.key)
  110. .year(question.getYear())
  111. .libraryId(question.getLibraryId())
  112. .title(textbookPaperService.generateTitle(prefixTitle, paperLength, no, 1))
  113. .no(no+1)
  114. .questionNumber(1)
  115. .status(1)
  116. .questionNoIds(new Integer[]{question.getId()}).build()
  117. );
  118. }else{
  119. // 加入
  120. List<Integer> list = Arrays.stream(paper.getQuestionNoIds()).collect(Collectors.toList());
  121. list.add(question.getId());
  122. paper.setQuestionNumber(paper.getQuestionNumber() + 1);
  123. paper.setQuestionNoIds(list.toArray(new Integer[0]));
  124. paper.setTitle(textbookPaperService.generateTitle(prefixTitle, paperLength, paper.getNo(), paper.getQuestionNumber()));
  125. paper = textbookPaperService.edit(paper);
  126. }
  127. }
  128. private void removeQuestionFromPaper(TextbookQuestion question){
  129. List<TextbookPaper> paperList = textbookPaperService.listByQuestion(question);
  130. for(TextbookPaper paper : paperList){
  131. paper.setQuestionNumber(paper.getQuestionNumber() - 1);
  132. List<Integer> list = Arrays.stream(paper.getQuestionNoIds()).collect(Collectors.toList());
  133. list.remove(question.getId());
  134. paper.setQuestionNoIds(list.toArray(new Integer[0]));
  135. textbookPaperService.edit(paper);
  136. }
  137. }
  138. private String generatePrefixTitle(TextbookLibrary library){
  139. String startDate = dateToString.format(library.getStartDate());
  140. String endDate;
  141. if (library.getEndDate()==null){
  142. // 至今
  143. endDate = "now";
  144. }else if(library.getStartDate().equals(library.getEndDate())){
  145. // 同月
  146. endDate = dateToString.format(library.getEndDate());
  147. }else{
  148. endDate = dateToString.format(library.getEndDate());
  149. }
  150. return String.format("%s-%s", startDate, endDate);
  151. }
  152. }