Commit c27f9aaf by 段启岩

相关推荐完成

parent ebf70bd5
......@@ -162,15 +162,28 @@ public class BlogApi {
}
@Anonymous
@ApiOperation("查看标签下的博客列表")
@ApiOperation("根据标签查找博客列表")
@GetMapping("/tag/{tagId}/blogs")
public Response<?> getBlogsByTagId(@PathVariable("tagId") String tagId , @Valid PageForm pageForm , BindingResult result) {
if (result.hasErrors()) {
return Response.fieldError(result.getFieldError());
}
IPage<Blog> blogPage = blogService.getBlogPageBytagId(pageForm.getPage(), pageForm.getSize(), tagId);
IPage<Blog> blogPage = blogService.getBlogPageByTagId(pageForm.getPage(), pageForm.getSize(), tagId);
PageVO<Blog> blogPageVO = new PageVO<>(blogPage);
return Response.success(blogPageVO);
}
@Anonymous
@ApiOperation("相关博客")
@GetMapping("/blog/{blogId}/recommends")
public Response<?> getRelatedBlogs (@PathVariable("blogId") String blogId , @Valid PageForm pageForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
IPage<Blog> blogPage = blogService.getRelatedBlogPage(pageForm.getPage() , pageForm.getSize() , blogId);
PageVO<Blog> blogPageVO = new PageVO<>(blogPage);
return Response.success(blogPageVO);
}
}
......@@ -2,6 +2,10 @@ package cn.meteor.beyondclouds.modules.blog.mapper;
import cn.meteor.beyondclouds.modules.blog.entity.BlogTag;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Select;
import java.util.Collection;
/**
* <p>
......@@ -13,4 +17,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface BlogTagMapper extends BaseMapper<BlogTag> {
/**
* 根据博客ID获取相关的博客ids
* @param page
* @param tagIds
* @return
*/
IPage<String> selectRelatedBlogIds(IPage<?> page, Collection<String> tagIds);
}
......@@ -64,4 +64,15 @@
#{blogId}
</foreach>
</select>
<select id="selectRelatedBlogIds">
select distinct (blog_id)
from blog_tag
where tag_id in
<foreach collection="tagIds" item="tagId" index="index" open="(" close=")" separator=",">
#{tagId}
</foreach>
</select>
</mapper>
......@@ -95,6 +95,16 @@ public interface IBlogService extends IService<Blog> {
* @param tagId
* @return
*/
IPage<Blog> getBlogPageBytagId(Integer pageNumber , Integer pageSize , String tagId);
IPage<Blog> getBlogPageByTagId(Integer pageNumber , Integer pageSize , String tagId);
/**
* 相关博客
* @param page
* @param size
* @param blogId
* @return
*/
IPage<Blog> getRelatedBlogPage(Integer page, Integer size, String blogId);
}
......@@ -4,6 +4,8 @@ import cn.meteor.beyondclouds.modules.blog.entity.BlogTag;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
/**
* <p>
* 博客标签表,用来记录博客里面引用了哪些标签 服务类
......@@ -22,4 +24,12 @@ public interface IBlogTagService extends IService<BlogTag> {
* @return
*/
IPage<BlogTag> getBlogIdByTagId (Integer pageNumber , Integer pageSize , String tagId);
/**
* 根据博客ID获取相关的博客ID
* @param page
* @param tagIds
* @return
*/
IPage<String> getRelatedBlogIds(IPage<String> page, Collection<String> tagIds);
}
......@@ -22,6 +22,7 @@ import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.service.IUserService;
import cn.meteor.beyondclouds.util.AbstractUtils;
import cn.meteor.beyondclouds.util.PageUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -36,6 +37,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
......@@ -473,7 +475,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
}
@Override
public IPage<Blog> getBlogPageBytagId(Integer pageNumber, Integer pageSize, String tagId) {
public IPage<Blog> getBlogPageByTagId(Integer pageNumber, Integer pageSize, String tagId) {
// 查询blogTagPage
IPage<BlogTag> page = new Page<>(pageNumber , pageSize);
QueryWrapper<BlogTag> blogTagQueryWrapper = new QueryWrapper<>();
......@@ -500,4 +502,29 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
}
return blogPage;
}
@Override
public IPage<Blog> getRelatedBlogPage(Integer pageNumber, Integer pageSize, String blogId) {
// 1.查找博客引用的所有标签id
QueryWrapper<BlogTag> blogTagQueryWrapper = new QueryWrapper<>();
List<BlogTag> blogTagList = blogTagService.list(blogTagQueryWrapper);
List<String> tagIds = blogTagList.stream()
.map(BlogTag::getTagId)
.collect(Collectors.toList());
// 如果博客没有引用标签,则构造一个空的分页返回
if (CollectionUtils.isEmpty(tagIds)) {
return PageUtils.emptyPage();
}
// 如果博客没有引用了标签,则查询引用的标签下的所有博客ID的分页
IPage<String> page = new Page<>(pageNumber, pageSize);
IPage<String> blogIdPage = blogTagService.getRelatedBlogIds(page, tagIds);
List<String> blogIds = blogIdPage.getRecords();
if (CollectionUtils.isEmpty(blogIds)) {
return PageUtils.emptyPage();
} else {
return blogMapper.listByIdsWithTags(blogIds);
}
}
}
......@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Collection;
/**
* <p>
* 博客标签表,用来记录博客里面引用了哪些标签 服务实现类
......@@ -20,6 +22,11 @@ import org.springframework.stereotype.Service;
@Service
public class BlogTagServiceImpl extends ServiceImpl<BlogTagMapper, BlogTag> implements IBlogTagService {
private BlogTagMapper blogTagMapper;
public BlogTagServiceImpl(BlogTagMapper blogTagMapper) {
this.blogTagMapper = blogTagMapper;
}
@Override
public IPage<BlogTag> getBlogIdByTagId(Integer pageNumber, Integer pageSize, String tagId) {
......@@ -29,4 +36,9 @@ public class BlogTagServiceImpl extends ServiceImpl<BlogTagMapper, BlogTag> impl
queryWrapper.eq("tag_id", tagId);
return page(page , queryWrapper);
}
@Override
public IPage<String> getRelatedBlogIds(IPage<String> page, Collection<String> tagIds) {
return blogTagMapper.selectRelatedBlogIds(page, tagIds);
}
}
package cn.meteor.beyondclouds.util;
import cn.meteor.beyondclouds.modules.blog.entity.Blog;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* @author meteor
*/
public class PageUtils {
public static <T>IPage<T> emptyPage() {
IPage<T> page = new Page<>();
page.setTotal(0L);
page.setPages(0L);
page.setCurrent(0);
page.setRecords(List.of());
return page;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment