绑定邀请用户获得奖励调整

This commit is contained in:
tianfeng 2025-12-05 15:19:54 +08:00
parent 4f6f296f6a
commit 8304e09c6e
7 changed files with 55 additions and 37 deletions

View File

@ -174,9 +174,6 @@ public class InAppPurchaseCommon {
order.getAcceptUserId(),
order.getAmountUsd().doubleValue());
// 发送首充奖励
completedFirstCharge(order.getAcceptUserId(), order.getSysOrigin());
// SVip积分累计.
userSvipClient.incrIntegral(order.getAcceptUserId(),
amount.longValue());
@ -185,6 +182,8 @@ public class InAppPurchaseCommon {
inviteUserClient.processRechargeCommission(amount,
order.getSysOrigin(), order.getAcceptUserId());
// 发送首充奖励
completedFirstCharge(order.getAcceptUserId(), order.getSysOrigin());
}
private void completedFirstCharge(Long userId, String sysOrigin) {

View File

@ -85,10 +85,6 @@ public class BuySuccessListener implements MessageListener {
return;
}
handleVoiceSystemRechargeRewards(eventBody);
completedFirstCharge(eventBody.getUserId(), eventBody.getSysOrigin());
userExpandClient.updatePurchasingToTrue(eventBody.getUserId());
userProfileClient.removeCache(eventBody.getUserId());
@ -96,14 +92,13 @@ public class BuySuccessListener implements MessageListener {
cumulativeRechargeClient.incrTodayRechargeScore(
eventBody.getAcceptUserId(), eventBody.getProductConfig().getUnitPrice().doubleValue());
try {
//被邀请人充值邀请人获得佣金
inviteUserClient.processRechargeCommission(eventBody.getCandyQuantity(),
eventBody.getSysOrigin(),
eventBody.getUserId());
} catch (Exception e) {
log.error("[App内购] 被邀请人充值邀请人获得佣金累计错误", e);
}
eventBody.getSysOrigin(),
eventBody.getUserId());
completedFirstCharge(eventBody.getUserId(), eventBody.getSysOrigin());
}
private void completedFirstCharge(Long userId, String sysOrigin) {
@ -154,7 +149,7 @@ public class BuySuccessListener implements MessageListener {
.getBody();
BigDecimal rewardQuantity = rewardAmount.divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN)
.multiply(cmd.getCandyQuantity()).setScale(0, RoundingMode.DOWN);
if (!ArithmeticUtils.gtZero(rewardQuantity)) {
if (!ArithmeticUtils.gteZero(rewardQuantity)) {
log.warn("没有找到有效奖励:{}", JacksonUtils.toJson(cmd));
return;
}

View File

@ -3,9 +3,14 @@ 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.domain.gateway.user.UserProfileGateway;
import com.red.circle.other.domain.model.user.UserProfile;
import com.red.circle.other.infra.database.rds.dao.user.user.UserInviteUserDAO;
import com.red.circle.other.infra.database.rds.entity.user.user.InviteUserRechargeCommission;
import com.red.circle.other.infra.database.rds.entity.user.user.OneTimeTask;
import com.red.circle.other.infra.database.rds.entity.user.user.UserInviteUser;
import com.red.circle.other.infra.database.rds.service.user.user.OneTimeTaskService;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
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;
@ -16,6 +21,8 @@ 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.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@ -40,8 +47,9 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
private final UserInviteCacheService userInviteCacheService;
private final InviteUserSummaryService inviteUserSummaryService;
private final UserInviteUserDAO userInviteUserDAO;
private final InviteUserRegisterService inviteUserRegisterService;
private final UserProfileGateway userProfileGateway;
private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService;
private final OneTimeTaskService oneTimeTaskService;
/**
* 被邀请人充值邀请人获得佣金
@ -57,7 +65,6 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
//根据被邀请人获得邀请人
UserInviteUser userInviteUser = getByInviteUserId(inviteUserId);
if (Objects.isNull(userInviteUser)) {
log.info("被邀请人获得邀请人 => null, inviteUserId:{}", inviteUserId);
return;
}
@ -75,7 +82,7 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
}
//获得佣金比例
Double commissionRate = getCommissionRate(sysOrigin);
Double commissionRate = getCommissionRate(sysOrigin, userInviteUser.getInviteUserId());
if (Objects.isNull(commissionRate)) {
log.info("获得佣金比例 => null, inviteUserId:{}", inviteUserId);
return;
@ -103,9 +110,6 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
log.info("被邀请人首次充值,累计邀请人数+1, inviterUserId:{}, inviteUserId:{}",
userInviteUser.getUserId(), userInviteUser.getInviteUserId());
inviteUserSummaryService.incrUser(userInviteUser.getUserId(), 1);
} else {
log.info("被邀请人非首次充值,不累计邀请人数, inviterUserId:{}, inviteUserId:{}, recordCount:{}",
userInviteUser.getUserId(), userInviteUser.getInviteUserId(), recordCount);
}
awardCommission(sysOrigin, userInviteUser.getUserId(), commission, userInviteUser.getInviteUserId());
@ -137,9 +141,18 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
.setScale(0, RoundingMode.DOWN);
}
private Double getCommissionRate(String sysOrigin) {
return userInviteCacheService
.getCommissionRate(SysOriginPlatformEnum.valueOf(sysOrigin));
private Double getCommissionRate(String sysOrigin, Long userId) {
Double commissionRate = userInviteCacheService.getCommissionRate(SysOriginPlatformEnum.valueOf(sysOrigin));
UserProfile userProfile = userProfileGateway.getByUserId(userId);
Duration duration = Duration.between(userProfile.getCreateTime().toLocalDateTime(), LocalDateTime.now());
if (duration.toDays() < 7) {
OneTimeTask oneTimeTask = oneTimeTaskService.queryCompletedFirstCharge(userId, sysOrigin);
if (Objects.isNull(oneTimeTask)) {
commissionRate += 0.03;
}
}
return commissionRate;
}
private UserInviteUser getByInviteUserId(Long inviteUserId) {

View File

@ -14,6 +14,7 @@ import com.red.circle.order.inner.endpoint.UserRechargeCountClient;
import com.red.circle.order.inner.model.enums.MonthlyRechargeType;
import com.red.circle.other.inner.endpoint.activity.PropsActivityClient;
import com.red.circle.other.inner.endpoint.team.target.UserBillDiamondBalanceClient;
import com.red.circle.other.inner.endpoint.user.user.InviteUserClient;
import com.red.circle.other.inner.endpoint.user.user.UserOneTimeTaskClient;
import com.red.circle.other.inner.endpoint.user.user.UserProfileClient;
import com.red.circle.other.inner.endpoint.user.user.UserSvipClient;
@ -92,6 +93,7 @@ public class UserBankExchangeGoldCmdExe {
private final PropsActivityClient propsActivityClient;
private final UserOneTimeTaskClient userOneTimeTaskClient;
private final UserProfileClient userProfileClient;
private final InviteUserClient inviteUserClient;
public UserBankExchangeGoldResultCO execute(UserBankExchangeGoldCmd cmd) {
ResponseAssert.isTrue(ResponseErrorCode.REQUEST_PARAMETER_ERROR,
@ -167,11 +169,15 @@ public class UserBankExchangeGoldCmdExe {
MonthlyRechargeType.SHIPPING_AGENT
);
completedFirstCharge(cmd.getReqUserId(), cmd.getReqSysOrigin().getOrigin());
// SVip积分累计.
userSvipClient.incrIntegral(cmd.getReqUserId(), goldQuantity.longValue());
redisService.unlock(key);
// 被邀请人充值邀请人获得佣金
inviteUserClient.processRechargeCommission(goldQuantity,
cmd.getReqSysOrigin().getOrigin(), cmd.getReqUserId());
completedFirstCharge(cmd.getReqUserId(), cmd.getReqSysOrigin().getOrigin());
return new UserBankExchangeGoldResultCO()
.setBankBalance(decrUserBankBalanceDTO.getAccurateBalance())
.setExchangeGold(Objects.toString(goldRatio));

View File

@ -14,6 +14,7 @@ import com.red.circle.order.inner.model.enums.MonthlyRechargeType;
import com.red.circle.other.inner.endpoint.activity.AppRankCountClient;
import com.red.circle.other.inner.endpoint.activity.CumulativeRechargeClient;
import com.red.circle.other.inner.endpoint.activity.PropsActivityClient;
import com.red.circle.other.inner.endpoint.user.user.InviteUserClient;
import com.red.circle.other.inner.endpoint.user.user.UserOneTimeTaskClient;
import com.red.circle.other.inner.endpoint.user.user.UserProfileClient;
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
@ -80,6 +81,7 @@ public class DealerToUserShipCmdExe {
private final PropsActivityClient propsActivityClient;
private final UserOneTimeTaskClient userOneTimeTaskClient;
private final UserProfileClient userProfileClient;
private final InviteUserClient inviteUserClient;
public BigDecimal execute(FreightDealerToUserShipCmd cmd) {
controlSwitch.execute(cmd.requireReqSysOriginChildEnum());
@ -166,8 +168,6 @@ public class DealerToUserShipCmdExe {
// 累计充值
incrRechargeQuantity(cmd);
completedFirstCharge(cmd.getReqUserId(), cmd.getReqSysOrigin().getOrigin());
//累计今日充值每日累计充值抽奖活动
cumulativeRechargeClient.incrTodayRechargeScore(cmd.getAcceptUserId(),
getGoldToSUD(cmd).doubleValue());
@ -177,6 +177,11 @@ public class DealerToUserShipCmdExe {
// SVip积分累计.
userSvipClient.incrIntegral(cmd.getAcceptUserId(), cmd.getQuantity().longValue());
// 被邀请人充值邀请人获得佣金
inviteUserClient.processRechargeCommission(cmd.getQuantity(),
cmd.getReqSysOrigin().getOrigin(), cmd.getReqUserId());
completedFirstCharge(cmd.getReqUserId(), cmd.getReqSysOrigin().getOrigin());
return balance;
} finally {
redisService.unlock(getLockKey(cmd));

View File

@ -80,6 +80,7 @@ public class SendFreightShipCmdExe {
private final UserLevelClient userLevelClient;
private final PropsActivityClient propsActivityClient;
private final UserOneTimeTaskClient userOneTimeTaskClient;
private final InviteUserClient inviteUserClient;
public BigDecimal execute(FreightShipSendCmd cmd) {
@ -148,16 +149,11 @@ public class SendFreightShipCmdExe {
// SVip积分累计.
userSvipClient.incrIntegral(cmd.getAcceptUserId(), cmd.getQuantity().longValue());
completedFirstCharge(cmd.getAcceptUserId(), cmd.getReqSysOrigin().getOrigin());
// 被邀请人充值邀请人获得佣金
inviteUserClient.processRechargeCommission(cmd.getQuantity(),
cmd.getReqSysOrigin().getOrigin(), cmd.getReqUserId());
//完成任务 钩子 9 充值 币商
/*taskMqMessage.sendTask(TaskApprovalEvent.builder()
.taskId(9)
.userId(cmd.getAcceptUserId())
.sysOrigin(cmd.requireReqSysOrigin())
.currencyDiff((cmd.getQuantity().longValue()))
.day(LocalDateTimeUtils.nowFormat("yyyy-MM-dd"))
.build());*/
completedFirstCharge(cmd.getAcceptUserId(), cmd.getReqSysOrigin().getOrigin());
return balance;
} finally {

View File

@ -95,6 +95,7 @@ public class SalaryExchangeGoldCmdExe {
private final PropsActivityClient propsActivityClient;
private final UserOneTimeTaskClient userOneTimeTaskClient;
private final UserProfileClient userProfileClient;
private final InviteUserClient inviteUserClient;
public UserBankExchangeGoldResultCO execute(SalaryWithdrawCmd cmd) {
ResponseAssert.isTrue(ResponseErrorCode.REQUEST_PARAMETER_ERROR,
@ -152,8 +153,11 @@ public class SalaryExchangeGoldCmdExe {
MonthlyRechargeType.SHIPPING_AGENT
);
completedFirstCharge(cmd.getReqUserId(), cmd.getReqSysOrigin().getOrigin());
// 被邀请人充值邀请人获得佣金
inviteUserClient.processRechargeCommission(cmd.getAmount(),
cmd.getReqSysOrigin().getOrigin(), cmd.getReqUserId());
completedFirstCharge(cmd.getReqUserId(), cmd.getReqSysOrigin().getOrigin());
redisService.unlock(key);
return new UserBankExchangeGoldResultCO()
.setBankBalance(salaryReceiptRes.getAvailableBalance().getDollarAmount())