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 | 472 ++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 306 insertions(+), 166 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 214b3a8..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
@@ -5,6 +5,8 @@
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.*;
+import cc.mrbird.febs.mall.vo.AdminAgentLevelVo;
+import cc.mrbird.febs.mall.vo.AdminAgentMemberVo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -48,31 +50,54 @@
List<String> ids = StrUtil.split(member.getReferrerIds(), ',');
List<MallMember> parentMembers = memberMapper.selectByInviteIds(ids);
for (MallMember parent : parentMembers) {
- // 未激活用户无法升级
- if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) {
+ //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;
}
- DataDictionaryCustom nextLevel = dataDictionaryCustomMapper.selectNextAgentLevelInfo(parent.getLevel());
- if (nextLevel == null) {
- log.info("当前层级无下一级:{}", parent.getLevel());
+ /**
+ * 升级到董事就无法升级了
+ */
+ String nextLevelName = MemberLevelEnum.NORMAL.getNextLevel(parent.getLevel());
+ int levelCode = MemberLevelEnum.NORMAL.getLevelCode(nextLevelName);
+
+ DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_PERK_SET", nextLevelName);
+ if(ObjectUtil.isEmpty(newLevelDic)){
continue;
}
- AgentInfo agentInfo = JSONObject.parseObject(nextLevel.getValue(), AgentInfo.class);
- if (!directMemberCnt(parent, agentInfo)) {
+ AdminAgentInfo adminAgentInfo = JSONObject.parseObject(newLevelDic.getValue(), AdminAgentInfo.class);
+ if (!directMemberCnt(parent, adminAgentInfo)) {
continue;
}
- if (!agentCntFinish(parent, agentInfo)) {
+ if (!teamIncome(parent, adminAgentInfo)) {
continue;
}
- if (!teamIncome(parent, agentInfo)) {
- continue;
- }
-
- parent.setLevel(nextLevel.getCode());
+ parent.setLevel(nextLevelName);
memberMapper.updateById(parent);
}
}
@@ -83,7 +108,7 @@
* @param member
* @return
*/
- private boolean directMemberCnt(MallMember member, AgentInfo agentInfo) {
+ private boolean directMemberCnt(MallMember member, AdminAgentInfo agentInfo) {
List<MallMember> childs = memberMapper.selectByRefererId(member.getInviteId());
if (CollUtil.isEmpty(childs)) {
return false;
@@ -93,7 +118,7 @@
return true;
}
- log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), childs.size(), agentInfo.getLastAgentCnt());
+ log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), childs.size(), agentInfo.getDirectCnt());
return false;
}
@@ -132,32 +157,63 @@
/**
* 团队业绩是否达标
+ * 除去直属的最大的一个业绩团队,剩余的所有业绩之和
*
* @param
* @param agentInfo
* @return
*/
- private boolean teamIncome(MallMember member, AgentInfo agentInfo) {
- BigDecimal totalIncome = memberMapper.selectAchieveByMemberId(member.getInviteId(), 2);
+ private boolean teamIncome(MallMember member, AdminAgentInfo agentInfo) {
+ BigDecimal teamIncome = agentInfo.getTeamIncome();
+ //业绩集合
+ List<BigDecimal> list = new ArrayList<>();
+ //总业绩
+ BigDecimal teamIncomeMax = BigDecimal.ZERO;
+ //所有直推团队,就是这个会员的所有区域的业绩。
+ List<MallMember> mallMembers = mallMemberMapper.selectByRefererId(member.getInviteId());
+ List<String> mallMemberInviteIds = mallMembers.stream().map(MallMember::getInviteId).collect(Collectors.toList());
+ for(String inviteId : mallMemberInviteIds){
+ BigDecimal totalIncomeMember = memberMapper.selectAllAchieveByInviteId(inviteId);
+ teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
+ list.add(totalIncomeMember);
+ }
+ //去掉一个最大区的业绩
+ BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
+ teamIncomeMax = teamIncomeMax.subtract(bigMax);
- BigDecimal targetIncome = agentInfo.getTeamIncome().multiply(new BigDecimal("10000"));
- if (totalIncome.compareTo(targetIncome) >= 0) {
+ if (teamIncomeMax.compareTo(teamIncome) >= 0) {
return true;
}
-
- log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getLevel(), totalIncome, targetIncome);
+ log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getPhone(), member.getLevel(), teamIncomeMax, teamIncome);
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);
+// }
@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%的H金劵入H金劵池,更新价格
*/
//获取当前订单子表信息
List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectbyOrderId(orderId);
@@ -170,160 +226,218 @@
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(),
- 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(),
- 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(),
- 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(),
- 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);
+ 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.getType(),
+ PerkEnum.POOL_SCORE.getCode(),
+ poolScore.toString()
+ );
- 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(),
- FlowTypeEnum.BALANCE.getValue(),
- orderNo);
- }
- if(scoreCnt.compareTo(BigDecimal.ZERO) > 0){
- addWalletInfoAndMoneyFlow(scoreCnt,
- teamPerkMemberId,
- "score",
- MoneyFlowTypeEnum.AGENT_SCORE_PERK.getValue(),
- FlowTypeEnum.SCORE.getValue(),
- orderNo);
- }
- levelNormal = level;
- cashPercentNormal = cashPercent;
- scorePercentNormal = scorePercent;
- }
+ 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()
+ );
}
}
}
@@ -335,12 +449,12 @@
* @param memberId 用户ID
* @param perkEnum 比例的枚举值
* @param amountTC 总金额
- * @param walletField 类型:score:积分 balance:余额
+ * @param walletField 类型:score:H金劵 balance:余额
* @param type 流水类型
* @param flowType 流水分类
* @param orderNo 订单编号
*/
- private void perkMember(Long memberId,PerkEnum perkEnum,BigDecimal amountTC,String walletField,int type,int flowType,String orderNo){
+ private void perkMember(Long memberId,PerkEnum perkEnum,BigDecimal amountTC,String walletField,int type,Long rtMemberId,int flowType,String orderNo){
DataDictionaryCustom perkEnumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
perkEnum.getType(),
perkEnum.getCode());
@@ -348,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(),
@@ -357,7 +471,7 @@
perkEnumDicPercentPerk = perkEnumDicPercentPerk.divide(poolScorePrice, 2 ,BigDecimal.ROUND_DOWN);
}
if(perkEnumDicPercentPerk.compareTo(BigDecimal.ZERO) > 0){
- addWalletInfoAndMoneyFlow(perkEnumDicPercentPerk,memberId,walletField,type,flowType,orderNo);
+ addWalletInfoAndMoneyFlow(perkEnumDicPercentPerk,memberId,walletField,type,rtMemberId,flowType,orderNo);
}
}
}
@@ -371,7 +485,7 @@
* @param flowType
* @param orderNo
*/
- private void addWalletInfoAndMoneyFlow(BigDecimal amount,Long memberId,String walletField,int type,int flowType,String orderNo){
+ private void addWalletInfoAndMoneyFlow(BigDecimal amount,Long memberId,String walletField,int type,Long rtMemberId,int flowType,String orderNo){
//增加
iApiMallMemberWalletService.add(amount,memberId,walletField);
//增加一个流水记录
@@ -380,6 +494,7 @@
amount,
type,
orderNo,
+ rtMemberId,
flowType,
AppContants.IS_RETURN_YES);
}
@@ -394,7 +509,7 @@
* @param flowType 流水分类
* @param orderNo 订单编号
*/
- private void perkMembersLevel(List<MallMember> mallMembers,PerkEnum perkEnum,BigDecimal amountTC,String walletField,int type,int flowType,String orderNo){
+ private void perkMembersLevel(List<MallMember> mallMembers,PerkEnum perkEnum,BigDecimal amountTC,String walletField,int type,Long rtMemberId,int flowType,String orderNo){
DataDictionaryCustom perkEnumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
perkEnum.getType(),
perkEnum.getCode());
@@ -407,7 +522,7 @@
if(perkEnumDicPercentPerk.compareTo(BigDecimal.ZERO) > 0){
for(MallMember mallMember : mallMembers){
Long memberId = mallMember.getId();
- addWalletInfoAndMoneyFlow(perkEnumDicPercentPerk,memberId,walletField,type,flowType,orderNo);
+ addWalletInfoAndMoneyFlow(perkEnumDicPercentPerk,memberId,walletField,type,rtMemberId,flowType,orderNo);
}
}
}
@@ -415,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