package com.redxun.knowledge.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.redxun.common.base.db.BaseDao; import com.redxun.common.base.db.BaseService; import com.redxun.common.base.db.PageHelper; import com.redxun.common.base.search.QueryFilter; import com.redxun.common.service.impl.SuperServiceImpl; import com.redxun.common.tool.BeanUtil; import com.redxun.common.tool.IdGenerator; import com.redxun.feign.org.UserClient; import com.redxun.knowledge.common.UserService; import com.redxun.knowledge.entity.dao.Banner; import com.redxun.knowledge.entity.dao.Knowledge; import com.redxun.knowledge.entity.dao.KnowledgeCategory; import com.redxun.knowledge.entity.vo.BannerAdminVo; import com.redxun.knowledge.entity.vo.BannerPcVo; import com.redxun.knowledge.entity.vo.KnowledgeCategoryAdminVo; import com.redxun.knowledge.mapper.BannerMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * [业务--首页banner表]业务服务类 */ @Slf4j @Service public class BannerServiceImpl extends SuperServiceImpl implements BaseService { @Resource private BannerMapper bannerMapper; @Autowired private KnowledgeServiceImpl knowledgeService; @Autowired private KnowledgeCategoryServiceImpl knowledgeCategoryService; @Autowired private UserService userService; @Override public BaseDao getRepository() { return bannerMapper; } /** * 后台查询全部banner展示(分页) * @param filter * @return */ public IPage findAllBanner(QueryFilter filter) { Map params = PageHelper.constructParams(filter); IPage page = bannerMapper.findAllBanner(filter.getPage(), filter.getParams(), params); List bannerAdminVos = page.getRecords(); bannerAdminVos.forEach(e -> { String knowledgeId = e.getKnowledgeId(); if (!StringUtils.isEmpty(knowledgeId)){ Map map = new HashMap<>(); Knowledge knowledge = knowledgeService.get(knowledgeId); if (knowledge != null){ map.put("knowledgeName",knowledge.getTitles()); } e.setParams(map); } }); return page; } /** * 获取Banner详情 * @param id * @return */ @Override public Banner get(Serializable id) { Banner banner = this.getRepository().selectById(id); String knowledgeId = banner.getKnowledgeId(); if (!StringUtils.isEmpty(knowledgeId)){ Knowledge knowledge = knowledgeService.get(knowledgeId); if(knowledge != null){ KnowledgeCategory knowledgeCategory = knowledgeCategoryService.findAllByCategoryId(knowledge.getCategoryId()); Map map = new HashMap<>(); map.put("knowledgeName",knowledge.getTitles()); KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = knowledgeCategoryService.findAllParentByCategoryId(knowledgeCategory.getPkId()); map.put("knowledgeCategory",knowledgeCategoryAdminVo); banner.setParams(map); } } return banner; } /** * 新增banner * @param entity * @return */ @Override public int insert(Banner entity) { if (BeanUtil.isEmpty(entity.getPkId())) { entity.setPkId(IdGenerator.getIdStr()); entity.setCreateBy(userService.queryLoginUser()); entity.setUpdateBy(userService.queryLoginUser()); } if (entity.getSort() == null){ entity.setSort(0); } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("SORT",entity.getSort()); Integer integer = bannerMapper.selectCount(queryWrapper); if (integer > 0){ bannerMapper.insertOrUpdateBySort(entity.getSort()); } return this.getRepository().insert(entity); } /** * 修改banner * @param entity * @return */ @Override public int update(Banner entity) { entity.setUpdateBy(userService.queryLoginUser()); if (entity.getSort() != null){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("SORT",entity.getSort()); Integer integer = bannerMapper.selectCount(queryWrapper); if (integer > 0){ bannerMapper.insertOrUpdateBySort(entity.getSort()); } } return this.getRepository().updateById(entity); } /** * 状态为true,上升;为false,下降 * @param bannerId * @param status */ @Transactional(rollbackFor = Exception.class) public void goUpOrDownUp(String bannerId,Boolean status) { Banner banner = this.get(bannerId); Integer sort = banner.getSort(); if (status){ // 上升 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("SORT").orderByDesc("ENABLED"); List banners = bannerMapper.selectList(queryWrapper); List collect = banners.stream().filter(e -> e.getSort() < sort).collect(Collectors.toList()); Banner bannerPre = collect.get(collect.size() - 1); // 交换位置 int temp = sort; bannerMapper.swapSort(bannerId,bannerPre.getSort()); bannerMapper.swapSort(bannerPre.getPkId(),temp); } else { // 下降 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("SORT").orderByDesc("ENABLED"); List banners = bannerMapper.selectList(queryWrapper); List collect = banners.stream().filter(e -> e.getSort() > sort).collect(Collectors.toList()); Banner bannerNext = collect.get(0); // 交换位置 int temp = sort; bannerMapper.swapSort(bannerId,bannerNext.getSort()); bannerMapper.swapSort(bannerNext.getPkId(),temp); } } /** * 删除banner * @param pkId */ public void deleteBanner(String pkId) { // 修改sort Banner banner = this.bannerMapper.selectById(pkId); bannerMapper.deleteBySort(banner.getSort()); bannerMapper.deleteBanner(pkId); } /** * 前台查询全部banner展示(默认展示10张) * @return */ public List getAllList() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("ENABLED",1); queryWrapper.orderByAsc("SORT").orderByDesc("CREATE_TIME_"); List bannersList = bannerMapper.selectList(queryWrapper); List result = bannersList.parallelStream().limit(10).collect(Collectors.toList()); List collectBannerPcVo = result.parallelStream().map(e -> { BannerPcVo bannerPcVo = new BannerPcVo(); BeanUtils.copyProperties(e, bannerPcVo); return bannerPcVo; }).collect(Collectors.toList()); return collectBannerPcVo; } }