Commit a136a6ec by 段启岩

推荐动态,话题下的推荐动态

parent 2d6e8e5f
......@@ -6,6 +6,7 @@ import cn.meteor.beyondclouds.core.annotation.Anonymous;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.authentication.Subject;
import cn.meteor.beyondclouds.modules.post.dto.PostDTO;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
......@@ -19,6 +20,7 @@ import cn.meteor.beyondclouds.util.SubjectUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
......@@ -222,4 +224,36 @@ public class PostApi {
IPage<Post> postPage = postService.getFollowedPostPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
return Response.success(toPostVOPage(postPage));
}
/**
* 推荐动态
* @param pageForm
* @param bindingResult
* @return
*/
@GetMapping("/post/recommends")
public Response<?> recommendPosts(@Valid PageForm pageForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
PageDTO<PostDTO> postDTOPage = postService.getRecommendPosts(pageForm.getPage(), pageForm.getSize());
return Response.success(postDTOPage);
}
/**
* 话题下的推荐动态列表
* @param pageForm
* @param bindingResult
* @return
*/
@GetMapping("/topic/{topicId}/post/recommends")
public Response<?> recommendPostsInTopic(@Valid PageForm pageForm, @PathVariable("topicId") String topicId, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
PageDTO<PostDTO> postDTOPage = postService.getRecommendPostsInTopic(topicId, pageForm.getPage(), pageForm.getSize());
return Response.success(postDTOPage);
}
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
/**
......@@ -16,4 +17,20 @@ import org.apache.ibatis.annotations.Param;
* @since 2020-01-30
*/
public interface PostMapper extends BaseMapper<Post> {
/**
* 查询推荐动态
* @param page
* @return
*/
IPage<Post> selectRecommendPage(Page<Post> page);
/**
* 查询推荐动态
* @param page
* @param topicId
* @return
*/
IPage<Post> selectRecommendPageInTopic(Page<Post> page, @Param("topicId") String topicId);
}
......@@ -2,4 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.meteor.beyondclouds.modules.post.mapper.PostMapper">
<select id="selectRecommendPage" resultType="cn.meteor.beyondclouds.modules.post.entity.Post">
select p.*
from post p, user_statistics us
where p.user_id = us.user_id
order by (us.fans_num + us.visited_num) desc
</select>
<select id="selectRecommendPageInTopic" resultType="cn.meteor.beyondclouds.modules.post.entity.Post">
select p.*
from post p, user_statistics us, topic_reference tr
where p.user_id = us.user_id
and tr.referencer_id = p.post_id
and topic_id = #{topicId}
order by (us.fans_num + us.visited_num) desc
</select>
</mapper>
package cn.meteor.beyondclouds.modules.post.service;
import cn.meteor.beyondclouds.common.dto.PageDTO;
import cn.meteor.beyondclouds.modules.post.dto.PostDTO;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException;
......@@ -18,6 +20,7 @@ public interface IPostService extends IService<Post> {
/**
* 发布动态
*
* @param post
* @throws ProjectServiceException
*/
......@@ -25,14 +28,16 @@ public interface IPostService extends IService<Post> {
/**
* 删除动态
*
* @param postId
* @param userId
*/
void deletePost(String postId , String userId) throws PostServiceException;
void deletePost(String postId, String userId) throws PostServiceException;
/**
* 动态列表
*
* @param pageNumber
* @param pageSize
* @param type
......@@ -42,31 +47,53 @@ public interface IPostService extends IService<Post> {
/**
* 个人动态列表
*
* @param pageNumber
* @param pageSize
* @param userId
* @return
*/
IPage<Post> getUserPostPage (Integer pageNumber , Integer pageSize , String userId);
IPage<Post> getUserPostPage(Integer pageNumber, Integer pageSize, String userId);
/**
* 更新动态里的用户头像
*
* @param userId
*/
void updatePostUserAvatar(String userId);
/**
* 更新动态里的用户昵称
*
* @param userId
*/
void updatePostUserNick(String userId);
/**
* 获取我关注用户的动态列表
*
* @param pageNumber
* @param pageSize
* @param userId
* @return
*/
IPage<Post> getFollowedPostPage (Integer pageNumber , Integer pageSize , String userId);
IPage<Post> getFollowedPostPage(Integer pageNumber, Integer pageSize, String userId);
/**
* 推荐动态
*
* @param page
* @param size
* @return
*/
PageDTO<PostDTO> getRecommendPosts(Integer page, Integer size);
/**
* 查询话题下的推荐动态列表
* @param topicId
* @param page
* @param size
* @return
*/
PageDTO<PostDTO> getRecommendPostsInTopic(String topicId, Integer page, Integer size);
}
package cn.meteor.beyondclouds.modules.post.service.impl;
import cn.meteor.beyondclouds.common.dto.PageDTO;
import cn.meteor.beyondclouds.core.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.core.queue.message.DataItemType;
import cn.meteor.beyondclouds.modules.post.dto.PostDTO;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.post.mapper.PostMapper;
import cn.meteor.beyondclouds.modules.post.service.IPostService;
import cn.meteor.beyondclouds.modules.post.vo.PostVO;
import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
......@@ -18,12 +21,15 @@ import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.entity.UserFollow;
import cn.meteor.beyondclouds.modules.user.service.IUserFollowService;
import cn.meteor.beyondclouds.modules.user.service.IUserService;
import cn.meteor.beyondclouds.util.PageUtils;
import cn.meteor.beyondclouds.util.SubjectUtils;
import cn.meteor.beyondclouds.util.TopicUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -54,12 +60,19 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP
private IUserFollowService userFollowService;
private PostMapper postMapper;
@Autowired
public void setUserFollowService(IUserFollowService userFollowService) {
this.userFollowService = userFollowService;
}
@Autowired
public void setPostMapper(PostMapper postMapper) {
this.postMapper = postMapper;
}
@Autowired
public void setTopicReferenceService(ITopicReferenceService topicReferenceService) {
this.topicReferenceService = topicReferenceService;
}
......@@ -275,5 +288,48 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP
}
}
@Override
public PageDTO<PostDTO> getRecommendPosts(Integer page, Integer size) {
IPage<Post> postPage = postMapper.selectRecommendPage(new Page<Post>(page, size));
return toPageDTO(postPage);
}
@Override
public PageDTO<PostDTO> getRecommendPostsInTopic(String topicId, Integer page, Integer size) {
IPage<Post> postPage = postMapper.selectRecommendPageInTopic(new Page<Post>(page, size), topicId);
return toPageDTO(postPage);
}
private PageDTO<PostDTO> toPageDTO(IPage<Post> postPage) {
List<PostDTO> postDTOList;
if (SubjectUtils.isAuthenticated()) {
postDTOList = postPage.getRecords().stream()
.map(post -> {
PostDTO postDTO = new PostDTO();
BeanUtils.copyProperties(post, postDTO);
if (!StringUtils.isEmpty(post.getPictures())) {
postDTO.setPictures(post.getPictures().split(","));
}
postDTO.setFollowedAuthor(userFollowService.hasFollowedUser(post.getUserId()));
return postDTO;
}).collect(Collectors.toList());
} else {
postDTOList = postPage.getRecords().stream()
.map(post -> {
PostDTO postVO = new PostDTO();
BeanUtils.copyProperties(post, postVO);
if (!StringUtils.isEmpty(post.getPictures())) {
postVO.setPictures(post.getPictures().split(","));
}
postVO.setFollowedAuthor(false);
return postVO;
}).collect(Collectors.toList());
}
PageDTO<PostDTO> pageDTO = new PageDTO<>();
PageUtils.copyMeta(postPage, pageDTO);
pageDTO.setDataList(postDTOList);
return pageDTO;
}
}
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