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
75356962
Commit
75356962
authored
Feb 01, 2020
by
胡学良
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善0131代码
parent
5e04066c
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
169 additions
and
75 deletions
+169
-75
src/main/java/cn/meteor/beyondclouds/modules/question/api/QuestionApi.java
+65
-16
src/main/java/cn/meteor/beyondclouds/modules/question/bean/QuestionDetails.java
+3
-14
src/main/java/cn/meteor/beyondclouds/modules/question/enums/QuestionErrorCode.java
+4
-3
src/main/java/cn/meteor/beyondclouds/modules/question/exception/QuestionServiceException.java
+1
-1
src/main/java/cn/meteor/beyondclouds/modules/question/form/QuestionForm.java
+4
-2
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionService.java
+8
-5
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
+65
-29
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionTagServiceImpl.java
+15
-1
src/main/java/cn/meteor/beyondclouds/modules/question/util/QuestionUtils.java
+1
-1
src/main/java/cn/meteor/beyondclouds/modules/topic/api/TopicApi.java
+1
-1
src/main/resources/application-prod.yml
+1
-1
src/main/resources/application.yml
+1
-1
No files found.
src/main/java/cn/meteor/beyondclouds/modules/question/api/QuestionApi.java
View file @
75356962
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
api
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
api
;
import
cn.meteor.beyondclouds.core.annotation.Anonymous
;
import
cn.meteor.beyondclouds.core.annotation.CurrentSubject
;
import
cn.meteor.beyondclouds.core.annotation.CurrentSubject
;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
...
@@ -9,49 +10,58 @@ import cn.meteor.beyondclouds.modules.question.exception.QuestionServiceExceptio
...
@@ -9,49 +10,58 @@ import cn.meteor.beyondclouds.modules.question.exception.QuestionServiceExceptio
import
cn.meteor.beyondclouds.modules.question.form.QuestionForm
;
import
cn.meteor.beyondclouds.modules.question.form.QuestionForm
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionService
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionService
;
import
cn.meteor.beyondclouds.modules.question.util.QuestionUtils
;
import
cn.meteor.beyondclouds.modules.question.util.QuestionUtils
;
import
cn.meteor.beyondclouds.modules.user.bean.AuthenticationResult
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
javax.validation.Valid
;
import
java.util.Arrays
;
import
java.util.HashSet
;
import
java.util.HashSet
;
/**
/**
* @author 胡学良
* @author 胡学良
* @
dat
e 2020/1/31
* @
sinc
e 2020/1/31
*/
*/
@Api
(
tags
=
"问题Api"
)
@Api
(
tags
=
"问题Api"
)
@RestController
@RestController
@RequestMapping
(
"/api"
)
@RequestMapping
(
"/api"
)
public
class
QuestionApi
{
public
class
QuestionApi
{
IQuestionService
questionService
;
private
IQuestionService
questionService
;
@Autowired
@Autowired
public
QuestionApi
(
IQuestionService
questionService
)
{
public
QuestionApi
(
IQuestionService
questionService
)
{
this
.
questionService
=
questionService
;
this
.
questionService
=
questionService
;
}
}
/**
* 发布问题
* @param questionForm 问题表单
* @param result 校验信息
* @param subject 访问者信息
* @return default
*/
@ApiOperation
(
"发布问题"
)
@ApiOperation
(
"发布问题"
)
@PostMapping
(
"/question"
)
@PostMapping
(
"/question"
)
public
Response
postQuestion
(
@RequestBody
@Valid
QuestionForm
questionForm
,
BindingResult
result
,
@CurrentSubject
Subject
subject
){
public
Response
postQuestion
(
@RequestBody
@Valid
QuestionForm
questionForm
,
BindingResult
result
,
@CurrentSubject
Subject
subject
){
if
(
result
.
hasErrors
())
{
if
(
result
.
hasErrors
())
{
return
Response
.
fieldError
(
result
.
getFieldError
());
return
Response
.
fieldError
(
result
.
getFieldError
());
}
}
//将问题表单转换为问题对象
Question
question
=
new
Question
();
Question
question
=
new
Question
();
question
.
setUserId
((
String
)
subject
.
getId
());
BeanUtils
.
copyProperties
(
questionForm
,
question
);
question
.
setQuestionTitle
(
questionForm
.
getQuestionTitle
());
question
.
setCategoryId
(
Integer
.
valueOf
(
questionForm
.
getCategoryId
()));
question
.
setCategoryId
(
Integer
.
valueOf
(
questionForm
.
getCategoryId
()));
question
.
setQuestionAbstract
(
questionForm
.
getQuestionAbstract
());
//设置用户ID(问题发布者ID)
question
.
setUserId
((
String
)
subject
.
getId
());
//祛除重复标签
HashSet
<
String
>
tags
=
QuestionUtils
.
toHashSet
(
questionForm
.
getTags
());
HashSet
<
String
>
tags
=
QuestionUtils
.
toHashSet
(
questionForm
.
getTags
());
//发布问题
try
{
try
{
questionService
.
postQuestion
(
question
,
questionForm
.
getQuestionDetail
(),
tags
);
questionService
.
postQuestion
(
question
,
questionForm
.
getQuestionDetail
(),
tags
);
return
Response
.
success
();
return
Response
.
success
();
...
@@ -61,30 +71,56 @@ public class QuestionApi {
...
@@ -61,30 +71,56 @@ public class QuestionApi {
}
}
}
}
/**
* 删除问题
* @param questionId 问题ID
* @param subject 访问者信息
* @return default
*/
@ApiOperation
(
"删除问题"
)
@ApiOperation
(
"删除问题"
)
@DeleteMapping
(
"/question/{questionId}"
)
@DeleteMapping
(
"/question/{questionId}"
)
public
Response
deleteQuestion
(
@PathVariable
(
"questionId"
)
String
questionId
){
public
Response
deleteQuestion
(
@PathVariable
(
"questionId"
)
String
questionId
,
@CurrentSubject
Subject
subject
){
questionService
.
deleteQuestion
(
questionId
);
try
{
questionService
.
deleteQuestion
(
questionId
,
(
String
)
subject
.
getId
());
return
Response
.
success
();
return
Response
.
success
();
}
catch
(
QuestionServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
}
/**
* 修改问题
* @param questionId 问题ID
* @param questionForm 问题表单
* @param result 校验信息
* @param subject 访问者信息
* @return default
*/
@ApiOperation
(
"修改问题"
)
@ApiOperation
(
"修改问题"
)
@PutMapping
(
"/question/{questionId}"
)
@PutMapping
(
"/question/{questionId}"
)
public
Response
modifyQuestion
(
@PathVariable
(
"questionId"
)
String
questionId
,
@RequestBody
@Valid
QuestionForm
questionForm
,
BindingResult
result
,
@CurrentSubject
Subject
subject
){
public
Response
modifyQuestion
(
@PathVariable
(
"questionId"
)
String
questionId
,
@RequestBody
@Valid
QuestionForm
questionForm
,
BindingResult
result
,
@CurrentSubject
Subject
subject
){
if
(
result
.
hasErrors
())
{
if
(
result
.
hasErrors
())
{
return
Response
.
fieldError
(
result
.
getFieldError
());
return
Response
.
fieldError
(
result
.
getFieldError
());
}
}
//将问题表单转换为问题对象
Question
question
=
new
Question
();
Question
question
=
new
Question
();
BeanUtils
.
copyProperties
(
questionForm
,
question
);
question
.
setCategoryId
(
Integer
.
valueOf
(
questionForm
.
getCategoryId
()));
//2.设置问题ID
question
.
setQuestionId
(
questionId
);
question
.
setQuestionId
(
questionId
);
//3.设置用户ID
question
.
setUserId
((
String
)
subject
.
getId
());
question
.
setUserId
((
String
)
subject
.
getId
());
question
.
setQuestionTitle
(
questionForm
.
getQuestionTitle
());
question
.
setCategoryId
(
Integer
.
valueOf
(
questionForm
.
getCategoryId
()));
question
.
setQuestionAbstract
(
questionForm
.
getQuestionAbstract
());
//4.祛除重复标签
HashSet
<
String
>
tags
=
QuestionUtils
.
toHashSet
(
questionForm
.
getTags
());
HashSet
<
String
>
tags
=
QuestionUtils
.
toHashSet
(
questionForm
.
getTags
());
//5.修改问题
try
{
try
{
questionService
.
modify
Question
(
question
,
questionForm
.
getQuestionDetail
(),
tags
);
questionService
.
update
Question
(
question
,
questionForm
.
getQuestionDetail
(),
tags
);
return
Response
.
success
();
return
Response
.
success
();
}
catch
(
QuestionServiceException
e
)
{
}
catch
(
QuestionServiceException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -92,11 +128,24 @@ public class QuestionApi {
...
@@ -92,11 +128,24 @@ public class QuestionApi {
}
}
}
}
/**
* 问题详情
* @param questionId 问题ID
* @return 问题详情
*/
@Anonymous
@ApiOperation
(
"问题详情"
)
@ApiOperation
(
"问题详情"
)
@GetMapping
(
"/question/{questionId}"
)
@GetMapping
(
"/question/{questionId}"
)
public
Response
questionDetails
(
@PathVariable
(
"questionId"
)
String
questionId
){
public
Response
questionDetails
(
@PathVariable
(
"questionId"
)
String
questionId
){
QuestionDetails
questionDetails
=
questionService
.
questionDetails
(
questionId
);
QuestionDetails
questionDetails
=
null
;
try
{
questionDetails
=
questionService
.
questionDetails
(
questionId
);
return
Response
.
success
(
questionDetails
);
return
Response
.
success
(
questionDetails
);
}
catch
(
QuestionServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
}
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/bean/QuestionDetails.java
View file @
75356962
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
bean
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
bean
;
import
cn.meteor.beyondclouds.modules.question.entity.Question
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
/**
/**
* @author 胡学良
* @author 胡学良
* @
dat
e 2020/1/31
* @
sinc
e 2020/1/31
*/
*/
@ApiModel
(
"问题详情"
)
@ApiModel
(
"问题详情"
)
@Data
@Data
public
class
QuestionDetails
{
public
class
QuestionDetails
extends
Question
{
@ApiModelProperty
(
"问题ID"
)
private
String
questionId
;
@ApiModelProperty
(
"用户ID"
)
private
String
userId
;
@ApiModelProperty
(
"标题"
)
private
String
questionTitle
;
@ApiModelProperty
(
"类别"
)
@ApiModelProperty
(
"类别"
)
private
String
category
;
private
String
category
;
@ApiModelProperty
(
"摘要"
)
private
String
questionAbstract
;
@ApiModelProperty
(
"详情"
)
@ApiModelProperty
(
"详情"
)
private
String
questionDetail
;
private
String
questionDetail
;
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/enums/QuestionErrorCode.java
View file @
75356962
...
@@ -4,13 +4,15 @@ import cn.meteor.beyondclouds.core.IErrorCode;
...
@@ -4,13 +4,15 @@ import cn.meteor.beyondclouds.core.IErrorCode;
/**
/**
* @author 胡学良
* @author 胡学良
* @
dat
e 2020/1/31
* @
sinc
e 2020/1/31
*/
*/
public
enum
QuestionErrorCode
implements
IErrorCode
{
public
enum
QuestionErrorCode
implements
IErrorCode
{
/**
/**
* 问题没有以?结尾
* 问题没有以?结尾
*/
*/
QUESTION_END_ERROR
(
3001
,
"问题没有以?结尾"
);
QUESTION_END_ERROR
(
3001
,
"问题没有以?结尾"
),
INCORRECT_CATEGORY
(
3002
,
"问题类别错误"
),
QUESTION_NOT_FOUND
(
3003
,
"找不到该问题"
);
private
long
code
;
private
long
code
;
private
String
msg
;
private
String
msg
;
...
@@ -30,5 +32,4 @@ public enum QuestionErrorCode implements IErrorCode {
...
@@ -30,5 +32,4 @@ public enum QuestionErrorCode implements IErrorCode {
return
msg
;
return
msg
;
}
}
public
enum
QUESTION_END_ERROR
{}
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/exception/QuestionServiceException.java
View file @
75356962
...
@@ -5,7 +5,7 @@ import cn.meteor.beyondclouds.core.exception.ServiceException;
...
@@ -5,7 +5,7 @@ import cn.meteor.beyondclouds.core.exception.ServiceException;
/**
/**
* @author 胡学良
* @author 胡学良
* @
dat
e 2020/1/31
* @
sinc
e 2020/1/31
*/
*/
public
class
QuestionServiceException
extends
ServiceException
{
public
class
QuestionServiceException
extends
ServiceException
{
public
QuestionServiceException
(
long
errorCode
,
String
errorMsg
)
{
public
QuestionServiceException
(
long
errorCode
,
String
errorMsg
)
{
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/form/QuestionForm.java
View file @
75356962
...
@@ -10,12 +10,14 @@ import javax.validation.constraints.Size;
...
@@ -10,12 +10,14 @@ import javax.validation.constraints.Size;
/**
/**
* @author 胡学良
* @author 胡学良
* @
dat
e 2020/1/31
* @
sinc
e 2020/1/31
*/
*/
@ApiModel
(
"发布
问题表单"
)
@ApiModel
(
value
=
"QuestionForm"
,
description
=
"
问题表单"
)
@Data
@Data
public
class
QuestionForm
{
public
class
QuestionForm
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"类别ID"
)
@ApiModelProperty
(
"类别ID"
)
@NotEmpty
(
message
=
"问题类别ID不能为空"
)
@NotEmpty
(
message
=
"问题类别ID不能为空"
)
private
String
categoryId
;
private
String
categoryId
;
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionService.java
View file @
75356962
...
@@ -24,31 +24,34 @@ public interface IQuestionService extends IService<Question> {
...
@@ -24,31 +24,34 @@ public interface IQuestionService extends IService<Question> {
* @param question 问题基本信息
* @param question 问题基本信息
* @param questionDetail 问题详细信息
* @param questionDetail 问题详细信息
* @param tags 问题标签
* @param tags 问题标签
* @throws QuestionServiceException
* @throws QuestionServiceException
问题业务异常
*/
*/
void
postQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
;
void
postQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
;
/**
/**
* 删除问题
* 删除问题
* @param questionId 问题ID
* @param questionId 问题ID
* @param userId 用户ID
* @throws QuestionServiceException 问题业务异常
*/
*/
void
deleteQuestion
(
String
questionId
)
;
void
deleteQuestion
(
String
questionId
,
String
userId
)
throws
QuestionServiceException
;
/**
/**
* 修改问题
* 修改问题
* @param question 问题基本信息
* @param question 问题基本信息
* @param questionDetail 问题详细信息
* @param questionDetail 问题详细信息
* @param tags 问题标签
* @param tags 问题标签
* @throws QuestionServiceException
* @throws QuestionServiceException
问题业务异常
*/
*/
void
modify
Question
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
;
void
update
Question
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
;
/**
/**
* 问题详情
* 问题详情
* @param questionId 问题ID
* @param questionId 问题ID
* @return 问题详情
* @return 问题详情
* @throws QuestionServiceException 问题业务异常
*/
*/
QuestionDetails
questionDetails
(
String
questionId
);
QuestionDetails
questionDetails
(
String
questionId
)
throws
QuestionServiceException
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
View file @
75356962
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
service
.
impl
;
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.question.bean.QuestionDetails
;
import
cn.meteor.beyondclouds.modules.question.bean.QuestionDetails
;
import
cn.meteor.beyondclouds.modules.question.entity.Question
;
import
cn.meteor.beyondclouds.modules.question.entity.*
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionExt
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionReply
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionTag
;
import
cn.meteor.beyondclouds.modules.question.enums.QuestionErrorCode
;
import
cn.meteor.beyondclouds.modules.question.enums.QuestionErrorCode
;
import
cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException
;
import
cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException
;
import
cn.meteor.beyondclouds.modules.question.mapper.QuestionMapper
;
import
cn.meteor.beyondclouds.modules.question.mapper.QuestionMapper
;
...
@@ -15,8 +12,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...
@@ -15,8 +12,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper
;
import
com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
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
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.StringUtils
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.Iterator
;
...
@@ -59,6 +59,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -59,6 +59,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
this
.
questionCategoryService
=
questionCategoryService
;
this
.
questionCategoryService
=
questionCategoryService
;
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
@Override
public
void
postQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
{
public
void
postQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
{
//1.检查问题标题是否以?结尾
//1.检查问题标题是否以?结尾
...
@@ -66,59 +67,93 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -66,59 +67,93 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_END_ERROR
);
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_END_ERROR
);
}
}
//2.创建问题信息
//2.检查问题分类是否存在
QuestionCategory
questionCategory
=
questionCategoryService
.
getById
(
question
.
getCategoryId
());
if
(
null
==
questionCategory
)
{
throw
new
QuestionServiceException
(
QuestionErrorCode
.
INCORRECT_CATEGORY
);
}
//3.保存问题信息
save
(
question
);
save
(
question
);
//
3.创建
问题扩展信息
//
4.保存
问题扩展信息
QuestionExt
questionExt
=
new
QuestionExt
();
QuestionExt
questionExt
=
new
QuestionExt
();
questionExt
.
setQuestionId
(
question
.
getQuestionId
());
questionExt
.
setQuestionId
(
question
.
getQuestionId
());
questionExt
.
setQuestionDetail
(
questionDetail
);
questionExt
.
setQuestionDetail
(
questionDetail
);
questionExtService
.
save
(
questionExt
);
questionExtService
.
save
(
questionExt
);
//
3.创建
问题标签信息
//
5.保存
问题标签信息
questionTagService
.
saveQuestionTag
(
tags
,
question
.
getQuestionId
());
questionTagService
.
saveQuestionTag
(
tags
,
question
.
getQuestionId
());
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
@Override
public
void
deleteQuestion
(
String
questionId
)
{
public
void
deleteQuestion
(
String
questionId
,
String
userId
)
throws
QuestionServiceException
{
//1.删除question表中的问题信息
//1.判断自己是否发布过此问题
removeById
(
questionId
);
QueryWrapper
<
Question
>
questionQueryWrapper
=
new
QueryWrapper
<>();
questionQueryWrapper
.
eq
(
"question_id"
,
questionId
)
.
eq
(
"user_id"
,
userId
);
Question
question
=
getOne
(
questionQueryWrapper
);
if
(
null
==
question
)
{
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_NOT_FOUND
);
}
//2.删除question-
ext表中的问题信息
//2.删除question-
tag表中关于该问题的标签
question
Ext
Service
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
question
Tag
Service
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//3.获取该问题的所有回复
//3.获取该问题的所有回复
List
<
QuestionReply
>
questionReplies
=
questionReplyService
.
list
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
List
<
QuestionReply
>
questionReplies
=
questionReplyService
.
list
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//4.删除question-reply表中关于该问题的所有回复
//4.删除question-reply-comment表中关于该问题的所有回复
questionReplyService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//5.删除question-reply-comment表中关于该问题的所有回复
for
(
QuestionReply
questionReply
:
questionReplies
){
for
(
QuestionReply
questionReply
:
questionReplies
){
questionReplyCommentService
.
remove
(
QuestionUtils
.
getWrapper
(
"reply_id"
,
questionReply
.
getReplyId
()));
questionReplyCommentService
.
remove
(
QuestionUtils
.
getWrapper
(
"reply_id"
,
questionReply
.
getReplyId
()));
}
}
//6.删除question-tag表中关于该问题的标签
//5.删除question-reply表中关于该问题的所有回复
questionTagService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
questionReplyService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//6.删除question-ext表中的问题信息
questionExtService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//7.删除question表中的问题信息
removeById
(
questionId
);
}
}
@Override
@Override
public
void
modifyQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
{
public
void
updateQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
{
//1.检查问题标题是否以?结尾
//1.判断自己是否发布过此问题
QueryWrapper
<
Question
>
questionQueryWrapper
=
new
QueryWrapper
<>();
questionQueryWrapper
.
eq
(
"question_id"
,
question
.
getQuestionId
())
.
eq
(
"user_id"
,
question
.
getUserId
());
Question
questionInDb
=
getOne
(
questionQueryWrapper
);
if
(
null
==
questionInDb
)
{
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_NOT_FOUND
);
}
//2.检查问题标题是否以?结尾
if
(!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_EN
)
&&
!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_CN
)){
if
(!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_EN
)
&&
!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_CN
)){
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_END_ERROR
);
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_END_ERROR
);
}
}
//3.检查问题分类是否存在
QuestionCategory
questionCategory
=
questionCategoryService
.
getById
(
question
.
getCategoryId
());
if
(
null
==
questionCategory
)
{
throw
new
QuestionServiceException
(
QuestionErrorCode
.
INCORRECT_CATEGORY
);
}
//2.更新问题信息
//2.更新问题信息
update
(
question
,
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
update
(
question
,
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
//3.更新问题扩展信息
//3.更新问题扩展信息
if
(!
StringUtils
.
isEmpty
(
questionDetail
))
{
QuestionExt
questionExt
=
new
QuestionExt
();
QuestionExt
questionExt
=
new
QuestionExt
();
questionExt
.
setQuestionId
(
question
.
getQuestionId
());
questionExt
.
setQuestionId
(
question
.
getQuestionId
());
questionExt
.
setQuestionDetail
(
questionDetail
);
questionExt
.
setQuestionDetail
(
questionDetail
);
UpdateWrapper
<
QuestionExt
>
updateWrapper
=
new
UpdateWrapper
<>();
UpdateWrapper
<
QuestionExt
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"question_id"
,
question
.
getQuestionId
());
updateWrapper
.
eq
(
"question_id"
,
question
.
getQuestionId
());
questionExtService
.
update
(
questionExt
,
updateWrapper
);
questionExtService
.
update
(
questionExt
,
updateWrapper
);
}
//4.更新问题标签
//4.更新问题标签
questionTagService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
questionTagService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
...
@@ -126,15 +161,19 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -126,15 +161,19 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
}
}
@Override
@Override
public
QuestionDetails
questionDetails
(
String
questionId
)
{
public
QuestionDetails
questionDetails
(
String
questionId
)
throws
QuestionServiceException
{
//1.获取问题基本信息
//1.获取问题基本信息
Question
question
=
getById
(
questionId
);
Question
question
=
getById
(
questionId
);
//2.获取问题扩展信息
//2.判断是否存在此问题
if
(
null
==
question
)
{
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_NOT_FOUND
);
}
//3.获取问题扩展信息
QuestionExt
questionExt
=
questionExtService
.
getOne
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
QuestionExt
questionExt
=
questionExtService
.
getOne
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//
3
.获取问题标签
//
4
.获取问题标签
List
<
QuestionTag
>
questionTags
=
questionTagService
.
list
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
List
<
QuestionTag
>
questionTags
=
questionTagService
.
list
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
StringBuilder
stringBuilder
=
new
StringBuilder
();
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
"["
);
stringBuilder
.
append
(
"["
);
...
@@ -145,12 +184,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
...
@@ -145,12 +184,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
stringBuilder
.
append
(
"]"
);
stringBuilder
.
append
(
"]"
);
String
tags
=
stringBuilder
.
toString
();
String
tags
=
stringBuilder
.
toString
();
//
4
.生成问题详情对象
//
5
.生成问题详情对象
QuestionDetails
questionDetails
=
new
QuestionDetails
();
QuestionDetails
questionDetails
=
new
QuestionDetails
();
questionDetails
.
setUserId
(
question
.
getUserId
());
BeanUtils
.
copyProperties
(
question
,
questionDetails
);
questionDetails
.
setQuestionId
(
question
.
getQuestionId
());
questionDetails
.
setQuestionTitle
(
question
.
getQuestionTitle
());
questionDetails
.
setQuestionAbstract
(
question
.
getQuestionAbstract
());
questionDetails
.
setQuestionDetail
(
questionExt
.
getQuestionDetail
());
questionDetails
.
setQuestionDetail
(
questionExt
.
getQuestionDetail
());
questionDetails
.
setTags
(
tags
);
questionDetails
.
setTags
(
tags
);
questionDetails
.
setCategory
(
questionCategoryService
.
getById
(
question
.
getCategoryId
()).
getCategory
());
questionDetails
.
setCategory
(
questionCategoryService
.
getById
(
question
.
getCategoryId
()).
getCategory
());
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionTagServiceImpl.java
View file @
75356962
...
@@ -3,8 +3,11 @@ package cn.meteor.beyondclouds.modules.question.service.impl;
...
@@ -3,8 +3,11 @@ package cn.meteor.beyondclouds.modules.question.service.impl;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionTag
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionTag
;
import
cn.meteor.beyondclouds.modules.question.mapper.QuestionTagMapper
;
import
cn.meteor.beyondclouds.modules.question.mapper.QuestionTagMapper
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionTagService
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionTagService
;
import
cn.meteor.beyondclouds.modules.tag.entity.Tag
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
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.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.HashSet
;
import
java.util.HashSet
;
...
@@ -21,14 +24,25 @@ import java.util.Iterator;
...
@@ -21,14 +24,25 @@ import java.util.Iterator;
@Service
@Service
public
class
QuestionTagServiceImpl
extends
ServiceImpl
<
QuestionTagMapper
,
QuestionTag
>
implements
IQuestionTagService
{
public
class
QuestionTagServiceImpl
extends
ServiceImpl
<
QuestionTagMapper
,
QuestionTag
>
implements
IQuestionTagService
{
private
ITagService
tagService
;
@Autowired
public
QuestionTagServiceImpl
(
ITagService
tagService
)
{
this
.
tagService
=
tagService
;
}
@Override
@Override
public
void
saveQuestionTag
(
HashSet
<
String
>
tags
,
String
questionId
)
{
public
void
saveQuestionTag
(
HashSet
<
String
>
tags
,
String
questionId
)
{
Iterator
<
String
>
iterator
=
tags
.
iterator
();
Iterator
<
String
>
iterator
=
tags
.
iterator
();
QuestionTag
questionTag
;
QuestionTag
questionTag
;
while
(
iterator
.
hasNext
()){
while
(
iterator
.
hasNext
()){
Tag
tag
=
tagService
.
getById
(
iterator
.
next
());
if
(
tag
==
null
||
tag
.
getTagType
()
!=
2
)
{
continue
;
}
questionTag
=
new
QuestionTag
();
questionTag
=
new
QuestionTag
();
questionTag
.
setQuestionId
(
questionId
);
questionTag
.
setQuestionId
(
questionId
);
questionTag
.
setTagId
(
iterator
.
next
());
questionTag
.
setTagId
(
tag
.
getTagId
());
save
(
questionTag
);
save
(
questionTag
);
}
}
}
}
...
...
src/main/java/cn/meteor/beyondclouds/modules/question/util/QuestionUtils.java
View file @
75356962
...
@@ -7,7 +7,7 @@ import java.util.HashSet;
...
@@ -7,7 +7,7 @@ import java.util.HashSet;
/**
/**
* @author 胡学良
* @author 胡学良
* @
dat
e 2020/1/31
* @
sinc
e 2020/1/31
*/
*/
public
class
QuestionUtils
{
public
class
QuestionUtils
{
...
...
src/main/java/cn/meteor/beyondclouds/modules/topic/api/TopicApi.java
View file @
75356962
...
@@ -7,6 +7,7 @@ import cn.meteor.beyondclouds.core.bean.Subject;
...
@@ -7,6 +7,7 @@ import cn.meteor.beyondclouds.core.bean.Subject;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.entity.Topic
;
import
cn.meteor.beyondclouds.modules.topic.form.CreateTopicForm
;
import
cn.meteor.beyondclouds.modules.topic.form.CreateTopicForm
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
cn.meteor.beyondclouds.modules.topic.service.ITopicService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
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
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -57,7 +58,6 @@ public class TopicApi {
...
@@ -57,7 +58,6 @@ public class TopicApi {
int
pageNo
=
pageForm
.
getPage
();
int
pageNo
=
pageForm
.
getPage
();
int
pageSize
=
pageForm
.
getSize
();
int
pageSize
=
pageForm
.
getSize
();
IPage
<
Topic
>
page
=
new
Page
<>(
pageNo
,
pageSize
);
IPage
<
Topic
>
page
=
new
Page
<>(
pageNo
,
pageSize
);
return
Response
.
success
(
iTopicService
.
page
(
page
));
return
Response
.
success
(
iTopicService
.
page
(
page
));
}
}
...
...
src/main/resources/application-prod.yml
View file @
75356962
...
@@ -3,7 +3,7 @@ spring:
...
@@ -3,7 +3,7 @@ spring:
driver-class-name
:
com.mysql.cj.jdbc.Driver
driver-class-name
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
username
:
root
password
:
1
00Centa30821%mysql
password
:
1
97442
swagger
:
swagger
:
enable
:
true
enable
:
true
...
...
src/main/resources/application.yml
View file @
75356962
...
@@ -3,7 +3,7 @@ spring:
...
@@ -3,7 +3,7 @@ spring:
driver-class-name
:
com.mysql.cj.jdbc.Driver
driver-class-name
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
username
:
root
password
:
1
00Centa30821%mysql
password
:
1
97442
swagger
:
swagger
:
enable
:
true
enable
:
true
...
...
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