From 0e0a3ceb71706110a9c03a2371c601ca049db003 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期六, 11 五月 2024 16:57:31 +0800
Subject: [PATCH] feat:新增问答模块

---
 src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java                    |    1 
 src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java                  |   19 +++
 src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java          |    2 
 src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java |   34 +++++
 src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java            |    2 
 src/main/resources/mapper/QuestionAnswerMapper.xml                                 |   18 +++
 src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java         |   58 +++++++++
 src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java                |   20 +++
 src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java                          |   33 +++++
 src/main/resources/mapper/FeedbackMapper.xml                                       |    3 
 src/main/java/com/mindskip/xzs/domain/Feedback.java                                |    9 
 src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java      |   76 ++++++++++++
 src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java          |   31 +++++
 src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java                           |    2 
 src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java                     |   30 +++++
 15 files changed, 329 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java b/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java
index 94c4370..43180d2 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java
+++ b/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 {
 
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java b/src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java
new file mode 100644
index 0000000..b13a647
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java
@@ -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("鎿嶄綔鎴愬姛");
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java b/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java
index 14a5048..566c178 100644
--- a/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java
+++ b/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 {
 
diff --git a/src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java b/src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java
new file mode 100644
index 0000000..2feeac4
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java
@@ -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());
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/Feedback.java b/src/main/java/com/mindskip/xzs/domain/Feedback.java
index 7cbb4d0..e8ad14b 100644
--- a/src/main/java/com/mindskip/xzs/domain/Feedback.java
+++ b/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;
 }
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java b/src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java
new file mode 100644
index 0000000..1c29c77
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java
@@ -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;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java
new file mode 100644
index 0000000..7bd8a05
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java
@@ -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;
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java b/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java
index 2e3f6dd..cefa44c 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java
+++ b/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;
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java b/src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java
new file mode 100644
index 0000000..8991f5c
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java
@@ -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;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java
new file mode 100644
index 0000000..aa04b79
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java
@@ -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 閽堝琛ㄣ�恡_question_answer(闂瓟)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2024-05-11 11:53:55
+ * @Entity com.mindskip.xzs.questionAnswer.QuestionAnswer
+ */
+@Mapper
+public interface QuestionAnswerMapper extends BaseMapper<QuestionAnswer> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java b/src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java
new file mode 100644
index 0000000..4808151
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java
@@ -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 閽堝琛ㄣ�恡_question_answer(闂瓟)銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2024-05-11 11:53:55
+ */
+public interface QuestionAnswerService extends IService<QuestionAnswer> {
+
+    PageInfo<QuestionAnswerVO> questionAnswerPage(QuestionAnswerVO questionAnswer);
+
+    void updateStatus(Integer id);
+
+}
diff --git a/src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java
new file mode 100644
index 0000000..0694389
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java
@@ -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 閽堝琛ㄣ�恡_question_answer(闂瓟)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @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();
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
index c1f8c8b..9938353 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
+++ b/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()
         );
     }
diff --git a/src/main/resources/mapper/FeedbackMapper.xml b/src/main/resources/mapper/FeedbackMapper.xml
index 6b6c8d0..64180f6 100644
--- a/src/main/resources/mapper/FeedbackMapper.xml
+++ b/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>
diff --git a/src/main/resources/mapper/QuestionAnswerMapper.xml b/src/main/resources/mapper/QuestionAnswerMapper.xml
new file mode 100644
index 0000000..ab8011f
--- /dev/null
+++ b/src/main/resources/mapper/QuestionAnswerMapper.xml
@@ -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>

--
Gitblit v1.8.0