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.entity.QueryData; import com.redxun.common.base.search.QueryFilter; import com.redxun.common.base.search.QueryFilterBuilder; 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.News; import com.redxun.knowledge.entity.vo.NewsAdminVo; import com.redxun.knowledge.entity.vo.NewsPcVo; import com.redxun.knowledge.mapper.NewsMapper; 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 javax.annotation.Resource; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * [业务--新闻表]业务服务类 */ @Slf4j @Service public class NewsServiceImpl extends SuperServiceImpl implements BaseService { @Resource private NewsMapper newsMapper; @Autowired private UserService userService; @Override public BaseDao getRepository() { return newsMapper; } /** * 后台新闻列表(分页) * * @param filter * @return */ public IPage findAllNews(QueryFilter filter) { Map params = PageHelper.constructParams(filter); IPage page = newsMapper.findAllNews(filter.getPage(), filter.getParams(),params); List newsList = page.getRecords(); List collectNewsAdminVoList = newsList.parallelStream().map(e -> { NewsAdminVo newsAdminVo = new NewsAdminVo(); BeanUtils.copyProperties(e, newsAdminVo); return newsAdminVo; }).collect(Collectors.toList()); page.setRecords(collectNewsAdminVoList); return page; } /** * 新增新闻 * @param entity * @return */ @Override public int insert(News entity) { if (BeanUtil.isEmpty(entity.getPkId())) { entity.setPkId(IdGenerator.getIdStr()); entity.setAuthorId(entity.getAuthorId()); entity.setAuthor(entity.getAuthor()); } if (entity.getSort() == null){ entity.setSort(0); } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("SORT",entity.getSort()); Integer integer = newsMapper.selectCount(queryWrapper); if (integer > 0){ newsMapper.insertOrUpdateBySort(entity.getSort()); } return this.getRepository().insert(entity); } /** * 修改新闻 * @param entity * @return */ @Override public int update(News entity) { if (entity.getSort() != null){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("SORT",entity.getSort()); Integer integer = newsMapper.selectCount(queryWrapper); if (integer > 0){ newsMapper.insertOrUpdateBySort(entity.getSort()); } } return this.getRepository().updateById(entity); } @Override public void delete(Serializable id) { // 修改sort News news = this.baseMapper.selectById(id); newsMapper.deleteBySort(news.getSort()); newsMapper.deleteNews(id); } /** * 状态为true,上升;为false,下降 * @param newsId * @param status */ @Transactional(rollbackFor = Exception.class) public void goUpOrDownUp(String newsId,Boolean status) { News news = this.get(newsId); Integer sort = news.getSort(); if (status){ // 上升 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("SORT").orderByDesc("ENABLED"); List newsList = newsMapper.selectList(queryWrapper); List collect = newsList.stream().filter(e -> e.getSort() < sort).collect(Collectors.toList()); News newsPre = collect.get(collect.size() - 1); // 交换位置 int temp = sort; newsMapper.swapSort(newsId,newsPre.getSort()); newsMapper.swapSort(newsPre.getPkId(),temp); } else { // 下降 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("SORT").orderByDesc("ENABLED"); List newsList = newsMapper.selectList(queryWrapper); List collect = newsList.stream().filter(e -> e.getSort() > sort).collect(Collectors.toList()); News newsNext = collect.get(0); // 交换位置 int temp = sort; newsMapper.swapSort(newsId,newsNext.getSort()); newsMapper.swapSort(newsNext.getPkId(),temp); } } /** * 首页新闻资讯 前台展示 * * @return */ public List getAllList() { // 组装分页 QueryData queryData = new QueryData(); queryData.setPageNo(1); queryData.setPageSize(10); QueryFilter filter = QueryFilterBuilder.createQueryFilter(queryData); IPage page = this.findAllNews(filter); // 查询后台展示结果 List records = page.getRecords(); // 前台展示结果处理 List collectNewsPcVoList = records.stream(). filter(e -> e.getEnabled() == 1). limit(6). map(e -> { NewsPcVo newsPcVo = new NewsPcVo(); BeanUtils.copyProperties(e, newsPcVo); return newsPcVo; }).collect(Collectors.toList()); return collectNewsPcVoList; } /** * 前台分页列表 * * @param filter * @return */ public IPage findAllPcNews(QueryFilter filter) { IPage page = newsMapper.findAllPcNews(filter.getPage(), filter.getParams()); return page; } }