From fc22b49d5aed5681a4f6398acbfb45c1d93a625f Mon Sep 17 00:00:00 2001 From: zk Date: Fri, 15 May 2026 16:47:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=82=80=E8=AF=B7=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserManageController.java | 9 ++++++ .../pojo/dto/user/InviteStatsDto.java | 16 +++++++++++ .../jiayunet/service/UserManageService.java | 28 +++++++++++++++++-- 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java diff --git a/client-api/src/main/java/org/jiayunet/controller/UserManageController.java b/client-api/src/main/java/org/jiayunet/controller/UserManageController.java index 5901e2f..aa666a3 100644 --- a/client-api/src/main/java/org/jiayunet/controller/UserManageController.java +++ b/client-api/src/main/java/org/jiayunet/controller/UserManageController.java @@ -1,6 +1,7 @@ package org.jiayunet.controller; import lombok.AllArgsConstructor; +import org.jiayunet.pojo.dto.user.InviteStatsDto; import org.jiayunet.pojo.dto.user.UserInfoDto; import org.jiayunet.pojo.param.user.UserInfoParam; import org.jiayunet.service.UserManageService; @@ -42,4 +43,12 @@ public class UserManageController { public void cancelAccount() { userManageService.cancelAccount(); } + + /** + * 邀请统计(累计邀请人数、累计获得会员天数) + */ + @GetMapping("/inviteStats") + public InviteStatsDto getInviteStats() { + return userManageService.getInviteStats(); + } } diff --git a/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java b/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java new file mode 100644 index 0000000..59abaa7 --- /dev/null +++ b/client-api/src/main/java/org/jiayunet/pojo/dto/user/InviteStatsDto.java @@ -0,0 +1,16 @@ +package org.jiayunet.pojo.dto.user; + +import lombok.Data; + +/** + * 用户邀请统计DTO + * + * @author zk + */ +@Data +public class InviteStatsDto { + /** 累计邀请人数 */ + private Long inviteCount; + /** 累计获得会员天数 */ + private Integer rewardDays; +} diff --git a/client-api/src/main/java/org/jiayunet/service/UserManageService.java b/client-api/src/main/java/org/jiayunet/service/UserManageService.java index 7ad33fd..0bde097 100644 --- a/client-api/src/main/java/org/jiayunet/service/UserManageService.java +++ b/client-api/src/main/java/org/jiayunet/service/UserManageService.java @@ -1,12 +1,16 @@ package org.jiayunet.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.jiayunet.constant.PreRedisKeyName; +import org.jiayunet.mapper.UserInviteMapper; import org.jiayunet.mapper.UserMapper; +import org.jiayunet.pojo.dto.user.InviteStatsDto; import org.jiayunet.pojo.dto.user.UserInfoDto; import org.jiayunet.pojo.param.user.UserInfoParam; import org.jiayunet.pojo.po.User; +import org.jiayunet.pojo.po.UserInvite; import org.jiayunet.tool.UserSecurityTool; import org.jiayunet.tool.server.RedisServerTool; import org.springframework.beans.BeanUtils; @@ -15,10 +19,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import java.util.List; + /** * 用户账号管理服务 - *

主要功能:查看个人信息、修改个人信息、注销账号

- *

使用表:bg_user(查询/更新/逻辑删除)

+ *

主要功能:查看个人信息、修改个人信息、注销账号、邀请统计

+ *

使用表:bg_user(查询/更新/逻辑删除)、bg_user_invite(邀请统计)

*

使用Redis:login:token:{userId}(注销时清理登录态)

* * @author zk @@ -30,6 +36,9 @@ public class UserManageService { @Autowired private UserMapper userMapper; + @Autowired + private UserInviteMapper userInviteMapper; + @Autowired private RedisServerTool redisServerTool; @@ -80,4 +89,19 @@ public class UserManageService { log.info("用户注销账号 userId:{}", userId); } + + /** + * 邀请统计 + *

查询当前用户的累计邀请人数和累计获得会员天数

+ */ + public InviteStatsDto getInviteStats() { + Long userId = UserSecurityTool.getUserId(); + List invites = userInviteMapper.selectList(new LambdaQueryWrapper().eq(UserInvite::getInviterId, userId)); + + InviteStatsDto dto = new InviteStatsDto(); + + dto.setInviteCount((long) invites.size()); + dto.setRewardDays(invites.stream().mapToInt(i -> i.getRewardDays() == null ? 0 : i.getRewardDays()).sum()); + return dto; + } }