拉新奖励逻辑修改
This commit is contained in:
parent
b937f5762b
commit
e789098a0b
@ -127,6 +127,12 @@ public enum SendPropsOrigin {
|
|||||||
*/
|
*/
|
||||||
INVITE_USER_REWARDS("Invite users"),
|
INVITE_USER_REWARDS("Invite users"),
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 7天内充值奖励
|
||||||
|
*/
|
||||||
|
RECHARGE_7DAY("Recharge within 7 days"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每周游戏任务奖励.
|
* 每周游戏任务奖励.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -484,6 +484,11 @@ public enum GoldOrigin {
|
|||||||
*/
|
*/
|
||||||
INVITE_USER_REWARDS("Invite User Rewards"),
|
INVITE_USER_REWARDS("Invite User Rewards"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 7天内充值
|
||||||
|
*/
|
||||||
|
RECHARGE_7DAY("Recharge within 7 days"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 幸运礼物金币奖励.
|
* 幸运礼物金币奖励.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -356,14 +356,14 @@ public class TaskListener implements MessageListener {
|
|||||||
userTaskProgressDAO.updateById(userTaskProgress);
|
userTaskProgressDAO.updateById(userTaskProgress);
|
||||||
|
|
||||||
// 发送道具
|
// 发送道具
|
||||||
propsActivityCnfClient.sendActivityReward(new SendActivityRewardCmd()
|
/*propsActivityCnfClient.sendActivityReward(new SendActivityRewardCmd()
|
||||||
.setTrackId(IdWorkerUtils.getId())
|
.setTrackId(IdWorkerUtils.getId())
|
||||||
.setSysOrigin(SysOriginPlatformEnum.LIKEI)
|
.setSysOrigin(SysOriginPlatformEnum.LIKEI)
|
||||||
.setAcceptUserId(eventBody.getUserId())
|
.setAcceptUserId(eventBody.getUserId())
|
||||||
.setSourceGroupId(userTaskProgress.getRewardId())
|
.setSourceGroupId(userTaskProgress.getRewardId())
|
||||||
.setOrigin(SendPropsOrigin.DAILY_TASK_REWARD)
|
.setOrigin(SendPropsOrigin.DAILY_TASK_REWARD)
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
// 给邀请人和被邀请人发送金币奖励
|
// 给邀请人和被邀请人发送金币奖励
|
||||||
handleInviteUserGold(eventBody.getUserId());
|
handleInviteUserGold(eventBody.getUserId());
|
||||||
|
|
||||||
|
|||||||
@ -90,33 +90,30 @@ public class InviteUserGatewayImpl implements InviteUserGateway {
|
|||||||
|
|
||||||
//获得的佣金 = 糖果数 * 佣金比例
|
//获得的佣金 = 糖果数 * 佣金比例
|
||||||
BigDecimal commission = getCommission(rechargeAmount, commissionRate);
|
BigDecimal commission = getCommission(rechargeAmount, commissionRate);
|
||||||
if (commission.compareTo(BigDecimal.ZERO) <= 0) {
|
if (commission.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
log.info("糖果数 * 佣金比例 <= 0, inviteUserId:{}", inviteUserId);
|
inviteUserSummaryService.incrCommission(userInviteUser.getUserId(), commission);
|
||||||
return null;
|
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);
|
BigDecimal totalRecharge = accumulateRecharge(userInviteUser.getUserId(), inviteUserId, rechargeAmount);
|
||||||
|
|
||||||
RechargeCommissionResult result = new RechargeCommissionResult();
|
RechargeCommissionResult result = new RechargeCommissionResult();
|
||||||
|
|||||||
@ -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.gateway.user.ability.InviteUserGateway;
|
||||||
import com.red.circle.other.domain.model.user.RechargeCommissionResult;
|
import com.red.circle.other.domain.model.user.RechargeCommissionResult;
|
||||||
import com.red.circle.other.domain.model.user.UserProfile;
|
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.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.entity.user.user.OneTimeTask;
|
||||||
import com.red.circle.other.infra.database.rds.query.user.InviteUserQry;
|
import com.red.circle.other.infra.database.rds.query.user.InviteUserQry;
|
||||||
import com.red.circle.other.infra.database.rds.service.user.user.InviteUserRechargeCommissionService;
|
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.InviteUserSummaryService;
|
||||||
import com.red.circle.other.infra.database.rds.service.user.user.OneTimeTaskService;
|
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.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.activity.PropsActivityClient;
|
||||||
import com.red.circle.other.inner.endpoint.sys.EnumConfigClient;
|
import com.red.circle.other.inner.endpoint.sys.EnumConfigClient;
|
||||||
import com.red.circle.other.inner.model.cmd.activity.SendActivityRewardCmd;
|
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.PageInviteUserRegisterDTO;
|
||||||
import com.red.circle.other.inner.model.dto.user.SysInviteUserConfigDTO;
|
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.TimestampUtils;
|
||||||
|
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||||
import com.red.circle.tool.core.sequence.IdWorkerUtils;
|
import com.red.circle.tool.core.sequence.IdWorkerUtils;
|
||||||
import com.red.circle.tool.core.text.StringUtils;
|
import com.red.circle.tool.core.text.StringUtils;
|
||||||
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
|
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
|
||||||
@ -47,6 +53,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Timestamp;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -90,6 +97,8 @@ public class InviteUserClientServiceImpl implements InviteUserClientService {
|
|||||||
private final OneTimeTaskService oneTimeTaskService;
|
private final OneTimeTaskService oneTimeTaskService;
|
||||||
private final EnumConfigClient enumConfigClient;
|
private final EnumConfigClient enumConfigClient;
|
||||||
private final UserProfileGateway userProfileGateway;
|
private final UserProfileGateway userProfileGateway;
|
||||||
|
private final InviteUserRechargeCommissionService inviteUserRechargeCommissionService;
|
||||||
|
private final RankingActivityGateway rankingActivityGateway;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -176,17 +185,38 @@ public class InviteUserClientServiceImpl implements InviteUserClientService {
|
|||||||
.amount(BigDecimal.valueOf(gold))
|
.amount(BigDecimal.valueOf(gold))
|
||||||
.build());
|
.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
|
// 道具奖励发给被邀请人B
|
||||||
propsActivityClient.sendActivityReward(new SendActivityRewardCmd()
|
propsActivityClient.sendActivityReward(new SendActivityRewardCmd()
|
||||||
.setTrackId(IdWorkerUtils.getId())
|
.setTrackId(IdWorkerUtils.getId())
|
||||||
.setSysOrigin(SysOriginPlatformEnum.LIKEI)
|
.setSysOrigin(SysOriginPlatformEnum.LIKEI)
|
||||||
.setAcceptUserId(result.getInviteeUserId())
|
.setAcceptUserId(result.getInviteeUserId())
|
||||||
.setSourceGroupId(propsId)
|
.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
|
@Override
|
||||||
public List<InviteUserRegisterDTO> pageInviteUserRegister(Integer pageNumber, Long userId) {
|
public List<InviteUserRegisterDTO> pageInviteUserRegister(Integer pageNumber, Long userId) {
|
||||||
return userInviteInnerConvertor.toListInviteUserRegisterDTO(
|
return userInviteInnerConvertor.toListInviteUserRegisterDTO(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user