diff --git a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/user/api/UserInviteUserClientApi.java b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/user/api/UserInviteUserClientApi.java index 590476b1..442b8bfc 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/user/api/UserInviteUserClientApi.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-api/src/main/java/com/red/circle/other/inner/endpoint/user/user/api/UserInviteUserClientApi.java @@ -1,9 +1,14 @@ package com.red.circle.other.inner.endpoint.user.user.api; +import com.red.circle.framework.dto.PageResult; import com.red.circle.framework.dto.ResultResponse; import com.red.circle.other.inner.model.cmd.user.InviteStatisticsQryCmd; +import com.red.circle.other.inner.model.cmd.user.InviteUserQryCmd; +import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO; import com.red.circle.other.inner.model.dto.user.UserInviteUserCountDTO; import java.util.Map; + +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -25,4 +30,7 @@ public interface UserInviteUserClientApi { @PostMapping("/mapInviteStatisticsByUserIds") ResultResponse> mapInviteStatisticsByUserIds(@RequestBody InviteStatisticsQryCmd qryCmd); + + @PostMapping("/page") + ResultResponse> pageQuery(@RequestBody InviteUserQryCmd query); } diff --git a/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/UserInviteUserRegisterRestController.java b/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/UserInviteUserRegisterRestController.java index 35e97ebe..089ca139 100644 --- a/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/UserInviteUserRegisterRestController.java +++ b/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/UserInviteUserRegisterRestController.java @@ -4,6 +4,7 @@ package com.red.circle.console.adapter.app.user; import com.red.circle.console.app.service.app.user.UserInviteUserRegisterService; import com.red.circle.framework.dto.PageResult; import com.red.circle.framework.web.controller.BaseController; +import com.red.circle.other.inner.endpoint.user.user.api.UserInviteUserClientApi; import com.red.circle.other.inner.model.cmd.user.InviteUserQryCmd; import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO; import lombok.RequiredArgsConstructor; @@ -25,10 +26,19 @@ import org.springframework.web.bind.annotation.RestController; public class UserInviteUserRegisterRestController extends BaseController { private final UserInviteUserRegisterService userInviteUserRegisterService; + private final UserInviteUserClientApi userInviteUserClientApi; - @GetMapping("/page") +// @GetMapping("/page") public PageResult getInviteUser(InviteUserQryCmd query) { return userInviteUserRegisterService.pageQuery(query); } + /** + * 分页查询用户邀请记录(新数据源) + */ + @GetMapping("/page") + public PageResult getInviteUserV2(InviteUserQryCmd query) { + return userInviteUserClientApi.pageQuery(query).getBody(); + } + } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/user/UserInviteUserClientEndpoint.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/user/UserInviteUserClientEndpoint.java index 1cf187f6..31808ee0 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/user/UserInviteUserClientEndpoint.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/endpoint/user/user/UserInviteUserClientEndpoint.java @@ -1,9 +1,12 @@ package com.red.circle.other.app.inner.endpoint.user.user; +import com.red.circle.framework.dto.PageResult; import com.red.circle.framework.dto.ResultResponse; import com.red.circle.other.app.inner.service.user.user.UserInviteUserClientService; import com.red.circle.other.inner.endpoint.user.user.api.UserInviteUserClientApi; import com.red.circle.other.inner.model.cmd.user.InviteStatisticsQryCmd; +import com.red.circle.other.inner.model.cmd.user.InviteUserQryCmd; +import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO; import com.red.circle.other.inner.model.dto.user.UserInviteUserCountDTO; import java.util.Map; import lombok.RequiredArgsConstructor; @@ -29,4 +32,9 @@ public class UserInviteUserClientEndpoint implements UserInviteUserClientApi { InviteStatisticsQryCmd qryCmd) { return ResultResponse.success(userInviteUserClientService.mapInviteStatisticsByUserIds(qryCmd)); } + + @Override + public ResultResponse> pageQuery(InviteUserQryCmd query) { + return ResultResponse.success(userInviteUserClientService.pageQuery(query)); + } } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/UserInviteUserClientService.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/UserInviteUserClientService.java index 8b59f4fa..a95f3bb6 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/UserInviteUserClientService.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/UserInviteUserClientService.java @@ -1,6 +1,9 @@ package com.red.circle.other.app.inner.service.user.user; +import com.red.circle.framework.dto.PageResult; import com.red.circle.other.inner.model.cmd.user.InviteStatisticsQryCmd; +import com.red.circle.other.inner.model.cmd.user.InviteUserQryCmd; +import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO; import com.red.circle.other.inner.model.dto.user.UserInviteUserCountDTO; import java.util.Map; @@ -10,4 +13,9 @@ import java.util.Map; public interface UserInviteUserClientService { Map mapInviteStatisticsByUserIds(InviteStatisticsQryCmd qryCmd); + + /** + * 分页查询用户邀请记录 + */ + PageResult pageQuery(InviteUserQryCmd query); } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/UserInviteUserClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/UserInviteUserClientServiceImpl.java index f0940e00..04c8c928 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/UserInviteUserClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/UserInviteUserClientServiceImpl.java @@ -1,15 +1,27 @@ package com.red.circle.other.app.inner.service.user.user.impl; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.google.common.collect.Maps; +import com.red.circle.framework.core.asserts.ResponseAssert; +import com.red.circle.framework.dto.PageResult; import com.red.circle.other.app.inner.service.user.user.UserInviteUserClientService; +import com.red.circle.other.infra.database.rds.entity.user.user.InviteUserRechargeCommission; +import com.red.circle.other.infra.database.rds.entity.user.user.UserInviteUser; +import com.red.circle.other.infra.database.rds.service.user.user.InviteUserRechargeCommissionService; import com.red.circle.other.infra.database.rds.service.user.user.UserInviteUserService; +import com.red.circle.other.inner.endpoint.user.user.UserProfileClient; import com.red.circle.other.inner.model.cmd.team.bd.BdTeamWorkStatisticsQryCmd; import com.red.circle.other.inner.model.cmd.user.InviteStatisticsQryCmd; +import com.red.circle.other.inner.model.cmd.user.InviteUserQryCmd; +import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO; import com.red.circle.other.inner.model.dto.user.UserInviteUserCountDTO; -import java.util.List; -import java.util.Map; -import java.util.Set; + +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.red.circle.other.inner.model.dto.user.UserProfileDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -24,6 +36,8 @@ import org.springframework.util.CollectionUtils; public class UserInviteUserClientServiceImpl implements UserInviteUserClientService { private final UserInviteUserService userInviteUserService; + private final UserProfileClient userProfileClient; + private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService; @Override public Map mapInviteStatisticsByUserIds( @@ -40,4 +54,61 @@ public class UserInviteUserClientServiceImpl implements UserInviteUserClientServ return dbUserInviteList.stream() .collect(Collectors.toMap(UserInviteUserCountDTO::getUserId, v -> v)); } + + @Override + public PageResult pageQuery(InviteUserQryCmd query) { + // 1. 分页查询 user_invite_user 表 + PageResult pageResult = userInviteUserService.query() + .eq(StringUtils.isNotBlank(query.getSysOrigin()), + UserInviteUser::getSysOrigin, query.getSysOrigin()) + .eq(Objects.nonNull(query.getUserId()), + UserInviteUser::getUserId, query.getUserId()) + .eq(Objects.nonNull(query.getInviteUserId()), + UserInviteUser::getInviteUserId, query.getInviteUserId()) + .ge(Objects.nonNull(query.startTimeToLocalDateTime()), + UserInviteUser::getCreateTime, query.startTimeToLocalDateTime()) + .le(Objects.nonNull(query.endTimeToLocalDateTime()), + UserInviteUser::getCreateTime, query.endTimeToLocalDateTime()) + .orderByDesc(UserInviteUser::getCreateTime) + .page(query.getPageQuery()); + + // 2. 如果没有数据,直接返回 + if (CollectionUtils.isEmpty(pageResult.getRecords())) { + return PageResult.newPageResult(0); + } + + // 3. 收集所有用户ID + Set userIds = Stream.of( + pageResult.getRecords().stream() + .map(UserInviteUser::getUserId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()), + pageResult.getRecords().stream() + .map(UserInviteUser::getInviteUserId) + .filter(Objects::nonNull) + .collect(Collectors.toSet())) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + + // 4. 批量查询用户信息 + Map userProfileMap = ResponseAssert.requiredSuccess( + userProfileClient.mapByUserIds(userIds)); + + Map commissionMap = inviteUserRechargeCommissionService.query() + .in(InviteUserRechargeCommission::getUserId, userIds) + .list() + .stream().collect(Collectors.toMap(InviteUserRechargeCommission::getUserId, InviteUserRechargeCommission::getCommission, BigDecimal::add)); + + // 5. 转换为 DTO 并返回 + return pageResult.convert(inviteUser -> new PageInviteUserRegisterDTO() + .setId(inviteUser.getId()) + .setUserId(inviteUser.getUserId()) + .setInviteUserId(inviteUser.getInviteUserId()) + .setUserProfile(userProfileMap.get(inviteUser.getUserId())) + .setBeUserProfile(userProfileMap.get(inviteUser.getInviteUserId())) + .setCommission(commissionMap.get(inviteUser.getUserId())) + .setCreateTime(inviteUser.getCreateTime()) + ); + } + }