package com.qxgmat.service.inline; import com.github.pagehelper.Page; import com.nuliji.tools.AbstractService; import com.nuliji.tools.exception.ParameterException; import com.nuliji.tools.exception.SystemException; import com.nuliji.tools.mybatis.Example; import com.qxgmat.data.constants.enums.QuestionType; import com.qxgmat.data.constants.enums.module.PaperModule; import com.qxgmat.data.constants.enums.module.QuestionModule; import com.qxgmat.data.constants.enums.module.QuestionNoModule; import com.qxgmat.data.constants.enums.module.QuestionOrigin; import com.qxgmat.data.dao.UserPaperMapper; import com.qxgmat.data.dao.UserPaperQuestionMapper; import com.qxgmat.data.dao.entity.QuestionNo; import com.qxgmat.data.dao.entity.UserPaper; import com.qxgmat.data.dao.entity.UserPaperQuestion; import com.qxgmat.data.dao.entity.UserQuestion; import com.qxgmat.data.relation.UserPaperQuestionRelationMapper; import com.qxgmat.data.relation.entity.QuestionNoRelation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collection; import java.util.List; @Service public class UserPaperQuestionService extends AbstractService { private static final Logger logger = LoggerFactory.getLogger(UserPaperQuestionService.class); @Resource private UserPaperQuestionMapper userPaperQuestionMapper; @Resource private UserPaperQuestionRelationMapper userPaperQuestionRelationMapper; /** * 添加需要移除的错题 * @param questionNoList */ @Transactional public void addRemoveError(Integer userId, List questionNoList){ for(QuestionNoRelation questionNo : questionNoList){ if (questionNo.getQuestion().getQuestionType().equals(QuestionType.AWA.key)){ // 作文不算错题 continue; } QuestionModule questionModule = QuestionModule.WithQuestionNo(QuestionNoModule.ValueOf(questionNo.getModule())); UserPaperQuestion paperQuestion = UserPaperQuestion.builder() .userId(userId) .questionModule(questionModule.key) .questionOrigin(QuestionOrigin.REMOVE_ERROR.key) .questionNoId(questionNo.getId()) // 移出错题,没有对应paper .paperId(0) .build(); UserPaperQuestion in = one(userPaperQuestionMapper, paperQuestion); if (in != null){ continue; } add(paperQuestion); } } /** * 符合过滤次数的试题 * @param userId * @param origin * @param questionNoIds * @param filterTimes * @return */ public List filterTimesQuestion(Integer userId, QuestionOrigin origin, QuestionModule module, List questionNoIds, Integer filterTimes){ List filterQuestionList = userPaperQuestionRelationMapper.filterTimes(userId, origin.key, module.key, questionNoIds, filterTimes); if (filterQuestionList == null || filterQuestionList.size() == 0){ return questionNoIds; } // 移除符合过滤条件的题目 for(UserPaperQuestion question : filterQuestionList){ questionNoIds.remove(question.getQuestionNoId()); } return questionNoIds; } /** * 批量添加所有题目关系 * @param userId * @param paperId * @param origin * @param module * @param questionNoIds */ public void addOrigin(Integer userId, Integer paperId, QuestionOrigin origin, QuestionModule module, List questionNoIds){ for(Integer questionNoId : questionNoIds){ UserPaperQuestion paperQuestion = UserPaperQuestion.builder() .userId(userId) .questionModule(module.key) .questionOrigin(origin.key) .questionNoId(questionNoId) .paperId(paperId) .build(); add(paperQuestion); } } /** * 如果移除正确题目后,再次做错,就取消移除 * @param userId * @param module * @param questionNoId */ public void removeRemoveError(Integer userId, QuestionModule module, Integer questionNoId){ Example example = new Example(UserPaperQuestion.class); example.and( example.createCriteria() .andEqualTo("userId", userId) .andEqualTo("questionModule", module.key) .andEqualTo("questionNoId", questionNoId) .andEqualTo("questionOrigin", QuestionOrigin.REMOVE_ERROR.key) ); delete(userPaperQuestionMapper, example); } public UserPaperQuestion add(UserPaperQuestion paper){ int result = insert(userPaperQuestionMapper, paper); paper = one(userPaperQuestionMapper, paper.getId()); if(paper == null){ throw new SystemException("组卷题目添加失败"); } return paper; } public UserPaperQuestion edit(UserPaperQuestion paper){ UserPaperQuestion in = one(userPaperQuestionMapper, paper.getId()); if(in == null){ throw new ParameterException("组卷题目不存在"); } int result = update(userPaperQuestionMapper, paper); return paper; } public boolean delete(Number id){ UserPaperQuestion in = one(userPaperQuestionMapper, id); if(in == null){ throw new ParameterException("组卷题目不存在"); } int result = delete(userPaperQuestionMapper, id); return result > 0; } public UserPaperQuestion get(Number id){ UserPaperQuestion in = one(userPaperQuestionMapper, id); if(in == null){ throw new ParameterException("组卷题目不存在"); } return in; } public Page select(int page, int pageSize){ return select(userPaperQuestionMapper, page, pageSize); } public Page select(Integer[] ids){ return page(()->select(userPaperQuestionMapper, ids), 1, ids.length); } public List select(Collection ids){ return select(userPaperQuestionMapper, ids); } }