Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
4
Issues
4
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
段启岩
beyond-clouds
Commits
4ac1f264
Commit
4ac1f264
authored
Feb 07, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化更新引用逻辑
parent
125f68a1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
342 additions
and
152 deletions
+342
-152
src/main/java/cn/meteor/beyondclouds/modules/blog/service/impl/BlogServiceImpl.java
+46
-54
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
+84
-90
src/main/java/cn/meteor/beyondclouds/modules/tag/service/ITagService.java
+31
-0
src/main/java/cn/meteor/beyondclouds/modules/tag/service/impl/TagServiceImpl.java
+35
-1
src/main/java/cn/meteor/beyondclouds/modules/topic/enums/TopicReferenceType.java
+21
-0
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicService.java
+23
-1
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImpl.java
+30
-6
src/test/java/cn/meteor/beyondclouds/modules/tag/service/impl/TagServiceImplTest.java
+41
-0
src/test/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImplTest.java
+31
-0
No files found.
src/main/java/cn/meteor/beyondclouds/modules/blog/service/impl/BlogServiceImpl.java
View file @
4ac1f264
...
@@ -16,6 +16,7 @@ import cn.meteor.beyondclouds.modules.tag.entity.Tag;
...
@@ -16,6 +16,7 @@ import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicReference
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicReference
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicReferenceType
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
...
@@ -127,43 +128,8 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
...
@@ -127,43 +128,8 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
blogExt
.
setContent
(
content
);
blogExt
.
setContent
(
content
);
blogExtService
.
save
(
blogExt
);
blogExtService
.
save
(
blogExt
);
//4.判断是否引用话题
//4.更新标签和话题的引用
if
(!
CollectionUtils
.
isEmpty
(
topicIds
))
{
updateTopicAndTagReference
(
topicIds
,
tagIds
,
blog
.
getBlogId
(),
false
);
// 获取要引用的话题,不正确的话题ID会被自动过滤
List
<
Topic
>
topicList
=
topicService
.
listByIds
(
topicIds
);
List
<
String
>
existsTopicIds
=
topicList
.
stream
().
map
(
Topic:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTopicIds
))
{
List
<
TopicReference
>
topicReferenceList
=
new
ArrayList
<>();
for
(
String
topicId
:
existsTopicIds
)
{
TopicReference
topicReference
=
new
TopicReference
();
topicReference
.
setTopicId
(
topicId
);
topicReference
.
setReferencerId
(
blog
.
getBlogId
());
topicReference
.
setReferencerType
(
0
);
topicReferenceList
.
add
(
topicReference
);
}
// 批量保存
topicReferenceService
.
saveBatch
(
topicReferenceList
);
// 更新话题引用次数
existsTopicIds
.
forEach
(
topicId
->
{
topicService
.
increaseReferenceCount
(
topicId
,
1
);
});
}
}
//5.判断是否引用标签
if
(!
CollectionUtils
.
isEmpty
(
tagIds
))
{
List
<
String
>
existsTagIds
=
tagService
.
listByIds
(
tagIds
).
stream
().
map
(
Tag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTagIds
))
{
List
<
BlogTag
>
blogTagList
=
new
ArrayList
<>();
for
(
String
tagId
:
existsTagIds
)
{
BlogTag
blogTag
=
new
BlogTag
();
blogTag
.
setBlogId
(
blog
.
getBlogId
());
blogTag
.
setTagId
(
tagId
);
blogTagList
.
add
(
blogTag
);
}
blogTagService
.
saveBatch
(
blogTagList
);
}
}
}
}
/**
/**
...
@@ -373,25 +339,45 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
...
@@ -373,25 +339,45 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
blogExtService
.
update
(
blogExt
,
blogExtQueryWrapper
);
blogExtService
.
update
(
blogExt
,
blogExtQueryWrapper
);
}
}
//4.判断是否引用话题
//4.更新标签和话题的引用
updateTopicAndTagReference
(
topicIds
,
tagIds
,
blog
.
getBlogId
(),
true
);
// 添加新话题引用
}
/**
* 更新博客里面对标签和话题的引用
* @param tagIds
* @param topicIds
* @param blogId
* @param deleteOld
*/
private
void
updateTopicAndTagReference
(
List
<
String
>
topicIds
,
List
<
String
>
tagIds
,
String
blogId
,
boolean
deleteOld
)
{
// 1.处理话题引用
if
(!
CollectionUtils
.
isEmpty
(
topicIds
))
{
if
(!
CollectionUtils
.
isEmpty
(
topicIds
))
{
// 获取要引用的话题,不正确的话题ID会被自动过滤
// 获取要引用的话题,不正确的话题ID会被自动过滤
List
<
Topic
>
topicList
=
topicService
.
listByIds
(
topicIds
);
List
<
Topic
>
topicList
=
topicService
.
listByIds
(
topicIds
);
List
<
String
>
existsTopicIds
=
topicList
.
stream
().
map
(
Topic:
:
getTopicId
).
collect
(
Collectors
.
toList
());
List
<
String
>
existsTopicIds
=
topicList
.
stream
().
map
(
Topic:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTopicIds
))
{
if
(!
CollectionUtils
.
isEmpty
(
existsTopicIds
))
{
// 删除旧话题引用
if
(
deleteOld
)
{
QueryWrapper
<
TopicReference
>
topicReferenceQueryWrapper
=
new
QueryWrapper
<>();
// 删除旧话题引用并更新话题的引用量
topicReferenceQueryWrapper
.
eq
(
"referencer_id"
,
blog
.
getBlogId
());
QueryWrapper
<
TopicReference
>
topicReferenceQueryWrapper
=
new
QueryWrapper
<>();
topicReferenceService
.
remove
(
topicReferenceQueryWrapper
);
topicReferenceQueryWrapper
.
eq
(
"referencer_id"
,
blogId
);
// 减少对应话题的引用数量
List
<
String
>
referencedTopicIds
=
topicReferenceService
.
list
(
topicReferenceQueryWrapper
).
stream
()
.
map
(
TopicReference:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
referencedTopicIds
))
{
topicService
.
decreaseReferenceCountBatch
(
referencedTopicIds
,
1
);
}
topicReferenceService
.
remove
(
topicReferenceQueryWrapper
);
}
List
<
TopicReference
>
topicReferenceList
=
new
ArrayList
<>();
List
<
TopicReference
>
topicReferenceList
=
new
ArrayList
<>();
for
(
String
topicId
:
existsTopicIds
)
{
for
(
String
topicId
:
existsTopicIds
)
{
TopicReference
topicReference
=
new
TopicReference
();
TopicReference
topicReference
=
new
TopicReference
();
topicReference
.
setTopicId
(
topicId
);
topicReference
.
setTopicId
(
topicId
);
topicReference
.
setReferencerId
(
blog
.
getBlogId
()
);
topicReference
.
setReferencerId
(
blog
Id
);
topicReference
.
setReferencerType
(
0
);
topicReference
.
setReferencerType
(
TopicReferenceType
.
BLOG_REFERENCE
.
getType
()
);
topicReferenceList
.
add
(
topicReference
);
topicReferenceList
.
add
(
topicReference
);
}
}
// 批量保存
// 批量保存
...
@@ -403,29 +389,35 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
...
@@ -403,29 +389,35 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
}
}
}
}
//5.判断是否引用标签
// 2.处理标签引用
// 添加新标签
if
(!
CollectionUtils
.
isEmpty
(
tagIds
))
{
if
(!
CollectionUtils
.
isEmpty
(
tagIds
))
{
List
<
String
>
existsTagIds
=
tagService
.
listByIds
(
tagIds
).
stream
().
map
(
Tag:
:
getTagId
).
collect
(
Collectors
.
toList
());
List
<
String
>
existsTagIds
=
tagService
.
listByIds
(
tagIds
).
stream
().
map
(
Tag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTagIds
))
{
if
(!
CollectionUtils
.
isEmpty
(
existsTagIds
))
{
// 删除旧标签
if
(
deleteOld
)
{
QueryWrapper
<
BlogTag
>
blogTagQueryWrapper
=
new
QueryWrapper
<>();
// 删除旧标签引用并更新标签的引用量
blogTagQueryWrapper
.
eq
(
"blog_id"
,
blog
.
getBlogId
());
QueryWrapper
<
BlogTag
>
blogTagQueryWrapper
=
new
QueryWrapper
<>();
blogTagService
.
remove
(
blogTagQueryWrapper
);
blogTagQueryWrapper
.
eq
(
"blog_id"
,
blogId
);
// 减少对应话题的引用数量
List
<
String
>
referencedTagIds
=
blogTagService
.
list
(
blogTagQueryWrapper
).
stream
()
.
map
(
BlogTag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
referencedTagIds
))
{
tagService
.
decreaseReferenceCountBatch
(
referencedTagIds
,
1
);
}
blogTagService
.
remove
(
blogTagQueryWrapper
);
}
List
<
BlogTag
>
blogTagList
=
new
ArrayList
<>();
List
<
BlogTag
>
blogTagList
=
new
ArrayList
<>();
for
(
String
tagId
:
existsTagIds
)
{
for
(
String
tagId
:
existsTagIds
)
{
BlogTag
blogTag
=
new
BlogTag
();
BlogTag
blogTag
=
new
BlogTag
();
blogTag
.
setBlogId
(
blog
.
getBlogId
()
);
blogTag
.
setBlogId
(
blog
Id
);
blogTag
.
setTagId
(
tagId
);
blogTag
.
setTagId
(
tagId
);
blogTagList
.
add
(
blogTag
);
blogTagList
.
add
(
blogTag
);
}
}
blogTagService
.
saveBatch
(
blogTagList
);
blogTagService
.
saveBatch
(
blogTagList
);
}
}
}
}
}
}
@Override
@Override
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
View file @
4ac1f264
...
@@ -12,6 +12,7 @@ import cn.meteor.beyondclouds.modules.tag.entity.Tag;
...
@@ -12,6 +12,7 @@ import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicReference
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicReference
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicReferenceType
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
...
@@ -130,52 +131,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -130,52 +131,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
questionExt
.
setQuestionDetail
(
questionDetail
);
questionExt
.
setQuestionDetail
(
questionDetail
);
questionExtService
.
save
(
questionExt
);
questionExtService
.
save
(
questionExt
);
//5.判断是否引用话题
// 5.处理对话题和标签的引用
if
(!
CollectionUtils
.
isEmpty
(
topicIds
))
{
updateTopicAndTagReference
(
topicIds
,
tagIds
,
question
.
getQuestionId
(),
false
);
// 获取要引用的话题,不正确的话题ID会被自动过滤
List
<
String
>
existsTopicIds
=
topicService
.
listByIds
(
topicIds
).
stream
().
map
(
Topic:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTopicIds
))
{
List
<
TopicReference
>
topicReferenceList
=
new
ArrayList
<>();
for
(
String
topicId
:
existsTopicIds
)
{
TopicReference
topicReference
=
new
TopicReference
();
topicReference
.
setTopicId
(
topicId
);
topicReference
.
setReferencerId
(
question
.
getQuestionId
());
topicReference
.
setReferencerType
(
2
);
topicReferenceList
.
add
(
topicReference
);
}
// 批量保存
topicReferenceService
.
saveBatch
(
topicReferenceList
);
// 更新话题引用次数
existsTopicIds
.
forEach
(
topicId
->
{
topicService
.
increaseReferenceCount
(
topicId
,
1
);
});
}
}
//5.判断是否引用标签
if
(!
CollectionUtils
.
isEmpty
(
tagIds
))
{
List
<
String
>
existsTagIds
=
tagService
.
listByIds
(
tagIds
).
stream
().
filter
(
tag
->
tag
.
getTagType
()
==
2
).
map
(
Tag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTagIds
))
{
List
<
QuestionTag
>
questionTagList
=
new
ArrayList
<>();
for
(
String
tagId
:
existsTagIds
)
{
QuestionTag
questionTag
=
new
QuestionTag
();
questionTag
.
setQuestionId
(
question
.
getQuestionId
());
questionTag
.
setTagId
(
tagId
);
questionTagList
.
add
(
questionTag
);
}
questionTagService
.
saveBatch
(
questionTagList
);
//更新标签引用次数
existsTagIds
.
forEach
(
tagId
->
{
Tag
tag
=
tagService
.
getById
(
tagId
);
if
(
null
!=
tag
)
{
tag
.
setReferenceCount
(
tag
.
getReferenceCount
()
+
1
);
tagService
.
updateById
(
tag
);
}
});
}
}
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
@@ -252,50 +209,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -252,50 +209,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
questionExtService
.
update
(
updateWrapper
);
questionExtService
.
update
(
updateWrapper
);
}
}
//5.判断是否引用话题
// 5.处理对话题和标签的引用
if
(!
CollectionUtils
.
isEmpty
(
topicIds
))
{
updateTopicAndTagReference
(
topicIds
,
tagIds
,
question
.
getQuestionId
(),
true
);
// 获取要引用的话题,不正确的话题ID会被自动过滤
List
<
String
>
existsTopicIds
=
topicService
.
listByIds
(
topicIds
).
stream
().
map
(
Topic:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTopicIds
))
{
// 删除旧话题引用
topicReferenceService
.
remove
(
QuestionUtils
.
getWrapper
(
"referencer_id"
,
question
.
getQuestionId
()));
List
<
TopicReference
>
topicReferenceList
=
new
ArrayList
<>();
for
(
String
topicId
:
existsTopicIds
)
{
TopicReference
topicReference
=
new
TopicReference
();
topicReference
.
setTopicId
(
topicId
);
topicReference
.
setReferencerId
(
question
.
getQuestionId
());
topicReference
.
setReferencerType
(
2
);
topicReferenceList
.
add
(
topicReference
);
}
// 批量保存
topicReferenceService
.
saveBatch
(
topicReferenceList
);
// 更新话题引用次数
existsTopicIds
.
forEach
(
topicId
->
{
topicService
.
increaseReferenceCount
(
topicId
,
1
);
});
}
}
//5.判断是否引用标签
if
(!
CollectionUtils
.
isEmpty
(
tagIds
))
{
List
<
String
>
existsTagIds
=
tagService
.
listByIds
(
tagIds
).
stream
().
filter
(
tag
->
2
==
tag
.
getTagType
()).
map
(
Tag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTagIds
))
{
// 删除旧标签
questionTagService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
List
<
QuestionTag
>
questionTagList
=
new
ArrayList
<>();
for
(
String
tagId
:
existsTagIds
)
{
QuestionTag
questionTag
=
new
QuestionTag
();
questionTag
.
setQuestionId
(
question
.
getQuestionId
());
questionTag
.
setTagId
(
tagId
);
questionTagList
.
add
(
questionTag
);
}
questionTagService
.
saveBatch
(
questionTagList
);
}
}
}
}
@Override
@Override
...
@@ -393,4 +308,83 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -393,4 +308,83 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
questionQueryWrapper
.
orderByDesc
(
"q.view_number"
);
questionQueryWrapper
.
orderByDesc
(
"q.view_number"
);
return
questionMapper
.
selectPageWithTags
(
page
,
questionQueryWrapper
);
return
questionMapper
.
selectPageWithTags
(
page
,
questionQueryWrapper
);
}
}
/**
* 更新问题里面对标签和话题的引用
* @param tagIds
* @param topicIds
* @param questionId
* @param deleteOld
*/
private
void
updateTopicAndTagReference
(
List
<
String
>
topicIds
,
List
<
String
>
tagIds
,
String
questionId
,
boolean
deleteOld
)
{
// 1.处理话题引用
if
(!
CollectionUtils
.
isEmpty
(
topicIds
))
{
// 获取要引用的话题,不正确的话题ID会被自动过滤
List
<
Topic
>
topicList
=
topicService
.
listByIds
(
topicIds
);
List
<
String
>
existsTopicIds
=
topicList
.
stream
().
map
(
Topic:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTopicIds
))
{
if
(
deleteOld
)
{
// 删除旧话题引用并更新话题的引用量
QueryWrapper
<
TopicReference
>
topicReferenceQueryWrapper
=
new
QueryWrapper
<>();
topicReferenceQueryWrapper
.
eq
(
"referencer_id"
,
questionId
);
// 减少对应话题的引用数量
List
<
String
>
referencedTopicIds
=
topicReferenceService
.
list
(
topicReferenceQueryWrapper
).
stream
()
.
map
(
TopicReference:
:
getTopicId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
referencedTopicIds
))
{
topicService
.
decreaseReferenceCountBatch
(
referencedTopicIds
,
1
);
}
topicReferenceService
.
remove
(
topicReferenceQueryWrapper
);
}
// 创建引用列表
List
<
TopicReference
>
topicReferenceList
=
existsTopicIds
.
stream
()
.
map
(
topicId
->
{
TopicReference
topicReference
=
new
TopicReference
();
topicReference
.
setTopicId
(
topicId
);
topicReference
.
setReferencerId
(
questionId
);
topicReference
.
setReferencerType
(
TopicReferenceType
.
QUESTION_REFERENCE
.
getType
());
return
topicReference
;
}).
collect
(
Collectors
.
toList
());
// 保存话题引用
topicReferenceService
.
saveBatch
(
topicReferenceList
);
// 更新话题引用次数
topicService
.
increaseReferenceCountBatch
(
existsTopicIds
,
1
);
}
}
// 2.处理标签引用
if
(!
CollectionUtils
.
isEmpty
(
tagIds
))
{
List
<
String
>
existsTagIds
=
tagService
.
listByIds
(
tagIds
).
stream
().
map
(
Tag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
existsTagIds
))
{
if
(
deleteOld
)
{
// 删除旧标签引用并更新标签的引用量
QueryWrapper
<
QuestionTag
>
questionTagQueryWrapper
=
new
QueryWrapper
<>();
questionTagQueryWrapper
.
eq
(
"question_id"
,
questionId
);
// 减少对应话题的引用数量
List
<
String
>
referencedTagIds
=
questionTagService
.
list
(
questionTagQueryWrapper
).
stream
()
.
map
(
QuestionTag:
:
getTagId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
referencedTagIds
))
{
tagService
.
decreaseReferenceCountBatch
(
referencedTagIds
,
1
);
}
questionTagService
.
remove
(
questionTagQueryWrapper
);
}
// 保存标签引用
List
<
QuestionTag
>
questionTagList
=
existsTagIds
.
stream
()
.
map
(
tagId
->
{
QuestionTag
questionTag
=
new
QuestionTag
();
questionTag
.
setQuestionId
(
questionId
);
questionTag
.
setTagId
(
tagId
);
return
questionTag
;
}).
collect
(
Collectors
.
toList
());
questionTagService
.
saveBatch
(
questionTagList
);
// 更新标签引用次数
tagService
.
increaseReferenceCountBatch
(
existsTagIds
,
1
);
}
}
}
}
}
src/main/java/cn/meteor/beyondclouds/modules/tag/service/ITagService.java
View file @
4ac1f264
...
@@ -5,6 +5,8 @@ import cn.meteor.beyondclouds.modules.tag.exception.TagServiceException;
...
@@ -5,6 +5,8 @@ import cn.meteor.beyondclouds.modules.tag.exception.TagServiceException;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.Collection
;
/**
/**
* <p>
* <p>
* 标签表 服务类
* 标签表 服务类
...
@@ -49,4 +51,33 @@ public interface ITagService extends IService<Tag> {
...
@@ -49,4 +51,33 @@ public interface ITagService extends IService<Tag> {
* @return
* @return
*/
*/
IPage
<
Tag
>
getHotPage
(
Integer
pageNumber
,
Integer
pageSize
);
IPage
<
Tag
>
getHotPage
(
Integer
pageNumber
,
Integer
pageSize
);
/**
* 增加标签引用次数
* @param tagId
* @param count
*/
void
increaseReferenceCount
(
String
tagId
,
int
count
);
/**
* 批量增加标签引用次数
* @param tagIds
* @param count
*/
void
increaseReferenceCountBatch
(
Collection
<
String
>
tagIds
,
int
count
);
/**
* 减少标签引用次数
* @param tagId
* @param count
*/
void
decreaseReferenceCount
(
String
tagId
,
int
count
);
/**
* 批量减少标签引用次数
* @param tagIds
* @param count
*/
void
decreaseReferenceCountBatch
(
Collection
<
String
>
tagIds
,
int
count
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/tag/service/impl/TagServiceImpl.java
View file @
4ac1f264
...
@@ -5,14 +5,16 @@ import cn.meteor.beyondclouds.modules.tag.enums.TagErrorCode;
...
@@ -5,14 +5,16 @@ import cn.meteor.beyondclouds.modules.tag.enums.TagErrorCode;
import
cn.meteor.beyondclouds.modules.tag.exception.TagServiceException
;
import
cn.meteor.beyondclouds.modules.tag.exception.TagServiceException
;
import
cn.meteor.beyondclouds.modules.tag.mapper.TagMapper
;
import
cn.meteor.beyondclouds.modules.tag.mapper.TagMapper
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
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.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.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.Collection
;
/**
/**
* <p>
* <p>
* 标签表 服务实现类
* 标签表 服务实现类
...
@@ -87,4 +89,36 @@ public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagS
...
@@ -87,4 +89,36 @@ public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagS
return
page
(
page
,
tagHotQueryWrapper
);
return
page
(
page
,
tagHotQueryWrapper
);
}
}
@Override
public
void
increaseReferenceCount
(
String
tagId
,
int
count
)
{
UpdateWrapper
<
Tag
>
tagUpdateWrapper
=
new
UpdateWrapper
<>();
tagUpdateWrapper
.
eq
(
"tag_id"
,
tagId
);
tagUpdateWrapper
.
setSql
(
"reference_count=reference_count + "
+
count
);
update
(
tagUpdateWrapper
);
}
@Override
public
void
increaseReferenceCountBatch
(
Collection
<
String
>
tagIds
,
int
count
)
{
UpdateWrapper
<
Tag
>
tagUpdateWrapper
=
new
UpdateWrapper
<>();
tagUpdateWrapper
.
in
(
"tag_id"
,
tagIds
);
tagUpdateWrapper
.
setSql
(
"reference_count=reference_count + "
+
count
);
update
(
tagUpdateWrapper
);
}
@Override
public
void
decreaseReferenceCount
(
String
tagId
,
int
count
)
{
UpdateWrapper
<
Tag
>
tagUpdateWrapper
=
new
UpdateWrapper
<>();
tagUpdateWrapper
.
eq
(
"tag_id"
,
tagId
);
tagUpdateWrapper
.
setSql
(
"reference_count=reference_count - "
+
count
);
update
(
tagUpdateWrapper
);
}
@Override
public
void
decreaseReferenceCountBatch
(
Collection
<
String
>
tagIds
,
int
count
)
{
UpdateWrapper
<
Tag
>
tagUpdateWrapper
=
new
UpdateWrapper
<>();
tagUpdateWrapper
.
in
(
"tag_id"
,
tagIds
);
tagUpdateWrapper
.
setSql
(
"reference_count=reference_count - "
+
count
);
update
(
tagUpdateWrapper
);
}
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/enums/TopicReferenceType.java
0 → 100644
View file @
4ac1f264
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
enums
;
import
lombok.Getter
;
/**
* 话题引用类型
* @author meteor
*/
@Getter
public
enum
TopicReferenceType
{
BLOG_REFERENCE
(
0
),
PROJECT_REFERENCE
(
1
),
QUESTION_REFERENCE
(
2
),
POST_REFERENCE
(
3
)
;
private
int
type
;
TopicReferenceType
(
int
type
)
{
this
.
type
=
type
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/topic/service/ITopicService.java
View file @
4ac1f264
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
;
import
cn.meteor.beyondclouds.modules.tag.exception.TagServiceException
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
import
cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.Collection
;
/**
/**
* <p>
* <p>
* 话题表 服务类
* 话题表 服务类
...
@@ -90,6 +91,27 @@ public interface ITopicService extends IService<Topic> {
...
@@ -90,6 +91,27 @@ public interface ITopicService extends IService<Topic> {
void
increaseReferenceCount
(
String
topicId
,
int
count
);
void
increaseReferenceCount
(
String
topicId
,
int
count
);
/**
/**
* 批量增加话题引用次数
* @param topicIds
* @param count
*/
void
increaseReferenceCountBatch
(
Collection
<
String
>
topicIds
,
int
count
);
/**
* 减少话题引用次数
* @param topicId
* @param count
*/
void
decreaseReferenceCount
(
String
topicId
,
int
count
);
/**
* 批量减少话题引用次数
* @param topicIds
* @param count
*/
void
decreaseReferenceCountBatch
(
Collection
<
String
>
topicIds
,
int
count
);
/**
* 取消关注话题
* 取消关注话题
* @param userId
* @param userId
* @param topicId
* @param topicId
...
...
src/main/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImpl.java
View file @
4ac1f264
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.tag.exception.TagServiceException
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicFollow
;
import
cn.meteor.beyondclouds.modules.topic.entity.TopicFollow
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicErrorCode
;
import
cn.meteor.beyondclouds.modules.topic.enums.TopicErrorCode
;
...
@@ -11,12 +10,14 @@ import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
...
@@ -11,12 +10,14 @@ import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
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.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.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -195,11 +196,34 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
...
@@ -195,11 +196,34 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
@Override
@Override
public
void
increaseReferenceCount
(
String
topicId
,
int
count
)
{
public
void
increaseReferenceCount
(
String
topicId
,
int
count
)
{
Topic
topic
=
getById
(
topicId
);
UpdateWrapper
<
Topic
>
topicUpdateWrapper
=
new
UpdateWrapper
<>();
if
(
null
!=
topic
)
{
topicUpdateWrapper
.
eq
(
"topic_id"
,
topicId
);
topic
.
setReferenceCount
(
topic
.
getReferenceCount
()
+
count
);
topicUpdateWrapper
.
setSql
(
"reference_count=reference_count + "
+
count
);
updateById
(
topic
);
update
(
topicUpdateWrapper
);
}
}
@Override
public
void
increaseReferenceCountBatch
(
Collection
<
String
>
topicIds
,
int
count
)
{
UpdateWrapper
<
Topic
>
topicUpdateWrapper
=
new
UpdateWrapper
<>();
topicUpdateWrapper
.
in
(
"topic_id"
,
topicIds
);
topicUpdateWrapper
.
setSql
(
"reference_count=reference_count + "
+
count
);
update
(
topicUpdateWrapper
);
}
@Override
public
void
decreaseReferenceCount
(
String
topicId
,
int
count
)
{
UpdateWrapper
<
Topic
>
topicUpdateWrapper
=
new
UpdateWrapper
<>();
topicUpdateWrapper
.
eq
(
"topic_id"
,
topicId
);
topicUpdateWrapper
.
setSql
(
"reference_count=reference_count - "
+
count
);
update
(
topicUpdateWrapper
);
}
@Override
public
void
decreaseReferenceCountBatch
(
Collection
<
String
>
topicIds
,
int
count
)
{
UpdateWrapper
<
Topic
>
topicUpdateWrapper
=
new
UpdateWrapper
<>();
topicUpdateWrapper
.
in
(
"topic_id"
,
topicIds
);
topicUpdateWrapper
.
setSql
(
"reference_count=reference_count - "
+
count
);
update
(
topicUpdateWrapper
);
}
}
@Override
@Override
...
...
src/test/java/cn/meteor/beyondclouds/modules/tag/service/impl/TagServiceImplTest.java
0 → 100644
View file @
4ac1f264
package
cn
.
meteor
.
beyondclouds
.
modules
.
tag
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.List
;
import
static
org
.
junit
.
Assert
.*;
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TagServiceImplTest
{
@Autowired
private
ITagService
tagService
;
@Test
public
void
increaseReferenceCount
()
{
tagService
.
increaseReferenceCount
(
"0718c0c591eb6c957b9c8691e808538e"
,
2
);
}
@Test
public
void
increaseReferenceCountBatch
()
{
tagService
.
increaseReferenceCountBatch
(
List
.
of
(
"0718c0c591eb6c957b9c8691e808538e"
,
"32eb229153d0f2b8919a1e0442e15146"
),
2
);
}
@Test
public
void
decreaseReferenceCount
()
{
tagService
.
decreaseReferenceCount
(
"0718c0c591eb6c957b9c8691e808538e"
,
2
);
}
@Test
public
void
decreaseReferenceCountBatch
()
{
tagService
.
decreaseReferenceCountBatch
(
List
.
of
(
"0718c0c591eb6c957b9c8691e808538e"
,
"32eb229153d0f2b8919a1e0442e15146"
),
2
);
}
}
\ No newline at end of file
src/test/java/cn/meteor/beyondclouds/modules/topic/service/impl/TopicServiceImplTest.java
0 → 100644
View file @
4ac1f264
package
cn
.
meteor
.
beyondclouds
.
modules
.
topic
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.List
;
import
static
org
.
junit
.
Assert
.*;
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TopicServiceImplTest
{
@Autowired
private
ITopicService
topicService
;
@Test
public
void
increaseReferenceCount
()
{
topicService
.
increaseReferenceCount
(
"229d7edbbe76badb0937238dc168c329"
,
2
);
}
@Test
public
void
increaseReferenceCountBatch
()
{
topicService
.
increaseReferenceCountBatch
(
List
.
of
(
"229d7edbbe76badb0937238dc168c329"
,
"32d0053d77e27fecbad5928c66ff617f"
),
2
);
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment