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.ExperienceDayRange; import com.qxgmat.data.constants.enums.ExperienceScoreRange; import com.qxgmat.data.constants.enums.status.DirectionStatus; import com.qxgmat.data.constants.enums.user.DataType; import com.qxgmat.data.dao.CourseDataMapper; import com.qxgmat.data.dao.CourseExperienceMapper; import com.qxgmat.data.dao.entity.CourseData; import com.qxgmat.data.dao.entity.CourseExperience; import com.qxgmat.data.dao.entity.User; import com.qxgmat.data.relation.CourseExperienceRelationMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class CourseExperienceService extends AbstractService { private static final Logger logger = LoggerFactory.getLogger(CourseExperienceService.class); @Resource private CourseExperienceMapper courseExperienceMapper; @Resource private CourseExperienceRelationMapper courseExperienceRelationMapper; private Map adminMap = new HashMap(){{ put("", "ce"); }}; public Page listWithUser(int page, int size, Integer userId, String startTime, String endTime, String order, DirectionStatus direction){ 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( ()-> courseExperienceRelationMapper.listWithUser(userId, startTime, endTime, finalOrder, finalDirection.key) , page, size); Collection ids = Transform.getIds(p, CourseExperience.class, "id"); Transform.replace(p, select(ids), CourseExperience.class, "id"); return p; } public Page listAdmin(int page, int size, Integer userId, String keyword, String prepareStatus, ExperienceScoreRange experienceScore, ExperienceDayRange experienceDay, String experiencePercent, String order, DirectionStatus direction){ Example example = new Example(CourseExperience.class); if(userId != null){ example.and( example.createCriteria() .andEqualTo("userId", userId) ); } if(keyword != null){ example.and( example.createCriteria() .orLike("title", "%"+keyword+"%") .orLike("content", "%"+keyword+"%") ); } if (prepareStatus != null){ example.and( example.createCriteria() .andEqualTo("prepareStatus", prepareStatus) ); } if (experienceScore != null){ example.and( example.createCriteria() .andGreaterThanOrEqualTo("experienceScore", experienceScore.min) .andLessThan("experienceScore", experienceScore.max) ); } if (experienceDay != null){ example.and( example.createCriteria() .andGreaterThanOrEqualTo("experienceDay", experienceDay.min) .andLessThan("experienceDay", experienceDay.max) ); } if (experiencePercent != null){ example.and( example.createCriteria() .andEqualTo("experiencePercent", experiencePercent) ); } if(order == null || order.isEmpty()) order = "id"; switch(direction){ case ASC: example.orderBy(order).asc(); break; case DESC: default: example.orderBy(order).desc(); } return select(courseExperienceMapper, example, page, size); } public Page list(int page, int size,String prepareStatus, ExperienceScoreRange experienceScore, ExperienceDayRange experienceDay, String experiencePercent, String order, DirectionStatus direction){ Example example = new Example(CourseExperience.class); if(prepareStatus != null){ example.and( example.createCriteria() .andEqualTo("prepareStatus", prepareStatus) ); } if(experienceDay != null){ example.and( example.createCriteria() .andGreaterThanOrEqualTo("experienceDay", experienceDay.min) .andLessThan("experienceDay", experienceDay.max) ); } if(experienceScore != null){ example.and( example.createCriteria() .andGreaterThanOrEqualTo("experienceScore", experienceScore.min) .andLessThan("experienceScore", experienceScore.max) ); } if(experiencePercent != null){ example.and( example.createCriteria() .andEqualTo("experiencePercent", experiencePercent) ); } if(order == null || order.isEmpty()) order = "id"; switch(direction){ case ASC: example.orderBy(order).asc(); break; case DESC: default: example.orderBy(order).desc(); } return select(courseExperienceMapper, example, page, size); } /** * 累加收藏记录,访问记录 * @param view * @param collect */ public void accumulation(Integer experienceId, int view, int collect){ courseExperienceRelationMapper.accumulation(experienceId, view, collect); } /** * 替换comment的用户信息为真实用户信息 * @param experiences * @param users */ public void replaceUser(List experiences, List users){ Map userMap = Transform.getMap(users, User.class, "id"); for(CourseExperience experience : experiences){ if (experience.getUserId() == 0) { continue; } User user = (User)userMap.get(experience.getUserId()); if (user == null){ continue; } experience.setNickname(user.getNickname()); } } public CourseExperience add(CourseExperience courseData){ int result = insert(courseExperienceMapper, courseData); courseData = one(courseExperienceMapper, courseData.getId()); if(courseData == null){ throw new SystemException("心经添加失败"); } return courseData; } public CourseExperience edit(CourseExperience courseData){ CourseExperience in = one(courseExperienceMapper, courseData.getId()); if(in == null){ throw new ParameterException("心经不存在"); } int result = update(courseExperienceMapper, courseData); return courseData; } public boolean delete(Number id){ CourseExperience in = one(courseExperienceMapper, id); if(in == null){ throw new ParameterException("心经不存在"); } int result = delete(courseExperienceMapper, id); return result > 0; } public CourseExperience get(Number id){ CourseExperience in = one(courseExperienceMapper, id); if(in == null){ throw new ParameterException("心经不存在"); } return in; } public Page select(int page, int pageSize){ return select(courseExperienceMapper, page, pageSize); } public Page select(Integer[] ids){ return page(()->select(courseExperienceMapper, ids), 1, ids.length); } public List select(Collection ids){ return select(courseExperienceMapper, ids); } }