From bc6d627bc96555d1e7c376ea1250cc59b61c4806 Mon Sep 17 00:00:00 2001 From: Wonder Date: Sun, 19 Oct 2025 10:53:47 +0800 Subject: [PATCH] =?UTF-8?q?=20=E2=9C=A8Feat:=20=E5=A2=9E=E5=8A=A0=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E7=82=B9=E8=B5=9E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thumb/controller/ThumbController.java | 6 ++++ .../hezhaohui/thumb/service/ThumbService.java | 2 ++ .../thumb/service/impl/ThumbServiceImpl.java | 31 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/main/java/cn/hezhaohui/thumb/controller/ThumbController.java b/src/main/java/cn/hezhaohui/thumb/controller/ThumbController.java index ca58955..2df02a3 100644 --- a/src/main/java/cn/hezhaohui/thumb/controller/ThumbController.java +++ b/src/main/java/cn/hezhaohui/thumb/controller/ThumbController.java @@ -22,4 +22,10 @@ public class ThumbController { Boolean success = thumbService.doThumb(doThumbRequest, request); return ResultUtils.sucess(success); } + + @PostMapping("/undo") + public BaseResponse undoThumb(@RequestBody DoThumbRequest doThumbRequest, HttpServletRequest request) { + Boolean success = thumbService.undoThumb(doThumbRequest, request); + return ResultUtils.sucess(success); + } } diff --git a/src/main/java/cn/hezhaohui/thumb/service/ThumbService.java b/src/main/java/cn/hezhaohui/thumb/service/ThumbService.java index 72873ec..1c0f3ed 100644 --- a/src/main/java/cn/hezhaohui/thumb/service/ThumbService.java +++ b/src/main/java/cn/hezhaohui/thumb/service/ThumbService.java @@ -14,4 +14,6 @@ public interface ThumbService extends IService { Boolean doThumb(DoThumbRequest doThumbRequest, HttpServletRequest request); + + Boolean undoThumb(DoThumbRequest doThumbRequest, HttpServletRequest request); } diff --git a/src/main/java/cn/hezhaohui/thumb/service/impl/ThumbServiceImpl.java b/src/main/java/cn/hezhaohui/thumb/service/impl/ThumbServiceImpl.java index d4cc261..4658b3d 100644 --- a/src/main/java/cn/hezhaohui/thumb/service/impl/ThumbServiceImpl.java +++ b/src/main/java/cn/hezhaohui/thumb/service/impl/ThumbServiceImpl.java @@ -67,6 +67,37 @@ public class ThumbServiceImpl extends ServiceImpl }); } } + + @Override + public Boolean undoThumb(DoThumbRequest doThumbRequest, HttpServletRequest request) { + if (doThumbRequest == null || doThumbRequest.getBlogId() == null) { + throw new RuntimeException("参数异常"); + } + User loginUser = userService.getLoginUser(request); + // Lock: 这里使用字符串加锁,获取字符串常量对象才可运行,字符串常量对象具有唯一性 + synchronized (("LOCK-USERID-" + loginUser.getId().toString()).intern()) { + // Transaction: 编程式事务 + return transactionTemplate.execute(status -> { + Long blogId = doThumbRequest.getBlogId(); + // 判断是否已点过赞 + Thumb thumb = this.lambdaQuery() + .eq(Thumb::getUserid, loginUser.getId()) + .eq(Thumb::getBlogId, blogId) + .one(); + if (thumb == null) { + throw new BusinessException(ErrorCode.OPERATION_ERROR, "用户未点赞"); + } + // 更新帖子点赞计数器 + boolean update = blogService.lambdaUpdate() + .eq(Blog::getId, blogId) + .setSql("thumbCount = thumbCount - 1") + .update(); + // 更新点赞表数据 + // 两者一起执行 + return update && this.removeById(thumb.getId()); + }); + } + } }