Просмотр исходного кода

1.在线论坛功能相关接口 50%

jasonk5949 7 месяцев назад
Родитель
Сommit
24e5eb7c73
96 измененных файлов с 6058 добавлено и 0 удалено
  1. 14 0
      pom.xml
  2. 5 0
      snowy-modules/snowy-web-app/pom.xml
  3. 3 0
      snowy-plugin/pom.xml
  4. 25 0
      snowy-plugin/snowy-plugin-forum/pom.xml
  5. 24 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-api/pom.xml
  6. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/pom.xml
  7. 132 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/controller/ForumContentCorrectionController.java
  8. 75 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/entity/ForumContentCorrection.java
  9. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/enums/ForumContentCorrectionEnum.java
  10. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/mapper/ForumContentCorrectionMapper.java
  11. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/mapper/mapping/ForumContentCorrectionMapper.xml
  12. 46 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionAddParam.java
  13. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionEditParam.java
  14. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionIdParam.java
  15. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionPageParam.java
  16. 81 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/service/ForumContentCorrectionService.java
  17. 96 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/service/impl/ForumContentCorrectionServiceImpl.java
  18. 129 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/controller/ForumPostInfoController.java
  19. 148 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/entity/ForumPostInfo.java
  20. 142 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/entity/ForumPostInfoVo.java
  21. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/enums/ForumPostInfoEnum.java
  22. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/mapper/ForumPostInfoMapper.java
  23. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/mapper/mapping/ForumPostInfoMapper.xml
  24. 94 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoAddParam.java
  25. 87 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoEditParam.java
  26. 44 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoIdParam.java
  27. 65 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoPageParam.java
  28. 83 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/ForumPostInfoService.java
  29. 299 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/impl/ForumPostInfoServiceImpl.java
  30. 138 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/controller/ForumPostLikeController.java
  31. 75 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/entity/ForumPostLike.java
  32. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/enums/ForumPostLikeEnum.java
  33. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/mapper/ForumPostLikeMapper.java
  34. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/mapper/mapping/ForumPostLikeMapper.xml
  35. 46 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikeAddParam.java
  36. 50 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikeEditParam.java
  37. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikeIdParam.java
  38. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikePageParam.java
  39. 89 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/service/ForumPostLikeService.java
  40. 164 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/service/impl/ForumPostLikeServiceImpl.java
  41. 129 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/controller/ForumPostReplyController.java
  42. 114 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/entity/ForumPostReply.java
  43. 64 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/entity/ForumPostReplyVo.java
  44. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/enums/ForumPostReplyEnum.java
  45. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/mapper/ForumPostReplyMapper.java
  46. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/mapper/mapping/ForumPostReplyMapper.xml
  47. 54 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyAddParam.java
  48. 59 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyEditParam.java
  49. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyIdParam.java
  50. 56 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyPageParam.java
  51. 82 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/service/ForumPostReplyService.java
  52. 229 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/service/impl/ForumPostReplyServiceImpl.java
  53. 141 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/controller/ForumPostTypeController.java
  54. 71 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/entity/ForumPostType.java
  55. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/enums/ForumPostTypeEnum.java
  56. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/mapper/ForumPostTypeMapper.java
  57. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/mapper/mapping/ForumPostTypeMapper.xml
  58. 42 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypeAddParam.java
  59. 47 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypeEditParam.java
  60. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypeIdParam.java
  61. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypePageParam.java
  62. 81 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/service/ForumPostTypeService.java
  63. 96 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/service/impl/ForumPostTypeServiceImpl.java
  64. 132 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/controller/ForumSensitivityController.java
  65. 67 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/entity/ForumSensitivity.java
  66. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/enums/ForumSensitivityEnum.java
  67. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/mapper/ForumSensitivityMapper.java
  68. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/mapper/mapping/ForumSensitivityMapper.xml
  69. 38 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityAddParam.java
  70. 43 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityEditParam.java
  71. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityIdParam.java
  72. 55 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityPageParam.java
  73. 81 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/service/ForumSensitivityService.java
  74. 99 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/service/impl/ForumSensitivityServiceImpl.java
  75. 132 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/controller/ForumSensitivityRecordController.java
  76. 79 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/entity/ForumSensitivityRecord.java
  77. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/enums/ForumSensitivityRecordEnum.java
  78. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/mapper/ForumSensitivityRecordMapper.java
  79. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/mapper/mapping/ForumSensitivityRecordMapper.xml
  80. 50 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordAddParam.java
  81. 55 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordEditParam.java
  82. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordIdParam.java
  83. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordPageParam.java
  84. 81 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/service/ForumSensitivityRecordService.java
  85. 96 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/service/impl/ForumSensitivityRecordServiceImpl.java
  86. 132 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/controller/ForumSupportEnvController.java
  87. 87 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/entity/ForumSupportEnv.java
  88. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/enums/ForumSupportEnvEnum.java
  89. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/mapper/ForumSupportEnvMapper.java
  90. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/mapper/mapping/ForumSupportEnvMapper.xml
  91. 58 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvAddParam.java
  92. 63 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvEditParam.java
  93. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvIdParam.java
  94. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvPageParam.java
  95. 81 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/service/ForumSupportEnvService.java
  96. 96 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/service/impl/ForumSupportEnvServiceImpl.java

+ 14 - 0
pom.xml

@@ -360,6 +360,20 @@
                 <version>${snowy.version}</version>
             </dependency>
 
+            <!-- snowy-plugin-forum-func -->
+            <dependency>
+                <groupId>vip.xiaonuo</groupId>
+                <artifactId>snowy-plugin-forum-api</artifactId>
+                <version>${snowy.version}</version>
+            </dependency>
+
+
+            <dependency>
+                <groupId>vip.xiaonuo</groupId>
+                <artifactId>snowy-plugin-forum-func</artifactId>
+                <version>${snowy.version}</version>
+            </dependency>
+
 
 
             <!-- snowy-plugin-urp-api -->

+ 5 - 0
snowy-modules/snowy-web-app/pom.xml

@@ -165,6 +165,11 @@
             <artifactId>snowy-plugin-exam-func</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-forum-func</artifactId>
+        </dependency>
+
         <!-- bootstrap 配置加载 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 3 - 0
snowy-plugin/pom.xml

@@ -61,6 +61,9 @@
         <module>snowy-plugin-exam</module>
 
         <module>snowy-plugin-ufop</module>
+
+        <!-- 论坛插件 -->
+        <module>snowy-plugin-forum</module>
     </modules>
 
 </project>

+ 25 - 0
snowy-plugin/snowy-plugin-forum/pom.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>vip.xiaonuo</groupId>
+        <artifactId>snowy-plugin</artifactId>
+        <version>2.0.0</version>
+    </parent>
+
+    <artifactId>snowy-plugin-forum</artifactId>
+    <packaging>pom</packaging>
+    <description>论坛相关功能</description>
+
+    <modules>
+        <!-- 系统功能插件api接口 -->
+        <module>snowy-plugin-forum-api</module>
+
+        <!-- 系统功能插件func实现 -->
+        <module>snowy-plugin-forum-func</module>
+    </modules>
+
+</project>

+ 24 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-api/pom.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>vip.xiaonuo</groupId>
+        <artifactId>snowy-plugin-forum</artifactId>
+        <version>2.0.0</version>
+    </parent>
+
+    <artifactId>snowy-plugin-forum-api</artifactId>
+    <packaging>jar</packaging>
+    <description>论坛功能api接口</description>
+
+    <dependencies>
+        <!-- 每个插件接口都要引入common -->
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-common</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/pom.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>vip.xiaonuo</groupId>
+        <artifactId>snowy-plugin-forum</artifactId>
+        <version>2.0.0</version>
+    </parent>
+
+    <artifactId>snowy-plugin-forum-func</artifactId>
+    <packaging>jar</packaging>
+    <description>论坛功能func实现</description>
+
+    <dependencies>
+        <!-- 每个插件都要引入自己的对外接口 -->
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-forum-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-sys-api</artifactId>
+        </dependency>
+
+        <!-- 引入登录鉴权接口,用于实现其登录所需逻辑 -->
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-auth-api</artifactId>
+        </dependency>
+
+        <!-- 引入开发工具接口,用于配置信息 -->
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-dev-api</artifactId>
+        </dependency>
+
+        <!-- 引入移动端接口,用于移动端菜单信息 -->
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-mobile-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-disk-api</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 132 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/controller/ForumContentCorrectionController.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.contentcorrection.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.contentcorrection.entity.ForumContentCorrection;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionAddParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionEditParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionIdParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionPageParam;
+import vip.xiaonuo.forum.modular.contentcorrection.service.ForumContentCorrectionService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 内容纠错表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ */
+@Api(tags = "内容纠错表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumContentCorrectionController {
+
+    @Resource
+    private ForumContentCorrectionService forumContentCorrectionService;
+
+    /**
+     * 获取内容纠错表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取内容纠错表分页")
+    @SaCheckPermission("/forum/contentcorrection/page")
+    @GetMapping("/forum/contentcorrection/page")
+    public CommonResult<Page<ForumContentCorrection>> page(ForumContentCorrectionPageParam forumContentCorrectionPageParam) {
+        return CommonResult.data(forumContentCorrectionService.page(forumContentCorrectionPageParam));
+    }
+
+    /**
+     * 添加内容纠错表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加内容纠错表")
+    @CommonLog("添加内容纠错表")
+    @SaCheckPermission("/forum/contentcorrection/add")
+    @PostMapping("/forum/contentcorrection/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumContentCorrectionAddParam forumContentCorrectionAddParam) {
+        forumContentCorrectionService.add(forumContentCorrectionAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑内容纠错表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑内容纠错表")
+    @CommonLog("编辑内容纠错表")
+    @SaCheckPermission("/forum/contentcorrection/edit")
+    @PostMapping("/forum/contentcorrection/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumContentCorrectionEditParam forumContentCorrectionEditParam) {
+        forumContentCorrectionService.edit(forumContentCorrectionEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除内容纠错表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除内容纠错表")
+    @CommonLog("删除内容纠错表")
+    @SaCheckPermission("/forum/contentcorrection/delete")
+    @PostMapping("/forum/contentcorrection/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumContentCorrectionIdParam> forumContentCorrectionIdParamList) {
+        forumContentCorrectionService.delete(forumContentCorrectionIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取内容纠错表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取内容纠错表详情")
+    @SaCheckPermission("/forum/contentcorrection/detail")
+    @GetMapping("/forum/contentcorrection/detail")
+    public CommonResult<ForumContentCorrection> detail(@Valid ForumContentCorrectionIdParam forumContentCorrectionIdParam) {
+        return CommonResult.data(forumContentCorrectionService.detail(forumContentCorrectionIdParam));
+    }
+
+}

+ 75 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/entity/ForumContentCorrection.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.contentcorrection.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/07/16 08:50
+ **/
+@Getter
+@Setter
+@TableName("FORUM_CONTENT_CORRECTION")
+public class ForumContentCorrection {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String correctionId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 纠错类型 0课程章节 1作业 2考试  */
+    @ApiModelProperty(value = "纠错类型 0课程章节 1作业 2考试 ", position = 3)
+    private Integer resourceType;
+
+    /** 目标id */
+    @ApiModelProperty(value = "目标id", position = 4)
+    private String resourceId;
+
+    /** 删除标志 */
+    @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/contentcorrection/enums/ForumContentCorrectionEnum.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.contentcorrection.enums;
+
+import lombok.Getter;
+
+/**
+ * 内容纠错表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ **/
+@Getter
+public enum ForumContentCorrectionEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumContentCorrectionEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/mapper/ForumContentCorrectionMapper.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.contentcorrection.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.contentcorrection.entity.ForumContentCorrection;
+
+/**
+ * 内容纠错表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ **/
+public interface ForumContentCorrectionMapper extends BaseMapper<ForumContentCorrection> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/mapper/mapping/ForumContentCorrectionMapper.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.contentcorrection.mapper.ForumContentCorrectionMapper">
+
+</mapper>

+ 46 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionAddParam.java

@@ -0,0 +1,46 @@
+/*
+ * 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.contentcorrection.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/07/16 08:50
+ **/
+@Getter
+@Setter
+public class ForumContentCorrectionAddParam {
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 纠错类型 0课程章节 1作业 2考试  */
+    @ApiModelProperty(value = "纠错类型 0课程章节 1作业 2考试 ", position = 3)
+    private Integer resourceType;
+
+    /** 目标id */
+    @ApiModelProperty(value = "目标id", position = 4)
+    private String resourceId;
+
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionEditParam.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.contentcorrection.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/07/16 08:50
+ **/
+@Getter
+@Setter
+public class ForumContentCorrectionEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "correctionId不能为空")
+    private String correctionId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 纠错类型 0课程章节 1作业 2考试  */
+    @ApiModelProperty(value = "纠错类型 0课程章节 1作业 2考试 ", position = 3)
+    private Integer resourceType;
+
+    /** 目标id */
+    @ApiModelProperty(value = "目标id", position = 4)
+    private String resourceId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionIdParam.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.contentcorrection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 内容纠错表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ **/
+@Getter
+@Setter
+public class ForumContentCorrectionIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "correctionId不能为空")
+    private String correctionId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/param/ForumContentCorrectionPageParam.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.contentcorrection.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 内容纠错表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ **/
+@Getter
+@Setter
+public class ForumContentCorrectionPageParam {
+
+    /** 当前页 */
+    @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/contentcorrection/service/ForumContentCorrectionService.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.contentcorrection.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.forum.modular.contentcorrection.entity.ForumContentCorrection;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionAddParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionEditParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionIdParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionPageParam;
+
+import java.util.List;
+
+/**
+ * 内容纠错表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ **/
+public interface ForumContentCorrectionService extends IService<ForumContentCorrection> {
+
+    /**
+     * 获取内容纠错表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    Page<ForumContentCorrection> page(ForumContentCorrectionPageParam forumContentCorrectionPageParam);
+
+    /**
+     * 添加内容纠错表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    void add(ForumContentCorrectionAddParam forumContentCorrectionAddParam);
+
+    /**
+     * 编辑内容纠错表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    void edit(ForumContentCorrectionEditParam forumContentCorrectionEditParam);
+
+    /**
+     * 删除内容纠错表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    void delete(List<ForumContentCorrectionIdParam> forumContentCorrectionIdParamList);
+
+    /**
+     * 获取内容纠错表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     */
+    ForumContentCorrection detail(ForumContentCorrectionIdParam forumContentCorrectionIdParam);
+
+    /**
+     * 获取内容纠错表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:50
+     **/
+    ForumContentCorrection queryEntity(String id);
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/contentcorrection/service/impl/ForumContentCorrectionServiceImpl.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.contentcorrection.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.contentcorrection.entity.ForumContentCorrection;
+import vip.xiaonuo.forum.modular.contentcorrection.mapper.ForumContentCorrectionMapper;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionAddParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionEditParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionIdParam;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionPageParam;
+import vip.xiaonuo.forum.modular.contentcorrection.service.ForumContentCorrectionService;
+
+import java.util.List;
+
+/**
+ * 内容纠错表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:50
+ **/
+@Service
+public class ForumContentCorrectionServiceImpl extends ServiceImpl<ForumContentCorrectionMapper, ForumContentCorrection> implements ForumContentCorrectionService {
+
+
+    @Override
+    public Page<ForumContentCorrection> page(ForumContentCorrectionPageParam forumContentCorrectionPageParam) {
+        QueryWrapper<ForumContentCorrection> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumContentCorrectionPageParam.getSortField(), forumContentCorrectionPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumContentCorrectionPageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumContentCorrectionPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumContentCorrectionPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumContentCorrection::getCorrectionId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ForumContentCorrectionAddParam forumContentCorrectionAddParam) {
+        ForumContentCorrection forumContentCorrection = BeanUtil.toBean(forumContentCorrectionAddParam, ForumContentCorrection.class);
+        this.save(forumContentCorrection);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumContentCorrectionEditParam forumContentCorrectionEditParam) {
+        ForumContentCorrection forumContentCorrection = this.queryEntity(forumContentCorrectionEditParam.getCorrectionId());
+        BeanUtil.copyProperties(forumContentCorrectionEditParam, forumContentCorrection);
+        this.updateById(forumContentCorrection);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumContentCorrectionIdParam> forumContentCorrectionIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumContentCorrectionIdParamList, ForumContentCorrectionIdParam::getCorrectionId));
+    }
+
+    @Override
+    public ForumContentCorrection detail(ForumContentCorrectionIdParam forumContentCorrectionIdParam) {
+        return this.queryEntity(forumContentCorrectionIdParam.getCorrectionId());
+    }
+
+    @Override
+    public ForumContentCorrection queryEntity(String id) {
+        ForumContentCorrection forumContentCorrection = this.getById(id);
+        if(ObjectUtil.isEmpty(forumContentCorrection)) {
+            throw new CommonException("内容纠错表不存在,id值为:{}", id);
+        }
+        return forumContentCorrection;
+    }
+
+}

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

@@ -0,0 +1,129 @@
+/*
+ * 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.postinfo.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.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.service.ForumPostInfoService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 帖子信息表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ */
+@Api(tags = "帖子信息表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumPostInfoController {
+
+    @Resource
+    private ForumPostInfoService forumPostInfoService;
+
+    /**
+     * 获取帖子信息表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取帖子信息表分页")
+    @GetMapping("/forum/postinfo/page")
+    public CommonResult<Page<ForumPostInfo>> page(ForumPostInfoPageParam forumPostInfoPageParam) {
+        return CommonResult.data(forumPostInfoService.page(forumPostInfoPageParam));
+    }
+
+    /**
+     * 发帖
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加帖子信息表")
+    @CommonLog("添加帖子信息表")
+    @PostMapping("/forum/postinfo/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumPostInfoAddParam forumPostInfoAddParam) {
+        return forumPostInfoService.add(forumPostInfoAddParam);
+    }
+
+    /**
+     * 编辑帖子信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑帖子信息表")
+    @CommonLog("编辑帖子信息表")
+    @SaCheckPermission("/forum/postinfo/edit")
+    @PostMapping("/forum/postinfo/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumPostInfoEditParam forumPostInfoEditParam) {
+        forumPostInfoService.edit(forumPostInfoEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除帖子信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除帖子信息表")
+    @CommonLog("删除帖子信息表")
+    @SaCheckPermission("/forum/postinfo/delete")
+    @PostMapping("/forum/postinfo/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumPostInfoIdParam> forumPostInfoIdParamList) {
+        forumPostInfoService.delete(forumPostInfoIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 查看帖子详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取帖子信息表详情")
+    @GetMapping("/forum/postinfo/detail")
+    public CommonResult<ForumPostInfoVo> detail(@Valid ForumPostInfoIdParam forumPostInfoIdParam) {
+        return CommonResult.data(forumPostInfoService.detail(forumPostInfoIdParam));
+    }
+
+}

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

@@ -0,0 +1,148 @@
+/*
+ * 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.postinfo.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/07/16 08:46
+ **/
+@Getter
+@Setter
+@TableName("FORUM_POST_INFO")
+public class ForumPostInfo {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String postId;
+
+    /** 分类id */
+    @ApiModelProperty(value = "分类id", position = 2)
+    private String typeId;
+
+    /**
+     * 分类名称
+     */
+    @TableField(exist = false)
+    private String typeName;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 3)
+    private String userId;
+
+    /**
+     * 用户名称
+     */
+    @TableField(exist = false)
+    private String userNickName;
+
+    /**
+     * 用户头像
+     */
+    @TableField(exist = false)
+    private String userAvatar;
+
+    /** 帖子标题 */
+    @ApiModelProperty(value = "帖子标题", position = 4)
+    private String postTitle;
+
+    /** 帖子内容 */
+    @ApiModelProperty(value = "帖子内容", position = 5)
+    private String postContent;
+
+    /** 是否置顶 0普通 1置顶 */
+    @ApiModelProperty(value = "是否置顶 0普通 1置顶", position = 6)
+    private Integer isTop;
+
+    /** 浏览次数 */
+    @ApiModelProperty(value = "浏览次数", position = 7)
+    private Integer viewCount;
+
+    /** 回复次数 */
+    @ApiModelProperty(value = "回复次数", position = 8)
+    private Integer replyCount;
+
+    /** 点赞次数 */
+    @ApiModelProperty(value = "点赞次数", position = 9)
+    private Integer likeCount;
+
+    /** 最后回复用户id */
+    @ApiModelProperty(value = "最后回复用户id", position = 10)
+    private String lastReplyUserId;
+
+    /**
+     * 最后回复用户名称
+     */
+    @TableField(exist = false)
+    private String lastReplyUserNickName;
+
+    /**
+     * 最后回复用户头像
+     */
+    @TableField(exist = false)
+    private String lastReplyUserAvatar;
+
+    /** 最后回复时间 */
+    @ApiModelProperty(value = "最后回复时间", position = 11)
+    private Date lastReplyTime;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 12)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 13)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 14)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 15)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 16)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 */
+    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
+    private Integer postType;
+
+    /** 定向用户 */
+    @ApiModelProperty(value = "定向用户", position = 18)
+    private String appointUser;
+
+    /**
+     * 帖子是否为自己的 0不是 1是
+     */
+    @TableField(exist = false)
+    private Integer isSelf;
+
+}

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

@@ -0,0 +1,142 @@
+package vip.xiaonuo.forum.modular.postinfo.entity;
+
+
+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.contentcorrection.entity.ForumContentCorrection;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReplyVo;
+import vip.xiaonuo.forum.modular.supportenv.entity.ForumSupportEnv;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 帖子信息表实体
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+@Data
+public class ForumPostInfoVo {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String postId;
+
+    /** 分类id */
+    @ApiModelProperty(value = "分类id", position = 2)
+    private String typeId;
+
+    /**
+     * 分类名称
+     */
+    private String typeName;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 3)
+    private String userId;
+
+    /**
+     * 用户名称
+     */
+    private String userNickName;
+
+    /**
+     * 用户头像
+     */
+    private String userAvatar;
+
+    /** 帖子标题 */
+    @ApiModelProperty(value = "帖子标题", position = 4)
+    private String postTitle;
+
+    /** 帖子内容 */
+    @ApiModelProperty(value = "帖子内容", position = 5)
+    private String postContent;
+
+    /** 是否置顶 0普通 1置顶 */
+    @ApiModelProperty(value = "是否置顶 0普通 1置顶", position = 6)
+    private Integer isTop;
+
+    /** 浏览次数 */
+    @ApiModelProperty(value = "浏览次数", position = 7)
+    private Integer viewCount;
+
+    /** 回复次数 */
+    @ApiModelProperty(value = "回复次数", position = 8)
+    private Integer replyCount;
+
+    /** 点赞次数 */
+    @ApiModelProperty(value = "点赞次数", position = 9)
+    private Integer likeCount;
+
+    /** 最后回复用户id */
+    @ApiModelProperty(value = "最后回复用户id", position = 10)
+    private String lastReplyUserId;
+
+    /**
+     * 最后回复用户名称
+     */
+    private String lastReplyUserNickName;
+
+    /**
+     * 最后回复用户头像
+     */
+    private String lastReplyUserAvatar;
+
+    /** 最后回复时间 */
+    @ApiModelProperty(value = "最后回复时间", position = 11)
+    private Date lastReplyTime;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 12)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 13)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 14)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 15)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 16)
+    private String updateUser;
+
+    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 */
+    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
+    private Integer postType;
+
+    /**
+     * 技术支持
+     */
+    private ForumSupportEnv forumSupportEnv;
+
+    /**
+     * 内容纠错
+     */
+    private ForumContentCorrection forumContentCorrection;
+
+    /** 定向用户 */
+    @ApiModelProperty(value = "定向用户", position = 18)
+    private String appointUser;
+
+    /**
+     * 回复列表
+     */
+    private Page<ForumPostReply> replyList;
+
+    /**
+     * 此条帖子是否为自己 0 不是 1 是
+     */
+    private Integer isSelf;
+
+}

+ 34 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/enums/ForumPostInfoEnum.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.postinfo.enums;
+
+import lombok.Getter;
+
+/**
+ * 帖子信息表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+@Getter
+public enum ForumPostInfoEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumPostInfoEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/mapper/ForumPostInfoMapper.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.postinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfo;
+
+/**
+ * 帖子信息表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+public interface ForumPostInfoMapper extends BaseMapper<ForumPostInfo> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/mapper/mapping/ForumPostInfoMapper.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.postinfo.mapper.ForumPostInfoMapper">
+
+</mapper>

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

@@ -0,0 +1,94 @@
+/*
+ * 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.postinfo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.forum.modular.contentcorrection.param.ForumContentCorrectionAddParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvAddParam;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 帖子信息表添加参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+@Getter
+@Setter
+public class ForumPostInfoAddParam {
+
+    /** 分类id */
+    @ApiModelProperty(value = "分类id", position = 2)
+    private String typeId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 3)
+    private String userId;
+
+    /** 帖子标题 */
+    @ApiModelProperty(value = "帖子标题", position = 4)
+    private String postTitle;
+
+    /** 帖子内容 */
+    @ApiModelProperty(value = "帖子内容", position = 5)
+    private String postContent;
+
+    /** 是否置顶 0普通 1置顶 */
+    @ApiModelProperty(value = "是否置顶 0普通 1置顶", position = 6)
+    private Integer isTop;
+
+    /** 浏览次数 */
+    @ApiModelProperty(value = "浏览次数", position = 7)
+    private Integer viewCount;
+
+    /** 回复次数 */
+    @ApiModelProperty(value = "回复次数", position = 8)
+    private Integer replyCount;
+
+    /** 点赞次数 */
+    @ApiModelProperty(value = "点赞次数", position = 9)
+    private Integer likeCount;
+
+    /** 最后回复用户id */
+    @ApiModelProperty(value = "最后回复用户id", position = 10)
+    private String lastReplyUserId;
+
+    /** 最后回复时间 */
+    @ApiModelProperty(value = "最后回复时间", position = 11)
+    private Date lastReplyTime;
+
+    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 */
+    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
+    private Integer postType;
+
+    /** 定向用户 */
+    @ApiModelProperty(value = "定向用户", position = 18)
+    private String appointUser;
+
+    /**
+     * 技术支持信息
+     */
+    private ForumSupportEnvAddParam forumSupportEnvParam;
+
+    /**
+     * 内容纠错信息
+     */
+    private ForumContentCorrectionAddParam contentCorrectionParam;
+
+}

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

@@ -0,0 +1,87 @@
+/*
+ * 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.postinfo.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/07/16 08:46
+ **/
+@Getter
+@Setter
+public class ForumPostInfoEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "postId不能为空")
+    private String postId;
+
+    /** 分类id */
+    @ApiModelProperty(value = "分类id", position = 2)
+    private String typeId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 3)
+    private String userId;
+
+    /** 帖子标题 */
+    @ApiModelProperty(value = "帖子标题", position = 4)
+    private String postTitle;
+
+    /** 帖子内容 */
+    @ApiModelProperty(value = "帖子内容", position = 5)
+    private String postContent;
+
+    /** 是否置顶 0普通 1置顶 */
+    @ApiModelProperty(value = "是否置顶 0普通 1置顶", position = 6)
+    private Integer isTop;
+
+    /** 浏览次数 */
+    @ApiModelProperty(value = "浏览次数", position = 7)
+    private Integer viewCount;
+
+    /** 回复次数 */
+    @ApiModelProperty(value = "回复次数", position = 8)
+    private Integer replyCount;
+
+    /** 点赞次数 */
+    @ApiModelProperty(value = "点赞次数", position = 9)
+    private Integer likeCount;
+
+    /** 最后回复用户id */
+    @ApiModelProperty(value = "最后回复用户id", position = 10)
+    private String lastReplyUserId;
+
+    /** 最后回复时间 */
+    @ApiModelProperty(value = "最后回复时间", position = 11)
+    private Date lastReplyTime;
+
+    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 */
+    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
+    private Integer postType;
+
+    /** 定向用户 */
+    @ApiModelProperty(value = "定向用户", position = 18)
+    private String appointUser;
+
+}

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

@@ -0,0 +1,44 @@
+/*
+ * 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.postinfo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 帖子信息表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+@Getter
+@Setter
+public class ForumPostInfoIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "postId不能为空")
+    private String postId;
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+}

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

@@ -0,0 +1,65 @@
+/*
+ * 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.postinfo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 帖子信息表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+@Getter
+@Setter
+public class ForumPostInfoPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段 0回复 1浏览 2活动")
+    private Integer sortField;
+
+    /** 排序方式 0最新 1热门 */
+    @ApiModelProperty(value = "排序方式 0最新 1热门")
+    private Integer sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /**
+     * 帖子标题
+     */
+    private String postTitle;
+
+    /**
+     * 帖子分类id
+     */
+    private String typeId;
+
+    /** 帖子类型 0普通帖子 1技术支持 2内容纠错 */
+    @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
+    private Integer postType;
+
+}

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

@@ -0,0 +1,83 @@
+/*
+ * 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.postinfo.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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 java.util.List;
+
+/**
+ * 帖子信息表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+public interface ForumPostInfoService extends IService<ForumPostInfo> {
+
+    /**
+     * 获取帖子信息表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    Page<ForumPostInfo> page(ForumPostInfoPageParam forumPostInfoPageParam);
+
+    /**
+     * 添加帖子信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    CommonResult<String> add(ForumPostInfoAddParam forumPostInfoAddParam);
+
+    /**
+     * 编辑帖子信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    void edit(ForumPostInfoEditParam forumPostInfoEditParam);
+
+    /**
+     * 删除帖子信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    void delete(List<ForumPostInfoIdParam> forumPostInfoIdParamList);
+
+    /**
+     * 获取帖子信息表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    ForumPostInfoVo detail(ForumPostInfoIdParam forumPostInfoIdParam);
+
+    /**
+     * 获取帖子信息表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     **/
+    ForumPostInfo queryEntity(String id);
+
+}

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

@@ -0,0 +1,299 @@
+/*
+ * 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.postinfo.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.common.pojo.CommonResult;
+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.service.ForumPostInfoService;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
+import vip.xiaonuo.forum.modular.postreply.service.ForumPostReplyService;
+import vip.xiaonuo.forum.modular.posttype.entity.ForumPostType;
+import vip.xiaonuo.forum.modular.posttype.mapper.ForumPostTypeMapper;
+import vip.xiaonuo.forum.modular.sensitivity.entity.ForumSensitivity;
+import vip.xiaonuo.forum.modular.sensitivity.mapper.ForumSensitivityMapper;
+import vip.xiaonuo.forum.modular.sensitivityrecord.entity.ForumSensitivityRecord;
+import vip.xiaonuo.forum.modular.sensitivityrecord.mapper.ForumSensitivityRecordMapper;
+import vip.xiaonuo.forum.modular.supportenv.entity.ForumSupportEnv;
+import vip.xiaonuo.forum.modular.supportenv.mapper.ForumSupportEnvMapper;
+import vip.xiaonuo.sys.api.SysUserApi;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 帖子信息表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:46
+ **/
+@Service
+public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, ForumPostInfo> implements ForumPostInfoService {
+
+    @Resource
+    private ForumSensitivityMapper forumSensitivityMapper;
+
+    @Resource
+    private ForumSensitivityRecordMapper forumSensitivityRecordMapper;
+
+    @Resource
+    private ForumSupportEnvMapper forumSupportEnvMapper;
+
+    @Resource
+    private ForumContentCorrectionMapper forumContentCorrectionMapper;
+
+    @Resource
+    private SysUserApi sysUserApi;
+
+    @Resource
+    private ForumPostTypeMapper forumPostTypeMapper;
+
+    @Resource
+    @Lazy
+    private ForumPostReplyService forumPostReplyService;
+
+
+    @Override
+    public Page<ForumPostInfo> page(ForumPostInfoPageParam forumPostInfoPageParam) {
+        QueryWrapper<ForumPostInfo> queryWrapper = new QueryWrapper<>();
+        // 帖子标题
+        if (StringUtils.isNotBlank(forumPostInfoPageParam.getPostTitle())) {
+            queryWrapper.lambda().like(ForumPostInfo::getPostTitle, forumPostInfoPageParam.getPostTitle());
+        }
+        // 帖子分类
+        if (StringUtils.isNotBlank(forumPostInfoPageParam.getTypeId())) {
+            queryWrapper.lambda().eq(ForumPostInfo::getTypeId, forumPostInfoPageParam.getTypeId());
+        }
+        // 帖子类型 0普通帖子 1技术支持 2内容纠错
+        if (forumPostInfoPageParam.getPostType() != null) {
+            queryWrapper.lambda().eq(ForumPostInfo::getPostType, forumPostInfoPageParam.getPostType());
+        }
+        // 根据标识排序
+        // 排序字段 0回复 1浏览 2活动
+        if (forumPostInfoPageParam.getSortField() != null) {
+            if (forumPostInfoPageParam.getSortField() == 0) {
+                queryWrapper.lambda().orderByDesc(ForumPostInfo::getReplyCount);
+            } else if (forumPostInfoPageParam.getSortField() == 1) {
+                queryWrapper.lambda().orderByDesc(ForumPostInfo::getViewCount);
+            } else {
+                queryWrapper.lambda().orderByDesc(ForumPostInfo::getLastReplyTime);
+            }
+        }
+        // 排序方式 0最新 1热门
+        if (forumPostInfoPageParam.getSortOrder() == 0) {
+            queryWrapper.lambda().orderByDesc(ForumPostInfo::getCreateTime);
+        } else if (forumPostInfoPageParam.getSortOrder() == 1) {
+            queryWrapper.lambda().orderByDesc(ForumPostInfo::getViewCount);
+        }
+        Page<ForumPostInfo> page = this.page(CommonPageRequest.defaultPage(), queryWrapper);
+        if (page.getRecords().size() > 0) {
+            for (ForumPostInfo forumPostInfo : page.getRecords()) {
+                // 关联帖子分类名称
+                ForumPostType forumPostType = forumPostTypeMapper.selectById(forumPostInfo.getTypeId());
+                if (ObjectUtil.isNotNull(forumPostType)) {
+                    forumPostInfo.setTypeName(forumPostType.getTypeName());
+                }
+                // 关联发帖用户的信息
+                JSONObject user = sysUserApi.getUserByIdWithoutException(forumPostInfo.getUserId());
+                if (user != null) {
+                    forumPostInfo.setUserNickName(user.getStr("name"));
+                    forumPostInfo.setUserAvatar(user.getStr("avatar"));
+                }
+                // 关联最后发帖用户的信息
+                JSONObject lastReplyUser = sysUserApi.getUserByIdWithoutException(forumPostInfo.getLastReplyUserId());
+                if (lastReplyUser != null) {
+                    forumPostInfo.setLastReplyUserNickName(lastReplyUser.getStr("name"));
+                    forumPostInfo.setLastReplyUserAvatar(lastReplyUser.getStr("avatar"));
+                }
+                // 校验帖子是否为自己的
+                if (forumPostInfo.getUserId().equals(StpLoginUserUtil.getLoginUser().getId())) {
+                    forumPostInfo.setIsSelf(1);
+                } else {
+                    forumPostInfo.setIsSelf(0);
+                }
+            }
+        }
+        return page;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult<String> add(ForumPostInfoAddParam forumPostInfoAddParam) {
+        try {
+            String uuid = IdUtil.fastSimpleUUID();
+            ForumPostInfo forumPostInfo = BeanUtil.toBean(forumPostInfoAddParam, ForumPostInfo.class);
+            forumPostInfo.setPostId(uuid);
+            // 设置用户
+            SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+            forumPostInfo.setUserId(loginUser.getId());
+            // 过滤敏感词
+            filterSensitiveWords(forumPostInfoAddParam, loginUser, uuid);
+            // 存储基础表
+            this.save(forumPostInfo);
+            // 区分出是普通帖子、还是技术支持帖子、内容纠错帖子 0普通帖子 1技术支持 2内容纠错
+            if (forumPostInfo.getPostType() == 0) {
+                // 普通帖子直接存储
+                // 普通帖子暂时不做其他处理
+            } else if (forumPostInfo.getPostType() == 1) {
+                // 技术支持帖子,需要额外存储浏览器信息
+                ForumSupportEnv forumSupportEnv = BeanUtil.toBean(forumPostInfoAddParam.getForumSupportEnvParam(), ForumSupportEnv.class);
+                forumSupportEnv.setPostId(uuid);
+                forumSupportEnvMapper.insert(forumSupportEnv);
+            } else if (forumPostInfo.getPostType() == 2) {
+                // 内容纠错帖子,需要额外存储纠错内容信息,比如课程章节、作业题、考试题
+                ForumContentCorrection forumContentCorrection = BeanUtil.toBean(forumPostInfoAddParam.getContentCorrectionParam(), ForumContentCorrection.class);
+                forumContentCorrection.setPostId(uuid);
+                forumContentCorrectionMapper.insert(forumContentCorrection);
+            } else {
+                return CommonResult.error("帖子类型不正确");
+            }
+        } catch (Exception e) {
+            return CommonResult.error(e.getMessage());
+        }
+        return CommonResult.ok();
+    }
+
+    /**
+     * 过滤发帖中的敏感词
+     *
+     * @param forumPostInfoAddParam 帖子信息编辑参数
+     */
+    public void filterSensitiveWords(ForumPostInfoAddParam forumPostInfoAddParam, SaBaseLoginUser loginUser, String uuid) {
+        List<ForumSensitivity> forumSensitivities = forumSensitivityMapper.selectList(new QueryWrapper<>());
+        if (forumSensitivities.size() > 0) {
+            // 过滤敏感词
+            for (ForumSensitivity forumSensitivity : forumSensitivities) {
+                // 过滤逻辑
+                if (forumPostInfoAddParam.getPostContent().contains(forumSensitivity.getSensitivityWord())) {
+                    // 替换句子中敏感词为*号
+                    forumPostInfoAddParam.setPostContent(forumPostInfoAddParam.getPostContent().replace(forumSensitivity.getSensitivityWord(), "******"));
+                }
+                // 记录敏感词命中情况
+                ForumSensitivityRecord forumSensitivityRecord = new ForumSensitivityRecord();
+                forumSensitivityRecord.setSensitivityWord(forumSensitivity.getSensitivityWord()); // 敏感词
+                forumSensitivityRecord.setUserId(loginUser.getId()); // 用户id
+                forumSensitivityRecord.setRecordType(0); // 发帖子类型
+                forumSensitivityRecord.setPostId(uuid); // 帖子id
+                forumSensitivityRecordMapper.insert(forumSensitivityRecord);
+            }
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumPostInfoEditParam forumPostInfoEditParam) {
+        ForumPostInfo forumPostInfo = this.queryEntity(forumPostInfoEditParam.getPostId());
+        BeanUtil.copyProperties(forumPostInfoEditParam, forumPostInfo);
+        this.updateById(forumPostInfo);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumPostInfoIdParam> forumPostInfoIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumPostInfoIdParamList, ForumPostInfoIdParam::getPostId));
+    }
+
+    @Override
+    public ForumPostInfoVo detail(ForumPostInfoIdParam forumPostInfoIdParam) {
+        // 查询和转换帖子基础信息
+        ForumPostInfo forumPostInfo = this.queryEntity(forumPostInfoIdParam.getPostId());
+        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);
+        }
+        // 查询详情的同时,给帖子增加浏览量和热度
+        forumPostInfo.setViewCount(forumPostInfo.getViewCount() + 1);
+        this.updateById(forumPostInfo);
+        // 查询帖子回复信息
+        ForumPostReplyPageParam forumPostReplyPageParam = new ForumPostReplyPageParam();
+        forumPostReplyPageParam.setCurrent(forumPostInfoIdParam.getCurrent());
+        forumPostReplyPageParam.setSize(forumPostInfoIdParam.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);
+            }
+        }
+        return forumPostInfoVo;
+    }
+
+    @Override
+    public ForumPostInfo queryEntity(String id) {
+        ForumPostInfo forumPostInfo = this.getById(id);
+        if(ObjectUtil.isEmpty(forumPostInfo)) {
+            throw new CommonException("帖子信息表不存在,id值为:{}", id);
+        }
+        return forumPostInfo;
+    }
+
+}

+ 138 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/controller/ForumPostLikeController.java

@@ -0,0 +1,138 @@
+/*
+ * 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.postlike.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.*;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeAddParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeEditParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeIdParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikePageParam;
+import vip.xiaonuo.forum.modular.postlike.service.ForumPostLikeService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 点赞记录表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ */
+@Api(tags = "点赞记录表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumPostLikeController {
+
+    @Resource
+    private ForumPostLikeService forumPostLikeService;
+
+    /**
+     * 获取点赞记录表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取点赞记录表分页")
+    @SaCheckPermission("/forum/postlike/page")
+    @GetMapping("/forum/postlike/page")
+    public CommonResult<Page<ForumPostLike>> page(ForumPostLikePageParam forumPostLikePageParam) {
+        return CommonResult.data(forumPostLikeService.page(forumPostLikePageParam));
+    }
+
+    /**
+     * 点赞
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加点赞记录表")
+    @CommonLog("添加点赞记录表")
+    @PostMapping("/forum/postlike/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumPostLikeAddParam forumPostLikeAddParam) {
+        return forumPostLikeService.add(forumPostLikeAddParam);
+    }
+
+    /**
+     * 取消点赞
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("取消点赞")
+    @CommonLog("取消点赞")
+    @PostMapping("/forum/postlike/cancel")
+    public CommonResult<String> cancel(@RequestBody @Valid ForumPostLikeEditParam forumPostLikeEditParam) {
+        return forumPostLikeService.deleteByUserIdAndPostId(forumPostLikeEditParam);
+    }
+
+    /**
+     * 编辑点赞记录表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑点赞记录表")
+    @CommonLog("编辑点赞记录表")
+    @SaCheckPermission("/forum/postlike/edit")
+    @PostMapping("/forum/postlike/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumPostLikeEditParam forumPostLikeEditParam) {
+        forumPostLikeService.edit(forumPostLikeEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除点赞记录表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除点赞记录表")
+    @CommonLog("删除点赞记录表")
+    @SaCheckPermission("/forum/postlike/delete")
+    @PostMapping("/forum/postlike/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumPostLikeIdParam> forumPostLikeIdParamList) {
+        forumPostLikeService.delete(forumPostLikeIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取点赞记录表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取点赞记录表详情")
+    @SaCheckPermission("/forum/postlike/detail")
+    @GetMapping("/forum/postlike/detail")
+    public CommonResult<ForumPostLike> detail(@Valid ForumPostLikeIdParam forumPostLikeIdParam) {
+        return CommonResult.data(forumPostLikeService.detail(forumPostLikeIdParam));
+    }
+
+}

+ 75 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/entity/ForumPostLike.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.postlike.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/07/16 08:51
+ **/
+@Getter
+@Setter
+@TableName("FORUM_POST_LIKE")
+public class ForumPostLike {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String likeId;
+
+    /** 点赞类型 0帖子 1回复 */
+    @ApiModelProperty(value = "点赞类型 0帖子 1回复", position = 2)
+    private Integer likeType;
+
+    /** 目标主键id */
+    @ApiModelProperty(value = "目标主键id", position = 3)
+    private String targetId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 4)
+    private String userId;
+
+    /** 删除标志 */
+    @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/postlike/enums/ForumPostLikeEnum.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.postlike.enums;
+
+import lombok.Getter;
+
+/**
+ * 点赞记录表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ **/
+@Getter
+public enum ForumPostLikeEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumPostLikeEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/mapper/ForumPostLikeMapper.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.postlike.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
+
+/**
+ * 点赞记录表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ **/
+public interface ForumPostLikeMapper extends BaseMapper<ForumPostLike> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/mapper/mapping/ForumPostLikeMapper.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.postlike.mapper.ForumPostLikeMapper">
+
+</mapper>

+ 46 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikeAddParam.java

@@ -0,0 +1,46 @@
+/*
+ * 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.postlike.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/07/16 08:51
+ **/
+@Getter
+@Setter
+public class ForumPostLikeAddParam {
+
+    /** 点赞类型 0帖子 1回复 */
+    @ApiModelProperty(value = "点赞类型 0帖子 1回复", position = 2)
+    private Integer likeType;
+
+    /** 目标主键id */
+    @ApiModelProperty(value = "目标主键id", position = 3)
+    private String targetId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 4)
+    private String userId;
+
+}

+ 50 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikeEditParam.java

@@ -0,0 +1,50 @@
+/*
+ * 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.postlike.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/07/16 08:51
+ **/
+@Getter
+@Setter
+public class ForumPostLikeEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    private String likeId;
+
+    /** 点赞类型 0帖子 1回复 */
+    @ApiModelProperty(value = "点赞类型 0帖子 1回复", position = 2)
+    private Integer likeType;
+
+    /** 目标主键id */
+    @ApiModelProperty(value = "目标主键id", position = 3)
+    private String targetId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 4)
+    private String userId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikeIdParam.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.postlike.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 点赞记录表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ **/
+@Getter
+@Setter
+public class ForumPostLikeIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "likeId不能为空")
+    private String likeId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/param/ForumPostLikePageParam.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.postlike.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 点赞记录表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ **/
+@Getter
+@Setter
+public class ForumPostLikePageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 89 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/service/ForumPostLikeService.java

@@ -0,0 +1,89 @@
+/*
+ * 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.postlike.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeAddParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeEditParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeIdParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikePageParam;
+
+import java.util.List;
+
+/**
+ * 点赞记录表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ **/
+public interface ForumPostLikeService extends IService<ForumPostLike> {
+
+    /**
+     * 获取点赞记录表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    Page<ForumPostLike> page(ForumPostLikePageParam forumPostLikePageParam);
+
+    /**
+     * 添加点赞记录表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    CommonResult<String> add(ForumPostLikeAddParam forumPostLikeAddParam);
+
+    /**
+     * 编辑点赞记录表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    void edit(ForumPostLikeEditParam forumPostLikeEditParam);
+
+    /**
+     * 删除点赞记录表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    void delete(List<ForumPostLikeIdParam> forumPostLikeIdParamList);
+
+    /**
+     * 获取点赞记录表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     */
+    ForumPostLike detail(ForumPostLikeIdParam forumPostLikeIdParam);
+
+    /**
+     * 获取点赞记录表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:51
+     **/
+    ForumPostLike queryEntity(String id);
+
+    /**
+     * 取消点赞
+     *
+     * @param targetId 目标id
+     * @return 操作结果
+     */
+    CommonResult<String> deleteByUserIdAndPostId(ForumPostLikeEditParam forumPostLikeEditParam);
+}

+ 164 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postlike/service/impl/ForumPostLikeServiceImpl.java

@@ -0,0 +1,164 @@
+/*
+ * 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.postlike.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.IdUtil;
+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.auth.core.pojo.SaBaseLoginUser;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfo;
+import vip.xiaonuo.forum.modular.postinfo.mapper.ForumPostInfoMapper;
+import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
+import vip.xiaonuo.forum.modular.postlike.mapper.ForumPostLikeMapper;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeAddParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeEditParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikeIdParam;
+import vip.xiaonuo.forum.modular.postlike.param.ForumPostLikePageParam;
+import vip.xiaonuo.forum.modular.postlike.service.ForumPostLikeService;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
+import vip.xiaonuo.forum.modular.postreply.mapper.ForumPostReplyMapper;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 点赞记录表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:51
+ **/
+@Service
+public class ForumPostLikeServiceImpl extends ServiceImpl<ForumPostLikeMapper, ForumPostLike> implements ForumPostLikeService {
+
+    @Resource
+    private ForumPostInfoMapper forumPostInfoMapper;
+
+    @Resource
+    private ForumPostReplyMapper forumPostReplyMapper;
+
+
+    @Override
+    public Page<ForumPostLike> page(ForumPostLikePageParam forumPostLikePageParam) {
+        QueryWrapper<ForumPostLike> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumPostLikePageParam.getSortField(), forumPostLikePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumPostLikePageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumPostLikePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumPostLikePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumPostLike::getLikeId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult<String> add(ForumPostLikeAddParam forumPostLikeAddParam) {
+        // 校验是否已经点赞过
+        QueryWrapper<ForumPostLike> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ForumPostLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        queryWrapper.lambda().eq(ForumPostLike::getTargetId, forumPostLikeAddParam.getTargetId());
+        long count = this.count(queryWrapper);
+        if (count > 0) {
+            return CommonResult.ok();
+        }
+        // 点赞逻辑
+        String uuid = IdUtil.fastSimpleUUID();
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        ForumPostLike forumPostLike = BeanUtil.toBean(forumPostLikeAddParam, ForumPostLike.class);
+        forumPostLike.setUserId(loginUser.getId());
+        forumPostLike.setLikeId(uuid);
+        boolean save = this.save(forumPostLike);
+        if (save) {
+            // 更改帖子的点赞人数
+            if (forumPostLike.getLikeType() == 0) {
+                ForumPostInfo forumPostInfo = forumPostInfoMapper.selectById(forumPostLike.getTargetId());
+                forumPostInfo.setLikeCount(forumPostInfo.getLikeCount() + 1);
+                forumPostInfoMapper.updateById(forumPostInfo);
+            } else if (forumPostLike.getLikeType() == 1) {
+                ForumPostReply forumPostReply = forumPostReplyMapper.selectById(forumPostLike.getTargetId());
+                forumPostReply.setLikeCount(forumPostReply.getLikeCount() + 1);
+                forumPostReplyMapper.updateById(forumPostReply);
+            }
+            return CommonResult.ok();
+        } else {
+            return CommonResult.error();
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumPostLikeEditParam forumPostLikeEditParam) {
+        ForumPostLike forumPostLike = this.queryEntity(forumPostLikeEditParam.getLikeId());
+        BeanUtil.copyProperties(forumPostLikeEditParam, forumPostLike);
+        this.updateById(forumPostLike);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumPostLikeIdParam> forumPostLikeIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumPostLikeIdParamList, ForumPostLikeIdParam::getLikeId));
+    }
+
+    @Override
+    public ForumPostLike detail(ForumPostLikeIdParam forumPostLikeIdParam) {
+        return this.queryEntity(forumPostLikeIdParam.getLikeId());
+    }
+
+    @Override
+    public ForumPostLike queryEntity(String id) {
+        ForumPostLike forumPostLike = this.getById(id);
+        if(ObjectUtil.isEmpty(forumPostLike)) {
+            throw new CommonException("点赞记录表不存在,id值为:{}", id);
+        }
+        return forumPostLike;
+    }
+
+    @Override
+    public CommonResult<String> deleteByUserIdAndPostId(ForumPostLikeEditParam forumPostLikeEditParam) {
+        // 查询出点赞记录
+        QueryWrapper<ForumPostLike> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ForumPostLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        queryWrapper.lambda().eq(ForumPostLike::getTargetId, forumPostLikeEditParam.getTargetId());
+        ForumPostLike forumPostLike = this.getOne(queryWrapper);
+        boolean b = this.removeById(forumPostLike.getLikeId());
+        if (b) {
+            // 更改帖子的点赞人数
+            if (forumPostLike.getLikeType() == 0) {
+                ForumPostInfo forumPostInfo = forumPostInfoMapper.selectById(forumPostLikeEditParam.getTargetId());
+                forumPostInfo.setLikeCount(forumPostInfo.getLikeCount() - 1);
+                forumPostInfoMapper.updateById(forumPostInfo);
+            } else if (forumPostLike.getLikeType() == 1) {
+                ForumPostReply forumPostReply = forumPostReplyMapper.selectById(forumPostLikeEditParam.getTargetId());
+                forumPostReply.setLikeCount(forumPostReply.getLikeCount() - 1);
+                forumPostReplyMapper.updateById(forumPostReply);
+            }
+            return CommonResult.ok();
+        } else {
+            return CommonResult.error();
+        }
+    }
+
+}

+ 129 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/controller/ForumPostReplyController.java

@@ -0,0 +1,129 @@
+/*
+ * 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.postreply.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.postreply.entity.ForumPostReply;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyAddParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyEditParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyIdParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
+import vip.xiaonuo.forum.modular.postreply.service.ForumPostReplyService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 帖子回复表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ */
+@Api(tags = "帖子回复表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumPostReplyController {
+
+    @Resource
+    private ForumPostReplyService forumPostReplyService;
+
+    /**
+     * 获取帖子回复表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取帖子回复表分页")
+    @SaCheckPermission("/forum/postreply/page")
+    @GetMapping("/forum/postreply/page")
+    public CommonResult<Page<ForumPostReply>> page(ForumPostReplyPageParam forumPostReplyPageParam) {
+        return CommonResult.data(forumPostReplyService.page(forumPostReplyPageParam));
+    }
+
+    /**
+     * 回复帖子
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加帖子回复表")
+    @CommonLog("添加帖子回复表")
+    @PostMapping("/forum/postreply/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumPostReplyAddParam forumPostReplyAddParam) {
+        return forumPostReplyService.add(forumPostReplyAddParam);
+    }
+
+    /**
+     * 编辑回复
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑帖子回复表")
+    @CommonLog("编辑帖子回复表")
+    @SaCheckPermission("/forum/postreply/edit")
+    @PostMapping("/forum/postreply/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumPostReplyEditParam forumPostReplyEditParam) {
+        return forumPostReplyService.edit(forumPostReplyEditParam);
+    }
+
+    /**
+     * 删除帖子回复表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除帖子回复表")
+    @CommonLog("删除帖子回复表")
+    @SaCheckPermission("/forum/postreply/delete")
+    @PostMapping("/forum/postreply/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumPostReplyIdParam> forumPostReplyIdParamList) {
+        forumPostReplyService.delete(forumPostReplyIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取帖子回复表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取帖子回复表详情")
+    @SaCheckPermission("/forum/postreply/detail")
+    @GetMapping("/forum/postreply/detail")
+    public CommonResult<ForumPostReply> detail(@Valid ForumPostReplyIdParam forumPostReplyIdParam) {
+        return CommonResult.data(forumPostReplyService.detail(forumPostReplyIdParam));
+    }
+
+}

+ 114 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/entity/ForumPostReply.java

@@ -0,0 +1,114 @@
+/*
+ * 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.postreply.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;
+import java.util.List;
+
+/**
+ * 帖子回复表实体
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+@Getter
+@Setter
+@TableName("FORUM_POST_REPLY")
+public class ForumPostReply {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String replyId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 父回复id,-1表示直接回复帖子 */
+    @ApiModelProperty(value = "父回复id,-1表示直接回复帖子", position = 3)
+    private String parentId;
+
+    /** 回复用户id */
+    @ApiModelProperty(value = "回复用户id", position = 4)
+    private String userId;
+
+    /**
+     * 回复用户昵称
+     */
+    @TableField(exist = false)
+    private String userNickname;
+
+    /**
+     * 回复用户头像
+     */
+    @TableField(exist = false)
+    private String userAvatar;
+
+    /** 回复内容 */
+    @ApiModelProperty(value = "回复内容", position = 5)
+    private String replyContent;
+
+    /** 点赞数 */
+    @ApiModelProperty(value = "点赞数", position = 6)
+    private Integer likeCount;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 7)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 8)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 9)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 10)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 11)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /**
+     * 是否点赞 0 未点赞 1 已点赞
+     */
+    @TableField(exist = false)
+    private Integer isLike;
+
+    /**
+     * 此条回复是否为自己 0 不是 1 是
+     */
+    @TableField(exist = false)
+    private Integer isSelf;
+
+    /**
+     * 二级回复
+     */
+    @TableField(exist = false)
+    private List<ForumPostReply> children;
+}

+ 64 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/entity/ForumPostReplyVo.java

@@ -0,0 +1,64 @@
+package vip.xiaonuo.forum.modular.postreply.entity;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 帖子回复视图对象
+ */
+@Data
+public class ForumPostReplyVo {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String replyId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 父回复id,-1表示直接回复帖子 */
+    @ApiModelProperty(value = "父回复id,-1表示直接回复帖子", position = 3)
+    private String parentId;
+
+    /** 回复用户id */
+    @ApiModelProperty(value = "回复用户id", position = 4)
+    private String userId;
+
+    /**
+     * 回复用户昵称
+     */
+    private String userNickname;
+
+    /** 回复内容 */
+    @ApiModelProperty(value = "回复内容", position = 5)
+    private String replyContent;
+
+    /** 点赞数 */
+    @ApiModelProperty(value = "点赞数", position = 6)
+    private Integer likeCount;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 7)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 8)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 9)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 10)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 11)
+    private String updateUser;
+
+}

+ 34 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/enums/ForumPostReplyEnum.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.postreply.enums;
+
+import lombok.Getter;
+
+/**
+ * 帖子回复表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+@Getter
+public enum ForumPostReplyEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumPostReplyEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/mapper/ForumPostReplyMapper.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.postreply.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
+
+/**
+ * 帖子回复表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+public interface ForumPostReplyMapper extends BaseMapper<ForumPostReply> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/mapper/mapping/ForumPostReplyMapper.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.postreply.mapper.ForumPostReplyMapper">
+
+</mapper>

+ 54 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyAddParam.java

@@ -0,0 +1,54 @@
+/*
+ * 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.postreply.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/07/16 08:47
+ **/
+@Getter
+@Setter
+public class ForumPostReplyAddParam {
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 父回复id,-1表示直接回复帖子 */
+    @ApiModelProperty(value = "父回复id,-1表示直接回复帖子", position = 3)
+    private String parentId;
+
+    /** 回复用户id */
+    @ApiModelProperty(value = "回复用户id", position = 4)
+    private String userId;
+
+    /** 回复内容 */
+    @ApiModelProperty(value = "回复内容", position = 5)
+    private String replyContent;
+
+    /** 点赞数 */
+    @ApiModelProperty(value = "点赞数", position = 6)
+    private Integer likeCount;
+
+}

+ 59 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyEditParam.java

@@ -0,0 +1,59 @@
+/*
+ * 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.postreply.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/07/16 08:47
+ **/
+@Getter
+@Setter
+public class ForumPostReplyEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "replyId不能为空")
+    private String replyId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 父回复id,-1表示直接回复帖子 */
+    @ApiModelProperty(value = "父回复id,-1表示直接回复帖子", position = 3)
+    private String parentId;
+
+    /** 回复用户id */
+    @ApiModelProperty(value = "回复用户id", position = 4)
+    private String userId;
+
+    /** 回复内容 */
+    @ApiModelProperty(value = "回复内容", position = 5)
+    private String replyContent;
+
+    /** 点赞数 */
+    @ApiModelProperty(value = "点赞数", position = 6)
+    private Integer likeCount;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyIdParam.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.postreply.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 帖子回复表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+@Getter
+@Setter
+public class ForumPostReplyIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "replyId不能为空")
+    private String replyId;
+}

+ 56 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/param/ForumPostReplyPageParam.java

@@ -0,0 +1,56 @@
+/*
+ * 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.postreply.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 帖子回复表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+@Getter
+@Setter
+public class ForumPostReplyPageParam {
+
+    /** 当前页 */
+    @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;
+
+    /**
+     * 帖子id
+     */
+    private String postId;
+
+}

+ 82 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/service/ForumPostReplyService.java

@@ -0,0 +1,82 @@
+/*
+ * 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.postreply.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyAddParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyEditParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyIdParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
+
+import java.util.List;
+
+/**
+ * 帖子回复表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+public interface ForumPostReplyService extends IService<ForumPostReply> {
+
+    /**
+     * 获取帖子回复表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    Page<ForumPostReply> page(ForumPostReplyPageParam forumPostReplyPageParam);
+
+    /**
+     * 添加帖子回复表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    CommonResult<String> add(ForumPostReplyAddParam forumPostReplyAddParam);
+
+    /**
+     * 编辑帖子回复表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    CommonResult<String> edit(ForumPostReplyEditParam forumPostReplyEditParam);
+
+    /**
+     * 删除帖子回复表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    void delete(List<ForumPostReplyIdParam> forumPostReplyIdParamList);
+
+    /**
+     * 获取帖子回复表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     */
+    ForumPostReply detail(ForumPostReplyIdParam forumPostReplyIdParam);
+
+    /**
+     * 获取帖子回复表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:47
+     **/
+    ForumPostReply queryEntity(String id);
+
+}

+ 229 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/service/impl/ForumPostReplyServiceImpl.java

@@ -0,0 +1,229 @@
+/*
+ * 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.postreply.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+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.auth.core.pojo.SaBaseLoginUser;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.forum.modular.postinfo.entity.ForumPostInfo;
+import vip.xiaonuo.forum.modular.postinfo.mapper.ForumPostInfoMapper;
+import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
+import vip.xiaonuo.forum.modular.postlike.mapper.ForumPostLikeMapper;
+import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
+import vip.xiaonuo.forum.modular.postreply.mapper.ForumPostReplyMapper;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyAddParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyEditParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyIdParam;
+import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
+import vip.xiaonuo.forum.modular.postreply.service.ForumPostReplyService;
+import vip.xiaonuo.forum.modular.sensitivity.entity.ForumSensitivity;
+import vip.xiaonuo.forum.modular.sensitivity.mapper.ForumSensitivityMapper;
+import vip.xiaonuo.forum.modular.sensitivityrecord.entity.ForumSensitivityRecord;
+import vip.xiaonuo.forum.modular.sensitivityrecord.mapper.ForumSensitivityRecordMapper;
+import vip.xiaonuo.sys.api.SysUserApi;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 帖子回复表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:47
+ **/
+@Service
+public class ForumPostReplyServiceImpl extends ServiceImpl<ForumPostReplyMapper, ForumPostReply> implements ForumPostReplyService {
+
+    @Resource
+    private ForumSensitivityMapper forumSensitivityMapper;
+
+    @Resource
+    private ForumSensitivityRecordMapper forumSensitivityRecordMapper;
+
+    @Resource
+    private SysUserApi sysUserApi;
+
+    @Resource
+    private ForumPostInfoMapper forumPostInfoMapper;
+
+    @Resource
+    private ForumPostLikeMapper forumPostLikeMapper;
+
+
+    @Override
+    public Page<ForumPostReply> page(ForumPostReplyPageParam forumPostReplyPageParam) {
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        // 查询第一层回复帖子
+        QueryWrapper<ForumPostReply> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ForumPostReply::getPostId, forumPostReplyPageParam.getPostId());
+        queryWrapper.lambda().eq(ForumPostReply::getParentId, "-1");
+        queryWrapper.lambda().orderByAsc(ForumPostReply::getCreateTime);
+        Page<ForumPostReply> page = this.page(CommonPageRequest.defaultPage(), queryWrapper);
+        if (page.getRecords().size() > 0) {
+            for (ForumPostReply record : page.getRecords()) {
+                // 回复用户的昵称和头像
+                JSONObject user = sysUserApi.getUserByIdWithException(record.getUserId());
+                record.setUserNickname(user.getStr("name"));
+                record.setUserAvatar(user.getStr("avatar"));
+                // 查询是否点赞
+                QueryWrapper<ForumPostLike> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.lambda().eq(ForumPostLike::getTargetId, record.getReplyId());
+                queryWrapper1.lambda().eq(ForumPostLike::getUserId, loginUser.getId());
+                Long aLong = forumPostLikeMapper.selectCount(queryWrapper1);
+                if (aLong > 0) {
+                    record.setIsLike(1);
+                } else {
+                    record.setIsLike(0);
+                }
+                // 查询此条回复是否为自己的
+                if (record.getUserId().equals(loginUser.getId())) {
+                    record.setIsSelf(1);
+                } else {
+                    record.setIsSelf(0);
+                }
+                // 查询二级回复帖子
+                QueryWrapper<ForumPostReply> queryWrapper2 = new QueryWrapper<>();
+                queryWrapper2.lambda().eq(ForumPostReply::getPostId, forumPostReplyPageParam.getPostId());
+                queryWrapper2.lambda().eq(ForumPostReply::getParentId, record.getReplyId());
+                queryWrapper2.lambda().orderByAsc(ForumPostReply::getCreateTime);
+                List<ForumPostReply> list = this.list(queryWrapper2);
+                if (list.size() > 0) {
+                    for (ForumPostReply forumPostReply : list) {
+                        // 回复用户的昵称和头像
+                        JSONObject replyUser = sysUserApi.getUserByIdWithException(forumPostReply.getUserId());
+                        forumPostReply.setUserNickname(replyUser.getStr("name"));
+                        forumPostReply.setUserAvatar(replyUser.getStr("avatar"));
+                        // 查询是否点赞
+                        QueryWrapper<ForumPostLike> queryWrapper3 = new QueryWrapper<>();
+                        queryWrapper3.lambda().eq(ForumPostLike::getTargetId, forumPostReply.getReplyId());
+                        queryWrapper3.lambda().eq(ForumPostLike::getUserId, loginUser.getId());
+                        Long aLong1 = forumPostLikeMapper.selectCount(queryWrapper1);
+                        if (aLong1 > 0) {
+                            forumPostReply.setIsLike(1);
+                        } else {
+                            forumPostReply.setIsLike(0);
+                        }
+                        // 查询此条回复是否为自己的
+                        if (forumPostReply.getUserId().equals(loginUser.getId())) {
+                            forumPostReply.setIsSelf(1);
+                        } else {
+                            forumPostReply.setIsSelf(0);
+                        }
+                    }
+                    record.setChildren(list);
+                }
+            }
+        }
+        return page;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult<String> add(ForumPostReplyAddParam forumPostReplyAddParam) {
+        ForumPostInfo forumPostInfo = forumPostInfoMapper.selectById(forumPostReplyAddParam.getPostId());
+        String uuid = IdUtil.fastSimpleUUID();
+        ForumPostReply forumPostReply = BeanUtil.toBean(forumPostReplyAddParam, ForumPostReply.class);
+        // 设置用户
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        forumPostReply.setUserId(loginUser.getId());
+        // 过滤敏感词
+        String replyContent = filterSensitivity(forumPostReplyAddParam.getReplyContent(), loginUser, forumPostReplyAddParam.getPostId());
+        forumPostReply.setReplyContent(replyContent);
+        // 存储帖子回复表
+        forumPostReply.setReplyId(uuid);
+        this.save(forumPostReply);
+        // 修改帖子信息中的最后回复
+        forumPostInfo.setLastReplyUserId(loginUser.getId());
+        forumPostInfo.setLastReplyTime(new Date());
+        forumPostInfo.setReplyCount(forumPostInfo.getReplyCount() + 1);
+        forumPostInfoMapper.updateById(forumPostInfo);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 过滤回复中的敏感词
+     *
+     * @param replyContent 回复的富文本
+     */
+    public String filterSensitivity(String replyContent, SaBaseLoginUser loginUser, String postId) {
+        List<ForumSensitivity> forumSensitivities = forumSensitivityMapper.selectList(new QueryWrapper<>());
+        if (forumSensitivities.size() > 0) {
+            // 过滤敏感词
+            for (ForumSensitivity forumSensitivity : forumSensitivities) {
+                // 过滤逻辑
+                if (replyContent.contains(forumSensitivity.getSensitivityWord())) {
+                    // 替换句子中敏感词为*号
+                    replyContent = replyContent.replace(forumSensitivity.getSensitivityWord(), "******");
+                    // 记录敏感词命中情况
+                    ForumSensitivityRecord forumSensitivityRecord = new ForumSensitivityRecord();
+                    forumSensitivityRecord.setSensitivityWord(forumSensitivity.getSensitivityWord()); // 敏感词
+                    forumSensitivityRecord.setUserId(loginUser.getId()); // 用户id
+                    forumSensitivityRecord.setRecordType(1); // 回复类型
+                    forumSensitivityRecord.setPostId(postId); // 帖子id
+                    forumSensitivityRecordMapper.insert(forumSensitivityRecord);
+                }
+            }
+        }
+        return replyContent;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult<String> edit(ForumPostReplyEditParam forumPostReplyEditParam) {
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        ForumPostReply forumPostReply = this.queryEntity(forumPostReplyEditParam.getReplyId());
+        BeanUtil.copyProperties(forumPostReplyEditParam, forumPostReply);
+        // 过滤敏感词
+        String replyContent = filterSensitivity(forumPostReplyEditParam.getReplyContent(), loginUser, forumPostReplyEditParam.getPostId());
+        forumPostReply.setReplyContent(replyContent);
+        this.updateById(forumPostReply);
+        return CommonResult.ok();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumPostReplyIdParam> forumPostReplyIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumPostReplyIdParamList, ForumPostReplyIdParam::getReplyId));
+    }
+
+    @Override
+    public ForumPostReply detail(ForumPostReplyIdParam forumPostReplyIdParam) {
+        return this.queryEntity(forumPostReplyIdParam.getReplyId());
+    }
+
+    @Override
+    public ForumPostReply queryEntity(String id) {
+        ForumPostReply forumPostReply = this.getById(id);
+        if(ObjectUtil.isEmpty(forumPostReply)) {
+            throw new CommonException("帖子回复表不存在,id值为:{}", id);
+        }
+        return forumPostReply;
+    }
+
+}

+ 141 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/controller/ForumPostTypeController.java

@@ -0,0 +1,141 @@
+/*
+ * 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.posttype.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.posttype.entity.ForumPostType;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeAddParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeEditParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeIdParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypePageParam;
+import vip.xiaonuo.forum.modular.posttype.service.ForumPostTypeService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 帖子分类表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ */
+@Api(tags = "帖子分类表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumPostTypeController {
+
+    @Resource
+    private ForumPostTypeService forumPostTypeService;
+
+    /**
+     * 获取帖子分类表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取帖子分类表分页")
+    @SaCheckPermission("/forum/posttype/page")
+    @GetMapping("/forum/posttype/page")
+    public CommonResult<Page<ForumPostType>> page(ForumPostTypePageParam forumPostTypePageParam) {
+        return CommonResult.data(forumPostTypeService.page(forumPostTypePageParam));
+    }
+
+    /**
+     * 添加帖子分类表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加帖子分类表")
+    @CommonLog("添加帖子分类表")
+    @SaCheckPermission("/forum/posttype/add")
+    @PostMapping("/forum/posttype/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumPostTypeAddParam forumPostTypeAddParam) {
+        forumPostTypeService.add(forumPostTypeAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑帖子分类表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑帖子分类表")
+    @CommonLog("编辑帖子分类表")
+    @SaCheckPermission("/forum/posttype/edit")
+    @PostMapping("/forum/posttype/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumPostTypeEditParam forumPostTypeEditParam) {
+        forumPostTypeService.edit(forumPostTypeEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除帖子分类表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除帖子分类表")
+    @CommonLog("删除帖子分类表")
+    @SaCheckPermission("/forum/posttype/delete")
+    @PostMapping("/forum/posttype/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumPostTypeIdParam> forumPostTypeIdParamList) {
+        forumPostTypeService.delete(forumPostTypeIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取帖子分类表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取帖子分类表详情")
+    @SaCheckPermission("/forum/posttype/detail")
+    @GetMapping("/forum/posttype/detail")
+    public CommonResult<ForumPostType> detail(@Valid ForumPostTypeIdParam forumPostTypeIdParam) {
+        return CommonResult.data(forumPostTypeService.detail(forumPostTypeIdParam));
+    }
+
+    /**
+     * 获取帖子分类列表
+     */
+    @GetMapping("/forum/posttype/list")
+    public CommonResult<List<ForumPostType>> list() {
+        return CommonResult.data(forumPostTypeService.list());
+    }
+
+}

+ 71 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/entity/ForumPostType.java

@@ -0,0 +1,71 @@
+/*
+ * 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.posttype.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/07/16 08:43
+ **/
+@Getter
+@Setter
+@TableName("FORUM_POST_TYPE")
+public class ForumPostType {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String typeId;
+
+    /** 分类名称 */
+    @ApiModelProperty(value = "分类名称", position = 2)
+    private String typeName;
+
+    /** 分类描述 */
+    @ApiModelProperty(value = "分类描述", position = 3)
+    private String typeDesc;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 4)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 5)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 6)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 7)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 8)
+    @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/posttype/enums/ForumPostTypeEnum.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.posttype.enums;
+
+import lombok.Getter;
+
+/**
+ * 帖子分类表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ **/
+@Getter
+public enum ForumPostTypeEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumPostTypeEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/mapper/ForumPostTypeMapper.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.posttype.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.posttype.entity.ForumPostType;
+
+/**
+ * 帖子分类表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ **/
+public interface ForumPostTypeMapper extends BaseMapper<ForumPostType> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/mapper/mapping/ForumPostTypeMapper.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.posttype.mapper.ForumPostTypeMapper">
+
+</mapper>

+ 42 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypeAddParam.java

@@ -0,0 +1,42 @@
+/*
+ * 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.posttype.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/07/16 08:43
+ **/
+@Getter
+@Setter
+public class ForumPostTypeAddParam {
+
+    /** 分类名称 */
+    @ApiModelProperty(value = "分类名称", position = 2)
+    private String typeName;
+
+    /** 分类描述 */
+    @ApiModelProperty(value = "分类描述", position = 3)
+    private String typeDesc;
+
+}

+ 47 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypeEditParam.java

@@ -0,0 +1,47 @@
+/*
+ * 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.posttype.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/07/16 08:43
+ **/
+@Getter
+@Setter
+public class ForumPostTypeEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "typeId不能为空")
+    private String typeId;
+
+    /** 分类名称 */
+    @ApiModelProperty(value = "分类名称", position = 2)
+    private String typeName;
+
+    /** 分类描述 */
+    @ApiModelProperty(value = "分类描述", position = 3)
+    private String typeDesc;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypeIdParam.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.posttype.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 帖子分类表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ **/
+@Getter
+@Setter
+public class ForumPostTypeIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "typeId不能为空")
+    private String typeId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/param/ForumPostTypePageParam.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.posttype.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 帖子分类表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ **/
+@Getter
+@Setter
+public class ForumPostTypePageParam {
+
+    /** 当前页 */
+    @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/posttype/service/ForumPostTypeService.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.posttype.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.forum.modular.posttype.entity.ForumPostType;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeAddParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeEditParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeIdParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypePageParam;
+
+import java.util.List;
+
+/**
+ * 帖子分类表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ **/
+public interface ForumPostTypeService extends IService<ForumPostType> {
+
+    /**
+     * 获取帖子分类表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    Page<ForumPostType> page(ForumPostTypePageParam forumPostTypePageParam);
+
+    /**
+     * 添加帖子分类表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    void add(ForumPostTypeAddParam forumPostTypeAddParam);
+
+    /**
+     * 编辑帖子分类表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    void edit(ForumPostTypeEditParam forumPostTypeEditParam);
+
+    /**
+     * 删除帖子分类表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    void delete(List<ForumPostTypeIdParam> forumPostTypeIdParamList);
+
+    /**
+     * 获取帖子分类表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     */
+    ForumPostType detail(ForumPostTypeIdParam forumPostTypeIdParam);
+
+    /**
+     * 获取帖子分类表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:43
+     **/
+    ForumPostType queryEntity(String id);
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/posttype/service/impl/ForumPostTypeServiceImpl.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.posttype.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.posttype.entity.ForumPostType;
+import vip.xiaonuo.forum.modular.posttype.mapper.ForumPostTypeMapper;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeAddParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeEditParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypeIdParam;
+import vip.xiaonuo.forum.modular.posttype.param.ForumPostTypePageParam;
+import vip.xiaonuo.forum.modular.posttype.service.ForumPostTypeService;
+
+import java.util.List;
+
+/**
+ * 帖子分类表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:43
+ **/
+@Service
+public class ForumPostTypeServiceImpl extends ServiceImpl<ForumPostTypeMapper, ForumPostType> implements ForumPostTypeService {
+
+
+    @Override
+    public Page<ForumPostType> page(ForumPostTypePageParam forumPostTypePageParam) {
+        QueryWrapper<ForumPostType> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumPostTypePageParam.getSortField(), forumPostTypePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumPostTypePageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumPostTypePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumPostTypePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumPostType::getTypeId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ForumPostTypeAddParam forumPostTypeAddParam) {
+        ForumPostType forumPostType = BeanUtil.toBean(forumPostTypeAddParam, ForumPostType.class);
+        this.save(forumPostType);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumPostTypeEditParam forumPostTypeEditParam) {
+        ForumPostType forumPostType = this.queryEntity(forumPostTypeEditParam.getTypeId());
+        BeanUtil.copyProperties(forumPostTypeEditParam, forumPostType);
+        this.updateById(forumPostType);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumPostTypeIdParam> forumPostTypeIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumPostTypeIdParamList, ForumPostTypeIdParam::getTypeId));
+    }
+
+    @Override
+    public ForumPostType detail(ForumPostTypeIdParam forumPostTypeIdParam) {
+        return this.queryEntity(forumPostTypeIdParam.getTypeId());
+    }
+
+    @Override
+    public ForumPostType queryEntity(String id) {
+        ForumPostType forumPostType = this.getById(id);
+        if(ObjectUtil.isEmpty(forumPostType)) {
+            throw new CommonException("帖子分类表不存在,id值为:{}", id);
+        }
+        return forumPostType;
+    }
+
+}

+ 132 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/controller/ForumSensitivityController.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.sensitivity.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.sensitivity.entity.ForumSensitivity;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityAddParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityEditParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityIdParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityPageParam;
+import vip.xiaonuo.forum.modular.sensitivity.service.ForumSensitivityService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 论坛-敏感词控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ */
+@Api(tags = "论坛-敏感词控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumSensitivityController {
+
+    @Resource
+    private ForumSensitivityService forumSensitivityService;
+
+    /**
+     * 获取论坛-敏感词分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取论坛-敏感词分页")
+    @SaCheckPermission("/forum/sensitivity/page")
+    @GetMapping("/forum/sensitivity/page")
+    public CommonResult<Page<ForumSensitivity>> page(ForumSensitivityPageParam forumSensitivityPageParam) {
+        return CommonResult.data(forumSensitivityService.page(forumSensitivityPageParam));
+    }
+
+    /**
+     * 添加论坛-敏感词
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加论坛-敏感词")
+    @CommonLog("添加论坛-敏感词")
+    @SaCheckPermission("/forum/sensitivity/add")
+    @PostMapping("/forum/sensitivity/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumSensitivityAddParam forumSensitivityAddParam) {
+        forumSensitivityService.add(forumSensitivityAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑论坛-敏感词
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑论坛-敏感词")
+    @CommonLog("编辑论坛-敏感词")
+    @SaCheckPermission("/forum/sensitivity/edit")
+    @PostMapping("/forum/sensitivity/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumSensitivityEditParam forumSensitivityEditParam) {
+        forumSensitivityService.edit(forumSensitivityEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除论坛-敏感词
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除论坛-敏感词")
+    @CommonLog("删除论坛-敏感词")
+    @SaCheckPermission("/forum/sensitivity/delete")
+    @PostMapping("/forum/sensitivity/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumSensitivityIdParam> forumSensitivityIdParamList) {
+        forumSensitivityService.delete(forumSensitivityIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取论坛-敏感词详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取论坛-敏感词详情")
+    @SaCheckPermission("/forum/sensitivity/detail")
+    @GetMapping("/forum/sensitivity/detail")
+    public CommonResult<ForumSensitivity> detail(@Valid ForumSensitivityIdParam forumSensitivityIdParam) {
+        return CommonResult.data(forumSensitivityService.detail(forumSensitivityIdParam));
+    }
+
+}

+ 67 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/entity/ForumSensitivity.java

@@ -0,0 +1,67 @@
+/*
+ * 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.sensitivity.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/07/15 11:07
+ **/
+@Getter
+@Setter
+@TableName("FORUM_SENSITIVITY")
+public class ForumSensitivity {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String sensitivityId;
+
+    /** 敏感词 */
+    @ApiModelProperty(value = "敏感词", position = 2)
+    private String sensitivityWord;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 3)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 4)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 5)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 6)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 7)
+    @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/sensitivity/enums/ForumSensitivityEnum.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.sensitivity.enums;
+
+import lombok.Getter;
+
+/**
+ * 论坛-敏感词枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ **/
+@Getter
+public enum ForumSensitivityEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumSensitivityEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/mapper/ForumSensitivityMapper.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.sensitivity.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.sensitivity.entity.ForumSensitivity;
+
+/**
+ * 论坛-敏感词Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ **/
+public interface ForumSensitivityMapper extends BaseMapper<ForumSensitivity> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/mapper/mapping/ForumSensitivityMapper.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.sensitivity.mapper.ForumSensitivityMapper">
+
+</mapper>

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

@@ -0,0 +1,38 @@
+/*
+ * 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.sensitivity.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/07/15 11:07
+ **/
+@Getter
+@Setter
+public class ForumSensitivityAddParam {
+
+    /** 敏感词 */
+    @ApiModelProperty(value = "敏感词", position = 2)
+    private String sensitivityWord;
+
+}

+ 43 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityEditParam.java

@@ -0,0 +1,43 @@
+/*
+ * 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.sensitivity.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/07/15 11:07
+ **/
+@Getter
+@Setter
+public class ForumSensitivityEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "sensitivityId不能为空")
+    private String sensitivityId;
+
+    /** 敏感词 */
+    @ApiModelProperty(value = "敏感词", position = 2)
+    private String sensitivityWord;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityIdParam.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.sensitivity.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 论坛-敏感词Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ **/
+@Getter
+@Setter
+public class ForumSensitivityIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "sensitivityId不能为空")
+    private String sensitivityId;
+}

+ 55 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/param/ForumSensitivityPageParam.java

@@ -0,0 +1,55 @@
+/*
+ * 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.sensitivity.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-敏感词查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ **/
+@Getter
+@Setter
+public class ForumSensitivityPageParam {
+
+    /** 当前页 */
+    @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;
+
+    /** 敏感词 */
+    @ApiModelProperty(value = "敏感词")
+    private String sensitivityWord;
+
+}

+ 81 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/service/ForumSensitivityService.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.sensitivity.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.forum.modular.sensitivity.entity.ForumSensitivity;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityAddParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityEditParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityIdParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityPageParam;
+
+import java.util.List;
+
+/**
+ * 论坛-敏感词Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ **/
+public interface ForumSensitivityService extends IService<ForumSensitivity> {
+
+    /**
+     * 获取论坛-敏感词分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    Page<ForumSensitivity> page(ForumSensitivityPageParam forumSensitivityPageParam);
+
+    /**
+     * 添加论坛-敏感词
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    void add(ForumSensitivityAddParam forumSensitivityAddParam);
+
+    /**
+     * 编辑论坛-敏感词
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    void edit(ForumSensitivityEditParam forumSensitivityEditParam);
+
+    /**
+     * 删除论坛-敏感词
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    void delete(List<ForumSensitivityIdParam> forumSensitivityIdParamList);
+
+    /**
+     * 获取论坛-敏感词详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     */
+    ForumSensitivity detail(ForumSensitivityIdParam forumSensitivityIdParam);
+
+    /**
+     * 获取论坛-敏感词详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/15 11:07
+     **/
+    ForumSensitivity queryEntity(String id);
+
+}

+ 99 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivity/service/impl/ForumSensitivityServiceImpl.java

@@ -0,0 +1,99 @@
+/*
+ * 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.sensitivity.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.sensitivity.entity.ForumSensitivity;
+import vip.xiaonuo.forum.modular.sensitivity.mapper.ForumSensitivityMapper;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityAddParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityEditParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityIdParam;
+import vip.xiaonuo.forum.modular.sensitivity.param.ForumSensitivityPageParam;
+import vip.xiaonuo.forum.modular.sensitivity.service.ForumSensitivityService;
+
+import java.util.List;
+
+/**
+ * 论坛-敏感词Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/15 11:07
+ **/
+@Service
+public class ForumSensitivityServiceImpl extends ServiceImpl<ForumSensitivityMapper, ForumSensitivity> implements ForumSensitivityService {
+
+
+    @Override
+    public Page<ForumSensitivity> page(ForumSensitivityPageParam forumSensitivityPageParam) {
+        QueryWrapper<ForumSensitivity> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(forumSensitivityPageParam.getSensitivityWord())) {
+            queryWrapper.lambda().like(ForumSensitivity::getSensitivityWord, forumSensitivityPageParam.getSensitivityWord());
+        }
+        if(ObjectUtil.isAllNotEmpty(forumSensitivityPageParam.getSortField(), forumSensitivityPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumSensitivityPageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumSensitivityPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumSensitivityPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumSensitivity::getSensitivityId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ForumSensitivityAddParam forumSensitivityAddParam) {
+        ForumSensitivity forumSensitivity = BeanUtil.toBean(forumSensitivityAddParam, ForumSensitivity.class);
+        this.save(forumSensitivity);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumSensitivityEditParam forumSensitivityEditParam) {
+        ForumSensitivity forumSensitivity = this.queryEntity(forumSensitivityEditParam.getSensitivityId());
+        BeanUtil.copyProperties(forumSensitivityEditParam, forumSensitivity);
+        this.updateById(forumSensitivity);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumSensitivityIdParam> forumSensitivityIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumSensitivityIdParamList, ForumSensitivityIdParam::getSensitivityId));
+    }
+
+    @Override
+    public ForumSensitivity detail(ForumSensitivityIdParam forumSensitivityIdParam) {
+        return this.queryEntity(forumSensitivityIdParam.getSensitivityId());
+    }
+
+    @Override
+    public ForumSensitivity queryEntity(String id) {
+        ForumSensitivity forumSensitivity = this.getById(id);
+        if(ObjectUtil.isEmpty(forumSensitivity)) {
+            throw new CommonException("论坛-敏感词不存在,id值为:{}", id);
+        }
+        return forumSensitivity;
+    }
+
+}

+ 132 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/controller/ForumSensitivityRecordController.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.sensitivityrecord.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.sensitivityrecord.entity.ForumSensitivityRecord;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordAddParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordEditParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordIdParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordPageParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.service.ForumSensitivityRecordService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 敏感词过滤记录控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ */
+@Api(tags = "敏感词过滤记录控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumSensitivityRecordController {
+
+    @Resource
+    private ForumSensitivityRecordService forumSensitivityRecordService;
+
+    /**
+     * 获取敏感词过滤记录分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取敏感词过滤记录分页")
+    @SaCheckPermission("/forum/sensitivityrecord/page")
+    @GetMapping("/forum/sensitivityrecord/page")
+    public CommonResult<Page<ForumSensitivityRecord>> page(ForumSensitivityRecordPageParam forumSensitivityRecordPageParam) {
+        return CommonResult.data(forumSensitivityRecordService.page(forumSensitivityRecordPageParam));
+    }
+
+    /**
+     * 添加敏感词过滤记录
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加敏感词过滤记录")
+    @CommonLog("添加敏感词过滤记录")
+    @SaCheckPermission("/forum/sensitivityrecord/add")
+    @PostMapping("/forum/sensitivityrecord/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumSensitivityRecordAddParam forumSensitivityRecordAddParam) {
+        forumSensitivityRecordService.add(forumSensitivityRecordAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑敏感词过滤记录
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑敏感词过滤记录")
+    @CommonLog("编辑敏感词过滤记录")
+    @SaCheckPermission("/forum/sensitivityrecord/edit")
+    @PostMapping("/forum/sensitivityrecord/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumSensitivityRecordEditParam forumSensitivityRecordEditParam) {
+        forumSensitivityRecordService.edit(forumSensitivityRecordEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除敏感词过滤记录
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除敏感词过滤记录")
+    @CommonLog("删除敏感词过滤记录")
+    @SaCheckPermission("/forum/sensitivityrecord/delete")
+    @PostMapping("/forum/sensitivityrecord/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumSensitivityRecordIdParam> forumSensitivityRecordIdParamList) {
+        forumSensitivityRecordService.delete(forumSensitivityRecordIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取敏感词过滤记录详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取敏感词过滤记录详情")
+    @SaCheckPermission("/forum/sensitivityrecord/detail")
+    @GetMapping("/forum/sensitivityrecord/detail")
+    public CommonResult<ForumSensitivityRecord> detail(@Valid ForumSensitivityRecordIdParam forumSensitivityRecordIdParam) {
+        return CommonResult.data(forumSensitivityRecordService.detail(forumSensitivityRecordIdParam));
+    }
+
+}

+ 79 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/entity/ForumSensitivityRecord.java

@@ -0,0 +1,79 @@
+/*
+ * 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.sensitivityrecord.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/07/16 08:41
+ **/
+@Getter
+@Setter
+@TableName("FORUM_SENSITIVITY_RECORD")
+public class ForumSensitivityRecord {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String recordId;
+
+    /** 过滤词语 */
+    @ApiModelProperty(value = "过滤词语", position = 2)
+    private String sensitivityWord;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 3)
+    private String postId;
+
+    /** 过滤类型 0发帖 1回复 */
+    @ApiModelProperty(value = "过滤类型 0发帖 1回复", position = 4)
+    private Integer recordType;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 5)
+    private String userId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 6)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 7)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 8)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 9)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 10)
+    @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/sensitivityrecord/enums/ForumSensitivityRecordEnum.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.sensitivityrecord.enums;
+
+import lombok.Getter;
+
+/**
+ * 敏感词过滤记录枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ **/
+@Getter
+public enum ForumSensitivityRecordEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumSensitivityRecordEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/mapper/ForumSensitivityRecordMapper.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.sensitivityrecord.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.sensitivityrecord.entity.ForumSensitivityRecord;
+
+/**
+ * 敏感词过滤记录Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ **/
+public interface ForumSensitivityRecordMapper extends BaseMapper<ForumSensitivityRecord> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/mapper/mapping/ForumSensitivityRecordMapper.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.sensitivityrecord.mapper.ForumSensitivityRecordMapper">
+
+</mapper>

+ 50 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordAddParam.java

@@ -0,0 +1,50 @@
+/*
+ * 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.sensitivityrecord.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/07/16 08:41
+ **/
+@Getter
+@Setter
+public class ForumSensitivityRecordAddParam {
+
+    /** 过滤词语 */
+    @ApiModelProperty(value = "过滤词语", position = 2)
+    private String sensitivityWord;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 3)
+    private String postId;
+
+    /** 过滤类型 0发帖 1回复 */
+    @ApiModelProperty(value = "过滤类型 0发帖 1回复", position = 4)
+    private Integer recordType;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 5)
+    private String userId;
+
+}

+ 55 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordEditParam.java

@@ -0,0 +1,55 @@
+/*
+ * 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.sensitivityrecord.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/07/16 08:41
+ **/
+@Getter
+@Setter
+public class ForumSensitivityRecordEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "recordId不能为空")
+    private String recordId;
+
+    /** 过滤词语 */
+    @ApiModelProperty(value = "过滤词语", position = 2)
+    private String sensitivityWord;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 3)
+    private String postId;
+
+    /** 过滤类型 0发帖 1回复 */
+    @ApiModelProperty(value = "过滤类型 0发帖 1回复", position = 4)
+    private Integer recordType;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 5)
+    private String userId;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordIdParam.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.sensitivityrecord.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 敏感词过滤记录Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ **/
+@Getter
+@Setter
+public class ForumSensitivityRecordIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "recordId不能为空")
+    private String recordId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/param/ForumSensitivityRecordPageParam.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.sensitivityrecord.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 敏感词过滤记录查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ **/
+@Getter
+@Setter
+public class ForumSensitivityRecordPageParam {
+
+    /** 当前页 */
+    @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/sensitivityrecord/service/ForumSensitivityRecordService.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.sensitivityrecord.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.forum.modular.sensitivityrecord.entity.ForumSensitivityRecord;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordAddParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordEditParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordIdParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordPageParam;
+
+import java.util.List;
+
+/**
+ * 敏感词过滤记录Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ **/
+public interface ForumSensitivityRecordService extends IService<ForumSensitivityRecord> {
+
+    /**
+     * 获取敏感词过滤记录分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    Page<ForumSensitivityRecord> page(ForumSensitivityRecordPageParam forumSensitivityRecordPageParam);
+
+    /**
+     * 添加敏感词过滤记录
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    void add(ForumSensitivityRecordAddParam forumSensitivityRecordAddParam);
+
+    /**
+     * 编辑敏感词过滤记录
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    void edit(ForumSensitivityRecordEditParam forumSensitivityRecordEditParam);
+
+    /**
+     * 删除敏感词过滤记录
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    void delete(List<ForumSensitivityRecordIdParam> forumSensitivityRecordIdParamList);
+
+    /**
+     * 获取敏感词过滤记录详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     */
+    ForumSensitivityRecord detail(ForumSensitivityRecordIdParam forumSensitivityRecordIdParam);
+
+    /**
+     * 获取敏感词过滤记录详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:41
+     **/
+    ForumSensitivityRecord queryEntity(String id);
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/sensitivityrecord/service/impl/ForumSensitivityRecordServiceImpl.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.sensitivityrecord.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.sensitivityrecord.entity.ForumSensitivityRecord;
+import vip.xiaonuo.forum.modular.sensitivityrecord.mapper.ForumSensitivityRecordMapper;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordAddParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordEditParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordIdParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.param.ForumSensitivityRecordPageParam;
+import vip.xiaonuo.forum.modular.sensitivityrecord.service.ForumSensitivityRecordService;
+
+import java.util.List;
+
+/**
+ * 敏感词过滤记录Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:41
+ **/
+@Service
+public class ForumSensitivityRecordServiceImpl extends ServiceImpl<ForumSensitivityRecordMapper, ForumSensitivityRecord> implements ForumSensitivityRecordService {
+
+
+    @Override
+    public Page<ForumSensitivityRecord> page(ForumSensitivityRecordPageParam forumSensitivityRecordPageParam) {
+        QueryWrapper<ForumSensitivityRecord> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumSensitivityRecordPageParam.getSortField(), forumSensitivityRecordPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumSensitivityRecordPageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumSensitivityRecordPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumSensitivityRecordPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumSensitivityRecord::getRecordId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ForumSensitivityRecordAddParam forumSensitivityRecordAddParam) {
+        ForumSensitivityRecord forumSensitivityRecord = BeanUtil.toBean(forumSensitivityRecordAddParam, ForumSensitivityRecord.class);
+        this.save(forumSensitivityRecord);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumSensitivityRecordEditParam forumSensitivityRecordEditParam) {
+        ForumSensitivityRecord forumSensitivityRecord = this.queryEntity(forumSensitivityRecordEditParam.getRecordId());
+        BeanUtil.copyProperties(forumSensitivityRecordEditParam, forumSensitivityRecord);
+        this.updateById(forumSensitivityRecord);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumSensitivityRecordIdParam> forumSensitivityRecordIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumSensitivityRecordIdParamList, ForumSensitivityRecordIdParam::getRecordId));
+    }
+
+    @Override
+    public ForumSensitivityRecord detail(ForumSensitivityRecordIdParam forumSensitivityRecordIdParam) {
+        return this.queryEntity(forumSensitivityRecordIdParam.getRecordId());
+    }
+
+    @Override
+    public ForumSensitivityRecord queryEntity(String id) {
+        ForumSensitivityRecord forumSensitivityRecord = this.getById(id);
+        if(ObjectUtil.isEmpty(forumSensitivityRecord)) {
+            throw new CommonException("敏感词过滤记录不存在,id值为:{}", id);
+        }
+        return forumSensitivityRecord;
+    }
+
+}

+ 132 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/controller/ForumSupportEnvController.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.supportenv.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.supportenv.entity.ForumSupportEnv;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvAddParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvEditParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvIdParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvPageParam;
+import vip.xiaonuo.forum.modular.supportenv.service.ForumSupportEnvService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 技术支持表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ */
+@Api(tags = "技术支持表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumSupportEnvController {
+
+    @Resource
+    private ForumSupportEnvService forumSupportEnvService;
+
+    /**
+     * 获取技术支持表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取技术支持表分页")
+    @SaCheckPermission("/forum/supportenv/page")
+    @GetMapping("/forum/supportenv/page")
+    public CommonResult<Page<ForumSupportEnv>> page(ForumSupportEnvPageParam forumSupportEnvPageParam) {
+        return CommonResult.data(forumSupportEnvService.page(forumSupportEnvPageParam));
+    }
+
+    /**
+     * 添加技术支持表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加技术支持表")
+    @CommonLog("添加技术支持表")
+    @SaCheckPermission("/forum/supportenv/add")
+    @PostMapping("/forum/supportenv/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumSupportEnvAddParam forumSupportEnvAddParam) {
+        forumSupportEnvService.add(forumSupportEnvAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑技术支持表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑技术支持表")
+    @CommonLog("编辑技术支持表")
+    @SaCheckPermission("/forum/supportenv/edit")
+    @PostMapping("/forum/supportenv/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumSupportEnvEditParam forumSupportEnvEditParam) {
+        forumSupportEnvService.edit(forumSupportEnvEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除技术支持表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除技术支持表")
+    @CommonLog("删除技术支持表")
+    @SaCheckPermission("/forum/supportenv/delete")
+    @PostMapping("/forum/supportenv/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumSupportEnvIdParam> forumSupportEnvIdParamList) {
+        forumSupportEnvService.delete(forumSupportEnvIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取技术支持表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取技术支持表详情")
+    @SaCheckPermission("/forum/supportenv/detail")
+    @GetMapping("/forum/supportenv/detail")
+    public CommonResult<ForumSupportEnv> detail(@Valid ForumSupportEnvIdParam forumSupportEnvIdParam) {
+        return CommonResult.data(forumSupportEnvService.detail(forumSupportEnvIdParam));
+    }
+
+}

+ 87 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/entity/ForumSupportEnv.java

@@ -0,0 +1,87 @@
+/*
+ * 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.supportenv.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/07/16 08:48
+ **/
+@Getter
+@Setter
+@TableName("FORUM_SUPPORT_ENV")
+public class ForumSupportEnv {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String envId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 浏览器类型 */
+    @ApiModelProperty(value = "浏览器类型", position = 3)
+    private String browserType;
+
+    /** 浏览器版本 */
+    @ApiModelProperty(value = "浏览器版本", position = 4)
+    private String browserVersion;
+
+    /** 操作系统 */
+    @ApiModelProperty(value = "操作系统", position = 5)
+    private String osType;
+
+    /** 操作系统版本 */
+    @ApiModelProperty(value = "操作系统版本", position = 6)
+    private String osVersion;
+
+    /** 设备类型 0PC 1安卓 2IOS 3鸿蒙 */
+    @ApiModelProperty(value = "设备类型 0PC 1安卓 2IOS 3鸿蒙", position = 7)
+    private String deviceType;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 8)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 9)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 10)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 11)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 12)
+    @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/supportenv/enums/ForumSupportEnvEnum.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.supportenv.enums;
+
+import lombok.Getter;
+
+/**
+ * 技术支持表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ **/
+@Getter
+public enum ForumSupportEnvEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumSupportEnvEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/mapper/ForumSupportEnvMapper.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.supportenv.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.supportenv.entity.ForumSupportEnv;
+
+/**
+ * 技术支持表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ **/
+public interface ForumSupportEnvMapper extends BaseMapper<ForumSupportEnv> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/mapper/mapping/ForumSupportEnvMapper.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.supportenv.mapper.ForumSupportEnvMapper">
+
+</mapper>

+ 58 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvAddParam.java

@@ -0,0 +1,58 @@
+/*
+ * 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.supportenv.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/07/16 08:48
+ **/
+@Getter
+@Setter
+public class ForumSupportEnvAddParam {
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 浏览器类型 */
+    @ApiModelProperty(value = "浏览器类型", position = 3)
+    private String browserType;
+
+    /** 浏览器版本 */
+    @ApiModelProperty(value = "浏览器版本", position = 4)
+    private String browserVersion;
+
+    /** 操作系统 */
+    @ApiModelProperty(value = "操作系统", position = 5)
+    private String osType;
+
+    /** 操作系统版本 */
+    @ApiModelProperty(value = "操作系统版本", position = 6)
+    private String osVersion;
+
+    /** 设备类型 0PC 1安卓 2IOS 3鸿蒙 */
+    @ApiModelProperty(value = "设备类型 0PC 1安卓 2IOS 3鸿蒙", position = 7)
+    private String deviceType;
+
+}

+ 63 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * 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.supportenv.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/07/16 08:48
+ **/
+@Getter
+@Setter
+public class ForumSupportEnvEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "envId不能为空")
+    private String envId;
+
+    /** 帖子id */
+    @ApiModelProperty(value = "帖子id", position = 2)
+    private String postId;
+
+    /** 浏览器类型 */
+    @ApiModelProperty(value = "浏览器类型", position = 3)
+    private String browserType;
+
+    /** 浏览器版本 */
+    @ApiModelProperty(value = "浏览器版本", position = 4)
+    private String browserVersion;
+
+    /** 操作系统 */
+    @ApiModelProperty(value = "操作系统", position = 5)
+    private String osType;
+
+    /** 操作系统版本 */
+    @ApiModelProperty(value = "操作系统版本", position = 6)
+    private String osVersion;
+
+    /** 设备类型 0PC 1安卓 2IOS 3鸿蒙 */
+    @ApiModelProperty(value = "设备类型 0PC 1安卓 2IOS 3鸿蒙", position = 7)
+    private String deviceType;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvIdParam.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.supportenv.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 技术支持表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ **/
+@Getter
+@Setter
+public class ForumSupportEnvIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "envId不能为空")
+    private String envId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/param/ForumSupportEnvPageParam.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.supportenv.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 技术支持表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ **/
+@Getter
+@Setter
+public class ForumSupportEnvPageParam {
+
+    /** 当前页 */
+    @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/supportenv/service/ForumSupportEnvService.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.supportenv.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.forum.modular.supportenv.entity.ForumSupportEnv;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvAddParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvEditParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvIdParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvPageParam;
+
+import java.util.List;
+
+/**
+ * 技术支持表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ **/
+public interface ForumSupportEnvService extends IService<ForumSupportEnv> {
+
+    /**
+     * 获取技术支持表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    Page<ForumSupportEnv> page(ForumSupportEnvPageParam forumSupportEnvPageParam);
+
+    /**
+     * 添加技术支持表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    void add(ForumSupportEnvAddParam forumSupportEnvAddParam);
+
+    /**
+     * 编辑技术支持表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    void edit(ForumSupportEnvEditParam forumSupportEnvEditParam);
+
+    /**
+     * 删除技术支持表
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    void delete(List<ForumSupportEnvIdParam> forumSupportEnvIdParamList);
+
+    /**
+     * 获取技术支持表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     */
+    ForumSupportEnv detail(ForumSupportEnvIdParam forumSupportEnvIdParam);
+
+    /**
+     * 获取技术支持表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:48
+     **/
+    ForumSupportEnv queryEntity(String id);
+
+}

+ 96 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/supportenv/service/impl/ForumSupportEnvServiceImpl.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.supportenv.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.supportenv.entity.ForumSupportEnv;
+import vip.xiaonuo.forum.modular.supportenv.mapper.ForumSupportEnvMapper;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvAddParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvEditParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvIdParam;
+import vip.xiaonuo.forum.modular.supportenv.param.ForumSupportEnvPageParam;
+import vip.xiaonuo.forum.modular.supportenv.service.ForumSupportEnvService;
+
+import java.util.List;
+
+/**
+ * 技术支持表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/16 08:48
+ **/
+@Service
+public class ForumSupportEnvServiceImpl extends ServiceImpl<ForumSupportEnvMapper, ForumSupportEnv> implements ForumSupportEnvService {
+
+
+    @Override
+    public Page<ForumSupportEnv> page(ForumSupportEnvPageParam forumSupportEnvPageParam) {
+        QueryWrapper<ForumSupportEnv> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumSupportEnvPageParam.getSortField(), forumSupportEnvPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumSupportEnvPageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumSupportEnvPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumSupportEnvPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumSupportEnv::getEnvId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ForumSupportEnvAddParam forumSupportEnvAddParam) {
+        ForumSupportEnv forumSupportEnv = BeanUtil.toBean(forumSupportEnvAddParam, ForumSupportEnv.class);
+        this.save(forumSupportEnv);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumSupportEnvEditParam forumSupportEnvEditParam) {
+        ForumSupportEnv forumSupportEnv = this.queryEntity(forumSupportEnvEditParam.getEnvId());
+        BeanUtil.copyProperties(forumSupportEnvEditParam, forumSupportEnv);
+        this.updateById(forumSupportEnv);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumSupportEnvIdParam> forumSupportEnvIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumSupportEnvIdParamList, ForumSupportEnvIdParam::getEnvId));
+    }
+
+    @Override
+    public ForumSupportEnv detail(ForumSupportEnvIdParam forumSupportEnvIdParam) {
+        return this.queryEntity(forumSupportEnvIdParam.getEnvId());
+    }
+
+    @Override
+    public ForumSupportEnv queryEntity(String id) {
+        ForumSupportEnv forumSupportEnv = this.getById(id);
+        if(ObjectUtil.isEmpty(forumSupportEnv)) {
+            throw new CommonException("技术支持表不存在,id值为:{}", id);
+        }
+        return forumSupportEnv;
+    }
+
+}