Jelajahi Sumber

1.在线论坛:开发帖子举报功能、审核举报功能

jasonk5949 7 bulan lalu
induk
melakukan
1bdd3e0b3c
15 mengubah file dengan 834 tambahan dan 0 penghapusan
  1. 14 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/controller/ForumPostInfoController.java
  2. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/param/ForumPostInfoPageParam.java
  3. 8 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/ForumPostInfoService.java
  4. 92 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/impl/ForumPostInfoServiceImpl.java
  5. 138 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/controller/ForumReportInfoController.java
  6. 87 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/entity/ForumReportInfo.java
  7. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/enums/ForumReportInfoEnum.java
  8. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/mapper/ForumReportInfoMapper.java
  9. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/mapper/mapping/ForumReportInfoMapper.xml
  10. 58 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoAddParam.java
  11. 63 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoEditParam.java
  12. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoIdParam.java
  13. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoPageParam.java
  14. 86 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/service/ForumReportInfoService.java
  15. 133 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/service/impl/ForumReportInfoServiceImpl.java

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

@@ -146,4 +146,18 @@ public class ForumPostInfoController {
         return CommonResult.data(forumPostInfoService.detail(forumPostInfoIdParam));
         return CommonResult.data(forumPostInfoService.detail(forumPostInfoIdParam));
     }
     }
 
 
+    /**
+     * 帖子列表扩展
+     * 1.查询我发布的
+     * 2.查询我回复的
+     * 3.查询关于我的
+     * 4.查询我点赞的
+     */
+    @GetMapping("/forum/postinfo/moreList")
+    public CommonResult<Page<ForumPostInfo>> moreList(ForumPostInfoPageParam forumPostInfoPageParam) {
+        return CommonResult.data(forumPostInfoService.moreList(forumPostInfoPageParam));
+    }
+
+
+
 }
 }

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

@@ -62,4 +62,9 @@ public class ForumPostInfoPageParam {
     @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
     @ApiModelProperty(value = "帖子类型 0普通帖子 1技术支持 2内容纠错", position = 17)
     private Integer postType;
     private Integer postType;
 
 
+    /**
+     * 帖子扩展列表 1.查询我发布的 2.查询我回复的 3.查询关于我的 4.查询我点赞的
+     */
+    private Integer postExtend;
+
 }
 }

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

@@ -94,4 +94,12 @@ public interface ForumPostInfoService extends IService<ForumPostInfo> {
      * @param jsonObject 帖子id,是否关闭
      * @param jsonObject 帖子id,是否关闭
      */
      */
     CommonResult<String> close(JSONObject jsonObject);
     CommonResult<String> close(JSONObject jsonObject);
+
+    /**
+     * 帖子列表扩展
+     *
+     * @author 金吉龙
+     * @date  2025/07/16 08:46
+     */
+    Page<ForumPostInfo> moreList(ForumPostInfoPageParam forumPostInfoPageParam);
 }
 }

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

@@ -41,6 +41,9 @@ import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoEditParam;
 import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoIdParam;
 import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoIdParam;
 import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoPageParam;
 import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoPageParam;
 import vip.xiaonuo.forum.modular.postinfo.service.ForumPostInfoService;
 import vip.xiaonuo.forum.modular.postinfo.service.ForumPostInfoService;
+import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
+import vip.xiaonuo.forum.modular.postlike.mapper.ForumPostLikeMapper;
+import vip.xiaonuo.forum.modular.postlike.service.ForumPostLikeService;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
 import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
 import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
 import vip.xiaonuo.forum.modular.postreply.service.ForumPostReplyService;
 import vip.xiaonuo.forum.modular.postreply.service.ForumPostReplyService;
@@ -55,7 +58,9 @@ import vip.xiaonuo.forum.modular.supportenv.mapper.ForumSupportEnvMapper;
 import vip.xiaonuo.sys.api.SysUserApi;
 import vip.xiaonuo.sys.api.SysUserApi;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 帖子信息表Service接口实现类
  * 帖子信息表Service接口实现类
@@ -88,6 +93,10 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
     @Lazy
     @Lazy
     private ForumPostReplyService forumPostReplyService;
     private ForumPostReplyService forumPostReplyService;
 
 
+    @Resource
+    @Lazy
+    private ForumPostLikeService forumPostLikeService;
+
 
 
     @Override
     @Override
     public Page<ForumPostInfo> page(ForumPostInfoPageParam forumPostInfoPageParam) {
     public Page<ForumPostInfo> page(ForumPostInfoPageParam forumPostInfoPageParam) {
@@ -353,4 +362,87 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
         }
         }
     }
     }
 
 
+    @Override
+    public Page<ForumPostInfo> moreList(ForumPostInfoPageParam forumPostInfoPageParam) {
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        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());
+        }
+        // 帖子扩展类型 1.查询我发布的 2.查询我回复的 3.查询关于我的 4.查询我点赞的
+        if (forumPostInfoPageParam.getPostExtend() == 1) {
+            queryWrapper.lambda().eq(ForumPostInfo::getUserId, loginUser.getId());
+        } else if (forumPostInfoPageParam.getPostExtend() == 2) {
+            QueryWrapper<ForumPostReply> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.lambda().eq(ForumPostReply::getUserId, StpLoginUserUtil.getLoginUser().getId());
+            List<String> postIds = forumPostReplyService.list(queryWrapper1).stream().map(ForumPostReply::getPostId).collect(Collectors.toList());
+            if (postIds.size() > 0) {
+                queryWrapper.lambda().in(ForumPostInfo::getPostId, postIds);
+            }
+        } else if (forumPostInfoPageParam.getPostExtend() == 3) {
+            queryWrapper.apply("FIND_IN_SET({0}, APPOINT_USER) > 0", loginUser.getAccount());
+        } else if (forumPostInfoPageParam.getPostExtend() == 4) {
+            QueryWrapper<ForumPostLike> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.lambda().eq(ForumPostLike::getUserId, loginUser.getId());
+            List<ForumPostLike> list = forumPostLikeService.list(queryWrapper1);
+            List<String> postIds = new ArrayList<>();
+            for (ForumPostLike forumPostLike : list) {
+                // 因为点赞有两个类型,其中有一个是点赞回复的,所以点赞回复的还需要关联查一下帖子
+                if (forumPostLike.getLikeType() == 1) {
+                    QueryWrapper<ForumPostReply> queryWrapper2 = new QueryWrapper<>();
+                    queryWrapper2.lambda().eq(ForumPostReply::getReplyId, forumPostLike.getTargetId());
+                    List<String> postIds1 = forumPostReplyService.list(queryWrapper2).stream().map(ForumPostReply::getPostId).collect(Collectors.toList());
+                    postIds.addAll(postIds1);
+                } else {
+                    postIds.add(forumPostLike.getTargetId());
+                }
+            }
+            if (postIds.size() > 0) {
+                queryWrapper.lambda().in(ForumPostInfo::getPostId, postIds);
+            }
+        }
+        // 置顶的优先
+        queryWrapper.lambda().orderByDesc(ForumPostInfo::getIsTop).orderByDesc(ForumPostInfo::getCreateTime);
+        // 帖子状态 0正常
+        queryWrapper.lambda().eq(ForumPostInfo::getPostStatus, 0);
+        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;
+    }
+
 }
 }

+ 138 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/controller/ForumReportInfoController.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.reportinfo.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.reportinfo.entity.ForumReportInfo;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoAddParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoEditParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoIdParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoPageParam;
+import vip.xiaonuo.forum.modular.reportinfo.service.ForumReportInfoService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 论坛-帖子举报信息表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/07/17 16:39
+ */
+@Api(tags = "论坛-帖子举报信息表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumReportInfoController {
+
+    @Resource
+    private ForumReportInfoService forumReportInfoService;
+
+    /**
+     * 获取论坛-帖子举报信息表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取论坛-帖子举报信息表分页")
+    @SaCheckPermission("/forum/reportinfo/page")
+    @GetMapping("/forum/reportinfo/page")
+    public CommonResult<Page<ForumReportInfo>> page(ForumReportInfoPageParam forumReportInfoPageParam) {
+        return CommonResult.data(forumReportInfoService.page(forumReportInfoPageParam));
+    }
+
+    /**
+     * 举报帖子
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加论坛-帖子举报信息表")
+    @CommonLog("添加论坛-帖子举报信息表")
+    @PostMapping("/forum/reportinfo/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumReportInfoAddParam forumReportInfoAddParam) {
+        return forumReportInfoService.add(forumReportInfoAddParam);
+    }
+
+    /**
+     * 后台-管理员处理举报
+     */
+    @PostMapping("/forum/reportinfo/adminHandle")
+    public CommonResult<String> adminHandle(@RequestBody @Valid ForumReportInfoEditParam forumReportInfoEditParam) {
+        return forumReportInfoService.adminHandle(forumReportInfoEditParam);
+    }
+
+    /**
+     * 编辑论坛-帖子举报信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑论坛-帖子举报信息表")
+    @CommonLog("编辑论坛-帖子举报信息表")
+    @SaCheckPermission("/forum/reportinfo/edit")
+    @PostMapping("/forum/reportinfo/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumReportInfoEditParam forumReportInfoEditParam) {
+        forumReportInfoService.edit(forumReportInfoEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除论坛-帖子举报信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除论坛-帖子举报信息表")
+    @CommonLog("删除论坛-帖子举报信息表")
+    @SaCheckPermission("/forum/reportinfo/delete")
+    @PostMapping("/forum/reportinfo/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumReportInfoIdParam> forumReportInfoIdParamList) {
+        forumReportInfoService.delete(forumReportInfoIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取论坛-帖子举报信息表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取论坛-帖子举报信息表详情")
+    @SaCheckPermission("/forum/reportinfo/detail")
+    @GetMapping("/forum/reportinfo/detail")
+    public CommonResult<ForumReportInfo> detail(@Valid ForumReportInfoIdParam forumReportInfoIdParam) {
+        return CommonResult.data(forumReportInfoService.detail(forumReportInfoIdParam));
+    }
+
+}

+ 87 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/entity/ForumReportInfo.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.reportinfo.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/17 16:39
+ **/
+@Getter
+@Setter
+@TableName("FORUM_REPORT_INFO")
+public class ForumReportInfo {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String reportId;
+
+    /** 帖子主键id */
+    @ApiModelProperty(value = "帖子主键id", position = 2)
+    private String postId;
+
+    /** 举报人用户id */
+    @ApiModelProperty(value = "举报人用户id", position = 3)
+    private String userId;
+
+    /** 举报原因类型 0垃圾广告 1色情内容 2人身攻击 3政治敏感 4其他 */
+    @ApiModelProperty(value = "举报原因类型 0垃圾广告 1色情内容 2人身攻击 3政治敏感 4其他", position = 4)
+    private Integer reportReasonType;
+
+    /** 举报信息描述 */
+    @ApiModelProperty(value = "举报信息描述", position = 5)
+    private String reportDetail;
+
+    /** 证据图片 */
+    @ApiModelProperty(value = "证据图片", position = 6)
+    private String evidenceScreenshot;
+
+    /** 举报处理状态 0待处理 1已关闭帖子 2已驳回 */
+    @ApiModelProperty(value = "举报处理状态 0待处理 1已关闭帖子 2已驳回", position = 7)
+    private Integer reportStatus;
+
+    /** 删除标志 */
+    @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/reportinfo/enums/ForumReportInfoEnum.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.reportinfo.enums;
+
+import lombok.Getter;
+
+/**
+ * 论坛-帖子举报信息表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/07/17 16:39
+ **/
+@Getter
+public enum ForumReportInfoEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumReportInfoEnum(String value) {
+        this.value = value;
+    }
+}

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

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

+ 58 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoAddParam.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.reportinfo.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/17 16:39
+ **/
+@Getter
+@Setter
+public class ForumReportInfoAddParam {
+
+    /** 帖子主键id */
+    @ApiModelProperty(value = "帖子主键id", position = 2)
+    private String postId;
+
+    /** 举报人用户id */
+    @ApiModelProperty(value = "举报人用户id", position = 3)
+    private String userId;
+
+    /** 举报原因类型 0垃圾广告 1色情内容 2人身攻击 3政治敏感 4其他 */
+    @ApiModelProperty(value = "举报原因类型 0垃圾广告 1色情内容 2人身攻击 3政治敏感 4其他", position = 4)
+    private Integer reportReasonType;
+
+    /** 举报信息描述 */
+    @ApiModelProperty(value = "举报信息描述", position = 5)
+    private String reportDetail;
+
+    /** 证据图片 */
+    @ApiModelProperty(value = "证据图片", position = 6)
+    private String evidenceScreenshot;
+
+    /** 举报处理状态 0待处理 1已关闭帖子 2已驳回 */
+    @ApiModelProperty(value = "举报处理状态 0待处理 1已关闭帖子 2已驳回", position = 7)
+    private Integer reportStatus;
+
+}

+ 63 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoEditParam.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.reportinfo.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/17 16:39
+ **/
+@Getter
+@Setter
+public class ForumReportInfoEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "reportId不能为空")
+    private String reportId;
+
+    /** 帖子主键id */
+    @ApiModelProperty(value = "帖子主键id", position = 2)
+    private String postId;
+
+    /** 举报人用户id */
+    @ApiModelProperty(value = "举报人用户id", position = 3)
+    private String userId;
+
+    /** 举报原因类型 0垃圾广告 1色情内容 2人身攻击 3政治敏感 4其他 */
+    @ApiModelProperty(value = "举报原因类型 0垃圾广告 1色情内容 2人身攻击 3政治敏感 4其他", position = 4)
+    private Integer reportReasonType;
+
+    /** 举报信息描述 */
+    @ApiModelProperty(value = "举报信息描述", position = 5)
+    private String reportDetail;
+
+    /** 证据图片 */
+    @ApiModelProperty(value = "证据图片", position = 6)
+    private String evidenceScreenshot;
+
+    /** 举报处理状态 0待处理 1已关闭帖子 2已驳回 */
+    @ApiModelProperty(value = "举报处理状态 0待处理 1已关闭帖子 2已驳回", position = 7)
+    private Integer reportStatus;
+
+}

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

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/param/ForumReportInfoPageParam.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.reportinfo.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-帖子举报信息表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/07/17 16:39
+ **/
+@Getter
+@Setter
+public class ForumReportInfoPageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 86 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/service/ForumReportInfoService.java

@@ -0,0 +1,86 @@
+/*
+ * 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.reportinfo.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.reportinfo.entity.ForumReportInfo;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoAddParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoEditParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoIdParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoPageParam;
+
+import java.util.List;
+
+/**
+ * 论坛-帖子举报信息表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/07/17 16:39
+ **/
+public interface ForumReportInfoService extends IService<ForumReportInfo> {
+
+    /**
+     * 获取论坛-帖子举报信息表分页
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    Page<ForumReportInfo> page(ForumReportInfoPageParam forumReportInfoPageParam);
+
+    /**
+     * 添加论坛-帖子举报信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    CommonResult<String> add(ForumReportInfoAddParam forumReportInfoAddParam);
+
+    /**
+     * 编辑论坛-帖子举报信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    void edit(ForumReportInfoEditParam forumReportInfoEditParam);
+
+    /**
+     * 删除论坛-帖子举报信息表
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    void delete(List<ForumReportInfoIdParam> forumReportInfoIdParamList);
+
+    /**
+     * 获取论坛-帖子举报信息表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     */
+    ForumReportInfo detail(ForumReportInfoIdParam forumReportInfoIdParam);
+
+    /**
+     * 获取论坛-帖子举报信息表详情
+     *
+     * @author 金吉龙
+     * @date  2025/07/17 16:39
+     **/
+    ForumReportInfo queryEntity(String id);
+
+    /**
+     * 后台-管理员处理举报
+     */
+    CommonResult<String> adminHandle(ForumReportInfoEditParam forumReportInfoEditParam);
+}

+ 133 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/reportinfo/service/impl/ForumReportInfoServiceImpl.java

@@ -0,0 +1,133 @@
+/*
+ * 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.reportinfo.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.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.reportinfo.entity.ForumReportInfo;
+import vip.xiaonuo.forum.modular.reportinfo.mapper.ForumReportInfoMapper;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoAddParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoEditParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoIdParam;
+import vip.xiaonuo.forum.modular.reportinfo.param.ForumReportInfoPageParam;
+import vip.xiaonuo.forum.modular.reportinfo.service.ForumReportInfoService;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 论坛-帖子举报信息表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/07/17 16:39
+ **/
+@Service
+public class ForumReportInfoServiceImpl extends ServiceImpl<ForumReportInfoMapper, ForumReportInfo> implements ForumReportInfoService {
+
+    @Resource
+    private ForumPostInfoMapper forumPostInfoMapper;
+
+
+    @Override
+    public Page<ForumReportInfo> page(ForumReportInfoPageParam forumReportInfoPageParam) {
+        QueryWrapper<ForumReportInfo> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumReportInfoPageParam.getSortField(), forumReportInfoPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumReportInfoPageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumReportInfoPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumReportInfoPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumReportInfo::getReportId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult<String> add(ForumReportInfoAddParam forumReportInfoAddParam) {
+        ForumReportInfo forumReportInfo = BeanUtil.toBean(forumReportInfoAddParam, ForumReportInfo.class);
+        // 设置用户
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        forumReportInfo.setUserId(loginUser.getId());
+
+        this.save(forumReportInfo);
+        return CommonResult.ok();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumReportInfoEditParam forumReportInfoEditParam) {
+        ForumReportInfo forumReportInfo = this.queryEntity(forumReportInfoEditParam.getReportId());
+        BeanUtil.copyProperties(forumReportInfoEditParam, forumReportInfo);
+        this.updateById(forumReportInfo);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumReportInfoIdParam> forumReportInfoIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumReportInfoIdParamList, ForumReportInfoIdParam::getReportId));
+    }
+
+    @Override
+    public ForumReportInfo detail(ForumReportInfoIdParam forumReportInfoIdParam) {
+        return this.queryEntity(forumReportInfoIdParam.getReportId());
+    }
+
+    @Override
+    public ForumReportInfo queryEntity(String id) {
+        ForumReportInfo forumReportInfo = this.getById(id);
+        if(ObjectUtil.isEmpty(forumReportInfo)) {
+            throw new CommonException("论坛-帖子举报信息表不存在,id值为:{}", id);
+        }
+        return forumReportInfo;
+    }
+
+    @Override
+    public CommonResult<String> adminHandle(ForumReportInfoEditParam forumReportInfoEditParam) {
+        // 校验是否存在
+        ForumReportInfo forumReportInfo = this.queryEntity(forumReportInfoEditParam.getReportId());
+        if (forumReportInfo == null) {
+            return CommonResult.error("论坛-帖子举报信息表不存在");
+        }
+        // 执行更新操作
+        forumReportInfo.setReportStatus(forumReportInfoEditParam.getReportStatus());
+        this.updateById(forumReportInfo);
+        // 如果是关闭帖子,需要同步关闭
+        if (forumReportInfoEditParam.getReportStatus() == 1) {
+            QueryWrapper<ForumPostInfo> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ForumPostInfo::getPostId, forumReportInfo.getPostId());
+            ForumPostInfo forumPostInfo = forumPostInfoMapper.selectOne(queryWrapper);
+            if (forumPostInfo != null) {
+                forumPostInfo.setPostStatus(1);
+                forumPostInfoMapper.updateById(forumPostInfo);
+            }
+        }
+        return CommonResult.ok();
+    }
+
+}