拉新奖励逻辑修改

This commit is contained in:
tianfeng 2026-03-06 14:49:41 +08:00
parent b937f5762b
commit e789098a0b
5 changed files with 66 additions and 28 deletions

View File

@ -127,6 +127,12 @@ public enum SendPropsOrigin {
*/
INVITE_USER_REWARDS("Invite users"),
/**
* 7天内充值奖励
*/
RECHARGE_7DAY("Recharge within 7 days"),
/**
* 每周游戏任务奖励.
*/

View File

@ -484,6 +484,11 @@ public enum GoldOrigin {
*/
INVITE_USER_REWARDS("Invite User Rewards"),
/**
* 7天内充值
*/
RECHARGE_7DAY("Recharge within 7 days"),
/**
* 幸运礼物金币奖励.
*/

View File

@ -356,14 +356,14 @@ public class TaskListener implements MessageListener {
userTaskProgressDAO.updateById(userTaskProgress);
// 发送道具
propsActivityCnfClient.sendActivityReward(new SendActivityRewardCmd()
/*propsActivityCnfClient.sendActivityReward(new SendActivityRewardCmd()
.setTrackId(IdWorkerUtils.getId())
.setSysOrigin(SysOriginPlatformEnum.LIKEI)
.setAcceptUserId(eventBody.getUserId())
.setSourceGroupId(userTaskProgress.getRewardId())
.setOrigin(SendPropsOrigin.DAILY_TASK_REWARD)
);
*/
// 给邀请人和被邀请人发送金币奖励
handleInviteUserGold(eventBody.getUserId());

View File

@ -90,33 +90,30 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
//获得的佣金 = 糖果数 * 佣金比例
BigDecimal commission = getCommission(rechargeAmount, commissionRate);
if (commission.compareTo(BigDecimal.ZERO) <= 0) {
log.info("糖果数 * 佣金比例 <= 0, inviteUserId:{}", inviteUserId);
return null;
if (commission.compareTo(BigDecimal.ZERO) > 0) {
inviteUserSummaryService.incrCommission(userInviteUser.getUserId(), commission);
inviteUserRechargeCommissionService.add(sysOrigin, userInviteUser.getUserId(),
userInviteUser.getInviteUserId(), commission);
// 累计邀请人数判断inviteUserRechargeCommissionService里是否已有该被邀请人的记录
// 查询该被邀请人在此之前是否有充值记录
long recordCount = inviteUserRechargeCommissionService.query()
.eq(InviteUserRechargeCommission::getUserId, userInviteUser.getUserId())
.eq(InviteUserRechargeCommission::getInviteUserId, userInviteUser.getInviteUserId())
.count();
// 如果记录数 < 1说明是首次充值当前这条刚插入才累计邀请人数+1
if (recordCount < 1) {
log.info("被邀请人首次充值,累计邀请人数+1, inviterUserId:{}, inviteeUserId:{}",
userInviteUser.getUserId(), userInviteUser.getInviteUserId());
inviteUserSummaryService.incrUser(userInviteUser.getUserId(), 1);
}
awardCommission(sysOrigin, userInviteUser.getUserId(), commission, userInviteUser.getInviteUserId());
recordRanking(userInviteUser.getUserId(), commission.longValue());
}
inviteUserSummaryService.incrCommission(userInviteUser.getUserId(), commission);
inviteUserRechargeCommissionService.add(sysOrigin, userInviteUser.getUserId(),
userInviteUser.getInviteUserId(), commission);
// 累计邀请人数判断inviteUserRechargeCommissionService里是否已有该被邀请人的记录
// 查询该被邀请人在此之前是否有充值记录
long recordCount = inviteUserRechargeCommissionService.query()
.eq(InviteUserRechargeCommission::getUserId, userInviteUser.getUserId())
.eq(InviteUserRechargeCommission::getInviteUserId, userInviteUser.getInviteUserId())
.count();
// 如果记录数 < 1说明是首次充值当前这条刚插入才累计邀请人数+1
if (recordCount < 1) {
log.info("被邀请人首次充值,累计邀请人数+1, inviterUserId:{}, inviteeUserId:{}",
userInviteUser.getUserId(), userInviteUser.getInviteUserId());
inviteUserSummaryService.incrUser(userInviteUser.getUserId(), 1);
}
awardCommission(sysOrigin, userInviteUser.getUserId(), commission, userInviteUser.getInviteUserId());
recordRanking(userInviteUser.getUserId(), commission.longValue());
BigDecimal totalRecharge = accumulateRecharge(userInviteUser.getUserId(), inviteUserId, rechargeAmount);
RechargeCommissionResult result = new RechargeCommissionResult();

View File

@ -15,7 +15,11 @@ import com.red.circle.other.domain.gateway.user.UserProfileGateway;
import com.red.circle.other.domain.gateway.user.ability.InviteUserGateway;
import com.red.circle.other.domain.model.user.RechargeCommissionResult;
import com.red.circle.other.domain.model.user.UserProfile;
import com.red.circle.other.domain.ranking.RankingActivityType;
import com.red.circle.other.domain.ranking.RankingCycleType;
import com.red.circle.other.domain.ranking.RankingDimension;
import com.red.circle.other.infra.database.cache.service.user.UserInviteCacheService;
import com.red.circle.other.infra.database.mongo.entity.activity.RankingActivityRecord;
import com.red.circle.other.infra.database.rds.entity.user.user.OneTimeTask;
import com.red.circle.other.infra.database.rds.query.user.InviteUserQry;
import com.red.circle.other.infra.database.rds.service.user.user.InviteUserRechargeCommissionService;
@ -24,6 +28,7 @@ import com.red.circle.other.infra.database.rds.service.user.user.InviteUserRewar
import com.red.circle.other.infra.database.rds.service.user.user.InviteUserSummaryService;
import com.red.circle.other.infra.database.rds.service.user.user.OneTimeTaskService;
import com.red.circle.other.infra.enums.user.user.UserOneTimeTaskTypeEnum;
import com.red.circle.other.infra.gateway.RankingActivityGateway;
import com.red.circle.other.inner.endpoint.activity.PropsActivityClient;
import com.red.circle.other.inner.endpoint.sys.EnumConfigClient;
import com.red.circle.other.inner.model.cmd.activity.SendActivityRewardCmd;
@ -37,6 +42,7 @@ import com.red.circle.other.inner.model.dto.user.InviteUserSummaryDTO;
import com.red.circle.other.inner.model.dto.user.PageInviteUserRegisterDTO;
import com.red.circle.other.inner.model.dto.user.SysInviteUserConfigDTO;
import com.red.circle.tool.core.date.TimestampUtils;
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
import com.red.circle.tool.core.sequence.IdWorkerUtils;
import com.red.circle.tool.core.text.StringUtils;
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
@ -47,6 +53,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -90,6 +97,8 @@ public class InviteUserClientServiceImpl implements InviteUserClientService {
private final OneTimeTaskService oneTimeTaskService;
private final EnumConfigClient enumConfigClient;
private final UserProfileGateway userProfileGateway;
private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService;
private final RankingActivityGateway rankingActivityGateway;
@Override
@ -176,17 +185,38 @@ public class InviteUserClientServiceImpl implements InviteUserClientService {
.amount(BigDecimal.valueOf(gold))
.build());
inviteUserSummaryService.incrCommission(result.getInviterUserId(), BigDecimal.valueOf(gold));
inviteUserRechargeCommissionService.add(SysOriginPlatformEnum.LIKEI.name(), result.getInviterUserId(),
result.getInviteeUserId(), BigDecimal.valueOf(gold));
recordRanking(result.getInviterUserId(), gold);
// 道具奖励发给被邀请人B
propsActivityClient.sendActivityReward(new SendActivityRewardCmd()
.setTrackId(IdWorkerUtils.getId())
.setSysOrigin(SysOriginPlatformEnum.LIKEI)
.setAcceptUserId(result.getInviteeUserId())
.setSourceGroupId(propsId)
.setOrigin(SendPropsOrigin.INVITE_USER_REWARDS)
.setOrigin(SendPropsOrigin.RECHARGE_7DAY)
);
}
private void recordRanking(Long userId, Long quantity) {
RankingActivityRecord record = new RankingActivityRecord();
record.setSysOrigin(SysOriginPlatformEnum.LIKEI.name());
record.setUserId(userId);
record.setUserSex(1);
record.setActivityType(RankingActivityType.INVITE);
record.setCycleType(RankingCycleType.WEEKLY);
record.setCycleKey(ZonedDateTimeAsiaRiyadhUtils.nowWeekMondayToInt().toString());
record.setDimension(RankingDimension.CONSUME_AMOUNT);
record.setExpiredTime(new Timestamp(System.currentTimeMillis() + 30L * 24 * 60 * 60 * 1000));
rankingActivityGateway.accumulateRankingData(record, quantity);
}
@Override
public List<InviteUserRegisterDTO> pageInviteUserRegister(Integer pageNumber, Long userId) {
return userInviteInnerConvertor.toListInviteUserRegisterDTO(