From faaf907706c62c81c2a91092b950b30c89159afc Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 17 Mar 2025 17:37:52 +0800 Subject: [PATCH] refactor(common): 优化文件上传逻辑 --- src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 95 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 bef028b..f816678 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; @@ -16,6 +19,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; @Slf4j @Service @@ -24,6 +28,75 @@ 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; + } + // 如果直推奖励金额大于等于操作金额,则直接返回,防止奖励金额异常 + if(directAmount.compareTo(amount) >=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); @@ -40,4 +113,26 @@ ); } + + @Override + public void releaseNodeCoin(BigDecimal amount, BigDecimal percent, Long memberId) { + //实际节点助力的碳币 + BigDecimal multiply = amount.multiply(percent).setScale(2,RoundingMode.DOWN); + if(BigDecimal.ZERO.compareTo(multiply) >=0){ + return; + } + walletService.addCommission(multiply,memberId); + String orderNo = MallUtils.getOrderNum("JD"); + mallMoneyFlowService.runVipMoneyFlowAdd( + memberId, + memberId, + orderNo, + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.NODE_COMMISSION.getValue(), + multiply, + StrUtil.format(RunVipMoneyFlowTypeEnum.NODE_COMMISSION.getDescription(),multiply), + YesOrNoEnum.YES.getValue() + ); + + } } -- Gitblit v1.9.1