Hentua
2023-04-21 4f0449594ac069d569d477e800ed77de1a339836
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -61,6 +61,8 @@
    private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper;
    private final MallScoreVoucherMapper mallScoreVoucherMapper;
    private final MallSystemSettingMapper mallSystemSettingMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void staticProfit(Date profitDate) {
@@ -628,4 +630,72 @@
        return achieveRelease;
    }
    @Override
    public void allInternetProfit() {
        log.info("###全网分红执行--start--###");
        MallSystemSetting systemSetting = mallSystemSettingMapper.selectById(1L);
        if (systemSetting == null) {
            log.info("没有系统配置");
            return;
        }
        BigDecimal hundred = BigDecimal.valueOf(100);
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.ALL_INTERNET_BONUS_RELEASE.getType(), DataDictionaryEnum.ALL_INTERNET_BONUS_RELEASE.getCode());
        if (dic == null || StrUtil.isBlank(dic.getValue()) || Integer.parseInt(dic.getValue()) == 0) {
            log.info("不进行全网分红");
            return;
        }
        // 全网分红
        BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
        List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnums.FIRST_LEVEL_Y.getCode());
        if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) {
            log.info("待分红金额不足或会员不足");
            return;
        }
        List<DataDictionaryCustom> dicList = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.INTERNET_LEVEL_BONUS.getType());
        if (CollUtil.isEmpty(dicList)) {
            return;
        }
        Map<String, BigDecimal> levelBonusMap = new HashMap<>();
        dicList.forEach(item -> {
            BigDecimal levelRatio = new BigDecimal(item.getValue()).divide(hundred, 2, RoundingMode.HALF_UP);
            levelBonusMap.put(item.getCode(), waitToBonus.multiply(levelRatio));
        });
        Map<String, List<MallMember>> levelMemberMap = new HashMap<>();
        // TODO 并发处理
        mallMembers.forEach(item -> {
            List<MallMember> memberList = levelMemberMap.get(item.getLevel());
            if (CollUtil.isEmpty(memberList)) {
                memberList = new ArrayList<>();
            }
            memberList.add(item);
            levelMemberMap.put(item.getLevel(), memberList);
        });
        if (levelMemberMap.isEmpty()) {
            return;
        }
        for (Map.Entry<String, List<MallMember>> entry : levelMemberMap.entrySet()) {
            BigDecimal levelBonus = levelBonusMap.get(entry.getKey());
            List<MallMember> memberList = entry.getValue();
            if (CollUtil.isEmpty(memberList) || levelBonus.compareTo(BigDecimal.ZERO) < 1) {
                continue;
            }
            BigDecimal perBonus = levelBonus.divide(BigDecimal.valueOf(memberList.size()), 2, RoundingMode.HALF_UP);
            memberList.forEach(item -> {
                changeScoreAndCommission(item.getId(), perBonus, 2, null);
            });
        }
        log.info("###全网分红执行--end--###");
    }
}