Commit f9c8837a by 段启岩

话题锁定

parent 65a63e13
...@@ -9,7 +9,6 @@ import cn.meteor.beyondclouds.modules.post.enums.PostErrorCode; ...@@ -9,7 +9,6 @@ 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;
...@@ -136,6 +135,22 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP ...@@ -136,6 +135,22 @@ public class PostServiceImpl extends ServiceImpl<PostMapper, Post> implements IP
List<String> topicNames = TopicUtils.parseTopics(post.getContent()); List<String> topicNames = TopicUtils.parseTopics(post.getContent());
if (!CollectionUtils.isEmpty(topicNames)) { if (!CollectionUtils.isEmpty(topicNames)) {
List<Topic> topics = topicService.queryAndCreateByTopicNames(topicNames, post.getUserId()); List<Topic> topics = topicService.queryAndCreateByTopicNames(topicNames, post.getUserId());
List<String> unLockedTopicNames = topics.stream()
.map(Topic::getTopicName)
.collect(Collectors.toList());
// 筛选出被锁定的话题
List<String> lockedTopics = topicNames
.stream()
.filter(topicName -> !unLockedTopicNames.contains(topicName))
.collect(Collectors.toList());
// 从动态中删除被锁定的话题
if (!CollectionUtils.isEmpty(lockedTopics)) {
post.setContent(TopicUtils.clearLockedTopics(postContent, lockedTopics));
updateById(post);
}
List<String> topicIds = topics.stream().map(Topic::getTopicId).collect(Collectors.toList()); List<String> topicIds = topics.stream().map(Topic::getTopicId).collect(Collectors.toList());
// 关联话题和动态 // 关联话题和动态
......
...@@ -139,8 +139,13 @@ public class TopicApi { ...@@ -139,8 +139,13 @@ public class TopicApi {
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError()); return Response.fieldError(bindingResult.getFieldError());
} }
PageDTO<UserFollowDTO> page = topicService.getTopicsFollower(pageForm.getPage(), pageForm.getSize(), topicId); PageDTO<UserFollowDTO> page;
return Response.success(page); try {
page = topicService.getTopicsFollower(pageForm.getPage(), pageForm.getSize(), topicId);
return Response.success(page);
} catch (TopicServiceException e) {
return Response.error(e);
}
} }
......
...@@ -47,6 +47,8 @@ public class Topic implements Serializable { ...@@ -47,6 +47,8 @@ public class Topic implements Serializable {
@ApiModelProperty(value = "被引用次数") @ApiModelProperty(value = "被引用次数")
private Integer referenceCount; private Integer referenceCount;
private Integer status;
private Date createTime; private Date createTime;
private Date updateTime; private Date updateTime;
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
FROM topic t, search_degree sd FROM topic t, search_degree sd
WHERE t.topic_id = sd.item_id WHERE t.topic_id = sd.item_id
AND sd.item_type = 'TOPIC' AND sd.item_type = 'TOPIC'
AND t.status = 0
ORDER BY sd.degree DESC ORDER BY sd.degree DESC
</select> </select>
......
...@@ -73,7 +73,7 @@ public interface ITopicService extends IService<Topic> { ...@@ -73,7 +73,7 @@ public interface ITopicService extends IService<Topic> {
* @param topicId * @param topicId
* @return * @return
*/ */
PageDTO<UserFollowDTO> getTopicsFollower(Integer page, Integer size, String topicId); PageDTO<UserFollowDTO> getTopicsFollower(Integer page, Integer size, String topicId) throws TopicServiceException;
/** /**
* 获取用户的话题分页 * 获取用户的话题分页
......
...@@ -35,6 +35,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; ...@@ -35,6 +35,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 net.sf.jsqlparser.statement.select.Top;
import org.elasticsearch.common.recycler.Recycler; import org.elasticsearch.common.recycler.Recycler;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -140,6 +141,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -140,6 +141,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
IPage<Topic> page = new Page<>(pageNumber, pageSize); IPage<Topic> page = new Page<>(pageNumber, pageSize);
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>(); QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.like("topic_name", keywords); topicQueryWrapper.like("topic_name", keywords);
topicQueryWrapper.eq("status", 0);
IPage<Topic> topicPage = page(page, topicQueryWrapper); IPage<Topic> topicPage = page(page, topicQueryWrapper);
// 更新话题的搜索量 // 更新话题的搜索量
...@@ -211,6 +213,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -211,6 +213,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
//2. 获取话题 //2. 获取话题
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>(); QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq(topicAccessWay.getFieldName(), identification); topicQueryWrapper.eq(topicAccessWay.getFieldName(), identification);
topicQueryWrapper.eq("status", 0);
topic = getOne(topicQueryWrapper); topic = getOne(topicQueryWrapper);
// 找不到该话题,抛出业务异常 // 找不到该话题,抛出业务异常
...@@ -246,7 +249,11 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -246,7 +249,11 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
public void followTopic(String userId, String topicId) throws TopicServiceException { public void followTopic(String userId, String topicId) throws TopicServiceException {
//1. 获取话题 //1. 获取话题
Topic topic = getById(topicId); QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq("topic_id", topicId);
topicQueryWrapper.eq("status", 0);
Topic topic = getOne(topicQueryWrapper);
//2. 找不到该话题,抛出业务异常 //2. 找不到该话题,抛出业务异常
if (topic == null) { if (topic == null) {
...@@ -307,8 +314,15 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -307,8 +314,15 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
} }
@Override @Override
public PageDTO<UserFollowDTO> getTopicsFollower(Integer pageNumber, Integer pageSize, String topicId) { public PageDTO<UserFollowDTO> getTopicsFollower(Integer pageNumber, Integer pageSize, String topicId) throws TopicServiceException {
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq("status", 0);
topicQueryWrapper.eq("topic_id", topicId);
Topic topic = getOne(topicQueryWrapper);
if (null == topic) {
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
}
// 1. 通过话题id获取该话题所有关注着 // 1. 通过话题id获取该话题所有关注着
// 设置分页信息 // 设置分页信息
IPage<TopicFollow> page = new Page<>(pageNumber, pageSize); IPage<TopicFollow> page = new Page<>(pageNumber, pageSize);
...@@ -383,6 +397,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -383,6 +397,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
public PageDTO<TopicDTO> getTopicPage(Integer pageNumber, Integer pageSize) { public PageDTO<TopicDTO> getTopicPage(Integer pageNumber, Integer pageSize) {
IPage<Topic> page = new Page<>(pageNumber, pageSize); IPage<Topic> page = new Page<>(pageNumber, pageSize);
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>(); QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq("status", 0);
topicQueryWrapper.orderByDesc("create_time"); topicQueryWrapper.orderByDesc("create_time");
return toPageDTO(page(page, topicQueryWrapper)); return toPageDTO(page(page, topicQueryWrapper));
} }
...@@ -455,6 +470,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -455,6 +470,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
IPage<Topic> page = new Page<>(pageNumber, pageSize); IPage<Topic> page = new Page<>(pageNumber, pageSize);
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>(); QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq("status", 0);
topicQueryWrapper.orderByDesc("reference_count"); topicQueryWrapper.orderByDesc("reference_count");
return toPageDTO(page(page, topicQueryWrapper)); return toPageDTO(page(page, topicQueryWrapper));
...@@ -469,6 +485,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -469,6 +485,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
//2. 判断该话题是否存在 //2. 判断该话题是否存在
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>(); QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq("topic_name",topicName); topicQueryWrapper.eq("topic_name",topicName);
topicQueryWrapper.eq("status",0);
Topic topic=getOne(topicQueryWrapper); Topic topic=getOne(topicQueryWrapper);
if (topic == null) { if (topic == null) {
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS); throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
...@@ -542,12 +559,14 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -542,12 +559,14 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
topics.add(topic); topics.add(topic);
}); });
return topics; // 过滤掉被锁定的话题
List<Topic> topicList = topics.stream().filter((topic -> topic.getStatus() == 0)).collect(Collectors.toList());
return topicList;
} }
@Override @Override
public PageDTO<TopicDTO> getHotSearchTopics(Integer pageNumber, Integer pageSize) { public PageDTO<TopicDTO> getHotSearchTopics(Integer pageNumber, Integer pageSize) {
IPage<Topic> topicPage = topicMapper.selectHotSearchPage(new Page<Topic>(pageNumber, pageSize)); IPage<Topic> topicPage = topicMapper.selectHotSearchPage(new Page<>(pageNumber, pageSize));
return toPageDTO(topicPage); return toPageDTO(topicPage);
} }
......
...@@ -53,6 +53,20 @@ public class TopicUtils { ...@@ -53,6 +53,20 @@ public class TopicUtils {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(TopicUtils.parseTopics("#哈哈哈#今#哈哈哈#天你吃饭了吗#吃了#######")); System.out.println(TopicUtils.parseTopics("#哈哈哈#今#哈哈哈#天你吃饭了吗#吃了#######"));
System.out.println(TopicUtils.encodeTopic("#哈哈哈#今#哈哈哈#天你吃饭了吗#吃了#######哈哈#a#b")); System.out.println(TopicUtils.encodeTopic("#哈哈哈#今#哈哈哈#天你吃饭了吗#吃了#######哈哈#a#b"));
System.out.println(TopicUtils.clearLockedTopics("#哈哈哈#今#哈哈哈#天你吃饭了吗#吃了#######哈哈#a#b", List.of("哈哈哈")));
} }
/**
* 删除被锁定的话题
* @param content
* @param lockedTopics
* @return
*/
public static String clearLockedTopics(String content, List<String> lockedTopics) {
String newContent = content;
for (String topicName: lockedTopics) {
newContent = newContent.replace("#" + topicName + "#", "");
}
return encodeTopic(newContent);
}
} }
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