diff --git a/rc-common-business/common-business-dto/src/main/java/com/red/circle/common/business/enums/SendPropsOrigin.java b/rc-common-business/common-business-dto/src/main/java/com/red/circle/common/business/enums/SendPropsOrigin.java index 078a6407..22dc42ce 100644 --- a/rc-common-business/common-business-dto/src/main/java/com/red/circle/common/business/enums/SendPropsOrigin.java +++ b/rc-common-business/common-business-dto/src/main/java/com/red/circle/common/business/enums/SendPropsOrigin.java @@ -127,6 +127,12 @@ public enum SendPropsOrigin { */ INVITE_USER_REWARDS("Invite users"), + + /** + * 7天内充值奖励 + */ + RECHARGE_7DAY("Recharge within 7 days"), + /** * 每周游戏任务奖励. */ diff --git a/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/model/enums/GoldOrigin.java b/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/model/enums/GoldOrigin.java index 7a5f981e..88d50368 100644 --- a/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/model/enums/GoldOrigin.java +++ b/rc-service/rc-inner-api/wallet-inner/wallet-inner-model/src/main/java/com/red/circle/wallet/inner/model/enums/GoldOrigin.java @@ -484,6 +484,11 @@ public enum GoldOrigin { */ INVITE_USER_REWARDS("Invite User Rewards"), + /** + * 7天内充值 + */ + RECHARGE_7DAY("Recharge within 7 days"), + /** * 幸运礼物金币奖励. */ diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java index 9e59eed3..2b73ffb2 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java @@ -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()); diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/user/InviteUserGatewayImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/user/InviteUserGatewayImpl.java index 4d25b255..aab10149 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/user/InviteUserGatewayImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/user/InviteUserGatewayImpl.java @@ -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(); diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/InviteUserClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/InviteUserClientServiceImpl.java index f6ca070d..97aa345e 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/InviteUserClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/user/user/impl/InviteUserClientServiceImpl.java @@ -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 pageInviteUserRegister(Integer pageNumber, Long userId) { return userInviteInnerConvertor.toListInviteUserRegisterDTO(