KKSU
2024-12-23 ff2845059d92bb71c7901e18a4936a246b7aa1e5
perf(mall): 优化节点助力功能

- 修改 AsyncService 接口,调整 releaseNodeCoin 方法参数格式
- 实现 AsyncServiceImpl 中的 releaseNodeCoin 方法,更名变量为"助力的碳币"
- 在 MemberProfitServiceImpl 中:
- 增加时间参数,计算指定时间段内的直推业绩
- 过滤掉业绩为零或负数的情况
- 更新会员的总监时间
- 修正 getDirectAchieve 方法,支持时间范围查询
3 files modified
22 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/service/AsyncService.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java 16 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/AsyncService.java
@@ -13,5 +13,5 @@
    void releaseScore(BigDecimal amount,Long memberId);
    @Async(FebsConstant.ASYNC_POOL)
    void releaseNodeCoin(BigDecimal amount,BigDecimal percent,BigDecimal balanceToCoin,Long memberId);
    void releaseNodeCoin(BigDecimal amount, BigDecimal percent, BigDecimal balanceToCoin, Long memberId);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java
@@ -43,8 +43,8 @@
    }
    @Override
    public void releaseNodeCoin(BigDecimal amount, BigDecimal percent, BigDecimal balanceToCoin,Long memberId) {
        //实际节点返利的金额
    public void releaseNodeCoin(BigDecimal amount, BigDecimal percent, BigDecimal balanceToCoin, Long memberId) {
        //实际节点助力的碳币
        BigDecimal multiply = amount.multiply(percent);
        if(BigDecimal.ZERO.compareTo(multiply) >=0){
            return;
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -710,15 +710,25 @@
                        RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN.getType(),
                        RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN.getCode()).getValue()
        ).setScale(2, BigDecimal.ROUND_DOWN);
        DateTime endTime = DateUtil.date();
        for (MallMember item : mallMembers) {
            //获取总业绩
            BigDecimal achieve = getDirectAchieve(item.getInviteId());
            BigDecimal achieve = getDirectAchieve(item.getInviteId(),item.getDirectorTime(),endTime);
            if(BigDecimal.ZERO.compareTo(achieve) >= 0){
                continue;
            }
            BigDecimal nodePercent = getNodePercent(runNodeSets, achieve);
            if(BigDecimal.ZERO.compareTo(nodePercent) >= 0){
                continue;
            }
            asyncService.releaseNodeCoin(achieve,nodePercent,balanceToCoin,item.getId());
            item.setDirectorTime(endTime);
            mallMemberMapper.updateById(item);
        }
    }
    private BigDecimal getDirectAchieve(String inviteId) {
    private BigDecimal getDirectAchieve(String inviteId,Date startTime,Date endTime) {
        try {
            // 获取直推成员和团队成员的ID集合
@@ -733,6 +743,8 @@
                    new LambdaQueryWrapper<MallCharge>()
                            .in(MallCharge::getMemberId, memberIds)
                            .eq(MallCharge::getState, YesOrNoEnum.YES.getValue())
                            .ge(MallCharge::getCreatedTime, startTime)
                            .lt(MallCharge::getCreatedTime, endTime)
            );
            if (CollUtil.isEmpty(mallCharges)) {