Kaynağa Gözat

1.论坛功能改造:增加点踩和取消点踩接口、帖子列表可以根据点赞数量排序、帖子信息中增加是否点踩的标识

jasonk5949 6 ay önce
ebeveyn
işleme
bf618968ce
15 değiştirilmiş dosya ile 757 ekleme ve 1 silme
  1. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/entity/ForumPostInfoVo.java
  2. 29 1
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/impl/ForumPostInfoServiceImpl.java
  3. 146 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/controller/ForumPostNotLikeController.java
  4. 75 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/entity/ForumPostNotLike.java
  5. 34 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/enums/ForumPostNotLikeEnum.java
  6. 25 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/mapper/ForumPostNotLikeMapper.java
  7. 5 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/mapper/mapping/ForumPostNotLikeMapper.xml
  8. 46 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikeAddParam.java
  9. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikeEditParam.java
  10. 35 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikeIdParam.java
  11. 51 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikePageParam.java
  12. 86 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/service/ForumPostNotLikeService.java
  13. 134 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/service/impl/ForumPostNotLikeServiceImpl.java
  14. 6 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/entity/ForumPostReply.java
  15. 29 0
      snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postreply/service/impl/ForumPostReplyServiceImpl.java

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

@@ -150,4 +150,9 @@ public class ForumPostInfoVo {
      */
     private Integer isLike;
 
+    /**
+     * 是否点踩 0 未点踩 1 已点踩
+     */
+    private Integer isNotLike;
+
 }

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

@@ -41,6 +41,8 @@ import vip.xiaonuo.forum.modular.postinfo.param.*;
 import vip.xiaonuo.forum.modular.postinfo.service.ForumPostInfoService;
 import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
 import vip.xiaonuo.forum.modular.postlike.service.ForumPostLikeService;
+import vip.xiaonuo.forum.modular.postnotlike.entity.ForumPostNotLike;
+import vip.xiaonuo.forum.modular.postnotlike.service.ForumPostNotLikeService;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
 import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
 import vip.xiaonuo.forum.modular.postreply.service.ForumPostReplyService;
@@ -107,6 +109,10 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
     @Resource
     private ForumPostInfoMapper forumPostInfoMapper;
 
+    @Resource
+    @Lazy
+    private ForumPostNotLikeService forumPostNotLikeService;
+
 
     @Override
     public Page<ForumPostInfo> page(ForumPostInfoPageParam forumPostInfoPageParam) {
@@ -134,12 +140,14 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
                 queryWrapper.lambda().orderByDesc(ForumPostInfo::getLastReplyTime);
             }
         }
-        // 排序方式 0最新 1热门
+        // 排序方式 0最新 1热门 2点赞
         if (forumPostInfoPageParam.getSortOrder() != null) {
             if (forumPostInfoPageParam.getSortOrder() == 0) {
                 queryWrapper.lambda().orderByDesc(ForumPostInfo::getCreateTime);
             } else if (forumPostInfoPageParam.getSortOrder() == 1) {
                 queryWrapper.lambda().orderByDesc(ForumPostInfo::getViewCount);
+            } else if (forumPostInfoPageParam.getSortOrder() == 2) {
+                queryWrapper.lambda().orderByDesc(ForumPostInfo::getLikeCount);
             }
         }
         // 置顶的优先
@@ -327,6 +335,16 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
         } else {
             forumPostInfoVo.setIsLike(0);
         }
+        // 查询是否点踩
+        QueryWrapper<ForumPostNotLike> queryWrapper4 = new QueryWrapper<>();
+        queryWrapper4.lambda().eq(ForumPostNotLike::getTargetId, forumPostInfoVo.getPostId());
+        queryWrapper4.lambda().eq(ForumPostNotLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        long count1 = forumPostNotLikeService.count(queryWrapper4);
+        if (count1 > 0) {
+            forumPostInfoVo.setIsNotLike(1);
+        } else {
+            forumPostInfoVo.setIsNotLike(0);
+        }
         // 查询详情的同时,给帖子增加浏览量和热度
         forumPostInfo.setViewCount(forumPostInfo.getViewCount() + 1);
         this.updateById(forumPostInfo);
@@ -670,6 +688,16 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
         } else {
             forumPostInfoVo.setIsLike(0);
         }
+        // 查询是否点踩
+        QueryWrapper<ForumPostNotLike> queryWrapper4 = new QueryWrapper<>();
+        queryWrapper4.lambda().eq(ForumPostNotLike::getTargetId, forumPostInfoVo.getPostId());
+        queryWrapper4.lambda().eq(ForumPostNotLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        long count1 = forumPostNotLikeService.count(queryWrapper4);
+        if (count1 > 0) {
+            forumPostInfoVo.setIsNotLike(1);
+        } else {
+            forumPostInfoVo.setIsNotLike(0);
+        }
         // 查询详情的同时,给帖子增加浏览量和热度
         forumPostInfo.setViewCount(forumPostInfo.getViewCount() + 1);
         this.updateById(forumPostInfo);

+ 146 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/controller/ForumPostNotLikeController.java

@@ -0,0 +1,146 @@
+/*
+ * 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.postnotlike.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.postnotlike.entity.ForumPostNotLike;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeAddParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeEditParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeIdParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikePageParam;
+import vip.xiaonuo.forum.modular.postnotlike.service.ForumPostNotLikeService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 论坛-点踩记录表控制器
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ */
+@Api(tags = "论坛-点踩记录表控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class ForumPostNotLikeController {
+
+    @Resource
+    private ForumPostNotLikeService forumPostNotLikeService;
+
+    /**
+     * 获取论坛-点踩记录表分页
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取论坛-点踩记录表分页")
+    @SaCheckPermission("/forum/postnotlike/page")
+    @GetMapping("/forum/postnotlike/page")
+    public CommonResult<Page<ForumPostNotLike>> page(ForumPostNotLikePageParam forumPostNotLikePageParam) {
+        return CommonResult.data(forumPostNotLikeService.page(forumPostNotLikePageParam));
+    }
+
+    /**
+     * 点踩
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("论坛点踩")
+    @CommonLog("论坛点踩")
+    @PostMapping("/forum/postnotlike/add")
+    public CommonResult<String> add(@RequestBody @Valid ForumPostNotLikeAddParam forumPostNotLikeAddParam) {
+        return forumPostNotLikeService.add(forumPostNotLikeAddParam);
+    }
+
+    /**
+     * 取消点踩
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("论坛取消点踩")
+    @CommonLog("论坛取消点踩")
+    @PostMapping("/forum/postnotlike/cancel")
+    public CommonResult<String> cancel(@RequestBody @Valid ForumPostNotLikeEditParam forumPostNotLikeEditParam) {
+        return forumPostNotLikeService.cancel(forumPostNotLikeEditParam);
+    }
+
+    /**
+     * 编辑论坛-点踩记录表
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑论坛-点踩记录表")
+    @CommonLog("编辑论坛-点踩记录表")
+    @SaCheckPermission("/forum/postnotlike/edit")
+    @PostMapping("/forum/postnotlike/edit")
+    public CommonResult<String> edit(@RequestBody @Valid ForumPostNotLikeEditParam forumPostNotLikeEditParam) {
+        forumPostNotLikeService.edit(forumPostNotLikeEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除论坛-点踩记录表
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除论坛-点踩记录表")
+    @CommonLog("删除论坛-点踩记录表")
+    @SaCheckPermission("/forum/postnotlike/delete")
+    @PostMapping("/forum/postnotlike/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<ForumPostNotLikeIdParam> forumPostNotLikeIdParamList) {
+        forumPostNotLikeService.delete(forumPostNotLikeIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取论坛-点踩记录表详情
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取论坛-点踩记录表详情")
+    @SaCheckPermission("/forum/postnotlike/detail")
+    @GetMapping("/forum/postnotlike/detail")
+    public CommonResult<ForumPostNotLike> detail(@Valid ForumPostNotLikeIdParam forumPostNotLikeIdParam) {
+        return CommonResult.data(forumPostNotLikeService.detail(forumPostNotLikeIdParam));
+    }
+
+
+
+}

+ 75 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/entity/ForumPostNotLike.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.postnotlike.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-点踩记录表实体
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Getter
+@Setter
+@TableName("FORUM_POST_NOT_LIKE")
+public class ForumPostNotLike {
+
+    /** 主键id */
+    @TableId
+    @ApiModelProperty(value = "主键id", position = 1)
+    private String notLikeId;
+
+    /** 点踩类型 0帖子 1回复 */
+    @ApiModelProperty(value = "点踩类型 0帖子 1回复", position = 2)
+    private Integer notLikeType;
+
+    /** 目标主键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/postnotlike/enums/ForumPostNotLikeEnum.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.postnotlike.enums;
+
+import lombok.Getter;
+
+/**
+ * 论坛-点踩记录表枚举
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Getter
+public enum ForumPostNotLikeEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    ForumPostNotLikeEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/mapper/ForumPostNotLikeMapper.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.postnotlike.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.forum.modular.postnotlike.entity.ForumPostNotLike;
+
+/**
+ * 论坛-点踩记录表Mapper接口
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+public interface ForumPostNotLikeMapper extends BaseMapper<ForumPostNotLike> {
+}

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

+ 46 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikeAddParam.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.postnotlike.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-点踩记录表添加参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Getter
+@Setter
+public class ForumPostNotLikeAddParam {
+
+    /** 点踩类型 0帖子 1回复 */
+    @ApiModelProperty(value = "点踩类型 0帖子 1回复", position = 2)
+    private Integer notLikeType;
+
+    /** 目标主键id */
+    @ApiModelProperty(value = "目标主键id", position = 3)
+    private String targetId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id", position = 4)
+    private String userId;
+
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikeEditParam.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.postnotlike.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-点踩记录表编辑参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Getter
+@Setter
+public class ForumPostNotLikeEditParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true, position = 1)
+    @NotBlank(message = "notLikeId不能为空")
+    private String notLikeId;
+
+    /** 点踩类型 0帖子 1回复 */
+    @ApiModelProperty(value = "点踩类型 0帖子 1回复", position = 2)
+    private Integer notLikeType;
+
+    /** 目标主键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/postnotlike/param/ForumPostNotLikeIdParam.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.postnotlike.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 论坛-点踩记录表Id参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Getter
+@Setter
+public class ForumPostNotLikeIdParam {
+
+    /** 主键id */
+    @ApiModelProperty(value = "主键id", required = true)
+    @NotBlank(message = "notLikeId不能为空")
+    private String notLikeId;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/param/ForumPostNotLikePageParam.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.postnotlike.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 论坛-点踩记录表查询参数
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Getter
+@Setter
+public class ForumPostNotLikePageParam {
+
+    /** 当前页 */
+    @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/postnotlike/service/ForumPostNotLikeService.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.postnotlike.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.postnotlike.entity.ForumPostNotLike;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeAddParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeEditParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeIdParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikePageParam;
+
+import java.util.List;
+
+/**
+ * 论坛-点踩记录表Service接口
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+public interface ForumPostNotLikeService extends IService<ForumPostNotLike> {
+
+    /**
+     * 获取论坛-点踩记录表分页
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    Page<ForumPostNotLike> page(ForumPostNotLikePageParam forumPostNotLikePageParam);
+
+    /**
+     * 添加论坛-点踩记录表
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    CommonResult<String> add(ForumPostNotLikeAddParam forumPostNotLikeAddParam);
+
+    /**
+     * 编辑论坛-点踩记录表
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    void edit(ForumPostNotLikeEditParam forumPostNotLikeEditParam);
+
+    /**
+     * 删除论坛-点踩记录表
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    void delete(List<ForumPostNotLikeIdParam> forumPostNotLikeIdParamList);
+
+    /**
+     * 获取论坛-点踩记录表详情
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     */
+    ForumPostNotLike detail(ForumPostNotLikeIdParam forumPostNotLikeIdParam);
+
+    /**
+     * 获取论坛-点踩记录表详情
+     *
+     * @author 金吉龙
+     * @date  2025/08/18 13:32
+     **/
+    ForumPostNotLike queryEntity(String id);
+
+    /**
+     * 取消点赞
+     */
+    CommonResult<String> cancel(ForumPostNotLikeEditParam forumPostNotLikeEditParam);
+}

+ 134 - 0
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postnotlike/service/impl/ForumPostNotLikeServiceImpl.java

@@ -0,0 +1,134 @@
+/*
+ * 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.postnotlike.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.postlike.entity.ForumPostLike;
+import vip.xiaonuo.forum.modular.postnotlike.entity.ForumPostNotLike;
+import vip.xiaonuo.forum.modular.postnotlike.mapper.ForumPostNotLikeMapper;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeAddParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeEditParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikeIdParam;
+import vip.xiaonuo.forum.modular.postnotlike.param.ForumPostNotLikePageParam;
+import vip.xiaonuo.forum.modular.postnotlike.service.ForumPostNotLikeService;
+
+import java.util.List;
+
+/**
+ * 论坛-点踩记录表Service接口实现类
+ *
+ * @author 金吉龙
+ * @date  2025/08/18 13:32
+ **/
+@Service
+public class ForumPostNotLikeServiceImpl extends ServiceImpl<ForumPostNotLikeMapper, ForumPostNotLike> implements ForumPostNotLikeService {
+
+
+    @Override
+    public Page<ForumPostNotLike> page(ForumPostNotLikePageParam forumPostNotLikePageParam) {
+        QueryWrapper<ForumPostNotLike> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(forumPostNotLikePageParam.getSortField(), forumPostNotLikePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(forumPostNotLikePageParam.getSortOrder());
+            queryWrapper.orderBy(true, forumPostNotLikePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(forumPostNotLikePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(ForumPostNotLike::getNotLikeId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public CommonResult<String> add(ForumPostNotLikeAddParam forumPostNotLikeAddParam) {
+        // 校验是否已经点踩过
+        QueryWrapper<ForumPostNotLike> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ForumPostNotLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        queryWrapper.lambda().eq(ForumPostNotLike::getTargetId, forumPostNotLikeAddParam.getTargetId());
+        long count = this.count(queryWrapper);
+        if (count > 0) {
+            return CommonResult.ok();
+        }
+        // 执行点踩的添加
+        String uuid = IdUtil.fastSimpleUUID();
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        ForumPostNotLike forumPostNotLike = BeanUtil.toBean(forumPostNotLikeAddParam, ForumPostNotLike.class);
+        forumPostNotLike.setUserId(loginUser.getId());
+        forumPostNotLike.setNotLikeId(uuid);
+        boolean save = this.save(forumPostNotLike);
+        if(save) {
+            return CommonResult.ok();
+        } else {
+            return CommonResult.error();
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ForumPostNotLikeEditParam forumPostNotLikeEditParam) {
+        ForumPostNotLike forumPostNotLike = this.queryEntity(forumPostNotLikeEditParam.getNotLikeId());
+        BeanUtil.copyProperties(forumPostNotLikeEditParam, forumPostNotLike);
+        this.updateById(forumPostNotLike);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<ForumPostNotLikeIdParam> forumPostNotLikeIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(forumPostNotLikeIdParamList, ForumPostNotLikeIdParam::getNotLikeId));
+    }
+
+    @Override
+    public ForumPostNotLike detail(ForumPostNotLikeIdParam forumPostNotLikeIdParam) {
+        return this.queryEntity(forumPostNotLikeIdParam.getNotLikeId());
+    }
+
+    @Override
+    public ForumPostNotLike queryEntity(String id) {
+        ForumPostNotLike forumPostNotLike = this.getById(id);
+        if(ObjectUtil.isEmpty(forumPostNotLike)) {
+            throw new CommonException("论坛-点踩记录表不存在,id值为:{}", id);
+        }
+        return forumPostNotLike;
+    }
+
+    @Override
+    public CommonResult<String> cancel(ForumPostNotLikeEditParam forumPostNotLikeEditParam) {
+        // 查询出点踩记录
+        QueryWrapper<ForumPostNotLike> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ForumPostNotLike::getUserId, StpLoginUserUtil.getLoginUser().getId());
+        queryWrapper.lambda().eq(ForumPostNotLike::getTargetId, forumPostNotLikeEditParam.getTargetId());
+        ForumPostNotLike forumPostNotLike = this.getOne(queryWrapper);
+        boolean b = this.removeById(forumPostNotLike.getNotLikeId());
+        if (b) {
+            return CommonResult.ok();
+        } else {
+            return CommonResult.error();
+        }
+    }
+
+}

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

@@ -100,6 +100,12 @@ public class ForumPostReply {
     @TableField(exist = false)
     private Integer isLike;
 
+    /**
+     * 是否点踩 0 未点踩 1 已点踩
+     */
+    @TableField(exist = false)
+    private Integer isNotLike;
+
     /**
      * 此条回复是否为自己 0 不是 1 是
      */

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

@@ -34,6 +34,8 @@ 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.postnotlike.entity.ForumPostNotLike;
+import vip.xiaonuo.forum.modular.postnotlike.mapper.ForumPostNotLikeMapper;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
 import vip.xiaonuo.forum.modular.postreply.mapper.ForumPostReplyMapper;
 import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyAddParam;
@@ -75,6 +77,9 @@ public class ForumPostReplyServiceImpl extends ServiceImpl<ForumPostReplyMapper,
     @Resource
     private ForumPostLikeMapper forumPostLikeMapper;
 
+    @Resource
+    private ForumPostNotLikeMapper forumPostNotLikeMapper;
+
     @Resource
     private ForumPostReplyMapper forumPostReplyMapper;
 
@@ -107,6 +112,16 @@ public class ForumPostReplyServiceImpl extends ServiceImpl<ForumPostReplyMapper,
                 } else {
                     record.setIsLike(0);
                 }
+                // 查询是否点踩
+                QueryWrapper<ForumPostNotLike> forumPostNotLikeQueryWrapper = new QueryWrapper<>();
+                forumPostNotLikeQueryWrapper.lambda().eq(ForumPostNotLike::getTargetId, record.getReplyId());
+                forumPostNotLikeQueryWrapper.lambda().eq(ForumPostNotLike::getUserId, loginUser.getId());
+                Long aLong2 = forumPostNotLikeMapper.selectCount(forumPostNotLikeQueryWrapper);
+                if (aLong2 > 0) {
+                    record.setIsNotLike(1);
+                } else {
+                    record.setIsNotLike(0);
+                }
                 // 查询此条回复是否为自己的
                 if (record.getUserId().equals(loginUser.getId())) {
                     record.setIsSelf(1);
@@ -135,6 +150,16 @@ public class ForumPostReplyServiceImpl extends ServiceImpl<ForumPostReplyMapper,
                         } else {
                             forumPostReply.setIsLike(0);
                         }
+                        // 查询是否点踩
+                        QueryWrapper<ForumPostNotLike> forumPostNotLikeQueryWrapper1 = new QueryWrapper<>();
+                        forumPostNotLikeQueryWrapper1.lambda().eq(ForumPostNotLike::getTargetId, forumPostReply.getReplyId());
+                        forumPostNotLikeQueryWrapper1.lambda().eq(ForumPostNotLike::getUserId, loginUser.getId());
+                        Long aLong3 = forumPostNotLikeMapper.selectCount(forumPostNotLikeQueryWrapper1);
+                        if (aLong3 > 0) {
+                            forumPostReply.setIsNotLike(1);
+                        } else {
+                            forumPostReply.setIsNotLike(0);
+                        }
                         // 查询此条回复是否为自己的
                         if (forumPostReply.getUserId().equals(loginUser.getId())) {
                             forumPostReply.setIsSelf(1);
@@ -232,6 +257,10 @@ public class ForumPostReplyServiceImpl extends ServiceImpl<ForumPostReplyMapper,
             QueryWrapper<ForumPostLike> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().in(ForumPostLike::getTargetId, CollStreamUtil.toList(forumPostReplyIdParamList, ForumPostReplyIdParam::getReplyId));
             forumPostLikeMapper.delete(queryWrapper);
+            // 同时删除点踩记录
+            QueryWrapper<ForumPostNotLike> queryWrapper1 = new QueryWrapper<>();
+            queryWrapper1.lambda().in(ForumPostNotLike::getTargetId, CollStreamUtil.toList(forumPostReplyIdParamList, ForumPostReplyIdParam::getReplyId));
+            forumPostNotLikeMapper.delete(queryWrapper1);
             return CommonResult.ok();
         } else {
             return CommonResult.error();