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

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

View File

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

View File

@ -1,6 +1,10 @@
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.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.other.domain.gateway.user.ability.InviteUserGateway;
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.RoundingMode;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
@ -33,6 +38,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
private final WalletGoldClient walletGoldClient;
private final UserInviteCacheService userInviteCacheService;
private final InviteUserSummaryService inviteUserSummaryService;
private final UserInviteUserDAO userInviteUserDAO;
private final InviteUserRegisterService inviteUserRegisterService;
private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService;
@ -48,8 +54,8 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
Long inviteUserId) {
//根据被邀请人获得邀请人
InviteUserRegister userRegister = getByInviteUserId(inviteUserId);
if (Objects.isNull(userRegister)) {
UserInviteUser userInviteUser = getByInviteUserId(inviteUserId);
if (Objects.isNull(userInviteUser)) {
log.info("被邀请人获得邀请人 => null, inviteUserId:{}", inviteUserId);
return;
}
@ -61,7 +67,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
return;
}
//邀请时间 + 有效天数 > 当前时间 则可以继续获得佣金
Timestamp limitedTime = getLimitedTime(userRegister, commissionDays);
Timestamp limitedTime = getLimitedTime(userInviteUser, commissionDays);
if (limitedTime.compareTo(TimestampUtils.now()) < 0) {
log.info("邀请时间 + 有效天数 < 当前时间, inviteUserId:{}", inviteUserId);
return;
@ -81,13 +87,10 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
return;
}
inviteUserSummaryService.incrCommission(userRegister.getUserId(), commission);
inviteUserRegisterService.incrCommission(userRegister.getInviteUserId(), commission);
inviteUserRechargeCommissionService.add(sysOrigin,
userRegister.getUserId(), userRegister.getInviteUserId(), commission);
inviteUserSummaryService.incrCommission(userInviteUser.getUserId(), commission);
inviteUserRechargeCommissionService.add(sysOrigin, userInviteUser.getUserId(), userInviteUser.getInviteUserId(), commission);
awardCommission(sysOrigin, userRegister.getUserId(), commission,
userRegister.getInviteUserId());
awardCommission(sysOrigin, userInviteUser.getUserId(), commission, userInviteUser.getInviteUserId());
}
/**
@ -98,9 +101,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
* @param amount 佣金
* @param inviteUserId 被邀请人(充值人)
*/
private void awardCommission(String sysOrigin, Long userId, BigDecimal amount,
Long inviteUserId) {
private void awardCommission(String sysOrigin, Long userId, BigDecimal amount, Long inviteUserId) {
walletGoldClient.changeBalance(GoldReceiptCmd.builder()
.appIncome()
.userId(userId)
@ -111,16 +112,6 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.amount(amount)
.closeDelayAsset()
.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) {
@ -133,11 +124,21 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.getCommissionRate(SysOriginPlatformEnum.valueOf(sysOrigin));
}
private InviteUserRegister getByInviteUserId(Long inviteUserId) {
private UserInviteUser getByInviteUserId(Long inviteUserId) {
if (Objects.isNull(inviteUserId)) {
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) {
@ -145,9 +146,9 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.getCommissionDays(SysOriginPlatformEnum.valueOf(sysOrigin));
}
private Timestamp getLimitedTime(InviteUserRegister userRegister, Integer commissionDays) {
private Timestamp getLimitedTime(UserInviteUser userInviteUser, Integer commissionDays) {
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.other.app.scheduler.TeamBillTask;
import com.red.circle.other.domain.gateway.user.ability.InviteUserGateway;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.math.BigDecimal;
@SpringBootTest(classes = OtherServiceApplication.class)
@RunWith(SpringRunner.class)
public class SpringTest {
@Autowired
private InviteUserGateway inviteUserGateway;
@Test
public void execute() {
BigDecimal amount = new BigDecimal("100");
Long userId = 1963789902071508993L;
inviteUserGateway.getRechargeCommission(amount, "LIKEI", userId);
}
}