From 8c51ebf0921f23b6dc908d18442a96030533f34e Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 17 Apr 2023 12:54:36 +0800 Subject: [PATCH] 后台修改 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 418 +++++++++++++++++++++++++++++------------------------------ 1 files changed, 207 insertions(+), 211 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 c363fec..e05cfc5 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 @@ -172,21 +172,21 @@ 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) @@ -210,230 +210,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(1000); + //购买套餐按照1000的基数去补贴,如5000,则补贴5次1000 + int times = Integer.parseInt(amountTCAll.divideToIntegralValue(amountTC).toString()); + if(times < 1){ + return; + } - /** - * 1、购买人获得固定比例的H金劵 - * = 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%的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(); - - 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、团队下不同代理级别获取不用的比例的现金和H金劵 - */ - if(StrUtil.isNotEmpty(mallMember.getReferrerIds())){ - //团队补贴对象 + perkMember(directMemberId, + PerkEnum.DIRECT_SCORE_PERK_PERCENT, + amountTC, + "score", + MoneyFlowTypeEnum.DIRECT_SCORE_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); + } + + /** + * 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); + 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; + 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); + 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); + 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 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); + //如果是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); } - 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); } } } -// for(MallMember levelMember : mallMembers){ -// String level = levelMember.getLevel(); -// } -// /** -// * 根据等级分组,获取对应的<级别,会员数组>map todo 目前获取到的levelMember是无序的 -// */ -// 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)); -// } -// } + } - - } - - /** - * 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()); - 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() - ); - - if(poolScore.compareTo(BigDecimal.ZERO) > 0 && poolCash.compareTo(BigDecimal.ZERO) > 0){ - BigDecimal divide = poolCash.divide(poolScore, 6, BigDecimal.ROUND_DOWN); + /** + * 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_SCORE_PRICE.getType(), - PerkEnum.POOL_SCORE_PRICE.getCode(), - divide.toString() + 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); + //新增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() + ); + + if(poolScore.compareTo(BigDecimal.ZERO) > 0 && poolCash.compareTo(BigDecimal.ZERO) > 0){ + BigDecimal divide = poolCash.divide(poolScore, 6, BigDecimal.ROUND_DOWN); + dataDictionaryCustomMapper.updateDicValueByTypeAndCode( + PerkEnum.POOL_SCORE_PRICE.getType(), + PerkEnum.POOL_SCORE_PRICE.getCode(), + divide.toString() + ); + } } } @@ -525,6 +514,13 @@ @Override public void rankReturnMoney(Long orderId) { + } + public static void main(String[] args) { + BigDecimal amountTCAll = new BigDecimal(900); + BigDecimal amountTCBasicAmount = new BigDecimal(1000); + //购买套餐按照1000的基数去补贴,如5000,则补贴5次1000 + BigDecimal bigDecimal = amountTCAll.divideToIntegralValue(amountTCBasicAmount); + System.out.println(bigDecimal); } } -- Gitblit v1.9.1