Commit 477f2043 by 段启岩

话题下的动态支持搜索功能

parent 22323713
......@@ -194,10 +194,13 @@ public class TopicApi {
@Anonymous
@ApiOperation("查询话题下的所有动态")
@GetMapping("/topic/{topicName}/posts")
public Response<PageDTO<PostDTO>> getPostByTopicName(@Valid PageForm pageForm , @PathVariable("topicName") String topicName) {
public Response<PageDTO<PostDTO>> getPostByTopicName(@Valid PageForm pageForm,
@PathVariable("topicName") String topicName,
@RequestParam(value = "type", required = false) Integer type,
@RequestParam(value = "keywords", required = false) String keywords) {
try {
PageDTO<PostDTO> postPage = topicService.getPostByTopicName(pageForm.getPage(), pageForm.getSize(),topicName);
PageDTO<PostDTO> postPage = topicService.getPostByTopicName(pageForm.getPage(), pageForm.getSize(),topicName, type, keywords);
return Response.success(postPage);
} catch (TopicServiceException e) {
e.printStackTrace();
......
package cn.meteor.beyondclouds.modules.topic.mapper;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
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;
import org.springframework.stereotype.Component;
import java.util.List;
......@@ -32,4 +36,13 @@ public interface TopicMapper extends BaseMapper<Topic> {
* @return
*/
IPage<Topic> selectHotSearchPage(Page<Topic> topicPage);
/**
* 搜索话题下的所有动态
* @param postPage
* @param queryWrapper
* @return
*/
IPage<Post> searchPostInTopicWithConditions(Page<Post> postPage, @Param(Constants.WRAPPER) QueryWrapper<?> queryWrapper);
}
......@@ -13,4 +13,15 @@
AND sd.item_type = 'TOPIC'
ORDER BY sd.degree DESC
</select>
<select id="searchPostInTopicWithConditions" resultType="cn.meteor.beyondclouds.modules.post.entity.Post">
SELECT *
FROM topic_reference tr inner join post p
on tr.referencer_id=p.post_id
<if test="ew != null and ew.customSqlSegment != null">
${ew.customSqlSegment}
</if>
</select>
</mapper>
......@@ -141,10 +141,12 @@ public interface ITopicService extends IService<Topic> {
* @param pageNumber
* @param pageSize
* @param topicName
* @param type
* @param keywords
* @throws TopicServiceException
* @return IPage<Post>
*/
PageDTO<PostDTO> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName) throws TopicServiceException;
PageDTO<PostDTO> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName, Integer type, String keywords) throws TopicServiceException;
/**
* 查找并话题,若话题不存在,则创建话题
......
......@@ -34,6 +34,7 @@ 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.apache.ibatis.annotations.Param;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -459,7 +460,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
}
@Override
public PageDTO<PostDTO> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName) throws TopicServiceException{
public PageDTO<PostDTO> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName, Integer type, String keywords) throws TopicServiceException{
//1. 设置分页信息
IPage<TopicReference> page = new Page<>(pageNumber, pageSize);
......@@ -472,23 +473,20 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
}
//3. 通过话题id与动态类型3查找该话题下的所有动态
QueryWrapper<TopicReference> topicReferenceQueryWrapper = new QueryWrapper<>();
topicReferenceQueryWrapper.eq("topic_id",topic.getTopicId()).eq("referencer_type",3);
IPage<TopicReference> topicReferenceIPage = topicReferenceService.page(page,topicReferenceQueryWrapper);
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("tr.topic_id", topic.getTopicId());
queryWrapper.eq("tr.referencer_type", 3);
if (null != type) {
queryWrapper.eq("p.type", type);
}
if (null != keywords) {
queryWrapper.like("p.content", keywords);
}
queryWrapper.orderByDesc("p.create_time");
//4. 获取查询到的referencerId
List<String> referencerId = topicReferenceIPage.getRecords().stream()
.map(TopicReference::getReferencerId)
.collect(Collectors.toList());
IPage<Post> postPage = topicMapper.searchPostInTopicWithConditions(new Page<Post>(pageNumber, pageSize), queryWrapper);
//5. 通过referencerId批量查询动态
List<Post> posts;
if (!CollectionUtils.isEmpty(referencerId)) {
posts = postService.listByIds(referencerId);
} else {
posts = List.of();
}
List<Post> posts = postPage.getRecords();
List<PostDTO> postDTOList = new ArrayList<>();
if (SubjectUtils.isAuthenticated()) {
......@@ -510,7 +508,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
// 6.构造分页结果
PageDTO<PostDTO> postDTOPage = new PageDTO<>();
PageUtils.copyMeta(topicReferenceIPage, postDTOPage);
PageUtils.copyMeta(postPage, postDTOPage);
postDTOPage.setDataList(postDTOList);
return postDTOPage;
......
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