From 6a99e83107428159d321c1b77cb994e0b2f92fe5 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 10 Oct 2023 10:25:05 +0800
Subject: [PATCH] redbagprod
---
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 499 +++++++++++++++++++++++++++++-------------------------
1 files changed, 268 insertions(+), 231 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index a79369c..22e6b14 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -50,26 +50,43 @@
List<String> ids = StrUtil.split(member.getReferrerIds(), ',');
List<MallMember> parentMembers = memberMapper.selectByInviteIds(ids);
for (MallMember parent : parentMembers) {
+ //level为v6,升级董事,则看直属团队下有没有两个V6
+// List<MallMember> mallMemberChilds = memberMapper.selectByRefererId(parent.getInviteId());
+// if(CollUtil.isNotEmpty(mallMemberChilds)){
+// int directorSize = 0;
+// for(MallMember mallMemberChild : mallMemberChilds){
+// List<MallMember> mallMemberTeamMembers = memberMapper.selectAllChildAgentListByInviteId(mallMemberChild.getInviteId());
+// if(CollUtil.isNotEmpty(mallMemberTeamMembers)){
+// List<MallMember> levelV6List = mallMemberTeamMembers.stream()
+// .filter(teamMember -> teamMember.getLevel().equals(MemberLevelEnum.V6.getType()))
+// .collect(Collectors.toList());
+// if(CollUtil.isNotEmpty(levelV6List)){
+// directorSize = directorSize +1;
+// }
+// }
+// }
+// if(directorSize >= 2){
+// parent.setLevel(MemberLevelEnum.V_DIRECTOR.getType());
+// parent.setDirector(AppContants.OPTION_YES);
+// memberMapper.updateById(parent);
+// continue;
+// }
+// }
+ //V6不能再升级了
+ if(parent.getLevel().equals(MemberLevelEnum.V6.getType())){
+ continue;
+ }
+
/**
* 升级到董事就无法升级了
*/
String nextLevelName = MemberLevelEnum.NORMAL.getNextLevel(parent.getLevel());
int levelCode = MemberLevelEnum.NORMAL.getLevelCode(nextLevelName);
- if(levelCode == 8){
- //level为v6,升级董事,则看团队下有没有两个V6
- List<MallMember> mallMemberTeamMembers = memberMapper.selectAllChildAgentListByInviteId(parent.getInviteId());
- List<MallMember> levelV6List = mallMemberTeamMembers.stream()
- .filter(teamMember -> teamMember.getLevel().equals(MemberLevelEnum.V6.getType()))
- .collect(Collectors.toList());
- if(CollUtil.isNotEmpty(levelV6List) && levelV6List.size() >= 2){
- parent.setLevel(MemberLevelEnum.V_DIRECTOR.getType());
- parent.setDirector(AppContants.OPTION_YES);
- memberMapper.updateById(parent);
- }
- continue;
- }
DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_PERK_SET", nextLevelName);
+ if(ObjectUtil.isEmpty(newLevelDic)){
+ continue;
+ }
AdminAgentInfo adminAgentInfo = JSONObject.parseObject(newLevelDic.getValue(), AdminAgentInfo.class);
if (!directMemberCnt(parent, adminAgentInfo)) {
@@ -171,32 +188,32 @@
return false;
}
- public static void main(String[] args) {
- BigDecimal q = new BigDecimal("100");
- BigDecimal q1 = new BigDecimal("99");
- BigDecimal q2 = new BigDecimal("100");
- BigDecimal q3= new BigDecimal("88");
-
- List<BigDecimal> list = new ArrayList<>();
- list.add(q);
- list.add(q1);
- list.add(q2);
- list.add(q3);
-
- BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
- System.out.println(bigMax);
- }
+// public static void main(String[] args) {
+// BigDecimal q = new BigDecimal("100");
+// BigDecimal q1 = new BigDecimal("99");
+// BigDecimal q2 = new BigDecimal("100");
+// BigDecimal q3= new BigDecimal("88");
+//
+// List<BigDecimal> list = new ArrayList<>();
+// list.add(q);
+// list.add(q1);
+// list.add(q2);
+// list.add(q3);
+//
+// BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
+// System.out.println(bigMax);
+// }
@Override
@Transactional(rollbackFor = Exception.class)
public void returnMoneyToAgent(Long orderId) {
/**
- * 1、购买人获得固定比例的积分
- * 2、直推获取8%的现金->余额,4%的积分->积分
- * 3、不同代理级别获取不用的比例的现金和积分
+ * 1、购买人获得固定比例的H金劵
+ * 2、直推获取8%的现金->余额,4%的H金劵->H金劵
+ * 3、不同代理级别获取不用的比例的现金和H金劵
* 4、董事享受全公司入单分红2%加权(现金)
* 5、合伙人享全公司入单分红5%加权(现金)
- * 6、入单后,50%入现金池 35%的积分入积分池,更新价格
+ * 6、入单后,50%入现金池 35%的H金劵入H金劵池,更新价格
*/
//获取当前订单子表信息
List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectbyOrderId(orderId);
@@ -209,224 +226,219 @@
return;
}
//获取订单中套餐总数金额
- BigDecimal amountTC = mallOrderItemIsTCs.stream().map(MallOrderItem::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
- if(BigDecimal.ZERO.compareTo(amountTC) >= 0){
+ BigDecimal amountTCAll = mallOrderItemIsTCs.stream().map(MallOrderItem::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ if(BigDecimal.ZERO.compareTo(amountTCAll) >= 0){
return;
}
- MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
- String orderNo = mallOrderInfo.getOrderNo();
- //购买人
- Long memberId = mallOrderInfo.getMemberId();
+ BigDecimal amountTC = new BigDecimal(100);
+ //购买套餐按照1000的基数去补贴,如5000,则补贴5次1000
+ int times = amountTCAll.divideToIntegralValue(amountTC).intValue();
+ if(times < 1){
+ return;
+ }
- /**
- * 1、购买人获得固定比例的积分
- * = amountTC * 固定比例
- */
- perkMember(memberId,
- PerkEnum.BUY_SET_MEAL_PERK_PERCENT,
- amountTC,
- "score",
- MoneyFlowTypeEnum.BUY_SET_MEAL_PERK.getValue(),
- memberId,
- FlowTypeEnum.SCORE.getValue(),
- orderNo);
+ for(int i = 0; i < times; i++){
+ MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
+ String orderNo = mallOrderInfo.getOrderNo();
+ //购买人
+ Long memberId = mallOrderInfo.getMemberId();
- /**
- * 2、直推获取8%的现金->余额,4%的积分->积分
- */
- MallMember mallMember = mallMemberMapper.selectById(memberId);
- if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
- String referrerId = mallMember.getReferrerId();
- MallMember mallMemberDirect = mallMemberMapper.selectInfoByInviteId(referrerId);
- Long directMemberId = mallMemberDirect.getId();
-
- perkMember(directMemberId,
- PerkEnum.DIRECT_CASH_PERK_PERCENT,
- amountTC,
- "balance",
- MoneyFlowTypeEnum.DIRECT_CASH_PERK.getValue(),
- memberId,
- FlowTypeEnum.BALANCE.getValue(),
- orderNo);
-
- perkMember(directMemberId,
- PerkEnum.DIRECT_SCORE_PERK_PERCENT,
+ /**
+ * 1、购买人获得固定比例的H金劵
+ * = amountTC * 固定比例
+ */
+ perkMember(memberId,
+ PerkEnum.BUY_SET_MEAL_PERK_PERCENT,
amountTC,
"score",
- MoneyFlowTypeEnum.DIRECT_SCORE_PERK.getValue(),
+ MoneyFlowTypeEnum.BUY_SET_MEAL_PERK.getValue(),
memberId,
FlowTypeEnum.SCORE.getValue(),
orderNo);
- }
- /**
- * 4、董事享受全公司入单分红2%加权(现金)
- */
- List<MallMember> mallMembersDirectors = mallMemberMapper.selectDirectorsOrStoreMaster(1);
- if(CollUtil.isNotEmpty(mallMembersDirectors)){
- perkMembersLevel(mallMembersDirectors,
- PerkEnum.DIRECTOR_CASH_PERK_PERCENT,
- amountTC,
- "balance",
- MoneyFlowTypeEnum.DIRECTOR_CASH_PERK.getValue(),
- memberId,
- FlowTypeEnum.BALANCE.getValue(),
- orderNo);
- }
+ /**
+ * 2、直推获取8%的现金->余额,4%的H金劵->H金劵
+ */
+ MallMember mallMember = mallMemberMapper.selectById(memberId);
+ if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
+ String referrerId = mallMember.getReferrerId();
+ MallMember mallMemberDirect = mallMemberMapper.selectInfoByInviteId(referrerId);
+ Long directMemberId = mallMemberDirect.getId();
- /**
- * 5、合伙人享全公司入单分红5%加权(现金)
- */
- List<MallMember> mallMemberPartners = mallMemberMapper.selectDirectorsOrStoreMaster(3);
- if(CollUtil.isNotEmpty(mallMemberPartners)){
- perkMembersLevel(mallMemberPartners,
- PerkEnum.PARTNER_CASH_PERK_PERCENT,
- amountTC,
- "balance",
- MoneyFlowTypeEnum.PARTNER_CASH_PERK.getValue(),
- memberId,
- FlowTypeEnum.BALANCE.getValue(),
- orderNo);
- }
+ perkMember(directMemberId,
+ PerkEnum.DIRECT_CASH_PERK_PERCENT,
+ amountTC,
+ "balance",
+ MoneyFlowTypeEnum.DIRECT_CASH_PERK.getValue(),
+ memberId,
+ FlowTypeEnum.BALANCE.getValue(),
+ orderNo);
- /**
- * 3、团队下不同代理级别获取不用的比例的现金和积分
- */
- if(StrUtil.isNotEmpty(mallMember.getReferrerIds())){
- //团队补贴对象
- List<MallMember> mallMemberTeamPerk = new ArrayList<>();
-
- String referrerIds = mallMember.getReferrerIds();
- List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
- if(CollUtil.isNotEmpty(referrerIdList)){
- List<MallMember> mallMembers = mallMemberMapper.selectByInviteIds(referrerIdList);
- /**
- * 根据等级分组,获取对应的<级别,会员数组>map
- */
- Map<String, List<MallMember>> collect = mallMembers.stream().collect(Collectors.groupingBy(MallMember::getLevel));
- Set<String> set = collect.keySet(); // 得到所有key的集合
- for (String key : set) {
- /**
- * 团队补贴从v1到v6
- */
- int compareMin = MemberLevelEnum.V1.compareLevel(key, MemberLevelEnum.V1.getType());
- int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V6.getType(), key);
- if(compareMin >= 1 && compareMax >= 1){
- List<MallMember> value = collect.get(key);
- mallMemberTeamPerk.add(value.get(0));
- }
- }
+ perkMember(directMemberId,
+ PerkEnum.DIRECT_SCORE_PERK_PERCENT,
+ amountTC,
+ "score",
+ MoneyFlowTypeEnum.DIRECT_SCORE_PERK.getValue(),
+ memberId,
+ FlowTypeEnum.SCORE.getValue(),
+ orderNo);
}
- if(CollUtil.isNotEmpty(mallMemberTeamPerk)){
- String levelNormal = MemberLevelEnum.NORMAL.getType();
- BigDecimal cashPercentNormal = BigDecimal.ZERO;
- BigDecimal scorePercentNormal = BigDecimal.ZERO;
+ /**
+ * 4、董事享受全公司入单分红2%加权(现金)
+ */
+ List<MallMember> mallMembersDirectors = mallMemberMapper.selectDirectorsOrStoreMaster(1);
+ if(CollUtil.isNotEmpty(mallMembersDirectors)){
+ perkMembersLevel(mallMembersDirectors,
+ PerkEnum.DIRECTOR_CASH_PERK_PERCENT,
+ amountTC,
+ "balance",
+ MoneyFlowTypeEnum.DIRECTOR_CASH_PERK.getValue(),
+ memberId,
+ FlowTypeEnum.BALANCE.getValue(),
+ orderNo);
+ }
+
+ /**
+ * 5、合伙人享全公司入单分红5%加权(现金)
+ */
+ List<MallMember> mallMemberPartners = mallMemberMapper.selectDirectorsOrStoreMaster(3);
+ if(CollUtil.isNotEmpty(mallMemberPartners)){
+ perkMembersLevel(mallMemberPartners,
+ PerkEnum.PARTNER_CASH_PERK_PERCENT,
+ amountTC,
+ "balance",
+ MoneyFlowTypeEnum.PARTNER_CASH_PERK.getValue(),
+ memberId,
+ FlowTypeEnum.BALANCE.getValue(),
+ orderNo);
+ }
+
+ /**
+ * 3、团队下不同代理级别获取不用的比例的现金和H金劵
+ */
+ if(StrUtil.isNotEmpty(mallMember.getReferrerIds())){
+ //团队补贴对象
+// List<MallMember> mallMemberTeamPerk = new ArrayList<>();
+
+ String referrerIds = mallMember.getReferrerIds();
+ List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
+ if(CollUtil.isNotEmpty(referrerIdList)){
+ List<MallMember> mallMemberTeamPerk = mallMemberMapper.selectByInviteIds(referrerIdList);
+
+ if(CollUtil.isNotEmpty(mallMemberTeamPerk)){
+ String levelNormal = MemberLevelEnum.V1.getType();
+ BigDecimal cashPercentNormal = BigDecimal.ZERO;
+ BigDecimal scorePercentNormal = BigDecimal.ZERO;
+
+ DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PerkEnum.POOL_SCORE_PRICE.getType(),
+ PerkEnum.POOL_SCORE_PRICE.getCode());
+ BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue() == null ? "1" : poolScorePriceDic.getValue());
+ for(MallMember teamPerkMember : mallMemberTeamPerk){
+ String level = teamPerkMember.getLevel();
+ //比较两个级别的大小,level大于levelNormal返回1
+ int compareMin = MemberLevelEnum.V1.compareLevel(level, levelNormal);
+ int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V6.getType(), level);
+ if(compareMin >= 1 && compareMax >= 1){
+ Long teamPerkMemberId = teamPerkMember.getId();
+ DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ "AGENT_PERK_SET", level);
+
+ AdminAgentInfo adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), AdminAgentInfo.class);
+ BigDecimal cashPercent = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE);
+ BigDecimal scorePercent = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE);
+ //极差
+ cashPercent = cashPercent.subtract(cashPercentNormal);
+ scorePercent = scorePercent.subtract(scorePercentNormal);
+
+ BigDecimal cashAmount = amountTC.multiply(cashPercent).setScale(2, BigDecimal.ROUND_DOWN);
+
+ //如果是H金劵,除以当前价格,得到数量。
+ BigDecimal scoreCnt = amountTC.multiply(scorePercent).setScale(2, BigDecimal.ROUND_DOWN);
+ scoreCnt = scoreCnt.divide(poolScorePrice, 2 ,BigDecimal.ROUND_DOWN);
+ if(cashAmount.compareTo(BigDecimal.ZERO) > 0){
+ addWalletInfoAndMoneyFlow(cashAmount,
+ teamPerkMemberId,
+ "balance",
+ MoneyFlowTypeEnum.AGENT_CASH_PERK.getValue(),
+ memberId,
+ FlowTypeEnum.BALANCE.getValue(),
+ orderNo);
+ }
+ if(scoreCnt.compareTo(BigDecimal.ZERO) > 0){
+ addWalletInfoAndMoneyFlow(scoreCnt,
+ teamPerkMemberId,
+ "score",
+ MoneyFlowTypeEnum.AGENT_SCORE_PERK.getValue(),
+ memberId,
+ FlowTypeEnum.SCORE.getValue(),
+ orderNo);
+ }
+ levelNormal = level;
+ cashPercentNormal = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE);
+ scorePercentNormal = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE);
+ }
+ }
+ }
+ }
+
+
+ }
+
+ /**
+ * 6、入单后,50%入现金池 35%的H金劵入H金劵池,更新价格
+ */
+ DataDictionaryCustom poolCashPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PerkEnum.POOL_CASH_PERCENT.getType(),
+ PerkEnum.POOL_CASH_PERCENT.getCode());
+ DataDictionaryCustom poolScorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PerkEnum.POOL_SCORE_PERCENT.getType(),
+ PerkEnum.POOL_SCORE_PERCENT.getCode());
+ if(ObjectUtil.isNotEmpty(poolCashPercentDic)){
+ BigDecimal poolCashPercent = new BigDecimal(poolCashPercentDic.getValue()).multiply(AppContants.PERCENTAGE);
+ //新增现金数量
+ BigDecimal poolCashAdd = amountTC.multiply(poolCashPercent);
+ DataDictionaryCustom poolCashDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PerkEnum.POOL_CASH.getType(),
+ PerkEnum.POOL_CASH.getCode());
+ //当前现金池数量
+ BigDecimal poolCash = new BigDecimal(poolCashDic.getValue());
+ poolCash = poolCash.add(poolCashAdd).setScale(2,BigDecimal.ROUND_DOWN);
+ dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
+ PerkEnum.POOL_CASH.getType(),
+ PerkEnum.POOL_CASH.getCode(),
+ poolCash.toString()
+ );
DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
PerkEnum.POOL_SCORE_PRICE.getType(),
PerkEnum.POOL_SCORE_PRICE.getCode());
BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue() == null ? "1" : poolScorePriceDic.getValue());
- for(MallMember teamPerkMember : mallMemberTeamPerk){
- String level = teamPerkMember.getLevel();
- //比较两个级别的大小,level大于levelNormal返回1
- int compareLevel = MemberLevelEnum.V1.compareLevel(level, levelNormal);
- if(compareLevel == 1){
- Long teamPerkMemberId = teamPerkMember.getId();
- DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- MemberLevelEnum.V1.getType(), level);
-
- AdminAgentInfo adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), AdminAgentInfo.class);
- BigDecimal cashPercent = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE);
- BigDecimal scorePercent = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE);
- //极差
- cashPercent = cashPercent.subtract(cashPercentNormal);
- scorePercent = scorePercent.subtract(scorePercentNormal);
-
- BigDecimal cashAmount = amountTC.multiply(cashPercent).setScale(2, BigDecimal.ROUND_DOWN);
-
- //如果是积分,除以当前价格,得到数量。
- BigDecimal scoreCnt = amountTC.multiply(scorePercent).setScale(2, BigDecimal.ROUND_DOWN);
- scoreCnt = scoreCnt.divide(poolScorePrice, 2 ,BigDecimal.ROUND_DOWN);
- if(cashAmount.compareTo(BigDecimal.ZERO) > 0){
- addWalletInfoAndMoneyFlow(cashAmount,
- teamPerkMemberId,
- "balance",
- MoneyFlowTypeEnum.AGENT_CASH_PERK.getValue(),
- memberId,
- FlowTypeEnum.BALANCE.getValue(),
- orderNo);
- }
- if(scoreCnt.compareTo(BigDecimal.ZERO) > 0){
- addWalletInfoAndMoneyFlow(scoreCnt,
- teamPerkMemberId,
- "score",
- MoneyFlowTypeEnum.AGENT_SCORE_PERK.getValue(),
- memberId,
- FlowTypeEnum.SCORE.getValue(),
- orderNo);
- }
- levelNormal = level;
- cashPercentNormal = cashPercent;
- scorePercentNormal = scorePercent;
- }
- }
- }
- }
-
- /**
- * 6、入单后,50%入现金池 35%的积分入积分池,更新价格
- */
- DataDictionaryCustom poolCashPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- PerkEnum.POOL_CASH_PERCENT.getType(),
- PerkEnum.POOL_CASH_PERCENT.getCode());
- DataDictionaryCustom poolScorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- PerkEnum.POOL_SCORE_PERCENT.getType(),
- PerkEnum.POOL_SCORE_PERCENT.getCode());
- if(ObjectUtil.isNotEmpty(poolCashPercentDic)){
- BigDecimal poolCashPercent = new BigDecimal(poolCashPercentDic.getValue()).multiply(AppContants.PERCENTAGE);
- //新增现金数量
- BigDecimal poolCashAdd = amountTC.multiply(poolCashPercent);
- DataDictionaryCustom poolCashDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- PerkEnum.POOL_CASH.getType(),
- PerkEnum.POOL_CASH.getCode());
- //当前现金池数量
- BigDecimal poolCash = new BigDecimal(poolCashDic.getValue());
- poolCash = poolCash.add(poolCashAdd).setScale(2,BigDecimal.ROUND_DOWN);
- dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
- PerkEnum.POOL_CASH.getType(),
- PerkEnum.POOL_CASH.getCode(),
- poolCash.toString()
- );
-
-
- DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- PerkEnum.POOL_SCORE_PRICE.getType(),
- PerkEnum.POOL_SCORE_PRICE.getCode());
- BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue() == null ? "1" : poolScorePriceDic.getValue());
- BigDecimal poolScorePercent = new BigDecimal(poolScorePercentDic.getValue()).multiply(AppContants.PERCENTAGE);
- //新增积分数量
- BigDecimal poolScoreAdd = amountTC.multiply(poolScorePercent);
- poolScoreAdd = poolScoreAdd.divide(poolScorePrice,2,BigDecimal.ROUND_DOWN);
- DataDictionaryCustom poolScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
- PerkEnum.POOL_SCORE.getType(),
- PerkEnum.POOL_SCORE.getCode());
- //当前积分池数量
- BigDecimal poolScore = new BigDecimal(poolScoreDic.getValue());
- poolScore = poolScore.add(poolScoreAdd).setScale(2,BigDecimal.ROUND_DOWN);
- dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
- PerkEnum.POOL_SCORE.getType(),
- PerkEnum.POOL_SCORE.getCode(),
- poolScore.toString()
- );
-
- if(poolScore.compareTo(BigDecimal.ZERO) > 0 && poolCash.compareTo(BigDecimal.ZERO) > 0){
- BigDecimal divide = poolCash.divide(poolScore, 2, BigDecimal.ROUND_DOWN);
+ BigDecimal poolScorePercent = new BigDecimal(poolScorePercentDic.getValue()).multiply(AppContants.PERCENTAGE);
+ //新增H金劵数量
+ BigDecimal poolScoreAdd = amountTC.multiply(poolScorePercent);
+ poolScoreAdd = poolScoreAdd.divide(poolScorePrice,2,BigDecimal.ROUND_DOWN);
+ DataDictionaryCustom poolScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ PerkEnum.POOL_SCORE.getType(),
+ PerkEnum.POOL_SCORE.getCode());
+ //当前H金劵池数量
+ BigDecimal poolScore = new BigDecimal(poolScoreDic.getValue());
+ poolScore = poolScore.add(poolScoreAdd).setScale(2,BigDecimal.ROUND_DOWN);
dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
- PerkEnum.POOL_SCORE_PRICE.getType(),
- PerkEnum.POOL_SCORE_PRICE.getCode(),
- divide.toString()
+ PerkEnum.POOL_SCORE.getType(),
+ PerkEnum.POOL_SCORE.getCode(),
+ poolScore.toString()
);
+
+ if(poolScore.compareTo(BigDecimal.ZERO) > 0 && poolCash.compareTo(BigDecimal.ZERO) > 0){
+ BigDecimal divide = poolCash.divide(poolScore, 8, BigDecimal.ROUND_DOWN);
+ dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
+ PerkEnum.POOL_SCORE_PRICE.getType(),
+ PerkEnum.POOL_SCORE_PRICE.getCode(),
+ divide.toString()
+ );
+ }
}
}
@@ -437,7 +449,7 @@
* @param memberId 用户ID
* @param perkEnum 比例的枚举值
* @param amountTC 总金额
- * @param walletField 类型:score:积分 balance:余额
+ * @param walletField 类型:score:H金劵 balance:余额
* @param type 流水类型
* @param flowType 流水分类
* @param orderNo 订单编号
@@ -450,7 +462,7 @@
BigDecimal perkEnumDicPercent = new BigDecimal(perkEnumDic.getValue() == null ? "0" : perkEnumDic.getValue());
//获得数量
BigDecimal perkEnumDicPercentPerk = perkEnumDicPercent.multiply(AppContants.PERCENTAGE).multiply(amountTC).setScale(2, BigDecimal.ROUND_DOWN);
- //如果是积分,除以当前价格,得到数量。
+ //如果是H金劵,除以当前价格,得到数量。
if(walletField.equals("score")){
DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
PerkEnum.POOL_SCORE_PRICE.getType(),
@@ -518,6 +530,31 @@
@Override
public void rankReturnMoney(Long orderId) {
+ }
+ public static void main(String[] args) {
+ BigDecimal total = new BigDecimal(100000);
+
+ BigDecimal amountTotal = BigDecimal.ZERO;
+ BigDecimal scoreTotal = BigDecimal.ZERO;
+
+ BigDecimal amountBasic = new BigDecimal(100);
+ BigDecimal price = new BigDecimal(0.01);
+
+ BigDecimal amountPercent = new BigDecimal(0.5);
+ BigDecimal scorePercent = new BigDecimal(0.35);
+ int times = total.divideToIntegralValue(amountBasic).intValue();
+
+ System.out.println("循环次数:"+times);
+ for(int i = 0; i < times; i++){
+ BigDecimal amount = amountBasic.multiply(amountPercent);
+ amountTotal = amountTotal.add(amount);
+
+ BigDecimal score = amountBasic.multiply(scorePercent).divide(price, 2 ,BigDecimal.ROUND_DOWN);
+ scoreTotal = scoreTotal.add(score);
+ price = amountTotal.divide(scoreTotal, 7 ,BigDecimal.ROUND_DOWN);
+
+ System.out.println("现金池:"+amountTotal+",积分池:"+scoreTotal+",增长现金:"+amount+"增长积分:"+score+",价格:"+price);
+ }
}
}
--
Gitblit v1.9.1