Commit 477f2043 by 段启岩

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

parent 22323713
...@@ -194,10 +194,13 @@ public class TopicApi { ...@@ -194,10 +194,13 @@ public class TopicApi {
@Anonymous @Anonymous
@ApiOperation("查询话题下的所有动态") @ApiOperation("查询话题下的所有动态")
@GetMapping("/topic/{topicName}/posts") @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 { 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); return Response.success(postPage);
} catch (TopicServiceException e) { } catch (TopicServiceException e) {
e.printStackTrace(); e.printStackTrace();
......
package cn.meteor.beyondclouds.modules.topic.mapper; package cn.meteor.beyondclouds.modules.topic.mapper;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.topic.entity.Topic; 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.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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
...@@ -32,4 +36,13 @@ public interface TopicMapper extends BaseMapper<Topic> { ...@@ -32,4 +36,13 @@ public interface TopicMapper extends BaseMapper<Topic> {
* @return * @return
*/ */
IPage<Topic> selectHotSearchPage(Page<Topic> topicPage); 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 @@ ...@@ -13,4 +13,15 @@
AND sd.item_type = 'TOPIC' AND sd.item_type = 'TOPIC'
ORDER BY sd.degree DESC ORDER BY sd.degree DESC
</select> </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> </mapper>
...@@ -141,10 +141,12 @@ public interface ITopicService extends IService<Topic> { ...@@ -141,10 +141,12 @@ public interface ITopicService extends IService<Topic> {
* @param pageNumber * @param pageNumber
* @param pageSize * @param pageSize
* @param topicName * @param topicName
* @param type
* @param keywords
* @throws TopicServiceException * @throws TopicServiceException
* @return IPage<Post> * @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; ...@@ -34,6 +34,7 @@ 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.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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -459,7 +460,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -459,7 +460,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
} }
@Override @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. 设置分页信息 //1. 设置分页信息
IPage<TopicReference> page = new Page<>(pageNumber, pageSize); IPage<TopicReference> page = new Page<>(pageNumber, pageSize);
...@@ -472,23 +473,20 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -472,23 +473,20 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS); throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
} }
//3. 通过话题id与动态类型3查找该话题下的所有动态 QueryWrapper queryWrapper = new QueryWrapper();
QueryWrapper<TopicReference> topicReferenceQueryWrapper = new QueryWrapper<>(); queryWrapper.eq("tr.topic_id", topic.getTopicId());
topicReferenceQueryWrapper.eq("topic_id",topic.getTopicId()).eq("referencer_type",3); queryWrapper.eq("tr.referencer_type", 3);
IPage<TopicReference> topicReferenceIPage = topicReferenceService.page(page,topicReferenceQueryWrapper); if (null != type) {
queryWrapper.eq("p.type", type);
}
if (null != keywords) {
queryWrapper.like("p.content", keywords);
}
queryWrapper.orderByDesc("p.create_time");
//4. 获取查询到的referencerId IPage<Post> postPage = topicMapper.searchPostInTopicWithConditions(new Page<Post>(pageNumber, pageSize), queryWrapper);
List<String> referencerId = topicReferenceIPage.getRecords().stream()
.map(TopicReference::getReferencerId)
.collect(Collectors.toList());
//5. 通过referencerId批量查询动态 List<Post> posts = postPage.getRecords();
List<Post> posts;
if (!CollectionUtils.isEmpty(referencerId)) {
posts = postService.listByIds(referencerId);
} else {
posts = List.of();
}
List<PostDTO> postDTOList = new ArrayList<>(); List<PostDTO> postDTOList = new ArrayList<>();
if (SubjectUtils.isAuthenticated()) { if (SubjectUtils.isAuthenticated()) {
...@@ -510,7 +508,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -510,7 +508,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
// 6.构造分页结果 // 6.构造分页结果
PageDTO<PostDTO> postDTOPage = new PageDTO<>(); PageDTO<PostDTO> postDTOPage = new PageDTO<>();
PageUtils.copyMeta(topicReferenceIPage, postDTOPage); PageUtils.copyMeta(postPage, postDTOPage);
postDTOPage.setDataList(postDTOList); postDTOPage.setDataList(postDTOList);
return postDTOPage; 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