From 3e1aff4b6f86a7116b730757f3ec501153bf7fd2 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Sun, 23 Apr 2023 14:11:00 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 70 +++++++++++++++++++++++++++++++++++
1 files changed, 70 insertions(+), 0 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
index b3fe593..350ebad 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
+++ b/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--###");
+ }
}
--
Gitblit v1.9.1