| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- package com.qxgmat.service.extend;
- import com.nuliji.tools.Tools;
- import com.qxgmat.data.constants.enums.logic.SentenceLogic;
- import com.qxgmat.data.constants.enums.logic.TextbookLogic;
- import com.qxgmat.data.constants.enums.module.QuestionModule;
- import com.qxgmat.data.dao.entity.Question;
- import com.qxgmat.data.dao.entity.TextbookLibrary;
- import com.qxgmat.data.dao.entity.TextbookPaper;
- import com.qxgmat.data.dao.entity.TextbookQuestion;
- import com.qxgmat.data.relation.entity.TextbookQuestionRelation;
- import com.qxgmat.service.inline.TextbookPaperService;
- import com.qxgmat.service.inline.QuestionService;
- import com.qxgmat.service.inline.TextbookLibraryService;
- import com.qxgmat.service.inline.TextbookQuestionService;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import java.util.stream.Collectors;
- @Service
- public class TextbookService {
- SimpleDateFormat stringToDate = new SimpleDateFormat("yyyy-MM-dd");
- SimpleDateFormat dateToString = new SimpleDateFormat("yyyy年MM月dd日");
- SimpleDateFormat dateToDay = new SimpleDateFormat("dd日");
- @Value("${paper.textbookLength}")
- private Integer paperLength;
- @Resource
- private TextbookPaperService textbookPaperService;
- @Resource
- private QuestionService questionService;
- @Resource
- private TextbookQuestionService textbookQuestionService;
- @Resource
- private TextbookLibraryService textbookLibraryService;
- /**
- * 添加新一期的换库
- * @param entity
- * @return
- */
- @Transactional
- public TextbookLibrary replace(TextbookLibrary entity){
- TextbookLibrary last = textbookLibraryService.getLatest();
- if (last != null){
- // 将最后一期设定库尾
- last.setEndDate(entity.getStartDate());
- textbookLibraryService.edit(last);
- String prefixTitle = generatePrefixTitle(last);
- textbookPaperService.updateTitle(last.getId(), prefixTitle, paperLength);
- textbookQuestionService.updateTitle(last.getId(), prefixTitle);
- }
- return textbookLibraryService.add(entity);
- }
- /**
- * 添加机经题目:加入题库,关联题目,并关联机经paper
- * @param relation
- * @return
- */
- @Transactional
- public TextbookQuestion addQuestion(TextbookQuestionRelation relation){
- Question question = relation.getQuestion();
- question.setQuestionModule(QuestionModule.TEXTBOOK.key);
- question = questionService.add(question);
- // 绑定关系
- relation.setQuestionId(question.getId());
- TextbookLibrary library = textbookLibraryService.get(relation.getLibraryId());
- String prefixTitle = generatePrefixTitle(library);
- relation.setTitle(textbookQuestionService.generateTitle(prefixTitle, relation.getNo()));
- // 保存年份
- relation.setYear(String.valueOf(Tools.year(library.getStartDate())));
- TextbookQuestion textbookQuestion = textbookQuestionService.add(relation);
- // 绑定关系
- if (question.getQuestionType().equals(TextbookLogic.DS.key)){
- addQuestionToPaper(library, textbookQuestion, TextbookLogic.DS);
- addQuestionToPaper(library, textbookQuestion, TextbookLogic.DS_PS);
- }else if (question.getQuestionType().equals(TextbookLogic.PS.key)){
- addQuestionToPaper(library, textbookQuestion, TextbookLogic.PS);
- addQuestionToPaper(library, textbookQuestion, TextbookLogic.DS_PS);
- }
- textbookQuestionService.edit(textbookQuestion);
- return textbookQuestion;
- }
- /**
- * 更新机经题目:更新题库
- * @param relation
- * @return
- */
- @Transactional
- public TextbookQuestion editQuestion(TextbookQuestionRelation relation){
- Question question = relation.getQuestion();
- question = questionService.edit(question);
- TextbookQuestion textbookQuestion = textbookQuestionService.edit(relation);
- return textbookQuestion;
- }
- private void addQuestionToPaper(TextbookLibrary library, TextbookQuestion question, TextbookLogic logic){
- String prefixTitle = generatePrefixTitle(library);
- // 获取最后一个paper
- TextbookPaper paper = textbookPaperService.getLastByLibrary(logic, question.getLibraryId());
- Integer no = 0;
- if (paper == null || paper.getQuestionNumber().equals(paperLength)){
- if (paper != null){
- no = paper.getNo();
- }
- paper = textbookPaperService.add(TextbookPaper.builder()
- .logic(SentenceLogic.NO.key)
- .year(question.getYear())
- .libraryId(question.getLibraryId())
- .title(textbookPaperService.generateTitle(prefixTitle, paperLength, no, 1))
- .no(no+1)
- .questionNumber(1)
- .status(1)
- .questionNoIds(new Integer[]{question.getId()}).build()
- );
- }else{
- // 加入
- List<Integer> list = Arrays.stream(paper.getQuestionNoIds()).collect(Collectors.toList());
- list.add(question.getId());
- paper.setQuestionNumber(paper.getQuestionNumber() + 1);
- paper.setQuestionNoIds(list.toArray(new Integer[0]));
- paper.setTitle(textbookPaperService.generateTitle(prefixTitle, paperLength, paper.getNo(), paper.getQuestionNumber()));
- paper = textbookPaperService.edit(paper);
- }
- }
- private void removeQuestionFromPaper(TextbookQuestion question){
- List<TextbookPaper> paperList = textbookPaperService.listByQuestion(question);
- for(TextbookPaper paper : paperList){
- paper.setQuestionNumber(paper.getQuestionNumber() - 1);
- List<Integer> list = Arrays.stream(paper.getQuestionNoIds()).collect(Collectors.toList());
- list.remove(question.getId());
- paper.setQuestionNoIds(list.toArray(new Integer[0]));
- textbookPaperService.edit(paper);
- }
- }
- private String generatePrefixTitle(TextbookLibrary library){
- String startDate = dateToString.format(library.getStartDate());
- String endDate;
- if (library.getEndDate()==null){
- // 至今
- endDate = "now";
- }else if(library.getStartDate().equals(library.getEndDate())){
- // 同月
- endDate = dateToString.format(library.getEndDate());
- }else{
- endDate = dateToString.format(library.getEndDate());
- }
- return String.format("%s-%s", startDate, endDate);
- }
- }
|