龚焕茏
2024-05-11 0e0a3ceb71706110a9c03a2371c601ca049db003
feat:新增问答模块
6个文件已修改
9个文件已添加
338 ■■■■■ 已修改文件
src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/Feedback.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/FeedbackMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/QuestionAnswerMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java
@@ -15,7 +15,7 @@
 */
@RequiredArgsConstructor
@RestController("adminFeedBackController")
@RestController("AdminFeedBackController")
@RequestMapping("/api/admin/feedback")
public class FeedBackController extends BaseApiController {
src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java
New file
@@ -0,0 +1,76 @@
package com.mindskip.xzs.controller.admin;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.QuestionAnswer;
import com.mindskip.xzs.domain.vo.QuestionAnswerVO;
import com.mindskip.xzs.service.QuestionAnswerService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
 * @author gonghl
 * @since 2024/5/11 下午 3:57
 */
@RequiredArgsConstructor
@RestController("AdminQuestionAnswerController")
@RequestMapping("/api/admin/questionAnswer")
public class QuestionAnswerController extends BaseApiController {
    private final QuestionAnswerService questionAnswerService;
    /**
     * 保存、修改问答
     */
    @PostMapping("save")
    public RestResponse<String> saveQuestionAnswer(@RequestBody QuestionAnswer questionAnswer) {
        questionAnswerService.saveOrUpdate(questionAnswer);
        return RestResponse.ok("操作成功");
    }
    /**
     * 分页查询
     */
    @PostMapping("page")
    public RestResponse<PageInfo<QuestionAnswerVO>> page(@RequestBody QuestionAnswerVO questionAnswer) {
        return RestResponse.ok(questionAnswerService.questionAnswerPage(questionAnswer));
    }
    /**
     * 删除问答
     */
    @PostMapping("delete/{id}")
    public RestResponse<String> delete(@PathVariable Integer id) {
        questionAnswerService.removeById(id);
        return RestResponse.ok("操作成功");
    }
    /**
     * 查询问答
     */
    @PostMapping("query/{id}")
    public RestResponse<QuestionAnswer> query(@PathVariable Integer id) {
        return RestResponse.ok(questionAnswerService.getById(id));
    }
    /**
     * 修改问答
     */
    @PostMapping("update")
    public RestResponse<String> update(@RequestBody QuestionAnswer questionAnswer) {
        questionAnswerService.updateById(questionAnswer);
        return RestResponse.ok("操作成功");
    }
    /**
     * 修改问答状态
     */
    @PostMapping("updateStatus/{id}")
    public RestResponse<String> updateStatus(@PathVariable Integer id) {
        questionAnswerService.updateStatus(id);
        return RestResponse.ok("操作成功");
    }
}
src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java
@@ -16,7 +16,7 @@
 */
@RequiredArgsConstructor
@RestController("studentFeedBackController")
@RestController("StudentFeedBackController")
@RequestMapping("/api/student/feedback")
public class FeedBackController extends BaseApiController {
src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java
New file
@@ -0,0 +1,34 @@
package com.mindskip.xzs.controller.student;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.QuestionAnswer;
import com.mindskip.xzs.service.QuestionAnswerService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * @author gonghl
 * @since 2024/5/11 下午 3:57
 */
@RequiredArgsConstructor
@RestController("StudentQuestionAndAnswerController")
@RequestMapping("/api/student/questionAnswer")
public class QuestionAndAnswerController extends BaseApiController {
    private final QuestionAnswerService questionAnswerService;
    /**
     * 查询
     */
    @PostMapping("list")
    public RestResponse<List<QuestionAnswer>> page() {
        return RestResponse.ok(questionAnswerService.list());
    }
}
src/main/java/com/mindskip/xzs/domain/Feedback.java
@@ -1,14 +1,10 @@
package com.mindskip.xzs.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * @author gonghl
@@ -34,5 +30,8 @@
    private LocalDateTime fixTime;
    @TableLogic
    private Boolean deleted;
    private static final long serialVersionUID = 1L;
}
src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java
New file
@@ -0,0 +1,33 @@
package com.mindskip.xzs.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mindskip.xzs.domain.enums.QuestionAnswerStatusEnum;
import lombok.Data;
import java.io.Serializable;
/**
 * @author gonghl
 * @TableName t_question_answer
 */
@TableName(value = "t_question_answer")
@Data
public class QuestionAnswer implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String question;
    private String answer;
    private QuestionAnswerStatusEnum status;
    @TableLogic
    private Boolean deleted;
    private static final long serialVersionUID = 1L;
}
src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java
New file
@@ -0,0 +1,31 @@
package com.mindskip.xzs.domain.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
/**
 * 问答状态
 *
 * @author gonghl
 */
@Getter
public enum QuestionAnswerStatusEnum {
    ENABLE("1", "启用"),
    DISABLE("2", "禁用"),
    ;
    @EnumValue // 标明该字段存入数据库
    private final String code;
    @JsonValue // 标明在转JSON时使用该字段,即响应时
    private final String desc;
    QuestionAnswerStatusEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }
}
src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java
@@ -31,6 +31,8 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime fixTime;
    private Boolean deleted;
    private Integer pageIndex;
    private Integer pageSize;
src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java
New file
@@ -0,0 +1,30 @@
package com.mindskip.xzs.domain.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
/**
 * @author gonghl
 * @TableName t_question_answer
 */
@Data
public class QuestionAnswerVO implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String question;
    private String answer;
    private Boolean deleted;
    private static final long serialVersionUID = 1L;
    private Integer pageIndex;
    private Integer pageSize;
}
src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java
New file
@@ -0,0 +1,20 @@
package com.mindskip.xzs.repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mindskip.xzs.domain.QuestionAnswer;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author gonghl
 * @description 针对表【t_question_answer(问答)】的数据库操作Mapper
 * @createDate 2024-05-11 11:53:55
 * @Entity com.mindskip.xzs.questionAnswer.QuestionAnswer
 */
@Mapper
public interface QuestionAnswerMapper extends BaseMapper<QuestionAnswer> {
}
src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java
New file
@@ -0,0 +1,19 @@
package com.mindskip.xzs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.QuestionAnswer;
import com.mindskip.xzs.domain.vo.QuestionAnswerVO;
/**
 * @author gonghl
 * @description 针对表【t_question_answer(问答)】的数据库操作Service
 * @createDate 2024-05-11 11:53:55
 */
public interface QuestionAnswerService extends IService<QuestionAnswer> {
    PageInfo<QuestionAnswerVO> questionAnswerPage(QuestionAnswerVO questionAnswer);
    void updateStatus(Integer id);
}
src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java
New file
@@ -0,0 +1,58 @@
package com.mindskip.xzs.service.impl;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.QuestionAnswer;
import com.mindskip.xzs.domain.enums.QuestionAnswerStatusEnum;
import com.mindskip.xzs.domain.vo.QuestionAnswerVO;
import com.mindskip.xzs.repository.QuestionAnswerMapper;
import com.mindskip.xzs.service.QuestionAnswerService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
/**
 * @author gonghl
 * @description 针对表【t_question_answer(问答)】的数据库操作Service实现
 * @createDate 2024-05-11 11:53:55
 */
@Service
@RequiredArgsConstructor
public class QuestionAnswerServiceImpl extends ServiceImpl<QuestionAnswerMapper, QuestionAnswer> implements QuestionAnswerService {
    private final QuestionAnswerMapper questionAnswerMapper;
    @Override
    public void updateStatus(Integer id) {
        new LambdaUpdateChainWrapper<>(questionAnswerMapper)
                .eq(QuestionAnswer::getId, id)
                .set(QuestionAnswer::getStatus, "1".equals(getById(id).getStatus().getCode()) ? QuestionAnswerStatusEnum.DISABLE : QuestionAnswerStatusEnum.ENABLE)
                .update();
    }
    @Override
    public PageInfo<QuestionAnswerVO> questionAnswerPage(QuestionAnswerVO questionAnswerVO) {
        return PageHelper.startPage(questionAnswerVO.getPageIndex(), questionAnswerVO.getPageSize()).doSelectPageInfo(() ->
                new LambdaQueryChainWrapper<>(questionAnswerMapper)
                        .like(StringUtils.hasText(questionAnswerVO.getQuestion()), QuestionAnswer::getQuestion, questionAnswerVO.getQuestion())
                        .or(StringUtils.hasText(questionAnswerVO.getQuestion()), wrapper -> wrapper.like(QuestionAnswer::getAnswer, questionAnswerVO.getQuestion()))
                        .orderByDesc(QuestionAnswer::getId)
                        .list());
    }
    @Override
    public List<QuestionAnswer> list() {
        return new LambdaQueryChainWrapper<>(questionAnswerMapper)
                .eq(QuestionAnswer::getStatus, QuestionAnswerStatusEnum.ENABLE.getCode())
                .list();
    }
}
src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
@@ -28,7 +28,6 @@
        return PageHelper.startPage(tag.getPageIndex(), tag.getPageSize(), "id desc").doSelectPageInfo(() ->
                new LambdaQueryChainWrapper<>(baseMapper)
                        .like(StringUtils.hasText(tag.getName()), Tag::getName, tag.getName())
                        .eq(Tag::getDeleted, false)
                        .list()
        );
    }
src/main/resources/mapper/FeedbackMapper.xml
@@ -26,7 +26,8 @@
               c.real_name as userName
        from t_feedback a
                 left join t_text_content b on a.content_id = b.id
                 left join t_user c on a.user_id = c.id and deleted = 0
                 left join t_user c on a.user_id = c.id and c.deleted = 0
        where a.deleted = 0
        order by id desc
    </select>
</mapper>
src/main/resources/mapper/QuestionAnswerMapper.xml
New file
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mindskip.xzs.repository.QuestionAnswerMapper">
    <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.QuestionAnswer">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="question" column="question" jdbcType="VARCHAR"/>
        <result property="answer" column="answer" jdbcType="VARCHAR"/>
        <result property="deleted" column="deleted" jdbcType="BIT"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,question,answer,
        deleted
    </sql>
</mapper>