From 877b982710ab433610c8c220f7da592f1ea51e66 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Fri, 21 Feb 2025 16:39:01 +0800 Subject: [PATCH] feat(mall): 添加直推奖励功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java | 68 ++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java index 9063f79..c19c643 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java @@ -1,10 +1,13 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.RunVipDataDictionaryEnum; import cc.mrbird.febs.common.enumerates.RunVipMoneyFlowTypeEnum; import cc.mrbird.febs.common.enumerates.YesOrNoEnum; import cc.mrbird.febs.common.utils.MallUtils; +import cc.mrbird.febs.mall.entity.DataDictionaryCustom; import cc.mrbird.febs.mall.entity.MallMember; +import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cc.mrbird.febs.mall.service.AsyncService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; @@ -25,6 +28,71 @@ private final IMallMoneyFlowService mallMoneyFlowService; private final IApiMallMemberWalletService walletService; + private final DataDictionaryCustomMapper dataDictionaryCustomMapper; + + /** + * 执行直推奖励的逻辑 + * 当一个会员进行操作时,此方法会根据直推关系给予推荐人一定的奖励 + * 奖励金额计算基于操作金额和系统设定的直推奖励比例 + * + * @param amount 操作金额,用于计算直推奖励 + * @param memberId 会员ID,用于查找会员及其推荐人信息 + */ + @Override + public void directCoin(BigDecimal amount, Long memberId) { + // 根据会员ID查询会员信息 + MallMember mallMember = this.baseMapper.selectById(memberId); + // 如果会员不存在或没有推荐人,则直接返回 + if (null == mallMember || StrUtil.isBlank(mallMember.getReferrerId())){ + return; + } + // 根据推荐人ID查询推荐人信息 + MallMember mallRef = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); + // 如果推荐人不存在,则直接返回 + if(mallRef == null){ + return; + } + // 查询直推奖励的比例设置 + DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + RunVipDataDictionaryEnum.CHARGE_SYS_DIRECT.getType(), + RunVipDataDictionaryEnum.CHARGE_SYS_DIRECT.getCode() + ); + // 如果未设置直推奖励比例,则初始化一个默认值(0.1代表10%,设置成0,则不返直推) + if(null == dataDictionaryCustom){ + dataDictionaryCustom = new DataDictionaryCustom(); + dataDictionaryCustom.setType(RunVipDataDictionaryEnum.CHARGE_SYS_DIRECT.getType()); + dataDictionaryCustom.setCode(RunVipDataDictionaryEnum.CHARGE_SYS_DIRECT.getCode()); + dataDictionaryCustom.setValue("0"); + dataDictionaryCustom.setDescription("直推奖励(0.1代表10%,设置成0,则不返直推)"); + dataDictionaryCustomMapper.insert(dataDictionaryCustom); + } + // 解析直推奖励比例 + BigDecimal directPercent = new BigDecimal(dataDictionaryCustom.getValue()); + + // 计算直推奖励金额 + BigDecimal directAmount = amount.multiply(directPercent).setScale(2, RoundingMode.DOWN); + // 如果直推奖励金额小于等于0,则直接返回 + if(BigDecimal.ZERO.compareTo(directAmount) >=0){ + return; + } + + // 调用服务增加推荐人的佣金 + walletService.addCommission(directAmount,mallRef.getId()); + // 生成订单号 + String orderNo = MallUtils.getOrderNum("DPE"); + // 记录推荐人的资金流水 + mallMoneyFlowService.runVipMoneyFlowAdd( + mallRef.getId(), + memberId, + orderNo, + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.DIRECT_USDT.getValue(), + directAmount, + StrUtil.format(RunVipMoneyFlowTypeEnum.DIRECT_USDT.getDescription(),directAmount), + YesOrNoEnum.YES.getValue() + ); + } + @Override public void releaseScore(BigDecimal V3, Long memberId) { walletService.addScore(V3,memberId); -- Gitblit v1.9.1