From 7187a0f496f9b55f67f2be9bc3a111d3a1bc2d0b Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Fri, 03 Jan 2025 15:41:43 +0800 Subject: [PATCH] feat(mall): 实现会员升级时自动发放节点币功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 34 +++++++++++++++++++++++++++++----- 1 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java index 2aea39f..c9764ef 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java @@ -5,10 +5,8 @@ import cc.mrbird.febs.common.enumerates.YesOrNoEnum; import cc.mrbird.febs.mall.dto.ApiMemberChargeFailDto; import cc.mrbird.febs.mall.entity.*; -import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; -import cc.mrbird.febs.mall.mapper.MallChargeMapper; -import cc.mrbird.febs.mall.mapper.MallMemberMapper; -import cc.mrbird.febs.mall.mapper.RunVipMapper; +import cc.mrbird.febs.mall.mapper.*; +import cc.mrbird.febs.mall.service.AsyncService; import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; @@ -47,11 +45,13 @@ private final IApiMallMemberWalletService walletService; private final IApiMallMemberService mallMemberService; private final AgentProducer agentProducer; + private final RunNodeSetMapper runNodeSetMapper; + private final AsyncService asyncService; @Override @Transactional(rollbackFor = Exception.class) public void autoUpAgentLevel(Long memberId) { - MallMember member = mallMemberMapper.selectById(memberId); + MallMember member =mallMemberMapper.selectById(memberId); if(StrUtil.isBlank(member.getReferrerIds())) { return; } @@ -269,6 +269,7 @@ new LambdaQueryWrapper<MallCharge>() .in(MallCharge::getMemberId, memberIds) .eq(MallCharge::getState, YesOrNoEnum.YES.getValue()) + .ge(MallCharge::getCreatedTime, mallMember.getDirectorTime()) ); BigDecimal totalCharge = mallCharges.stream() @@ -282,12 +283,35 @@ mallMember.setDirector(YesOrNoEnum.YES.getValue()); mallMember.setDirectorTime(DateUtil.date()); mallMemberMapper.updateById(mallMember); + + //获取节点设置 + List<RunNodeSet> runNodeSets = runNodeSetMapper.selectList(null); + //获取总业绩 + BigDecimal nodePercent = getNodePercent(runNodeSets, totalCharge); + if(nodePercent.compareTo(BigDecimal.ZERO) >= 0){ + asyncService.releaseNodeCoin(totalCharge,nodePercent,memberId); + } } catch (Exception e) { // 记录日志并处理异常 log.error("会员升级节点失败: {}", memberId, e); throw new RuntimeException("会员升级节点失败", e); } } + + private BigDecimal getNodePercent(List<RunNodeSet> runNodeSets, BigDecimal directAchieve) { + BigDecimal percent = BigDecimal.ZERO; + //获取directAchieve在runNodeSets中哪一个位置 + for(RunNodeSet item : runNodeSets){ + BigDecimal minAchieve = item.getMinAchieve(); + BigDecimal maxAchieve = item.getMaxAchieve(); + BigDecimal nodePercent = new BigDecimal(item.getNodePercent()); + if(directAchieve.compareTo(minAchieve) >= 0 && directAchieve.compareTo(maxAchieve) < 0){ + percent = nodePercent; + break; + } + } + return percent; + } @Override public void buyVipSuccessMsg(Long chargeId) { MallCharge mallCharge = mallChargeMapper.selectById(chargeId); -- Gitblit v1.9.1