邀请码 充值后发送奖励完善

This commit is contained in:
tianfeng 2025-10-22 12:21:44 +08:00
parent 5a75f78165
commit e9a281e8dd
4 changed files with 47 additions and 34 deletions

View File

@ -78,7 +78,7 @@ public class GetIncomeStatisticsExe {
*/ */
private List<Long> getValidInvitedUserIds(List<UserInviteUser> allInvites) { private List<Long> getValidInvitedUserIds(List<UserInviteUser> allInvites) {
return allInvites.stream() return allInvites.stream()
.filter(this::isValidInvite) // .filter(this::isValidInvite)
.map(UserInviteUser::getInviteUserId) // inviteUserId是被邀请人 .map(UserInviteUser::getInviteUserId) // inviteUserId是被邀请人
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -128,8 +128,8 @@ public class GetIncomeStatisticsExe {
List<InviteUserRechargeCommission> commissions = inviteUserRechargeCommissionDAO.selectList( List<InviteUserRechargeCommission> commissions = inviteUserRechargeCommissionDAO.selectList(
new LambdaQueryWrapper<InviteUserRechargeCommission>() new LambdaQueryWrapper<InviteUserRechargeCommission>()
.eq(InviteUserRechargeCommission::getInviteUserId, inviterUserId) .eq(InviteUserRechargeCommission::getUserId, inviterUserId)
.in(InviteUserRechargeCommission::getUserId, validInvitedUserIds) .in(InviteUserRechargeCommission::getInviteUserId, validInvitedUserIds)
); );
return commissions.stream() return commissions.stream()
@ -150,8 +150,8 @@ public class GetIncomeStatisticsExe {
List<InviteUserRechargeCommission> todayCommissions = inviteUserRechargeCommissionDAO.selectList( List<InviteUserRechargeCommission> todayCommissions = inviteUserRechargeCommissionDAO.selectList(
new LambdaQueryWrapper<InviteUserRechargeCommission>() new LambdaQueryWrapper<InviteUserRechargeCommission>()
.eq(InviteUserRechargeCommission::getInviteUserId, inviterUserId) .eq(InviteUserRechargeCommission::getUserId, inviterUserId)
.in(InviteUserRechargeCommission::getUserId, validInvitedUserIds) .in(InviteUserRechargeCommission::getInviteUserId, validInvitedUserIds)
.ge(InviteUserRechargeCommission::getCreateTime, Timestamp.valueOf(todayStart)) .ge(InviteUserRechargeCommission::getCreateTime, Timestamp.valueOf(todayStart))
.le(InviteUserRechargeCommission::getCreateTime, Timestamp.valueOf(todayEnd)) .le(InviteUserRechargeCommission::getCreateTime, Timestamp.valueOf(todayEnd))
); );

View File

@ -85,13 +85,13 @@ public class GetValidInviteUsersExe {
// 批量查询佣金信息inviteUserId=邀请人userId=被邀请人 // 批量查询佣金信息inviteUserId=邀请人userId=被邀请人
List<InviteUserRechargeCommission> commissions = inviteUserRechargeCommissionDAO.selectList( List<InviteUserRechargeCommission> commissions = inviteUserRechargeCommissionDAO.selectList(
new LambdaQueryWrapper<InviteUserRechargeCommission>() new LambdaQueryWrapper<InviteUserRechargeCommission>()
.eq(InviteUserRechargeCommission::getInviteUserId, inviterUserId) // 邀请人 .eq(InviteUserRechargeCommission::getUserId, inviterUserId) // 邀请人
.in(InviteUserRechargeCommission::getUserId, invitedUserIds) // 被邀请人 .in(InviteUserRechargeCommission::getInviteUserId, invitedUserIds) // 被邀请人
); );
Map<Long, BigDecimal> commissionMap = commissions.stream() Map<Long, BigDecimal> commissionMap = commissions.stream()
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
InviteUserRechargeCommission::getUserId, // 被邀请人ID InviteUserRechargeCommission::getInviteUserId, // 被邀请人ID
Collectors.reducing(BigDecimal.ZERO, Collectors.reducing(BigDecimal.ZERO,
InviteUserRechargeCommission::getCommission, InviteUserRechargeCommission::getCommission,
BigDecimal::add) BigDecimal::add)

View File

@ -1,6 +1,10 @@
package com.red.circle.other.infra.gateway.user; package com.red.circle.other.infra.gateway.user;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum; import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.other.infra.database.rds.dao.user.user.UserInviteUserDAO;
import com.red.circle.other.infra.database.rds.entity.user.user.UserInviteUser;
import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.TimestampUtils;
import com.red.circle.other.domain.gateway.user.ability.InviteUserGateway; import com.red.circle.other.domain.gateway.user.ability.InviteUserGateway;
import com.red.circle.other.infra.database.cache.service.user.UserInviteCacheService; import com.red.circle.other.infra.database.cache.service.user.UserInviteCacheService;
@ -11,6 +15,7 @@ import com.red.circle.other.infra.database.rds.service.user.user.InviteUserSumma
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient; import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
@ -33,6 +38,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
private final WalletGoldClient walletGoldClient; private final WalletGoldClient walletGoldClient;
private final UserInviteCacheService userInviteCacheService; private final UserInviteCacheService userInviteCacheService;
private final InviteUserSummaryService inviteUserSummaryService; private final InviteUserSummaryService inviteUserSummaryService;
private final UserInviteUserDAO userInviteUserDAO;
private final InviteUserRegisterService inviteUserRegisterService; private final InviteUserRegisterService inviteUserRegisterService;
private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService; private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService;
@ -48,8 +54,8 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
Long inviteUserId) { Long inviteUserId) {
//根据被邀请人获得邀请人 //根据被邀请人获得邀请人
InviteUserRegister userRegister = getByInviteUserId(inviteUserId); UserInviteUser userInviteUser = getByInviteUserId(inviteUserId);
if (Objects.isNull(userRegister)) { if (Objects.isNull(userInviteUser)) {
log.info("被邀请人获得邀请人 => null, inviteUserId:{}", inviteUserId); log.info("被邀请人获得邀请人 => null, inviteUserId:{}", inviteUserId);
return; return;
} }
@ -61,7 +67,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
return; return;
} }
//邀请时间 + 有效天数 > 当前时间 则可以继续获得佣金 //邀请时间 + 有效天数 > 当前时间 则可以继续获得佣金
Timestamp limitedTime = getLimitedTime(userRegister, commissionDays); Timestamp limitedTime = getLimitedTime(userInviteUser, commissionDays);
if (limitedTime.compareTo(TimestampUtils.now()) < 0) { if (limitedTime.compareTo(TimestampUtils.now()) < 0) {
log.info("邀请时间 + 有效天数 < 当前时间, inviteUserId:{}", inviteUserId); log.info("邀请时间 + 有效天数 < 当前时间, inviteUserId:{}", inviteUserId);
return; return;
@ -81,13 +87,10 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
return; return;
} }
inviteUserSummaryService.incrCommission(userRegister.getUserId(), commission); inviteUserSummaryService.incrCommission(userInviteUser.getUserId(), commission);
inviteUserRegisterService.incrCommission(userRegister.getInviteUserId(), commission); inviteUserRechargeCommissionService.add(sysOrigin, userInviteUser.getUserId(), userInviteUser.getInviteUserId(), commission);
inviteUserRechargeCommissionService.add(sysOrigin,
userRegister.getUserId(), userRegister.getInviteUserId(), commission);
awardCommission(sysOrigin, userRegister.getUserId(), commission, awardCommission(sysOrigin, userInviteUser.getUserId(), commission, userInviteUser.getInviteUserId());
userRegister.getInviteUserId());
} }
/** /**
@ -98,9 +101,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
* @param amount 佣金 * @param amount 佣金
* @param inviteUserId 被邀请人(充值人) * @param inviteUserId 被邀请人(充值人)
*/ */
private void awardCommission(String sysOrigin, Long userId, BigDecimal amount, private void awardCommission(String sysOrigin, Long userId, BigDecimal amount, Long inviteUserId) {
Long inviteUserId) {
walletGoldClient.changeBalance(GoldReceiptCmd.builder() walletGoldClient.changeBalance(GoldReceiptCmd.builder()
.appIncome() .appIncome()
.userId(userId) .userId(userId)
@ -111,16 +112,6 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.amount(amount) .amount(amount)
.closeDelayAsset() .closeDelayAsset()
.build()); .build());
// TODO 2023-05-08 刘占洋 有用户薅羊毛去除
// walletRepository.changeGoldBalance(GoldReceipt.builder()
// .consumeId(IdWorkerUtils.getId())
// .trackId(inviteUserId)
// .type(ReceiptType.INCOME)
// .userId(userId)
// .sysOrigin(SysOriginPlatformEnum.valueOf(sysOrigin))
// .origin(GoldOrigin.INVITE_USER_REWARDS)
// .amount(amount)
// .build());
} }
private BigDecimal getCommission(BigDecimal rechargeAmount, Double commissionRate) { private BigDecimal getCommission(BigDecimal rechargeAmount, Double commissionRate) {
@ -133,11 +124,21 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.getCommissionRate(SysOriginPlatformEnum.valueOf(sysOrigin)); .getCommissionRate(SysOriginPlatformEnum.valueOf(sysOrigin));
} }
private InviteUserRegister getByInviteUserId(Long inviteUserId) { private UserInviteUser getByInviteUserId(Long inviteUserId) {
if (Objects.isNull(inviteUserId)) { if (Objects.isNull(inviteUserId)) {
return null; return null;
} }
return inviteUserRegisterService.getByInviteUserId(inviteUserId);
List<UserInviteUser> allInvites = userInviteUserDAO.selectList(
new LambdaQueryWrapper<UserInviteUser>()
.eq(UserInviteUser::getInviteUserId, inviteUserId)
.orderByDesc(UserInviteUser::getCreateTime)
);
if (CollectionUtils.isEmpty(allInvites)) {
return null;
}
return allInvites.get(0);
} }
private Integer getCommissionDays(String sysOrigin) { private Integer getCommissionDays(String sysOrigin) {
@ -145,9 +146,9 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.getCommissionDays(SysOriginPlatformEnum.valueOf(sysOrigin)); .getCommissionDays(SysOriginPlatformEnum.valueOf(sysOrigin));
} }
private Timestamp getLimitedTime(InviteUserRegister userRegister, Integer commissionDays) { private Timestamp getLimitedTime(UserInviteUser userInviteUser, Integer commissionDays) {
return TimestampUtils return TimestampUtils
.dateTimestampPlusDays(userRegister.getCreateTime().toLocalDateTime(), commissionDays); .dateTimestampPlusDays(userInviteUser.getCreateTime().toLocalDateTime(), commissionDays);
} }
} }

View File

@ -1,14 +1,26 @@
import com.red.circle.OtherServiceApplication; import com.red.circle.OtherServiceApplication;
import com.red.circle.other.app.scheduler.TeamBillTask; import com.red.circle.other.app.scheduler.TeamBillTask;
import com.red.circle.other.domain.gateway.user.ability.InviteUserGateway;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.math.BigDecimal;
@SpringBootTest(classes = OtherServiceApplication.class) @SpringBootTest(classes = OtherServiceApplication.class)
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public class SpringTest { public class SpringTest {
@Autowired
private InviteUserGateway inviteUserGateway;
@Test
public void execute() {
BigDecimal amount = new BigDecimal("100");
Long userId = 1963789902071508993L;
inviteUserGateway.getRechargeCommission(amount, "LIKEI", userId);
}
} }