123
This commit is contained in:
@@ -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<Void> star(@Validated @RequestBody BatchStarReq batchStarReq){
|
||||
userFollowService.batchStar(batchStarReq);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/star")
|
||||
@Operation(summary = "关注用户")
|
||||
@Log(title = "关注用户", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||
|
||||
@@ -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<Long> toUserIds;
|
||||
}
|
||||
@@ -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<UserFollow> {
|
||||
|
||||
boolean checkStar(Long userId, Long followUserId);
|
||||
|
||||
void batchStar(BatchStarReq batchStarReq);
|
||||
|
||||
boolean star(StarOrVisitorReq starOrVisitorReq);
|
||||
|
||||
boolean unStar(StarOrVisitorReq starOrVisitorReq);
|
||||
|
||||
@@ -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<UserFollowMapper, UserFol
|
||||
.eq(UserFollow::getUserId, userId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchStar(BatchStarReq batchStarReq) {
|
||||
if(CollectionUtils.isEmpty(batchStarReq.getToUserIds())){
|
||||
return;
|
||||
}
|
||||
int min = Math.min(20, batchStarReq.getToUserIds().size());
|
||||
List<Long> batchStarUserIds = batchStarReq.getToUserIds().subList(0, min);
|
||||
Long fromUserId = LoginHelper.getUserId();
|
||||
User user = userService.getById(fromUserId);
|
||||
if(user == null){
|
||||
throw new ServiceException("您的账号已被注销");
|
||||
}
|
||||
List<User> starUserList = userService.listByIds(batchStarUserIds);
|
||||
List<Long> 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) {
|
||||
|
||||
Reference in New Issue
Block a user