diff --git a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/common/InAppPurchaseCommon.java b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/common/InAppPurchaseCommon.java index e56cf63b..d0e2ac9d 100644 --- a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/common/InAppPurchaseCommon.java +++ b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/common/InAppPurchaseCommon.java @@ -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) { diff --git a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java index 2b90072a..07f2e695 100644 --- a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java +++ b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java @@ -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; } 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 add3c9af..4d551a02 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 @@ -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) { diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankExchangeGoldCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankExchangeGoldCmdExe.java index 573df008..7a943efe 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankExchangeGoldCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankExchangeGoldCmdExe.java @@ -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)); diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/DealerToUserShipCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/DealerToUserShipCmdExe.java index 041af8d0..cb6b0459 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/DealerToUserShipCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/DealerToUserShipCmdExe.java @@ -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)); diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java index cd5ec317..9550ca9d 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/freight/SendFreightShipCmdExe.java @@ -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 { diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryExchangeGoldCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryExchangeGoldCmdExe.java index 05af1005..fd7ebfeb 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryExchangeGoldCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryExchangeGoldCmdExe.java @@ -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())