Commit fe724e60 by 胡学良

相关回答

parent 3be4b2ff
...@@ -255,5 +255,18 @@ public class QuestionApi { ...@@ -255,5 +255,18 @@ public class QuestionApi {
return Response.success(questionPageVO); return Response.success(questionPageVO);
} }
@Anonymous
@ApiOperation("相关问答")
@GetMapping("/question/{questionId}/recommends")
public Response<PageVO<Question>> questionRecommends(@Valid PageForm pageForm, @PathVariable("questionId") String questionId) {
try {
IPage<Question> questionPage = questionService.questionRecommends(pageForm.getPage(), pageForm.getSize(), questionId);
PageVO<Question> questionPageVO = new PageVO<>(questionPage);
return Response.success(questionPageVO);
} catch (QuestionServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
} }
...@@ -93,4 +93,15 @@ public interface IQuestionService extends IService<Question> { ...@@ -93,4 +93,15 @@ public interface IQuestionService extends IService<Question> {
*/ */
IPage<Question> getHotsQuestionsPage(Integer pageNumber, Integer pageSize); IPage<Question> getHotsQuestionsPage(Integer pageNumber, Integer pageSize);
/**
* 相关问答
* @param pageNumber 页数
* @param pageSize 页面大小
* @param questionId 问题ID
* @throws QuestionServiceException 问题业务异常
* @return 相关问答
*/
IPage<Question> questionRecommends(Integer pageNumber, Integer pageSize, String questionId) throws QuestionServiceException;
} }
package cn.meteor.beyondclouds.modules.question.service; package cn.meteor.beyondclouds.modules.question.service;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.entity.QuestionTag; import cn.meteor.beyondclouds.modules.question.entity.QuestionTag;
import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceException; import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceException;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.HashSet; import java.util.HashSet;
...@@ -26,4 +28,11 @@ public interface IQuestionTagService extends IService<QuestionTag> { ...@@ -26,4 +28,11 @@ public interface IQuestionTagService extends IService<QuestionTag> {
* @throws QuestionTagServiceException 问题业务异常 * @throws QuestionTagServiceException 问题业务异常
*/ */
List<Tag> getQuestionTags(String questionId) throws QuestionTagServiceException; List<Tag> getQuestionTags(String questionId) throws QuestionTagServiceException;
/**
* 根据标签ID集合查询相关问题
* @param tagIds 标签ID集合
* @return 相关问题ID
*/
List<String> getQuestionsByTagIds(List<String> tagIds);
} }
...@@ -32,6 +32,7 @@ import org.springframework.util.StringUtils; ...@@ -32,6 +32,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* <p> * <p>
...@@ -418,4 +419,34 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i ...@@ -418,4 +419,34 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
questionTagService.remove(questionTagQueryWrapper); questionTagService.remove(questionTagQueryWrapper);
} }
@Override
public IPage<Question> questionRecommends(Integer pageNumber, Integer pageSize, String questionId) throws QuestionServiceException{
//1.查询该问题是否存在
Question question = getById(questionId);
if (null == question) {
throw new QuestionServiceException(QuestionErrorCode.QUESTION_NOT_FOUND);
}
IPage<Question> page = new Page<>(pageNumber, pageSize);
//2.得到问题对应的tagIds
List<String> tagIds = questionTagService.list(QuestionUtils.getWrapper("question_id", question.getQuestionId()))
.stream().map(QuestionTag::getTagId).collect(Collectors.toList());
//如果问题引用标签不为空,则通过tagIds得到相关问答,否则,直接返回page
if (!CollectionUtils.isEmpty(tagIds)) {
//得到相关问答的问题ID
List<String> questionIds = questionTagService.getQuestionsByTagIds(tagIds);
//通过问题ID得到问题的具体信息
QueryWrapper<Question> questionQueryWrapper = new QueryWrapper<>();
questionQueryWrapper.in("q.question_id", questionIds)
.orderByDesc("q.create_time");
return questionMapper.selectPageWithTags(page, questionQueryWrapper);
}else {
return page;
}
}
} }
...@@ -4,12 +4,16 @@ import cn.meteor.beyondclouds.modules.question.entity.Question; ...@@ -4,12 +4,16 @@ import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.entity.QuestionTag; 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.QuestionTagServiceException; import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceException;
import cn.meteor.beyondclouds.modules.question.mapper.QuestionMapper;
import cn.meteor.beyondclouds.modules.question.mapper.QuestionTagMapper; import cn.meteor.beyondclouds.modules.question.mapper.QuestionTagMapper;
import cn.meteor.beyondclouds.modules.question.service.IQuestionService; import cn.meteor.beyondclouds.modules.question.service.IQuestionService;
import cn.meteor.beyondclouds.modules.question.service.IQuestionTagService; import cn.meteor.beyondclouds.modules.question.service.IQuestionTagService;
import cn.meteor.beyondclouds.modules.question.util.QuestionUtils; import cn.meteor.beyondclouds.modules.question.util.QuestionUtils;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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;
...@@ -35,9 +39,12 @@ public class QuestionTagServiceImpl extends ServiceImpl<QuestionTagMapper, Quest ...@@ -35,9 +39,12 @@ public class QuestionTagServiceImpl extends ServiceImpl<QuestionTagMapper, Quest
private IQuestionService questionService; private IQuestionService questionService;
private QuestionMapper questionMapper;
@Autowired @Autowired
public QuestionTagServiceImpl(ITagService tagService) { public QuestionTagServiceImpl(ITagService tagService, QuestionMapper questionMapper) {
this.tagService = tagService; this.tagService = tagService;
this.questionMapper = questionMapper;
} }
@Autowired @Autowired
...@@ -69,4 +76,11 @@ public class QuestionTagServiceImpl extends ServiceImpl<QuestionTagMapper, Quest ...@@ -69,4 +76,11 @@ public class QuestionTagServiceImpl extends ServiceImpl<QuestionTagMapper, Quest
return tagService.listByIds(tagIds); return tagService.listByIds(tagIds);
} }
} }
@Override
public List<String> getQuestionsByTagIds(List<String> tagIds) {
QueryWrapper<QuestionTag> questionTagQueryWrapper = new QueryWrapper<>();
questionTagQueryWrapper.in("tag_id", tagIds);
return list(questionTagQueryWrapper).stream().map(QuestionTag::getQuestionId).collect(Collectors.toList());
}
} }
...@@ -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: 100Centa30821%mysql password: 197442
mail: mail:
host: smtp.163.com host: smtp.163.com
username: 13546386889@163.com username: 13546386889@163.com
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment