package com.qxgmat.service.inline; import com.github.pagehelper.Page; import com.nuliji.tools.AbstractService; import com.nuliji.tools.Tools; import com.nuliji.tools.Transform; import com.nuliji.tools.exception.ParameterException; import com.nuliji.tools.exception.SystemException; import com.nuliji.tools.mybatis.Example; import com.qxgmat.data.constants.enums.status.AskStatus; import com.qxgmat.data.constants.enums.status.DirectionStatus; import com.qxgmat.data.constants.enums.user.AskTarget; import com.qxgmat.data.constants.enums.user.MoneyRange; import com.qxgmat.data.dao.UserAskQuestionMapper; import com.qxgmat.data.dao.entity.UserAskQuestion; import com.qxgmat.data.relation.UserAskQuestionRelationMapper; 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.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class UserAskQuestionService extends AbstractService { private static final Logger logger = LoggerFactory.getLogger(UserAskQuestionService.class); @Resource private UserAskQuestionMapper userAskQuestionMapper; @Resource private UserAskQuestionRelationMapper userAskQuestionRelationMapper; public Page listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, AskStatus status, String startTime, String endTime, String order){ Page p = page( ()-> userAskQuestionRelationMapper.listExercise(userId, keyword, questionTypes, structIds, status != null ? status.index:null, startTime, endTime, order) , page, size); Collection ids = Transform.getIds(p, UserAskQuestion.class, "id"); Transform.replace(p, select(ids), UserAskQuestion.class, "id"); return p; } public Page listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, AskStatus status, String startTime, String endTime, String order){ Page p = page( ()-> userAskQuestionRelationMapper.listExamination(userId, keyword, questionTypes, structIds, libraryId, year, status != null ? status.index:null, startTime, endTime, order) , page, size); Collection ids = Transform.getIds(p, UserAskQuestion.class, "id"); Transform.replace(p, select(ids), UserAskQuestion.class, "id"); return p; } private Map adminMap = new HashMap(){{ put("", "uaq"); }}; public Page listAdmin(int page, int size, String askModule, String questionType, String questionModule, Number userId, Number questionNoId, AskTarget target, AskStatus status, Integer showStatus, MoneyRange moneyRange, Boolean hasRecord, String startTime, String endTime, String order, DirectionStatus direction){ String tk = target != null ? target.key : ""; Integer statusIndex = status != null ? status.index : null; Integer max = moneyRange != null ? moneyRange.max == Integer.MAX_VALUE ? null : moneyRange.max : null; Integer min = moneyRange != null ? moneyRange.min : null; if(order == null || order.isEmpty()){ order = "id"; } if(adminMap.containsKey(order)){ order = adminMap.get(order)+".`"+Tools.underscoreName(order)+"`"; }else{ order = adminMap.get("")+".`"+Tools.underscoreName(order)+"`"; } if (direction == null){ direction = DirectionStatus.DESC; } String finalOrder = order; DirectionStatus finalDirection = direction; Page p = page( ()-> userAskQuestionRelationMapper.listAdmin(askModule, questionType, questionModule, userId, questionNoId, tk, statusIndex, showStatus, min, max, hasRecord, startTime, endTime, finalOrder, finalDirection.key) , page, size); Collection ids = Transform.getIds(p, UserAskQuestion.class, "id"); Transform.replace(p, select(ids), UserAskQuestion.class, "id"); return p; } public List listByQuestion(Number questionId, Boolean showStatus){ Example example = new Example(UserAskQuestion.class); example.and( example.createCriteria() .andEqualTo("questionId", questionId) ); if (showStatus != null) example.and( example.createCriteria() .andEqualTo("showStatus", showStatus?1:0) .andEqualTo("answerStatus", 1) ); example.orderBy("sort").desc(); return select(userAskQuestionMapper, example); } /** * 根据列表顺序全部更新排序:从大到小 * @param ids */ @Transactional public void updateOrder(Integer[] ids){ int sort = ids.length; List userAskQuestionList = select(userAskQuestionMapper, ids); Map userAskQuestionMap = Transform.getMap(userAskQuestionList, UserAskQuestion.class, "id"); for (Integer id : ids){ sort -= 1; UserAskQuestion userAskQuestion = (UserAskQuestion)userAskQuestionMap.get(id); if (userAskQuestion == null) continue; if (userAskQuestion.getSort() == sort) continue; update(userAskQuestionMapper, UserAskQuestion.builder() .id(id) .sort(sort) .showStatus(1) .build() ); } } public UserAskQuestion add(UserAskQuestion message){ int result = insert(userAskQuestionMapper, message); message = one(userAskQuestionMapper, message.getId()); if(message == null){ throw new SystemException("提问添加失败"); } return message; } public UserAskQuestion edit(UserAskQuestion message){ UserAskQuestion in = one(userAskQuestionMapper, message.getId()); if(in == null){ throw new ParameterException("提问不存在"); } int result = update(userAskQuestionMapper, message); return message; } public boolean delete(Number id){ UserAskQuestion in = one(userAskQuestionMapper, id); if(in == null){ throw new ParameterException("提问不存在"); } int result = delete(userAskQuestionMapper, id); return result > 0; } public UserAskQuestion get(Number id){ UserAskQuestion in = one(userAskQuestionMapper, id); if(in == null){ throw new ParameterException("提问不存在"); } return in; } public Page select(int page, int pageSize){ return select(userAskQuestionMapper, page, pageSize); } public Page select(Integer[] ids){ return page(()->select(userAskQuestionMapper, ids), 1, ids.length); } public List select(Collection ids){ return select(userAskQuestionMapper, ids); } }