From b346ab488e094c33937c2dd221a841b1a8be159f Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 16 Jun 2022 16:27:19 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 48 ++++++++++++++++++++++++++++++++++++------------
1 files changed, 36 insertions(+), 12 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 1538394..c170ad3 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
@@ -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());
+ }
}
}
}
@@ -291,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;
--
Gitblit v1.9.1