Commit a136a6ec by 段启岩

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

parent 2d6e8e5f
...@@ -6,6 +6,7 @@ import cn.meteor.beyondclouds.core.annotation.Anonymous; ...@@ -6,6 +6,7 @@ import cn.meteor.beyondclouds.core.annotation.Anonymous;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject; import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response; import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.authentication.Subject; 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.entity.Post;
import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode; import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException; import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
...@@ -19,6 +20,7 @@ import cn.meteor.beyondclouds.util.SubjectUtils; ...@@ -19,6 +20,7 @@ import cn.meteor.beyondclouds.util.SubjectUtils;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -222,4 +224,36 @@ public class PostApi { ...@@ -222,4 +224,36 @@ public class PostApi {
IPage<Post> postPage = postService.getFollowedPostPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId()); IPage<Post> postPage = postService.getFollowedPostPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
return Response.success(toPostVOPage(postPage)); 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; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
/** /**
...@@ -16,4 +17,20 @@ import org.apache.ibatis.annotations.Param; ...@@ -16,4 +17,20 @@ import org.apache.ibatis.annotations.Param;
* @since 2020-01-30 * @since 2020-01-30
*/ */
public interface PostMapper extends BaseMapper<Post> { 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 @@ ...@@ -2,4 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!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"> <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> </mapper>
package cn.meteor.beyondclouds.modules.post.service; 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.entity.Post;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException; import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException; import cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException;
...@@ -18,6 +20,7 @@ public interface IPostService extends IService<Post> { ...@@ -18,6 +20,7 @@ public interface IPostService extends IService<Post> {
/** /**
* 发布动态 * 发布动态
*
* @param post * @param post
* @throws ProjectServiceException * @throws ProjectServiceException
*/ */
...@@ -25,14 +28,16 @@ public interface IPostService extends IService<Post> { ...@@ -25,14 +28,16 @@ public interface IPostService extends IService<Post> {
/** /**
* 删除动态 * 删除动态
*
* @param postId * @param postId
* @param userId * @param userId
*/ */
void deletePost(String postId , String userId) throws PostServiceException; void deletePost(String postId, String userId) throws PostServiceException;
/** /**
* 动态列表 * 动态列表
*
* @param pageNumber * @param pageNumber
* @param pageSize * @param pageSize
* @param type * @param type
...@@ -42,31 +47,53 @@ public interface IPostService extends IService<Post> { ...@@ -42,31 +47,53 @@ public interface IPostService extends IService<Post> {
/** /**
* 个人动态列表 * 个人动态列表
*
* @param pageNumber * @param pageNumber
* @param pageSize * @param pageSize
* @param userId * @param userId
* @return * @return
*/ */
IPage<Post> getUserPostPage (Integer pageNumber , Integer pageSize , String userId); IPage<Post> getUserPostPage(Integer pageNumber, Integer pageSize, String userId);
/** /**
* 更新动态里的用户头像 * 更新动态里的用户头像
*
* @param userId * @param userId
*/ */
void updatePostUserAvatar(String userId); void updatePostUserAvatar(String userId);
/** /**
* 更新动态里的用户昵称 * 更新动态里的用户昵称
*
* @param userId * @param userId
*/ */
void updatePostUserNick(String userId); void updatePostUserNick(String userId);
/** /**
* 获取我关注用户的动态列表 * 获取我关注用户的动态列表
*
* @param pageNumber * @param pageNumber
* @param pageSize * @param pageSize
* @param userId * @param userId
* @return * @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; 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.DataItemChangeMessage;
import cn.meteor.beyondclouds.core.queue.message.DataItemType; 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.entity.Post;
import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode; import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode;
import cn.meteor.beyondclouds.modules.post.exception.PostServiceException; import cn.meteor.beyondclouds.modules.post.exception.PostServiceException;
import cn.meteor.beyondclouds.modules.post.mapper.PostMapper; import cn.meteor.beyondclouds.modules.post.mapper.PostMapper;
import cn.meteor.beyondclouds.modules.post.service.IPostService; 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.project.exception.ProjectServiceException;
import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService; import cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService;
import cn.meteor.beyondclouds.modules.topic.entity.Topic; import cn.meteor.beyondclouds.modules.topic.entity.Topic;
...@@ -18,12 +21,15 @@ import cn.meteor.beyondclouds.modules.user.entity.User; ...@@ -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.entity.UserFollow;
import cn.meteor.beyondclouds.modules.user.service.IUserFollowService; import cn.meteor.beyondclouds.modules.user.service.IUserFollowService;
import cn.meteor.beyondclouds.modules.user.service.IUserService; 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 cn.meteor.beyondclouds.util.TopicUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -54,12 +60,19 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP ...@@ -54,12 +60,19 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP
private IUserFollowService userFollowService; private IUserFollowService userFollowService;
private PostMapper postMapper;
@Autowired @Autowired
public void setUserFollowService(IUserFollowService userFollowService) { public void setUserFollowService(IUserFollowService userFollowService) {
this.userFollowService = userFollowService; this.userFollowService = userFollowService;
} }
@Autowired @Autowired
public void setPostMapper(PostMapper postMapper) {
this.postMapper = postMapper;
}
@Autowired
public void setTopicReferenceService(ITopicReferenceService topicReferenceService) { public void setTopicReferenceService(ITopicReferenceService topicReferenceService) {
this.topicReferenceService = topicReferenceService; this.topicReferenceService = topicReferenceService;
} }
...@@ -275,5 +288,48 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP ...@@ -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