From ae9faa12e8cc7984dfba8631a17e32b216a86508 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 26 Feb 2024 10:41:37 +0800 Subject: [PATCH] 抽奖 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 379 +++++++++++++++++++++++++++++------------------------ 1 files changed, 206 insertions(+), 173 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..d8cb7de 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,17 +50,30 @@ List<String> ids = StrUtil.split(member.getReferrerIds(), ','); List<MallMember> parentMembers = memberMapper.selectByInviteIds(ids); for (MallMember parent : parentMembers) { - //level为v6,升级董事,则看团队下有没有两个V6 - List<MallMember> mallMemberTeamMembers = memberMapper.selectAllChildAgentListByInviteId(parent.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) && levelV6List.size() >= 2){ - parent.setLevel(MemberLevelEnum.V_DIRECTOR.getType()); - parent.setDirector(AppContants.OPTION_YES); - memberMapper.updateById(parent); - } + //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; } @@ -71,6 +84,9 @@ int levelCode = MemberLevelEnum.NORMAL.getLevelCode(nextLevelName); 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)) { @@ -172,21 +188,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) @@ -198,6 +214,12 @@ * 4、董事享受全公司入单分红2%加权(现金) * 5、合伙人享全公司入单分红5%加权(现金) * 6、入单后,50%入现金池 35%的H金劵入H金劵池,更新价格 + * + * + * 新增购买套餐返佣逻辑 + * 1、买了套餐增加权益额度 + * 2、权益额度每次提现会减少对应的数额 + * 3、增加每天返佣固定比例的余额 */ //获取当前订单子表信息 List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectbyOrderId(orderId); @@ -210,99 +232,121 @@ 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(); - - /** - * 1、购买人获得固定比例的H金劵 - * = amountTC * 固定比例 - */ - perkMember(memberId, - PerkEnum.BUY_SET_MEAL_PERK_PERCENT, - amountTC, - "score", - MoneyFlowTypeEnum.BUY_SET_MEAL_PERK.getValue(), - memberId, - FlowTypeEnum.SCORE.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(); - - perkMember(directMemberId, - PerkEnum.DIRECT_CASH_PERK_PERCENT, - amountTC, - "balance", - MoneyFlowTypeEnum.DIRECT_CASH_PERK.getValue(), + DataDictionaryCustom equityLimitTimesDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.EQUITY_LIMIT_TIMES.getType(), + DataDictionaryEnum.EQUITY_LIMIT_TIMES.getCode()); + BigDecimal equityLimitTimes = new BigDecimal(equityLimitTimesDic.getValue()); + BigDecimal equityLimit = amountTCAll.multiply(equityLimitTimes); + if(BigDecimal.ZERO.compareTo(equityLimit) < 0){ + addWalletInfoAndMoneyFlow(equityLimit, + memberId, + "equityLimit", + MoneyFlowTypeEnum.TC_TO_EQUITY_LIMIT.getValue(), memberId, FlowTypeEnum.BALANCE.getValue(), orderNo); + } - perkMember(directMemberId, - PerkEnum.DIRECT_SCORE_PERK_PERCENT, + BigDecimal amountTC = new BigDecimal(100); + //购买套餐按照1000的基数去补贴,如5000,则补贴5次1000 + int times = amountTCAll.divideToIntegralValue(amountTC).intValue(); + if(times < 1){ + return; + } + + for(int i = 0; i < times; i++){ + + /** + * 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)){ - if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ String levelNormal = MemberLevelEnum.V1.getType(); BigDecimal cashPercentNormal = BigDecimal.ZERO; BigDecimal scorePercentNormal = BigDecimal.ZERO; @@ -311,7 +355,9 @@ PerkEnum.POOL_SCORE_PRICE.getType(), PerkEnum.POOL_SCORE_PRICE.getCode()); BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue() == null ? "1" : poolScorePriceDic.getValue()); - for(MallMember teamPerkMember : mallMemberTeamPerk){ + for(String teamPerkMemberInviteId : referrerIdList){ + MallMember teamPerkMember = mallMemberMapper.selectInfoByInviteId(teamPerkMemberInviteId); +// for(MallMember teamPerkMember : mallMemberTeamPerk){ String level = teamPerkMember.getLevel(); //比较两个级别的大小,level大于levelNormal返回1 int compareMin = MemberLevelEnum.V1.compareLevel(level, levelNormal); @@ -357,83 +403,61 @@ } } } - -// 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, 8, BigDecimal.ROUND_DOWN); + dataDictionaryCustomMapper.updateDicValueByTypeAndCode( + PerkEnum.POOL_SCORE_PRICE.getType(), + PerkEnum.POOL_SCORE_PRICE.getCode(), + divide.toString() + ); + } } } @@ -525,6 +549,15 @@ @Override public void rankReturnMoney(Long orderId) { - } + + public static void main(String[] args) { + String referrerIds = "23430963,23420267,23330438,23320976,23310921,23290922,23280413,23270439,23250764,23240756,23230123,23210557,23190725,23180251,23170775,23160156,23150596,23130696,23140691,23120183,22990699,22980499,23110722,20656426"; + List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ","); + for(String reId : referrerIdList){ + System.out.println(reId); + } + } + + } -- Gitblit v1.9.1