jasonk5949 6 месяцев назад
Родитель
Сommit
6619742d18
18 измененных файлов с 843 добавлено и 16 удалено
  1. 132 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/controller/ForumChapterDiscussionController.java
  2. 75 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/entity/ForumChapterDiscussion.java
  3. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/enums/ForumChapterDiscussionEnum.java
  4. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/mapper/ForumChapterDiscussionMapper.java
  5. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/mapper/mapping/ForumChapterDiscussionMapper.xml
  6. 41 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionAddParam.java
  7. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionEditParam.java
  8. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionIdParam.java
  9. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionPageParam.java
  10. 81 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/service/ForumChapterDiscussionService.java
  11. 96 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/service/impl/ForumChapterDiscussionServiceImpl.java
  12. 10 4
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/controller/ForumPostInfoController.java
  13. 6 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/entity/ForumPostInfoVo.java
  14. 38 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ChapterDiscussionParam.java
  15. 8 2
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoAddParam.java
  16. 10 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoIdParam.java
  17. 6 4
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/ForumPostInfoService.java
  18. 139 6
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/impl/ForumPostInfoServiceImpl.java

+ 132 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/controller/ForumChapterDiscussionController.java

@@ -0,0 +1,132 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.forum.modular.chapterDiscussion.entity.ForumChapterDiscussion;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionAddParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionEditParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionIdParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionPageParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.service.ForumChapterDiscussionService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 论坛-章节讨论表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ */
+@Api(tags = "论坛-章节讨论表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumChapterDiscussionController {
+
+    @Resource
+    private ForumChapterDiscussionService forumChapterDiscussionService;
+
+    /**
+     * 获取论坛-章节讨论表分页
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取论坛-章节讨论表分页")
+    @SaCheckPermission("/forum/chapterDiscussion/page")
+    @GetMapping("/forum/chapterDiscussion/page")
+    public CommonResult<Page<ForumChapterDiscussion>> page(ForumChapterDiscussionPageParam forumChapterDiscussionPageParam) {
+        return CommonResult.data(forumChapterDiscussionService.page(forumChapterDiscussionPageParam));
+    }
+
+    /**
+     * 添加论坛-章节讨论表
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加论坛-章节讨论表")
+    @CommonLog("添加论坛-章节讨论表")
+    @SaCheckPermission("/forum/chapterDiscussion/add")
+    @PostMapping("/forum/chapterDiscussion/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumChapterDiscussionAddParam forumChapterDiscussionAddParam) {
+        forumChapterDiscussionService.add(forumChapterDiscussionAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑论坛-章节讨论表
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑论坛-章节讨论表")
+    @CommonLog("编辑论坛-章节讨论表")
+    @SaCheckPermission("/forum/chapterDiscussion/edit")
+    @PostMapping("/forum/chapterDiscussion/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumChapterDiscussionEditParam forumChapterDiscussionEditParam) {
+        forumChapterDiscussionService.edit(forumChapterDiscussionEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除论坛-章节讨论表
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除论坛-章节讨论表")
+    @CommonLog("删除论坛-章节讨论表")
+    @SaCheckPermission("/forum/chapterDiscussion/delete")
+    @PostMapping("/forum/chapterDiscussion/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                       CommonValidList<ForumChapterDiscussionIdParam> forumChapterDiscussionIdParamList) {
+        forumChapterDiscussionService.delete(forumChapterDiscussionIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取论坛-章节讨论表详情
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取论坛-章节讨论表详情")
+    @SaCheckPermission("/forum/chapterDiscussion/detail")
+    @GetMapping("/forum/chapterDiscussion/detail")
+    public CommonResult<ForumChapterDiscussion> detail(@Valid ForumChapterDiscussionIdParam forumChapterDiscussionIdParam) {
+        return CommonResult.data(forumChapterDiscussionService.detail(forumChapterDiscussionIdParam));
+    }
+
+}

+ 75 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/entity/ForumChapterDiscussion.java

@@ -0,0 +1,75 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-章节讨论表实体
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Getter
+@Setter
+@TableName("FORUM_CHAPTER_DISCUSSION")
+public class ForumChapterDiscussion {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String discussionId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 3)
+    private String courseId;
+
+    /** 课时id */
+    @ApiModelProperty(value = "课时id", position = 4)
+    private String chapterId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 5)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 6)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 7)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 8)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 9)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/enums/ForumChapterDiscussionEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.enums;
+
+import lombok.Getter;
+
+/**
+ * 论坛-章节讨论表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Getter
+public enum ForumChapterDiscussionEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumChapterDiscussionEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/mapper/ForumChapterDiscussionMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.chapterDiscussion.entity.ForumChapterDiscussion;
+
+/**
+ * 论坛-章节讨论表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+public interface ForumChapterDiscussionMapper extends BaseMapper<ForumChapterDiscussion> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/mapper/mapping/ForumChapterDiscussionMapper.xml

@@ -0,0 +1,5 @@
+<?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="vip.xiaonuo.forum.modular.chapterDiscussion.mapper.ForumChapterDiscussionMapper">
+
+</mapper>

+ 41 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionAddParam.java

@@ -0,0 +1,41 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 论坛-章节讨论表添加参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Getter
+@Setter
+public class ForumChapterDiscussionAddParam {
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 3)
+    private String courseId;
+
+    /** 课时id */
+    @ApiModelProperty(value = "课时id", position = 4)
+    private String chapterId;
+
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionEditParam.java

@@ -0,0 +1,51 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-章节讨论表编辑参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Getter
+@Setter
+public class ForumChapterDiscussionEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "discussionId不能为空")
+    private String discussionId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 课程id */
+    @ApiModelProperty(value = "课程id", position = 3)
+    private String courseId;
+
+    /** 课时id */
+    @ApiModelProperty(value = "课时id", position = 4)
+    private String chapterId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 论坛-章节讨论表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Getter
+@Setter
+public class ForumChapterDiscussionIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "discussionId不能为空")
+    private String discussionId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/param/ForumChapterDiscussionPageParam.java

@@ -0,0 +1,51 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-章节讨论表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Getter
+@Setter
+public class ForumChapterDiscussionPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+}

+ 81 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/service/ForumChapterDiscussionService.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.forum.modular.chapterDiscussion.entity.ForumChapterDiscussion;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionAddParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionEditParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionIdParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionPageParam;
+
+import java.util.List;
+
+/**
+ * 论坛-章节讨论表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+public interface ForumChapterDiscussionService extends IService<ForumChapterDiscussion> {
+
+    /**
+     * 获取论坛-章节讨论表分页
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    Page<ForumChapterDiscussion> page(ForumChapterDiscussionPageParam forumChapterDiscussionPageParam);
+
+    /**
+     * 添加论坛-章节讨论表
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    void add(ForumChapterDiscussionAddParam forumChapterDiscussionAddParam);
+
+    /**
+     * 编辑论坛-章节讨论表
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    void edit(ForumChapterDiscussionEditParam forumChapterDiscussionEditParam);
+
+    /**
+     * 删除论坛-章节讨论表
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    void delete(List<ForumChapterDiscussionIdParam> forumChapterDiscussionIdParamList);
+
+    /**
+     * 获取论坛-章节讨论表详情
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     */
+    ForumChapterDiscussion detail(ForumChapterDiscussionIdParam forumChapterDiscussionIdParam);
+
+    /**
+     * 获取论坛-章节讨论表详情
+     *
+     * @author 金吉龙
+     * @date  2025/08/05 10:22
+     **/
+    ForumChapterDiscussion queryEntity(String id);
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/chapterDiscussion/service/impl/ForumChapterDiscussionServiceImpl.java

@@ -0,0 +1,96 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.forum.modular.chapterDiscussion.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.forum.modular.chapterDiscussion.entity.ForumChapterDiscussion;
+import vip.xiaonuo.forum.modular.chapterDiscussion.mapper.ForumChapterDiscussionMapper;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionAddParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionEditParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionIdParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionPageParam;
+import vip.xiaonuo.forum.modular.chapterDiscussion.service.ForumChapterDiscussionService;
+
+import java.util.List;
+
+/**
+ * 论坛-章节讨论表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/08/05 10:22
+ **/
+@Service
+public class ForumChapterDiscussionServiceImpl extends ServiceImpl<ForumChapterDiscussionMapper, ForumChapterDiscussion> implements ForumChapterDiscussionService {
+
+
+    @Override
+    public Page<ForumChapterDiscussion> page(ForumChapterDiscussionPageParam forumChapterDiscussionPageParam) {
+        QueryWrapper<ForumChapterDiscussion> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumChapterDiscussionPageParam.getSortField(), forumChapterDiscussionPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumChapterDiscussionPageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumChapterDiscussionPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumChapterDiscussionPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumChapterDiscussion::getDiscussionId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ForumChapterDiscussionAddParam forumChapterDiscussionAddParam) {
+        ForumChapterDiscussion forumChapterDiscussion = BeanUtil.toBean(forumChapterDiscussionAddParam, ForumChapterDiscussion.class);
+        this.save(forumChapterDiscussion);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumChapterDiscussionEditParam forumChapterDiscussionEditParam) {
+        ForumChapterDiscussion forumChapterDiscussion = this.queryEntity(forumChapterDiscussionEditParam.getDiscussionId());
+        BeanUtil.copyProperties(forumChapterDiscussionEditParam, forumChapterDiscussion);
+        this.updateById(forumChapterDiscussion);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumChapterDiscussionIdParam> forumChapterDiscussionIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumChapterDiscussionIdParamList, ForumChapterDiscussionIdParam::getDiscussionId));
+    }
+
+    @Override
+    public ForumChapterDiscussion detail(ForumChapterDiscussionIdParam forumChapterDiscussionIdParam) {
+        return this.queryEntity(forumChapterDiscussionIdParam.getDiscussionId());
+    }
+
+    @Override
+    public ForumChapterDiscussion queryEntity(String id) {
+        ForumChapterDiscussion forumChapterDiscussion = this.getById(id);
+        if(ObjectUtil.isEmpty(forumChapterDiscussion)) {
+            throw new CommonException("论坛-章节讨论表不存在,id值为:{}", id);
+        }
+        return forumChapterDiscussion;
+    }
+
+}

+ 10 - 4
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/controller/ForumPostInfoController.java

@@ -29,10 +29,7 @@ import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.common.pojo.CommonValidList;
 import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfo;
 import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfoVo;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoAddParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoEditParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoIdParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoPageParam;
+import vip.xiaonuo.forum.modular.postinfo.param.*;
 import vip.xiaonuo.forum.modular.postinfo.service.ForumPostInfoService;
 
 import javax.annotation.Resource;
@@ -180,5 +177,14 @@ public class ForumPostInfoController {
         return forumPostInfoService.getCount(json);
     }
 
+    /**
+     * 根据课程id和课时id,查询相关帖子信息
+     */
+    @PostMapping("/forum/postinfo/getChapter")
+    public CommonResult<ForumPostInfoVo> getChapter(@RequestBody ChapterDiscussionParam chapterDiscussionParam) {
+        return CommonResult.data(forumPostInfoService.getChapter(chapterDiscussionParam));
+    }
+
+
 
 }

+ 6 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/entity/ForumPostInfoVo.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import vip.xiaonuo.forum.modular.chapterDiscussion.entity.ForumChapterDiscussion;
 import vip.xiaonuo.forum.modular.contentcorrection.entity.ForumContentCorrection;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReplyVo;
@@ -125,6 +126,11 @@ public class ForumPostInfoVo {
      */
     private ForumContentCorrection forumContentCorrection;
 
+    /**
+     * 章节讨论
+     */
+    private ForumChapterDiscussion forumChapterDiscussion;
+
     /** 定向用户 */
     @ApiModelProperty(value = "定向用户", position = 18)
     private String appointUser;

+ 38 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ChapterDiscussionParam.java

@@ -0,0 +1,38 @@
+package vip.xiaonuo.forum.modular.postinfo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ChapterDiscussionParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /**
+     * 课程id
+     */
+    private String courseId;
+
+    /**
+     * 章节id
+     */
+    private String chapterId;
+
+    /**
+     * 课程名称
+     */
+    private String courseName;
+
+    /**
+     * 章节名称
+     */
+    private String chapterName;
+
+
+}

+ 8 - 2
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoAddParam.java

@@ -15,6 +15,7 @@ package vip.xiaonuo.forum.modular.postinfo.param;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import vip.xiaonuo.forum.modular.chapterDiscussion.param.ForumChapterDiscussionAddParam;
 import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionAddParam;
 import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvAddParam;
 
@@ -73,8 +74,8 @@ public class ForumPostInfoAddParam {
     @ApiModelProperty(value = "最后回复时间", position = 11)
     private Date lastReplyTime;
 
-    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 */
-    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
+    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 3章节讨论 */
+    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错 3章节讨论", position = 17)
     private Integer postType;
 
     /** 定向用户 */
@@ -91,4 +92,9 @@ public class ForumPostInfoAddParam {
      */
     private ForumContentCorrectionAddParam contentCorrectionParam;
 
+    /**
+     * 章节讨论信息
+     */
+    private ForumChapterDiscussionAddParam chapterDiscussionParam;
+
 }

+ 10 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoIdParam.java

@@ -41,4 +41,14 @@ public class ForumPostInfoIdParam {
     @ApiModelProperty(value = "每页条数")
     private Integer size;
 
+    /**
+     * 课程id
+     */
+    private String courseId;
+
+    /**
+     * 章节id
+     */
+    private String chapterId;
+
 }

+ 6 - 4
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/ForumPostInfoService.java

@@ -18,10 +18,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfo;
 import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfoVo;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoAddParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoEditParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoIdParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoPageParam;
+import vip.xiaonuo.forum.modular.postinfo.param.*;
 
 import java.util.List;
 
@@ -112,4 +109,9 @@ public interface ForumPostInfoService extends IService<ForumPostInfo> {
      * 查询所有发帖数和回帖数
      */
     CommonResult<JSONObject> getCount(JSONObject json);
+
+    /**
+     * 根据课程id和课时id,查询相关帖子信息
+     */
+    ForumPostInfoVo getChapter(ChapterDiscussionParam chapterDiscussionParam);
 }

+ 139 - 6
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/impl/ForumPostInfoServiceImpl.java

@@ -30,15 +30,14 @@ import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.forum.modular.chapterDiscussion.entity.ForumChapterDiscussion;
+import vip.xiaonuo.forum.modular.chapterDiscussion.mapper.ForumChapterDiscussionMapper;
 import vip.xiaonuo.forum.modular.contentcorrection.entity.ForumContentCorrection;
 import vip.xiaonuo.forum.modular.contentcorrection.mapper.ForumContentCorrectionMapper;
 import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfo;
 import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfoVo;
 import vip.xiaonuo.forum.modular.postinfo.mapper.ForumPostInfoMapper;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoAddParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoEditParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoIdParam;
-import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoPageParam;
+import vip.xiaonuo.forum.modular.postinfo.param.*;
 import vip.xiaonuo.forum.modular.postinfo.service.ForumPostInfoService;
 import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
 import vip.xiaonuo.forum.modular.postlike.service.ForumPostLikeService;
@@ -98,6 +97,9 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
     @Lazy
     private ForumPostLikeService forumPostLikeService;
 
+    @Resource
+    private ForumChapterDiscussionMapper forumChapterDiscussionMapper;
+
 
     @Override
     public Page<ForumPostInfo> page(ForumPostInfoPageParam forumPostInfoPageParam) {
@@ -110,7 +112,7 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
         if (StringUtils.isNotBlank(forumPostInfoPageParam.getTypeId())) {
             queryWrapper.lambda().eq(ForumPostInfo::getTypeId, forumPostInfoPageParam.getTypeId());
         }
-        // 帖子类型 0普通帖子 1技术支持 2内容纠错
+        // 帖子类型 0普通帖子 1技术支持 2内容纠错 3章节讨论
         if (forumPostInfoPageParam.getPostType() != null) {
             queryWrapper.lambda().eq(ForumPostInfo::getPostType, forumPostInfoPageParam.getPostType());
         }
@@ -183,7 +185,7 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
             forumPostInfo.setPostContent(postContent);
             // 存储基础表
             this.save(forumPostInfo);
-            // 区分出是普通帖子、还是技术支持帖子、内容纠错帖子 0普通帖子 1技术支持 2内容纠错
+            // 区分出是普通帖子、还是技术支持帖子、内容纠错帖子 0普通帖子 1技术支持 2内容纠错 3章节讨论
             if (forumPostInfo.getPostType() == 0) {
                 // 普通帖子直接存储
                 // 普通帖子暂时不做其他处理
@@ -197,6 +199,11 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
                 ForumContentCorrection forumContentCorrection = BeanUtil.toBean(forumPostInfoAddParam.getContentCorrectionParam(), ForumContentCorrection.class);
                 forumContentCorrection.setPostId(uuid);
                 forumContentCorrectionMapper.insert(forumContentCorrection);
+            } else if (forumPostInfo.getPostType() == 3) {
+                // 章节讨论帖子,需要额外存储课程id,课时id
+                ForumChapterDiscussion forumChapterDiscussion = BeanUtil.toBean(forumPostInfoAddParam.getChapterDiscussionParam(), ForumChapterDiscussion.class);
+                forumChapterDiscussion.setPostId(uuid);
+                forumChapterDiscussionMapper.insert(forumChapterDiscussion);
             } else {
                 return CommonResult.error("帖子类型不正确");
             }
@@ -330,6 +337,13 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
             if (forumContentCorrection != null) {
                 forumPostInfoVo.setForumContentCorrection(forumContentCorrection);
             }
+        } else if (forumPostInfoVo.getPostType() == 3) {
+            QueryWrapper<ForumChapterDiscussion> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ForumChapterDiscussion::getPostId, forumPostInfoVo.getPostId());
+            ForumChapterDiscussion forumChapterDiscussion = forumChapterDiscussionMapper.selectOne(queryWrapper);
+            if (forumChapterDiscussion != null) {
+                forumPostInfoVo.setForumChapterDiscussion(forumChapterDiscussion);
+            }
         }
         // 关联被指向的用户
         if (forumPostInfoVo.getAppointUser() != null) {
@@ -587,6 +601,125 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
         }
     }
 
+    @Override
+    public ForumPostInfoVo getChapter(ChapterDiscussionParam chapterDiscussionParam) {
+        // 先根据课程id和课时id查询是否有此帖子,如果没有需要自动新建一个帖子
+        String postId;
+        QueryWrapper<ForumChapterDiscussion> chapterDiscussionQueryWrapper = new QueryWrapper<>();
+        chapterDiscussionQueryWrapper.lambda().eq(ForumChapterDiscussion::getChapterId, chapterDiscussionParam.getChapterId());
+        chapterDiscussionQueryWrapper.lambda().eq(ForumChapterDiscussion::getCourseId, chapterDiscussionParam.getCourseId());
+        ForumChapterDiscussion dbChapterDiscussion = forumChapterDiscussionMapper.selectOne(chapterDiscussionQueryWrapper);
+        // 如果没有新建帖子,如果有关联出帖子id
+        if (dbChapterDiscussion == null) {
+            postId = addChapterPost(chapterDiscussionParam);
+        } else {
+            postId = dbChapterDiscussion.getPostId();
+        }
+        // 查询和转换帖子基础信息
+        ForumPostInfo forumPostInfo = this.queryEntity(postId);
+        ForumPostInfoVo forumPostInfoVo = BeanUtil.toBean(forumPostInfo, ForumPostInfoVo.class);
+//        // 关联分类名称
+//        ForumPostType forumPostType = forumPostTypeMapper.selectById(forumPostInfoVo.getTypeId());
+//        if (ObjectUtil.isNotNull(forumPostType)) {
+//            forumPostInfoVo.setTypeName(forumPostType.getTypeName());
+//        }
+//        // 关联发帖用户的信息
+//        JSONObject user = sysUserApi.getUserByIdWithoutException(forumPostInfo.getUserId());
+//        if (user != null) {
+//            forumPostInfoVo.setUserNickName(user.getStr("name"));
+//            forumPostInfoVo.setUserAvatar(user.getStr("avatar"));
+//        }
+        // 关联最后发帖用户的信息
+        JSONObject lastReplyUser = sysUserApi.getUserByIdWithoutException(forumPostInfo.getLastReplyUserId());
+        if (lastReplyUser != null) {
+            forumPostInfoVo.setLastReplyUserNickName(lastReplyUser.getStr("name"));
+            forumPostInfoVo.setLastReplyUserAvatar(lastReplyUser.getStr("avatar"));
+        }
+        // 校验此条帖子是否为自己的
+//        if (forumPostInfo.getUserId().equals(StpLoginUserUtil.getLoginUser().getId())) {
+//            forumPostInfoVo.setIsSelf(1);
+//        } else {
+//            forumPostInfoVo.setIsSelf(0);
+//        }
+        // 查询是否点赞
+        QueryWrapper<ForumPostLike> queryWrapper3 = new QueryWrapper<>();
+        queryWrapper3.lambda().eq(ForumPostLike::getTargetId, forumPostInfoVo.getPostId());
+        queryWrapper3.lambda().eq(ForumPostLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        long count = forumPostLikeService.count(queryWrapper3);
+        if (count > 0) {
+            forumPostInfoVo.setIsLike(1);
+        } else {
+            forumPostInfoVo.setIsLike(0);
+        }
+        // 查询详情的同时,给帖子增加浏览量和热度
+        forumPostInfo.setViewCount(forumPostInfo.getViewCount() + 1);
+        this.updateById(forumPostInfo);
+        // 查询帖子回复信息
+        ForumPostReplyPageParam forumPostReplyPageParam = new ForumPostReplyPageParam();
+        forumPostReplyPageParam.setCurrent(chapterDiscussionParam.getCurrent());
+        forumPostReplyPageParam.setSize(chapterDiscussionParam.getSize());
+        forumPostReplyPageParam.setPostId(forumPostInfoVo.getPostId());
+        Page<ForumPostReply> page = forumPostReplyService.page(forumPostReplyPageParam);
+        forumPostInfoVo.setReplyList(page);
+        // 如果是技术支持或内容纠错,需要关联对应的
+        if (forumPostInfoVo.getPostType() == 1) {
+            QueryWrapper<ForumSupportEnv> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ForumSupportEnv::getPostId, forumPostInfoVo.getPostId());
+            ForumSupportEnv forumSupportEnv = forumSupportEnvMapper.selectOne(queryWrapper);
+            if (forumSupportEnv != null) {
+                forumPostInfoVo.setForumSupportEnv(forumSupportEnv);
+            }
+        } else if (forumPostInfoVo.getPostType() == 2) {
+            QueryWrapper<ForumContentCorrection> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ForumContentCorrection::getPostId, forumPostInfoVo.getPostId());
+            ForumContentCorrection forumContentCorrection = forumContentCorrectionMapper.selectOne(queryWrapper);
+            if (forumContentCorrection != null) {
+                forumPostInfoVo.setForumContentCorrection(forumContentCorrection);
+            }
+        } else if (forumPostInfoVo.getPostType() == 3) {
+            QueryWrapper<ForumChapterDiscussion> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ForumChapterDiscussion::getPostId, forumPostInfoVo.getPostId());
+            ForumChapterDiscussion forumChapterDiscussion = forumChapterDiscussionMapper.selectOne(queryWrapper);
+            if (forumChapterDiscussion != null) {
+                forumPostInfoVo.setForumChapterDiscussion(forumChapterDiscussion);
+            }
+        }
+        // 关联被指向的用户
+//        if (forumPostInfoVo.getAppointUser() != null) {
+//            String appointUser = forumPostInfoVo.getAppointUser();
+//            StringBuffer sb = new StringBuffer();
+//            String[] split = appointUser.split(",");
+//            for (int i = 0; i < split.length; i++) {
+//                JSONObject userByIdWithoutException = sysUserApi.getUserByIdWithoutException(split[i]);
+//                if (i != split.length - 1) {
+//                    sb.append(userByIdWithoutException.getStr("name")).append(",");
+//                } else {
+//                    sb.append(userByIdWithoutException.getStr("name"));
+//                }
+//            }
+//            forumPostInfoVo.setAppointUser(sb.toString());
+//        }
+        return forumPostInfoVo;
+    }
+
+    /**
+     * 自动创建章节讨论类型的帖子
+     */
+    public String addChapterPost(ChapterDiscussionParam chapterDiscussionParam) {
+        String uuid = IdUtil.fastSimpleUUID();
+        ForumPostInfo forumPostInfo = new ForumPostInfo();
+        forumPostInfo.setPostType(3);
+        forumPostInfo.setPostId(uuid);
+        forumPostInfo.setPostTitle("课程:"+chapterDiscussionParam.getCourseName()+" 章节:"+chapterDiscussionParam.getChapterName());
+        // 存储基础表
+        this.save(forumPostInfo);
+        // 区分出是普通帖子、还是技术支持帖子、内容纠错帖子 0普通帖子 1技术支持 2内容纠错 3章节讨论
+        // 章节讨论帖子,需要额外存储课程id,课时id
+        ForumChapterDiscussion forumChapterDiscussion = BeanUtil.toBean(chapterDiscussionParam, ForumChapterDiscussion.class);
+        forumChapterDiscussion.setPostId(uuid);
+        forumChapterDiscussionMapper.insert(forumChapterDiscussion);
+        return uuid;
+    }
 
     public static List<String> getDatesBetween(String startDateStr, String endDateStr) {
         // 定义日期格式