NewsServiceImpl.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.redxun.knowledge.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.redxun.common.base.db.BaseDao;
  5. import com.redxun.common.base.db.BaseService;
  6. import com.redxun.common.base.db.PageHelper;
  7. import com.redxun.common.base.entity.QueryData;
  8. import com.redxun.common.base.search.QueryFilter;
  9. import com.redxun.common.base.search.QueryFilterBuilder;
  10. import com.redxun.common.service.impl.SuperServiceImpl;
  11. import com.redxun.common.tool.BeanUtil;
  12. import com.redxun.common.tool.IdGenerator;
  13. import com.redxun.feign.org.UserClient;
  14. import com.redxun.knowledge.common.UserService;
  15. import com.redxun.knowledge.entity.dao.Banner;
  16. import com.redxun.knowledge.entity.dao.News;
  17. import com.redxun.knowledge.entity.vo.NewsAdminVo;
  18. import com.redxun.knowledge.entity.vo.NewsPcVo;
  19. import com.redxun.knowledge.mapper.NewsMapper;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import javax.annotation.Resource;
  26. import java.io.Serializable;
  27. import java.util.ArrayList;
  28. import java.util.HashMap;
  29. import java.util.List;
  30. import java.util.Map;
  31. import java.util.stream.Collectors;
  32. /**
  33. * [业务--新闻表]业务服务类
  34. */
  35. @Slf4j
  36. @Service
  37. public class NewsServiceImpl extends SuperServiceImpl<NewsMapper, News> implements BaseService<News> {
  38. @Resource
  39. private NewsMapper newsMapper;
  40. @Autowired
  41. private UserService userService;
  42. @Override
  43. public BaseDao<News> getRepository() {
  44. return newsMapper;
  45. }
  46. /**
  47. * 后台新闻列表(分页)
  48. *
  49. * @param filter
  50. * @return
  51. */
  52. public IPage findAllNews(QueryFilter filter) {
  53. Map<String, Object> params = PageHelper.constructParams(filter);
  54. IPage page = newsMapper.findAllNews(filter.getPage(), filter.getParams(),params);
  55. List<News> newsList = page.getRecords();
  56. List<NewsAdminVo> collectNewsAdminVoList = newsList.parallelStream().map(e -> {
  57. NewsAdminVo newsAdminVo = new NewsAdminVo();
  58. BeanUtils.copyProperties(e, newsAdminVo);
  59. return newsAdminVo;
  60. }).collect(Collectors.toList());
  61. page.setRecords(collectNewsAdminVoList);
  62. return page;
  63. }
  64. /**
  65. * 新增新闻
  66. * @param entity
  67. * @return
  68. */
  69. @Override
  70. public int insert(News entity) {
  71. if (BeanUtil.isEmpty(entity.getPkId())) {
  72. entity.setPkId(IdGenerator.getIdStr());
  73. entity.setAuthorId(entity.getAuthorId());
  74. entity.setAuthor(entity.getAuthor());
  75. }
  76. if (entity.getSort() == null){
  77. entity.setSort(0);
  78. }
  79. QueryWrapper<News> queryWrapper = new QueryWrapper<>();
  80. queryWrapper.eq("SORT",entity.getSort());
  81. Integer integer = newsMapper.selectCount(queryWrapper);
  82. if (integer > 0){
  83. newsMapper.insertOrUpdateBySort(entity.getSort());
  84. }
  85. return this.getRepository().insert(entity);
  86. }
  87. /**
  88. * 修改新闻
  89. * @param entity
  90. * @return
  91. */
  92. @Override
  93. public int update(News entity) {
  94. if (entity.getSort() != null){
  95. QueryWrapper<News> queryWrapper = new QueryWrapper<>();
  96. queryWrapper.eq("SORT",entity.getSort());
  97. Integer integer = newsMapper.selectCount(queryWrapper);
  98. if (integer > 0){
  99. newsMapper.insertOrUpdateBySort(entity.getSort());
  100. }
  101. }
  102. return this.getRepository().updateById(entity);
  103. }
  104. @Override
  105. public void delete(Serializable id) {
  106. // 修改sort
  107. News news = this.baseMapper.selectById(id);
  108. newsMapper.deleteBySort(news.getSort());
  109. newsMapper.deleteNews(id);
  110. }
  111. /**
  112. * 状态为true,上升;为false,下降
  113. * @param newsId
  114. * @param status
  115. */
  116. @Transactional(rollbackFor = Exception.class)
  117. public void goUpOrDownUp(String newsId,Boolean status) {
  118. News news = this.get(newsId);
  119. Integer sort = news.getSort();
  120. if (status){
  121. // 上升
  122. QueryWrapper<News> queryWrapper = new QueryWrapper<>();
  123. queryWrapper.orderByAsc("SORT").orderByDesc("ENABLED");
  124. List<News> newsList = newsMapper.selectList(queryWrapper);
  125. List<News> collect = newsList.stream().filter(e -> e.getSort() < sort).collect(Collectors.toList());
  126. News newsPre = collect.get(collect.size() - 1);
  127. // 交换位置
  128. int temp = sort;
  129. newsMapper.swapSort(newsId,newsPre.getSort());
  130. newsMapper.swapSort(newsPre.getPkId(),temp);
  131. } else {
  132. // 下降
  133. QueryWrapper<News> queryWrapper = new QueryWrapper<>();
  134. queryWrapper.orderByAsc("SORT").orderByDesc("ENABLED");
  135. List<News> newsList = newsMapper.selectList(queryWrapper);
  136. List<News> collect = newsList.stream().filter(e -> e.getSort() > sort).collect(Collectors.toList());
  137. News newsNext = collect.get(0);
  138. // 交换位置
  139. int temp = sort;
  140. newsMapper.swapSort(newsId,newsNext.getSort());
  141. newsMapper.swapSort(newsNext.getPkId(),temp);
  142. }
  143. }
  144. /**
  145. * 首页新闻资讯 前台展示
  146. *
  147. * @return
  148. */
  149. public List<NewsPcVo> getAllList() {
  150. // 组装分页
  151. QueryData queryData = new QueryData();
  152. queryData.setPageNo(1);
  153. queryData.setPageSize(10);
  154. QueryFilter filter = QueryFilterBuilder.createQueryFilter(queryData);
  155. IPage page = this.findAllNews(filter);
  156. // 查询后台展示结果
  157. List<NewsAdminVo> records = page.getRecords();
  158. // 前台展示结果处理
  159. List<NewsPcVo> collectNewsPcVoList = records.stream().
  160. filter(e -> e.getEnabled() == 1).
  161. limit(6).
  162. map(e -> {
  163. NewsPcVo newsPcVo = new NewsPcVo();
  164. BeanUtils.copyProperties(e, newsPcVo);
  165. return newsPcVo;
  166. }).collect(Collectors.toList());
  167. return collectNewsPcVoList;
  168. }
  169. /**
  170. * 前台分页列表
  171. *
  172. * @param filter
  173. * @return
  174. */
  175. public IPage findAllPcNews(QueryFilter filter) {
  176. IPage page = newsMapper.findAllPcNews(filter.getPage(), filter.getParams());
  177. return page;
  178. }
  179. }