package com.pz.system.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pz.system.domain.UserAppreciate; import com.pz.system.domain.UserCollect; import com.pz.system.domain.vo.CityVo; import com.pz.system.mapper.CityMapper; import com.pz.system.mapper.UserAppreciateMapper; import com.pz.system.mapper.UserCollectMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.pz.system.domain.bo.ArticleBo; import com.pz.system.domain.vo.ArticleVo; import com.pz.system.domain.Article; import com.pz.system.mapper.ArticleMapper; import com.pz.system.service.IArticleService; import java.util.*; import java.util.stream.Collectors; /** * 文章Service业务层处理 * * @author ruoyi * @date 2023-09-07 */ @RequiredArgsConstructor @Service public class ArticleServiceImpl implements IArticleService { private final ArticleMapper baseMapper; private final CityMapper cityMapper; private final UserAppreciateMapper userAppreciateMapper; private final UserCollectMapper userCollectMapper; /** * 查询文章 */ @Override public ArticleVo queryById(Integer id) { return baseMapper.selectVoById(id); } /** * 查询文章列表 */ @Override public TableDataInfo<ArticleVo> queryPageList(ArticleBo bo, PageQuery pageQuery) { LambdaQueryWrapper<Article> lqw = buildQueryWrapper(bo); Page<ArticleVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Optional.ofNullable(result.getRecords()).ifPresent(articleVos -> { // 获取所有文章id集合 List<Integer> articleIds = articleVos.stream() .map(ArticleVo::getId) .collect(Collectors.toList()); // 查询城市名称 Map<Integer, String> cityMap = new HashMap<>(); // 查询点赞和收藏数 Map<Integer, Integer> appreciateNumMap = new HashMap<>(); Map<Integer, Integer> collectNumMap = new HashMap<>(); if(CollectionUtils.isNotEmpty(articleIds)){ List<CityVo> cityVos = cityMapper.selectVoBatchIds(articleIds); for (CityVo cityVo : cityVos) { cityMap.put(cityVo.getId(), cityVo.getName()); } List<UserAppreciate> userAppreciates = userAppreciateMapper.selectList(Wrappers.<UserAppreciate>lambdaQuery().in(UserAppreciate::getAid, articleIds)); List<UserCollect> userCollects = userCollectMapper.selectList(Wrappers.<UserCollect>lambdaQuery().in(UserCollect::getAid, articleIds)); for (UserAppreciate userAppreciate : userAppreciates) { Integer articleId = userAppreciate.getAid(); appreciateNumMap.put(articleId, appreciateNumMap.getOrDefault(articleId, 0) + 1); } for (UserCollect userCollect : userCollects) { Integer articleId = userCollect.getAid(); collectNumMap.put(articleId, collectNumMap.getOrDefault(articleId, 0) + 1); } } // 设置城市名称、点赞数和收藏数 articleVos.forEach(articleVo -> { // 设置城市名称 articleVo.setCityName(cityMap.get(articleVo.getCityId())); // 设置点赞数 articleVo.setAppreciateNum(appreciateNumMap.getOrDefault(articleVo.getId(), 0)); // 设置收藏数 articleVo.setCollectNum(collectNumMap.getOrDefault(articleVo.getId(), 0)); }); }); return TableDataInfo.build(result); } /** * 查询文章列表 */ @Override public List<ArticleVo> queryList(ArticleBo bo) { LambdaQueryWrapper<Article> lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper<Article> buildQueryWrapper(ArticleBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<Article> lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getTitle()), Article::getTitle, bo.getTitle()); return lqw; } /** * 新增文章 */ @Override public Boolean insertByBo(ArticleBo bo) { Article add = BeanUtil.toBean(bo, Article.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改文章 */ @Override public Boolean updateByBo(ArticleBo bo) { Article update = BeanUtil.toBean(bo, Article.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(Article entity) { //TODO 做一些数据校验,如唯一约束 } /** * 批量删除文章 */ @Override public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } }