| | |
| | | private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper; |
| | | private final MallScoreVoucherMapper mallScoreVoucherMapper; |
| | | |
| | | private final MallSystemSettingMapper mallSystemSettingMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void staticProfit(Date profitDate) { |
| | |
| | | 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--###"); |
| | | } |
| | | } |