fix
Helius
2022-06-17 300e26d6ce2be358d6452911ef46ac298d744ea5
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -26,9 +26,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
 * @author wzy
@@ -72,6 +70,8 @@
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.STATIC_BONUS.getType(), DataDictionaryEnum.STATIC_BONUS.getCode());
        BigDecimal perProfit = totalIncome.multiply(new BigDecimal(dic.getValue()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
        Map<Long, List<Map<String, Object>>> map = new HashMap<>();
        Map<Long, BigDecimal> goodsProp = new HashMap<>();
        for (MallMember member : members) {
            List<MallGoods> goodsList = mallGoodsMapper.selectOrderGoodsList(member.getId(), profitDate);
@@ -84,16 +84,40 @@
                    continue;
                }
                BigDecimal goodsProfit = goods.getStaticProp().multiply(perProfit);
                int reduce = walletService.reduce(goodsProfit, member.getId(), "score");
                if (reduce == 2) {
                    break;
                List<Map<String, Object>> list = map.get(goods.getId());
                if (CollUtil.isEmpty(list)) {
                    list = new ArrayList<>();
                }
                walletService.add(goodsProfit, member.getId(), "commission");
                moneyFlowService.addMoneyFlow(member.getId(), goodsProfit, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), goods.getOrderNo(), FlowTypeEnum.COMMISSION.getValue());
                moneyFlowService.addMoneyFlow(member.getId(), goodsProfit.negate(), MoneyFlowTypeEnum.STATIC_BONUS.getValue(), goods.getOrderNo(), FlowTypeEnum.SCORE.getValue());
                Map<String, Object> listItem = new HashMap<>();
                listItem.put("memberId", member.getId());
                listItem.put("orderNo", goods.getOrderNo());
                list.add(listItem);
                map.put(goods.getId(), list);
                goodsProp.put(goods.getId(), goods.getStaticProp());
            }
        }
        if (!map.isEmpty()) {
            for (Map.Entry<Long, List<Map<String, Object>>> entry : map.entrySet()) {
                List<Map<String, Object>> list = entry.getValue();
                BigDecimal staticProfit = goodsProp.get(entry.getKey()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP).multiply(perProfit);
                BigDecimal preStaticProfit = staticProfit.divide(new BigDecimal(list.size()), 2, RoundingMode.HALF_UP);
                for (Map<String, Object> item : list) {
                    Long memberId = (Long) item.get("memberId");
                    String orderNo = (String) item.get("orderNo");
                    int reduce = walletService.reduce(preStaticProfit, memberId, "score");
                    if (reduce == 2) {
                        break;
                    }
                    walletService.add(preStaticProfit, memberId, "commission");
                    moneyFlowService.addMoneyFlow(memberId, preStaticProfit, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderNo, FlowTypeEnum.COMMISSION.getValue());
                    moneyFlowService.addMoneyFlow(memberId, preStaticProfit.negate(), MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderNo, FlowTypeEnum.SCORE.getValue());
                }
            }
        }
    }
@@ -181,7 +205,7 @@
                }
                // 直推数量
                Integer directCnt = mallMemberMapper.selectOwnCntByInviteId(member.getReferrerId());
                Integer directCnt = mallMemberMapper.selectOwnCntByInviteId(parentMember.getInviteId());
                List<DataDictionaryCustom> dataDices = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.INDIRECT_BONUS_SETTING.getType());
                directCnt = directCnt == null ? 0 :directCnt;
@@ -196,11 +220,11 @@
                }
                // 隔代推荐奖 收益
                direct = direct.divide(indrectDicProp, 2, RoundingMode.HALF_UP);
                direct = direct.multiply(indrectDicProp.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
                // direct 收益小于1,则跳出
                if (direct.compareTo(BigDecimal.ONE) < 1) {
                    continue;
                    break;
                }
                int reduceResult =  walletService.reduce(direct, parentMember.getId(), "score");
@@ -216,9 +240,6 @@
            item.setHasSettle(1);
            mallOrderItemMapper.updateById(item);
            // 添加业绩
            mallAchieveService.add(item.getId());
        }
    }
@@ -294,7 +315,7 @@
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANK_BONUS.getType(), DataDictionaryEnum.RANK_BONUS.getCode());
        BigDecimal rankBonusTotal = new BigDecimal(dic.getValue()).divide(totalIncome, 2, RoundingMode.HALF_UP);
        BigDecimal rankBonusTotal = totalIncome.multiply(new BigDecimal(dic.getValue()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
        BigDecimal preBonus = rankBonusTotal.divide(BigDecimal.valueOf(100),2 , RoundingMode.HALF_UP);
        int i = 0;
@@ -315,7 +336,7 @@
    }
    /**
     * 拿推荐人收益(代理,直推,排名)的10%加权平分给下面直推
     * 拿推荐人的收益(代理,直推,排名)的10%加权平分给下面直推
     */
    @Override
    public void thankfulProfit() {