Commit 1c3d1ee6 by 段启岩

添加问题类别、标签、详细信息

parent 6fe11361
......@@ -18,13 +18,6 @@ import org.apache.ibatis.annotations.Param;
public interface BlogMapper extends BaseMapper<Blog> {
/**
* 分页查询博客获取标签
* @param page
* @return
*/
IPage<Blog> selectPageWithTags(IPage<Blog> page);
/**
* 根据查询条件分页查询博客获取标签
* @param page
* @param queryWrapper
......
......@@ -8,7 +8,6 @@ import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.bean.Subject;
import cn.meteor.beyondclouds.modules.question.bean.QuestionDetails;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.entity.QuestionReply;
import cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException;
import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceException;
import cn.meteor.beyondclouds.modules.question.form.QuestionForm;
......@@ -21,13 +20,11 @@ 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.data.domain.Page;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
/**
......@@ -66,7 +63,7 @@ public class QuestionApi {
//将问题表单转换为问题对象
Question question = new Question();
BeanUtils.copyProperties(questionForm,question);
question.setCategoryId(Integer.valueOf(questionForm.getCategoryId()));
question.setCategoryId(questionForm.getCategoryId());
//设置用户ID(问题发布者ID)
question.setUserId((String) subject.getId());
......@@ -222,10 +219,10 @@ public class QuestionApi {
*/
@ApiOperation("我参与的问答列表")
@GetMapping("/my/question/participated")
public Response<PageVO<QuestionReply>> getMyParticipateQuestions(@Valid PageForm pageForm, @CurrentSubject Subject subject) {
public Response<PageVO<Question>> getMyParticipateQuestions(@Valid PageForm pageForm, @CurrentSubject Subject subject) {
//获取我的列表并返回
IPage<QuestionReply> myParticipateQuestionReplyPage = questionService.getUserParticipateQuestionReplyPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
PageVO<QuestionReply> questionReplyPageVO = new PageVO<>(myParticipateQuestionReplyPage);
IPage<Question> questionPage = questionService.getUserParticipatePage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
PageVO<Question> questionReplyPageVO = new PageVO<>(questionPage);
return Response.success(questionReplyPageVO);
}
......@@ -254,10 +251,10 @@ public class QuestionApi {
@Anonymous
@ApiOperation("用户参与的问答列表")
@GetMapping("/user/{userId}/question/participated")
public Response<PageVO<QuestionReply>> getUserParticipateQuestions(@Valid PageForm pageForm, @PathVariable("userId") String userId) {
public Response<PageVO<Question>> getUserParticipateQuestions(@Valid PageForm pageForm, @PathVariable("userId") String userId) {
//获取用户参与的问答列表并返回
IPage<QuestionReply> userParticipateQuestionReplyPage = questionService.getUserParticipateQuestionReplyPage(pageForm.getPage(), pageForm.getSize(), userId);
PageVO<QuestionReply> questionReplyPageVO = new PageVO<>(userParticipateQuestionReplyPage);
IPage<Question> userParticipateQuestion = questionService.getUserParticipatePage(pageForm.getPage(), pageForm.getSize(), userId);
PageVO<Question> questionReplyPageVO = new PageVO<>(userParticipateQuestion);
return Response.success(questionReplyPageVO);
}
......
package cn.meteor.beyondclouds.modules.question.bean;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author 胡学良
* @since 2020/1/31
......@@ -17,16 +13,6 @@ import java.util.List;
@Data
public class QuestionDetails extends Question {
@ApiModelProperty("类别")
private String category;
@ApiModelProperty("详情")
private String questionDetail;
@ApiModelProperty("标签")
private List<Tag> tags;
@ApiModelProperty("话题")
private List<Topic> topics;
}
package cn.meteor.beyondclouds.modules.question.entity;
import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* <p>
* 问题表
......@@ -35,15 +41,26 @@ public class Question implements Serializable {
@ApiModelProperty(value = "问题类别ID")
private Integer categoryId;
@ApiModelProperty(value = "问题类别名称")
private String category;
@ApiModelProperty(value = "问题标题")
private String questionTitle;
@ApiModelProperty(value = "问题摘要")
private String questionAbstract;
private LocalDateTime createTime;
private Date createTime;
private Date updateTime;
@JsonInclude(JsonInclude.Include.NON_NULL)
@TableField(exist = false)
private List<Tag> tags;
private LocalDateTime updateTime;
@JsonInclude(JsonInclude.Include.NON_NULL)
@TableField(exist = false)
private List<Topic> topics;
}
......@@ -2,11 +2,10 @@ package cn.meteor.beyondclouds.modules.question.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
......@@ -21,8 +20,8 @@ public class QuestionForm {
private static final long serialVersionUID=1L;
@ApiModelProperty("类别ID")
@NotEmpty(message = "问题类别ID不能为空")
private String categoryId;
@NotNull(message = "问题类别ID不能为空")
private Integer categoryId;
@ApiModelProperty("标题")
@NotEmpty(message = "问题标题不能为空")
......
package cn.meteor.beyondclouds.modules.question.mapper;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
......@@ -12,5 +18,19 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @since 2020-01-30
*/
public interface QuestionMapper extends BaseMapper<Question> {
/**
* 根据查询条件分页查询问题并获取标签
* @param page
* @param queryWrapper
* @return
*/
IPage<Question> selectPageWithTags(IPage<Question> page, @Param(Constants.WRAPPER) QueryWrapper<?> queryWrapper);
/**
* 批量查询并获取标签
* @param questionIds
* @return
*/
List<Question> listByIdsWithTags(@Param("questionIds") List<String> questionIds);
}
......@@ -2,6 +2,8 @@ package cn.meteor.beyondclouds.modules.question.mapper;
import cn.meteor.beyondclouds.modules.question.entity.QuestionReply;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Select;
/**
* <p>
......@@ -13,4 +15,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface QuestionReplyMapper extends BaseMapper<QuestionReply> {
/**
* 获取参与的问题ID的分页
* @param page
* @param userId
* @return
*/
@Select("select DISTINCT(question_id) from (SELECT * from question_reply where user_id=#{userId} order by create_time desc) t")
IPage<String> participateQuestionIdPage(IPage<String> page, String userId);
}
......@@ -2,4 +2,56 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.meteor.beyondclouds.modules.question.mapper.QuestionMapper">
<resultMap id="blogWithTagsResultMap" type="cn.meteor.beyondclouds.modules.question.entity.Question">
<id property="questionId" column="question_id"/>
<result property="userId" column="user_id"/>
<result property="categoryId" column="category_id"/>
<result property="category" column="category"/>
<result property="questionTitle" column="question_title"/>
<result property="questionAbstract" column="question_abstract"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<collection property="tags" ofType="cn.meteor.beyondclouds.modules.tag.entity.Tag">
<id property="tagId" column="tag_id"/>
<result property="tagName" column="tag_name"/>
<result property="tagType" column="tag_type"/>
</collection>
</resultMap>
<select id="selectPageWithTags" resultMap="blogWithTagsResultMap">
select
q.*,
t.tag_id,
t.tag_name,
t.tag_type,
t.create_time,
t.update_time
from question q
left join question_tag qt
on q.question_id = qt.question_id
left join tag t
on t.tag_id = qt.tag_id
<if test="ew != null and ew.sqlSegment != null">
where ${ew.sqlSegment}
</if>
</select>
<select id="listByIdsWithTags" resultMap="blogWithTagsResultMap">
select
q.*,
t.tag_id,
t.tag_name,
t.tag_type,
t.create_time,
t.update_time
from question q
left join question_tag qt
on q.question_id = qt.question_id
left join tag t
on t.tag_id = qt.tag_id
where q.question_id in
<foreach collection="questionIds" item="questionId" index="index" open="(" close=")" separator=",">
#{questionId}
</foreach>
</select>
</mapper>
......@@ -4,7 +4,6 @@ import cn.meteor.beyondclouds.modules.question.entity.QuestionReply;
import cn.meteor.beyondclouds.modules.question.exception.QuestionReplyServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import io.swagger.models.auth.In;
/**
* <p>
......@@ -51,4 +50,12 @@ public interface IQuestionReplyService extends IService<QuestionReply> {
* @throws QuestionReplyServiceException 问题回复业务异常
*/
void deleteReply(String replyId, String userId) throws QuestionReplyServiceException;
/**
* 获取用户参加过的问题的ID分页列表
* @param page
* @param userId
* @return
*/
IPage<String> participateQuestionIdPage(IPage<String> page, String userId);
}
......@@ -2,8 +2,6 @@ package cn.meteor.beyondclouds.modules.question.service;
import cn.meteor.beyondclouds.modules.question.bean.QuestionDetails;
import cn.meteor.beyondclouds.modules.question.entity.Question;
import cn.meteor.beyondclouds.modules.question.entity.QuestionReply;
import cn.meteor.beyondclouds.modules.question.exception.QuestionReplyServiceException;
import cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException;
import cn.meteor.beyondclouds.modules.question.exception.QuestionTagServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -84,6 +82,6 @@ public interface IQuestionService extends IService<Question> {
* @param userId 用户ID
* @return 分页对象
*/
IPage<QuestionReply> getUserParticipateQuestionReplyPage(Integer pageNumber, Integer pageSize, String userId);
IPage<Question> getUserParticipatePage(Integer pageNumber, Integer pageSize, String userId);
}
......@@ -18,6 +18,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 问题回复表 服务实现类
......@@ -35,12 +37,19 @@ public class QuestionReplyServiceImpl extends ServiceImpl<QuestionReplyMapper, Q
private IQuestionReplyCommentService questionReplyCommentService;
private QuestionReplyMapper questionReplyMapper;
@Autowired
public void setQuestionService(IQuestionService questionService) {
this.questionService = questionService;
}
@Autowired
public void setQuestionReplyMapper(QuestionReplyMapper questionReplyMapper) {
this.questionReplyMapper = questionReplyMapper;
}
@Autowired
public void setQuestionReplyCommentService(IQuestionReplyCommentService questionReplyCommentService) {
this.questionReplyCommentService = questionReplyCommentService;
}
......@@ -134,4 +143,9 @@ public class QuestionReplyServiceImpl extends ServiceImpl<QuestionReplyMapper, Q
questionReplyCommentService.remove(QuestionUtils.getWrapper("reply_id",replyId));
removeById(replyId);
}
@Override
public IPage<String> participateQuestionIdPage(IPage<String> page, String userId) {
return questionReplyMapper.participateQuestionIdPage(page, userId);
}
}
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