| | |
| | | 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; |
| | |
| | | |
| | | 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); |