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.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
|
import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
|
||||||
import com.ruoyi.cai.dto.app.query.StarQuery;
|
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.dto.app.vo.user.UserStarOrVisitorList;
|
||||||
import com.ruoyi.cai.service.UserFollowService;
|
import com.ruoyi.cai.service.UserFollowService;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
@@ -26,6 +27,14 @@ public class UserStartAppController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserFollowService userFollowService;
|
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")
|
@PostMapping("/star")
|
||||||
@Operation(summary = "关注用户")
|
@Operation(summary = "关注用户")
|
||||||
@Log(title = "关注用户", businessType = BusinessType.OTHER, isSaveDb = true)
|
@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.domain.UserFollow;
|
||||||
import com.ruoyi.cai.dto.app.query.StarQuery;
|
import com.ruoyi.cai.dto.app.query.StarQuery;
|
||||||
import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
|
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.cai.dto.app.vo.user.UserStarOrVisitorList;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
|
|
||||||
@@ -20,6 +21,8 @@ public interface UserFollowService extends IService<UserFollow> {
|
|||||||
|
|
||||||
boolean checkStar(Long userId, Long followUserId);
|
boolean checkStar(Long userId, Long followUserId);
|
||||||
|
|
||||||
|
void batchStar(BatchStarReq batchStarReq);
|
||||||
|
|
||||||
boolean star(StarOrVisitorReq starOrVisitorReq);
|
boolean star(StarOrVisitorReq starOrVisitorReq);
|
||||||
|
|
||||||
boolean unStar(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.domain.UserFollow;
|
||||||
import com.ruoyi.cai.dto.app.query.StarQuery;
|
import com.ruoyi.cai.dto.app.query.StarQuery;
|
||||||
import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
|
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.UserBaseVo;
|
||||||
import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList;
|
import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList;
|
||||||
import com.ruoyi.cai.mapper.UserFollowMapper;
|
import com.ruoyi.cai.mapper.UserFollowMapper;
|
||||||
@@ -26,6 +27,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -62,6 +64,39 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
|
|||||||
.eq(UserFollow::getUserId, userId));
|
.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
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean star(StarOrVisitorReq starOrVisitorReq) {
|
public boolean star(StarOrVisitorReq starOrVisitorReq) {
|
||||||
|
|||||||
Reference in New Issue
Block a user