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
84d39d7d
Commit
84d39d7d
authored
Feb 11, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加是否关注用户的功能
parent
dcc60646
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
210 additions
and
27 deletions
+210
-27
src/main/java/cn/meteor/beyondclouds/common/vo/PageVO.java
+4
-3
src/main/java/cn/meteor/beyondclouds/modules/blog/dto/BlogDetailDTO.java
+2
-0
src/main/java/cn/meteor/beyondclouds/modules/blog/service/impl/BlogServiceImpl.java
+44
-4
src/main/java/cn/meteor/beyondclouds/modules/post/api/PostApi.java
+42
-8
src/main/java/cn/meteor/beyondclouds/modules/post/vo/PostVO.java
+1
-1
src/main/java/cn/meteor/beyondclouds/modules/project/api/ProjectApi.java
+2
-2
src/main/java/cn/meteor/beyondclouds/modules/project/dto/ProjectDetailDTO.java
+5
-0
src/main/java/cn/meteor/beyondclouds/modules/project/service/IProjectService.java
+3
-1
src/main/java/cn/meteor/beyondclouds/modules/project/service/impl/ProjectServiceImpl.java
+32
-1
src/main/java/cn/meteor/beyondclouds/modules/question/api/QuestionApi.java
+2
-2
src/main/java/cn/meteor/beyondclouds/modules/question/dto/QuestionDetailDTO.java
+5
-0
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionService.java
+3
-1
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
+30
-1
src/main/java/cn/meteor/beyondclouds/modules/search/service/impl/SearchServiceImpl.java
+2
-2
src/main/java/cn/meteor/beyondclouds/modules/user/service/IUserFollowService.java
+10
-0
src/main/java/cn/meteor/beyondclouds/modules/user/service/impl/UserFollowServiceImpl.java
+16
-0
src/main/java/cn/meteor/beyondclouds/util/PageUtils.java
+7
-1
No files found.
src/main/java/cn/meteor/beyondclouds/common/vo/PageVO.java
View file @
84d39d7d
...
...
@@ -26,7 +26,7 @@ public class PageVO<T> {
/**
* 每页数据量
*/
private
long
page
Number
;
private
long
page
Size
;
/**
* 数据
...
...
@@ -40,13 +40,13 @@ public class PageVO<T> {
setDataList
(
page
.
getRecords
());
setTotalPage
(
page
.
getPages
());
setTotalRecords
(
page
.
getTotal
());
setPage
Number
(
page
.
getSize
());
setPage
Size
(
page
.
getSize
());
}
public
PageVO
(
Page
<
T
>
page
)
{
setDataList
(
page
.
getContent
());
setTotalPage
(
page
.
getTotalPages
());
setTotalRecords
(
page
.
getTotalElements
());
setPage
Number
(
page
.
getSize
());
setPage
Size
(
page
.
getSize
());
}
}
\ No newline at end of file
src/main/java/cn/meteor/beyondclouds/modules/blog/dto/BlogDetailDTO.java
View file @
84d39d7d
...
...
@@ -11,5 +11,7 @@ import lombok.Data;
@Data
public
class
BlogDetailDTO
extends
Blog
{
private
Boolean
followedAuthor
;
private
String
content
;
}
src/main/java/cn/meteor/beyondclouds/modules/blog/service/impl/BlogServiceImpl.java
View file @
84d39d7d
...
...
@@ -20,6 +20,7 @@ import cn.meteor.beyondclouds.modules.topic.enums.TopicReferenceType;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.service.IUserFollowService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.util.AbstractUtils
;
import
cn.meteor.beyondclouds.util.PageUtils
;
...
...
@@ -39,6 +40,7 @@ import org.springframework.util.StringUtils;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -73,6 +75,8 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
private
IMessageQueueService
messageQueueService
;
private
IUserFollowService
userFollowService
;
@Autowired
public
BlogServiceImpl
(
IBlogTagService
blogTagService
,
ITopicReferenceService
topicReferenceService
,
IBlogExtService
blogExtService
,
IBlogCategoryService
blogCategoryService
,
BlogMapper
blogMapper
,
ITagService
tagService
)
{
this
.
blogTagService
=
blogTagService
;
...
...
@@ -84,6 +88,11 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
}
@Autowired
public
void
setUserFollowService
(
IUserFollowService
userFollowService
)
{
this
.
userFollowService
=
userFollowService
;
}
@Autowired
public
void
setMessageQueueService
(
IMessageQueueService
messageQueueService
)
{
this
.
messageQueueService
=
messageQueueService
;
}
...
...
@@ -105,6 +114,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 发布博客
*
* @param blog
* @param content
* @param topicIds
...
...
@@ -158,6 +168,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 删除博客
*
* @param userId
* @param blogId
* @throws BlogServiceException
...
...
@@ -178,7 +189,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
//2.删除博客评论表
QueryWrapper
<
BlogComment
>
queryWrapperComment
=
new
QueryWrapper
();
queryWrapperComment
.
eq
(
"blog_id"
,
blogId
);
queryWrapperComment
.
eq
(
"blog_id"
,
blogId
);
blogCommentService
.
remove
(
queryWrapperComment
);
//3.删除博客内容
...
...
@@ -208,6 +219,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 博客详情
*
* @param blogId
* @return
* @throws BlogServiceException
...
...
@@ -264,15 +276,37 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
blog
.
setTopics
(
List
.
of
());
}
//装配并返回查询到的数据
BlogDetailDTO
blogDetail
=
new
BlogDetailDTO
();
BeanUtils
.
copyProperties
(
blog
,
blogDetail
);
blogDetail
.
setContent
(
blogExt
.
getContent
());
// 查看当前用户有没有关注博主
blogDetail
.
setFollowedAuthor
(
false
);
Set
<
String
>
currentUserFollowedUserIds
;
if
(
subject
.
isAuthenticated
())
{
String
currentUserId
=
(
String
)
subject
.
getId
();
String
authorId
=
blog
.
getUserId
();
currentUserFollowedUserIds
=
userFollowService
.
getCurrentUserFollowedUserIds
(
currentUserId
);
if
(!
CollectionUtils
.
isEmpty
(
currentUserFollowedUserIds
)
&&
currentUserFollowedUserIds
.
contains
(
authorId
))
{
blogDetail
.
setFollowedAuthor
(
true
);
}
else
if
(
currentUserId
.
equals
(
authorId
))
{
blogDetail
.
setFollowedAuthor
(
true
);
}
else
{
blogDetail
.
setFollowedAuthor
(
false
);
}
}
return
blogDetail
;
}
/**
* 博客列表
*
* @param pageNumber
* @param pageSize
* @return
...
...
@@ -289,6 +323,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 个人博客列表
*
* @param pageNumber
* @param pageSize
* @param userId
...
...
@@ -306,6 +341,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 我的博客列表
*
* @param pageNumber
* @param pageSize
* @param userId
...
...
@@ -322,6 +358,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 修改博客
*
* @param blog
* @param content
* @param topicIds
...
...
@@ -334,7 +371,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
Assert
.
notNull
(
blog
,
"blog must not be null"
);
Assert
.
notNull
(
blog
.
getBlogId
(),
"blogId must not be null"
);
Assert
.
notNull
(
blog
.
getUserId
(),
"userId must not be null"
);
Assert
.
notNull
(
blog
.
getUserId
(),
"userId must not be null"
);
//1.判断当前用户是否拥有此博客
QueryWrapper
<
Blog
>
blogQueryWrapper
=
new
QueryWrapper
<>();
...
...
@@ -368,7 +405,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
blogExt
.
setContent
(
content
);
QueryWrapper
<
BlogExt
>
blogExtQueryWrapper
=
new
QueryWrapper
();
blogExtQueryWrapper
.
eq
(
"blog_id"
,
blog
.
getBlogId
());
blogExtService
.
update
(
blogExt
,
blogExtQueryWrapper
);
blogExtService
.
update
(
blogExt
,
blogExtQueryWrapper
);
}
//4.更新标签和话题的引用
...
...
@@ -384,6 +421,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 更新博客里面对标签和话题的引用
*
* @param tagIds
* @param topicIds
* @param blogId
...
...
@@ -453,6 +491,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 删除博客博客的旧话题引用
*
* @param blogId
*/
private
void
deleteOldTopicReferences
(
String
blogId
)
{
...
...
@@ -474,6 +513,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
/**
* 删除博客的旧标签引用
*
* @param blogId
*/
private
void
deleteOldTagReferences
(
String
blogId
)
{
...
...
@@ -503,7 +543,7 @@ public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IB
@Override
public
IPage
<
Blog
>
getBlogPageByTagId
(
Integer
pageNumber
,
Integer
pageSize
,
String
tagId
)
{
// 查询blogTagPage
IPage
<
BlogTag
>
page
=
new
Page
<>(
pageNumber
,
pageSize
);
IPage
<
BlogTag
>
page
=
new
Page
<>(
pageNumber
,
pageSize
);
QueryWrapper
<
BlogTag
>
blogTagQueryWrapper
=
new
QueryWrapper
<>();
blogTagQueryWrapper
.
eq
(
"tag_id"
,
tagId
);
blogTagQueryWrapper
.
orderByDesc
(
"create_time"
);
...
...
src/main/java/cn/meteor/beyondclouds/modules/post/api/PostApi.java
View file @
84d39d7d
...
...
@@ -12,17 +12,21 @@ import cn.meteor.beyondclouds.modules.post.form.PostForm;
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.user.service.IUserFollowService
;
import
cn.meteor.beyondclouds.util.PageUtils
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -35,9 +39,15 @@ import java.util.stream.Collectors;
@RestController
public
class
PostApi
{
private
IUserFollowService
userFollowService
;
private
IPostService
postService
;
@Autowired
public
void
setUserFollowService
(
IUserFollowService
userFollowService
)
{
this
.
userFollowService
=
userFollowService
;
}
@Autowired
public
void
setPostService
(
IPostService
postService
)
{
this
.
postService
=
postService
;
}
...
...
@@ -107,12 +117,15 @@ public class PostApi {
@Anonymous
@ApiOperation
(
"动态列表"
)
@GetMapping
(
"/posts"
)
public
Response
<?>
getPostPage
(
@Valid
PageForm
pageForm
,
BindingResult
bindingResult
)
{
public
Response
<?>
getPostPage
(
@Valid
PageForm
pageForm
,
BindingResult
bindingResult
,
@CurrentSubject
Subject
subject
)
{
if
(
bindingResult
.
hasErrors
())
{
return
Response
.
fieldError
(
bindingResult
.
getFieldError
());
}
IPage
<
Post
>
postPage
=
postService
.
getPostPage
(
pageForm
.
getPage
(),
pageForm
.
getSize
());
return
Response
.
success
(
pictureList
(
postPage
));
return
Response
.
success
(
toPostVOPage
(
postPage
,
subject
));
}
/**
...
...
@@ -128,7 +141,7 @@ public class PostApi {
return
Response
.
fieldError
(
bindingResult
.
getFieldError
());
}
IPage
<
Post
>
postPage
=
postService
.
getUserPostPage
(
pageForm
.
getPage
(),
pageForm
.
getSize
(),
(
String
)
subject
.
getId
());
return
Response
.
success
(
pictureList
(
postPage
));
return
Response
.
success
(
toPostVOPage
(
postPage
,
subject
));
}
/**
...
...
@@ -140,12 +153,12 @@ public class PostApi {
@Anonymous
@ApiOperation
(
"他人动态列表"
)
@GetMapping
(
"/user/{userId}/posts"
)
public
Response
<?>
getOtherPosts
(
@PathVariable
(
"userId"
)
String
userId
,
@Valid
PageForm
pageForm
,
BindingResult
bindingResult
)
{
public
Response
<?>
getOtherPosts
(
@PathVariable
(
"userId"
)
String
userId
,
@Valid
PageForm
pageForm
,
BindingResult
bindingResult
,
@CurrentSubject
Subject
subject
)
{
if
(
bindingResult
.
hasErrors
())
{
return
Response
.
fieldError
(
bindingResult
.
getFieldError
());
}
IPage
<
Post
>
postPage
=
postService
.
getUserPostPage
(
pageForm
.
getPage
(),
pageForm
.
getSize
(),
userId
);
return
Response
.
success
(
pictureList
(
postPage
));
return
Response
.
success
(
toPostVOPage
(
postPage
,
subject
));
}
...
...
@@ -154,19 +167,40 @@ public class PostApi {
* @param postPage
* @return
*/
private
PageVO
<
PostVO
>
pictureList
(
IPage
<
Post
>
postPage
)
{
List
<
PostVO
>
postVOList
=
postPage
.
getRecords
().
stream
()
private
PageVO
<?
extends
PostVO
>
toPostVOPage
(
IPage
<
Post
>
postPage
,
Subject
subject
)
{
List
<
PostVO
>
postVOList
;
if
(
null
!=
subject
&&
subject
.
isAuthenticated
())
{
String
currentUserId
=
(
String
)
subject
.
getId
();
Set
<
String
>
currentUserFollowedUserIds
=
userFollowService
.
getCurrentUserFollowedUserIds
(
currentUserId
);
postVOList
=
postPage
.
getRecords
().
stream
()
.
map
(
post
->
{
PostVO
postVO
=
new
PostVO
();
BeanUtils
.
copyProperties
(
post
,
postVO
);
if
(!
StringUtils
.
isEmpty
(
post
.
getPictures
()))
{
postVO
.
setPictures
(
post
.
getPictures
().
split
(
","
));
}
postVO
.
setFollowedAuthor
(
currentUserId
.
equals
(
post
.
getUserId
())
||
(!
CollectionUtils
.
isEmpty
(
currentUserFollowedUserIds
)
&&
currentUserFollowedUserIds
.
contains
(
post
.
getUserId
()))
);
return
postVO
;
}).
collect
(
Collectors
.
toList
());
}
else
{
postVOList
=
postPage
.
getRecords
().
stream
()
.
map
(
post
->
{
PostVO
postVO
=
new
PostVO
();
BeanUtils
.
copyProperties
(
post
,
postVO
);
if
(!
StringUtils
.
isEmpty
(
post
.
getPictures
()))
{
postVO
.
setPictures
(
post
.
getPictures
().
split
(
","
));
}
postVO
.
setFollowedAuthor
(
false
);
return
postVO
;
}).
collect
(
Collectors
.
toList
());
}
PageVO
<
PostVO
>
postPageVO
=
new
PageVO
<>();
PageUtils
.
copyMeta
(
postPage
,
postPageVO
);
postPageVO
.
setDataList
(
postVOList
);
postPageVO
.
setTotalPage
(
postPage
.
getPages
());
return
postPageVO
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/post/vo/PostVO.java
View file @
84d39d7d
...
...
@@ -32,5 +32,5 @@ public class PostVO {
private
Date
updateTime
;
private
Boolean
followedAuthor
;
}
src/main/java/cn/meteor/beyondclouds/modules/project/api/ProjectApi.java
View file @
84d39d7d
...
...
@@ -129,11 +129,11 @@ public class ProjectApi {
@Anonymous
@ApiOperation
(
"项目详情"
)
@GetMapping
(
"/project/{projectId}"
)
public
Response
<
ProjectDetailDTO
>
getProject
(
@PathVariable
(
"projectId"
)
String
projectId
)
{
public
Response
<
ProjectDetailDTO
>
getProject
(
@PathVariable
(
"projectId"
)
String
projectId
,
@CurrentSubject
Subject
subject
)
{
try
{
// 获取项目详情并返回
ProjectDetailDTO
projectDetail
=
projectService
.
getProject
(
projectId
);
ProjectDetailDTO
projectDetail
=
projectService
.
getProject
Detail
(
projectId
,
subject
);
return
Response
.
success
(
projectDetail
);
}
catch
(
ProjectServiceException
e
)
{
e
.
printStackTrace
();
...
...
src/main/java/cn/meteor/beyondclouds/modules/project/dto/ProjectDetailDTO.java
View file @
84d39d7d
...
...
@@ -11,6 +11,11 @@ import lombok.Data;
public
class
ProjectDetailDTO
extends
Project
{
/**
* 当前用户是否关注作者
*/
private
Boolean
followedAuthor
;
/**
* 项目详情
*/
private
String
projectDetail
;
...
...
src/main/java/cn/meteor/beyondclouds/modules/project/service/IProjectService.java
View file @
84d39d7d
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
service
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.project.dto.ProjectDetailDTO
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.exception.ProjectServiceException
;
...
...
@@ -33,9 +34,10 @@ public interface IProjectService extends IService<Project> {
/**
* 获取项目
* @param projectId
* @param subject
* @return
*/
ProjectDetailDTO
getProject
(
String
projectId
)
throws
ProjectServiceException
;
ProjectDetailDTO
getProject
Detail
(
String
projectId
,
Subject
subject
)
throws
ProjectServiceException
;
/**
* 获取项目列表
...
...
src/main/java/cn/meteor/beyondclouds/modules/project/service/impl/ProjectServiceImpl.java
View file @
84d39d7d
package
cn
.
meteor
.
beyondclouds
.
modules
.
project
.
service
.
impl
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.project.dto.ProjectDetailDTO
;
import
cn.meteor.beyondclouds.modules.project.entity.Project
;
import
cn.meteor.beyondclouds.modules.project.entity.ProjectCategory
;
...
...
@@ -16,6 +17,7 @@ import cn.meteor.beyondclouds.core.queue.message.DataItemChangeMessage;
import
cn.meteor.beyondclouds.modules.queue.service.IMessageQueueService
;
import
cn.meteor.beyondclouds.modules.search.enums.DataItemType
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.service.IUserFollowService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
...
...
@@ -27,8 +29,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.Assert
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
java.util.Set
;
/**
* <p>
* 项目表 服务实现类
...
...
@@ -51,6 +56,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
private
IMessageQueueService
messageQueueService
;
private
IUserFollowService
userFollowService
;
@Autowired
public
ProjectServiceImpl
(
IProjectExtService
projectExtService
,
ProjectCategoryMapper
projectCategoryMapper
)
{
this
.
projectExtService
=
projectExtService
;
...
...
@@ -58,6 +65,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
}
@Autowired
public
void
setUserFollowService
(
IUserFollowService
userFollowService
)
{
this
.
userFollowService
=
userFollowService
;
}
@Autowired
public
void
setMessageQueueService
(
IMessageQueueService
messageQueueService
)
{
this
.
messageQueueService
=
messageQueueService
;
}
...
...
@@ -145,7 +157,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
}
@Override
public
ProjectDetailDTO
getProject
(
String
projectId
)
throws
ProjectServiceException
{
public
ProjectDetailDTO
getProject
Detail
(
String
projectId
,
Subject
subject
)
throws
ProjectServiceException
{
Assert
.
notNull
(
projectId
,
"projectId must not be null"
);
// 1.获取项目
...
...
@@ -167,6 +179,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
ProjectDetailDTO
projectDetail
=
new
ProjectDetailDTO
();
BeanUtils
.
copyProperties
(
project
,
projectDetail
);
projectDetail
.
setProjectDetail
(
projectExt
.
getProjectDetail
());
// 查看当前用户有没有关注作者
projectDetail
.
setFollowedAuthor
(
false
);
Set
<
String
>
currentUserFollowedUserIds
;
if
(
subject
.
isAuthenticated
())
{
String
currentUserId
=
(
String
)
subject
.
getId
();
String
authorId
=
project
.
getUserId
();
currentUserFollowedUserIds
=
userFollowService
.
getCurrentUserFollowedUserIds
(
currentUserId
);
if
(!
CollectionUtils
.
isEmpty
(
currentUserFollowedUserIds
)
&&
currentUserFollowedUserIds
.
contains
(
authorId
))
{
projectDetail
.
setFollowedAuthor
(
true
);
}
else
if
(
currentUserId
.
equals
(
authorId
))
{
projectDetail
.
setFollowedAuthor
(
true
);
}
else
{
projectDetail
.
setFollowedAuthor
(
false
);
}
}
return
projectDetail
;
}
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/api/QuestionApi.java
View file @
84d39d7d
...
...
@@ -140,10 +140,10 @@ public class QuestionApi {
@Anonymous
@ApiOperation
(
"问题详情"
)
@GetMapping
(
"/question/{questionId}"
)
public
Response
<
QuestionDetailDTO
>
questionDetails
(
@PathVariable
(
"questionId"
)
String
questionId
)
{
public
Response
<
QuestionDetailDTO
>
questionDetails
(
@PathVariable
(
"questionId"
)
String
questionId
,
@CurrentSubject
Subject
subject
)
{
QuestionDetailDTO
questionDetail
=
null
;
try
{
questionDetail
=
questionService
.
questionDetails
(
questionId
);
questionDetail
=
questionService
.
getQuestionDetail
(
questionId
,
subject
);
return
Response
.
success
(
questionDetail
);
}
catch
(
QuestionServiceException
|
QuestionTagServiceException
e
)
{
e
.
printStackTrace
();
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/dto/QuestionDetailDTO.java
View file @
84d39d7d
...
...
@@ -13,6 +13,11 @@ import lombok.Data;
@Data
public
class
QuestionDetailDTO
extends
Question
{
/**
* 当前用户是否关注作者
*/
private
Boolean
followedAuthor
;
@ApiModelProperty
(
"详情"
)
private
String
questionDetail
;
}
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionService.java
View file @
84d39d7d
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
service
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.question.dto.QuestionDetailDTO
;
import
cn.meteor.beyondclouds.modules.question.entity.Question
;
import
cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException
;
...
...
@@ -52,11 +53,12 @@ public interface IQuestionService extends IService<Question> {
/**
* 问题详情
* @param questionId 问题ID
* @param subject
* @return 问题详情
* @throws QuestionServiceException 问题业务异常
* @throws QuestionTagServiceException 问题标签业务异常
*/
QuestionDetailDTO
questionDetails
(
String
questionId
)
throws
QuestionServiceException
,
QuestionTagServiceException
;
QuestionDetailDTO
getQuestionDetail
(
String
questionId
,
Subject
subject
)
throws
QuestionServiceException
,
QuestionTagServiceException
;
/**
* 获取问答列表
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
View file @
84d39d7d
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
service
.
impl
;
import
cn.meteor.beyondclouds.core.authentication.Subject
;
import
cn.meteor.beyondclouds.modules.question.dto.QuestionDetailDTO
;
import
cn.meteor.beyondclouds.modules.question.entity.*
;
import
cn.meteor.beyondclouds.modules.question.enums.QuestionErrorCode
;
...
...
@@ -20,6 +21,7 @@ import cn.meteor.beyondclouds.modules.topic.enums.TopicReferenceType;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.service.IUserFollowService
;
import
cn.meteor.beyondclouds.modules.user.service.IUserService
;
import
cn.meteor.beyondclouds.util.AbstractUtils
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
...
...
@@ -36,6 +38,7 @@ import org.springframework.util.StringUtils;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -75,6 +78,8 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
private
IMessageQueueService
messageQueueService
;
private
IUserFollowService
userFollowService
;
@Autowired
public
QuestionServiceImpl
(
IQuestionExtService
questionExtService
,
IQuestionCategoryService
questionCategoryService
,
ITopicReferenceService
topicReferenceService
,
QuestionMapper
questionMapper
)
{
this
.
questionExtService
=
questionExtService
;
...
...
@@ -84,6 +89,11 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
}
@Autowired
public
void
setUserFollowService
(
IUserFollowService
userFollowService
)
{
this
.
userFollowService
=
userFollowService
;
}
@Autowired
public
void
setMessageQueueService
(
IMessageQueueService
messageQueueService
)
{
this
.
messageQueueService
=
messageQueueService
;
}
...
...
@@ -252,7 +262,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
}
@Override
public
QuestionDetailDTO
questionDetails
(
String
questionId
)
throws
QuestionServiceException
,
QuestionTagServiceException
{
public
QuestionDetailDTO
getQuestionDetail
(
String
questionId
,
Subject
subject
)
throws
QuestionServiceException
,
QuestionTagServiceException
{
//1.获取问题基本信息
Question
question
=
getById
(
questionId
);
...
...
@@ -299,6 +309,25 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
QuestionDetailDTO
questionDetail
=
new
QuestionDetailDTO
();
BeanUtils
.
copyProperties
(
question
,
questionDetail
);
questionDetail
.
setQuestionDetail
(
questionExt
.
getQuestionDetail
());
// 查看当前用户有没有关注作者
questionDetail
.
setFollowedAuthor
(
false
);
Set
<
String
>
currentUserFollowedUserIds
;
if
(
subject
.
isAuthenticated
())
{
String
currentUserId
=
(
String
)
subject
.
getId
();
String
authorId
=
questionDetail
.
getUserId
();
currentUserFollowedUserIds
=
userFollowService
.
getCurrentUserFollowedUserIds
(
currentUserId
);
if
(!
CollectionUtils
.
isEmpty
(
currentUserFollowedUserIds
)
&&
currentUserFollowedUserIds
.
contains
(
authorId
))
{
questionDetail
.
setFollowedAuthor
(
true
);
}
else
if
(
currentUserId
.
equals
(
authorId
))
{
questionDetail
.
setFollowedAuthor
(
true
);
}
else
{
questionDetail
.
setFollowedAuthor
(
false
);
}
}
return
questionDetail
;
}
...
...
src/main/java/cn/meteor/beyondclouds/modules/search/service/impl/SearchServiceImpl.java
View file @
84d39d7d
...
...
@@ -202,7 +202,7 @@ public class SearchServiceImpl implements ISearchService {
}
private
SearchItem
buildSearchItemFromProject
(
String
projectId
)
throws
ProjectServiceException
{
ProjectDetailDTO
projectDetail
=
projectService
.
getProject
(
projectId
);
ProjectDetailDTO
projectDetail
=
projectService
.
getProject
Detail
(
projectId
,
Subject
.
anonymous
(
this
.
getClass
().
getName
())
);
if
(
null
!=
projectDetail
)
{
SearchItem
searchItem
=
new
SearchItem
(
DataItemType
.
PROJECT
,
projectId
);
searchItem
.
setTitle
(
projectDetail
.
getProjectName
());
...
...
@@ -231,7 +231,7 @@ public class SearchServiceImpl implements ISearchService {
}
private
SearchItem
buildSearchItemFromQuestion
(
String
questionId
)
throws
QuestionServiceException
,
QuestionTagServiceException
{
QuestionDetailDTO
questionDetail
=
questionService
.
questionDetails
(
questionId
);
QuestionDetailDTO
questionDetail
=
questionService
.
getQuestionDetail
(
questionId
,
Subject
.
anonymous
(
this
.
getClass
().
getName
())
);
if
(
null
!=
questionDetail
)
{
SearchItem
searchItem
=
new
SearchItem
(
DataItemType
.
QUESTION
,
questionId
);
searchItem
.
setTitle
(
questionDetail
.
getQuestionTitle
());
...
...
src/main/java/cn/meteor/beyondclouds/modules/user/service/IUserFollowService.java
View file @
84d39d7d
...
...
@@ -5,6 +5,9 @@ import cn.meteor.beyondclouds.modules.user.exception.UserServiceException;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.io.Serializable
;
import
java.util.Set
;
/**
* @author 段启岩
...
...
@@ -48,4 +51,11 @@ public interface IUserFollowService extends IService<UserFollow> {
*/
IPage
<
UserFollow
>
getFollowersPage
(
Integer
pageNumber
,
Integer
pageSize
,
String
userId
);
/**
* 获取当前用户关注的所有用户的ID
* @param userId
* @return
*/
Set
<
String
>
getCurrentUserFollowedUserIds
(
String
userId
);
}
src/main/java/cn/meteor/beyondclouds/modules/user/service/impl/UserFollowServiceImpl.java
View file @
84d39d7d
package
cn
.
meteor
.
beyondclouds
.
modules
.
user
.
service
.
impl
;
import
cn.meteor.beyondclouds.common.helper.IRedisHelper
;
import
cn.meteor.beyondclouds.core.redis.RedisKey
;
import
cn.meteor.beyondclouds.modules.user.entity.User
;
import
cn.meteor.beyondclouds.modules.user.entity.UserBlacklist
;
import
cn.meteor.beyondclouds.modules.user.entity.UserFollow
;
...
...
@@ -16,6 +18,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.io.Serializable
;
import
java.util.Set
;
/**
* @author 段启岩
...
...
@@ -26,6 +31,12 @@ public class UserFollowServiceImpl extends ServiceImpl<IUserFollowMapper, UserFo
private
IUserService
userService
;
private
IUserBlacklistService
userBlacklistService
;
private
IRedisHelper
redisHelper
;
@Autowired
public
void
setRedisHelper
(
IRedisHelper
redisHelper
)
{
this
.
redisHelper
=
redisHelper
;
}
@Autowired
public
UserFollowServiceImpl
(
IUserBlacklistService
userBlacklistService
)
{
...
...
@@ -163,6 +174,11 @@ public class UserFollowServiceImpl extends ServiceImpl<IUserFollowMapper, UserFo
userFollowQueryWrapper
.
eq
(
"follow_status"
,
0
);
return
page
(
page
,
userFollowQueryWrapper
);
}
@Override
public
Set
<
String
>
getCurrentUserFollowedUserIds
(
String
userId
)
{
return
redisHelper
.
setGet
(
RedisKey
.
USER_FOLLOWED
(
userId
));
}
}
src/main/java/cn/meteor/beyondclouds/util/PageUtils.java
View file @
84d39d7d
package
cn
.
meteor
.
beyondclouds
.
util
;
import
cn.meteor.beyondclouds.
modules.blog.entity.Blog
;
import
cn.meteor.beyondclouds.
common.vo.PageVO
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
...
...
@@ -18,4 +18,10 @@ public class PageUtils {
page
.
setRecords
(
List
.
of
());
return
page
;
}
public
static
void
copyMeta
(
IPage
<?>
src
,
PageVO
<?>
dest
)
{
dest
.
setTotalPage
(
src
.
getPages
());
dest
.
setPageSize
(
src
.
getSize
());
dest
.
setTotalRecords
(
src
.
getTotal
());
}
}
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