KKSU
2025-01-03 71bb24daec95644f446c707478ef66f7822c5c4b
feat(mall): 会员权益收益计算

- 新增会员权益收益计算逻辑
- 根据会员当前等级和下一级别计算收益
- 考虑会员权益的成长值和价格差异
- 更新钱包数据时增加会员权益收益
1 files modified
27 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -60,6 +60,7 @@
    private final AsyncService asyncService;
    private final FebsConfigure febsConfigure;
    private final RunVipGrowMapper runVipGrowMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -643,6 +644,32 @@
                    }
                    V3 = new BigDecimal(RandomUtil.randomInt(V1.intValue(),V2.intValue())).setScale(0,RoundingMode.DOWN);
                }
                //会员权益的收益
                RunVipGrow runVipGrow = runVipGrowMapper.selectList(
                        new LambdaQueryWrapper<RunVipGrow>()
                                .eq(RunVipGrow::getMemberId, item.getId())
                                .eq(RunVipGrow::getLevelNow, runVip.getVipCode())
                                .orderByDesc(RunVipGrow::getId)
                ).stream().findFirst().orElse(null);
                if(null != runVipGrow){
                    BigDecimal amountNow = runVipGrow.getAmountNow();
                    RunVip runVipNext = runVips.stream().filter(vipItem -> vipItem.getOrderNumber() == runVip.getOrderNumber() + 1).findFirst().orElse(null);
                    if(runVipNext != null){
                        BigDecimal presentPrice = runVip.getPresentPrice();
                        BigDecimal presentPriceNext = runVipNext.getPresentPrice();
                        BigDecimal subtract = presentPriceNext.subtract(presentPrice);
                        BigDecimal divide = amountNow.divide(subtract, 4, RoundingMode.DOWN);
                        Integer growthCnt = runVip.getGrowthCnt();
                        Integer growthCntNext = runVipNext.getGrowthCnt();
                        int growthNum = growthCntNext - growthCnt;
                        BigDecimal growthAmountTotal = divide.multiply(new BigDecimal(growthNum));
                        BigDecimal growthAmount = growthAmountTotal.divide(new BigDecimal(C1), 0, RoundingMode.DOWN);
                        V3 = V3.add(growthAmount);
                    }
                }
                //更新钱包数据
                if(V3.intValue() <= 0){
                    continue;