From e700be5eff84c6b6430545e52bbea204eb909223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Wed, 31 Jan 2024 23:20:20 +0800 Subject: [PATCH] 123 --- .../cai/app/UserStartAppController.java | 9 +++++ .../cai/dto/app/query/star/BatchStarReq.java | 13 +++++++ .../ruoyi/cai/service/UserFollowService.java | 3 ++ .../service/impl/UserFollowServiceImpl.java | 35 +++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/star/BatchStarReq.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserStartAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserStartAppController.java index 571996db..edc6c40a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserStartAppController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/UserStartAppController.java @@ -3,6 +3,7 @@ package com.ruoyi.web.controller.cai.app; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.dto.app.query.StarOrVisitorReq; import com.ruoyi.cai.dto.app.query.StarQuery; +import com.ruoyi.cai.dto.app.query.star.BatchStarReq; import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList; import com.ruoyi.cai.service.UserFollowService; import com.ruoyi.common.annotation.Log; @@ -26,6 +27,14 @@ public class UserStartAppController { @Autowired private UserFollowService userFollowService; + @PostMapping("/batchStar") + @Operation(summary = "批量关注用户(为了防止接口滥用和性能问题,只会取前20个用户关注超过的舍弃)") + @Log(title = "批量关注用户", businessType = BusinessType.OTHER, isSaveDb = true) + public R star(@Validated @RequestBody BatchStarReq batchStarReq){ + userFollowService.batchStar(batchStarReq); + return R.ok(); + } + @PostMapping("/star") @Operation(summary = "关注用户") @Log(title = "关注用户", businessType = BusinessType.OTHER, isSaveDb = true) diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/star/BatchStarReq.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/star/BatchStarReq.java new file mode 100644 index 00000000..11d4398e --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/star/BatchStarReq.java @@ -0,0 +1,13 @@ +package com.ruoyi.cai.dto.app.query.star; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +@Schema(description = "批量关注用户入参模型") +public class BatchStarReq { + @Schema(description = "目标用户ID集合") + private List toUserIds; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserFollowService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserFollowService.java index b716a02d..b4a4229b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserFollowService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserFollowService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.UserFollow; import com.ruoyi.cai.dto.app.query.StarQuery; import com.ruoyi.cai.dto.app.query.StarOrVisitorReq; +import com.ruoyi.cai.dto.app.query.star.BatchStarReq; import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList; import com.ruoyi.common.core.domain.PageQuery; @@ -20,6 +21,8 @@ public interface UserFollowService extends IService { boolean checkStar(Long userId, Long followUserId); + void batchStar(BatchStarReq batchStarReq); + boolean star(StarOrVisitorReq starOrVisitorReq); boolean unStar(StarOrVisitorReq starOrVisitorReq); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java index bbf5f465..cbc84de0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.cai.domain.UserCount; import com.ruoyi.cai.domain.UserFollow; import com.ruoyi.cai.dto.app.query.StarQuery; import com.ruoyi.cai.dto.app.query.StarOrVisitorReq; +import com.ruoyi.cai.dto.app.query.star.BatchStarReq; import com.ruoyi.cai.dto.app.vo.user.UserBaseVo; import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList; import com.ruoyi.cai.mapper.UserFollowMapper; @@ -26,6 +27,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -62,6 +64,39 @@ public class UserFollowServiceImpl extends ServiceImpl batchStarUserIds = batchStarReq.getToUserIds().subList(0, min); + Long fromUserId = LoginHelper.getUserId(); + User user = userService.getById(fromUserId); + if(user == null){ + throw new ServiceException("您的账号已被注销"); + } + List starUserList = userService.listByIds(batchStarUserIds); + List realStarUsers = new ArrayList<>(); + for (User starUser : starUserList) { + if(starUser.getId().equals(fromUserId)){ + continue; + } + realStarUsers.add(starUser.getId()); + } + this.remove(Wrappers.lambdaQuery(UserFollow.class) + .eq(UserFollow::getUserId,fromUserId) + .in(UserFollow::getFollowUser, realStarUsers)); + for (Long realStarUser : realStarUsers) { + UserFollow userFollow = new UserFollow(); + userFollow.setUserId(fromUserId); + userFollow.setFollowUser(realStarUser); + this.save(userFollow); + userCountService.star(fromUserId, realStarUser); + yunxinHttpService.followedSendMessage(realStarUser, user, LocalDateTime.now()); + } + } + @Override @Transactional(rollbackFor = Exception.class) public boolean star(StarOrVisitorReq starOrVisitorReq) {