From f5d2e7e2d1ad3309e8bd3c2b93468be1bfc93ae5 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 22 四月 2020 18:19:57 +0800 Subject: [PATCH] 新的分红规则修改 --- fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java | 200 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 199 insertions(+), 1 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java index b7b2316..6f4bcbb 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java @@ -1,12 +1,16 @@ package com.yeshi.fanli.service.impl.order; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; +import com.yeshi.fanli.dto.order.UserTeamLevel; +import com.yeshi.fanli.dto.order.UserTeamRate; import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService; @@ -75,7 +79,6 @@ return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100)); else return null; - } @Override @@ -202,4 +205,199 @@ return rate; } + private BigDecimal getRateByLevel(UserLevelEnum level) { + if (level == UserLevelEnum.daRen) + return new BigDecimal(58); + else if (level == UserLevelEnum.normalVIP) + return new BigDecimal(66); + else if (level == UserLevelEnum.highVIP) + return new BigDecimal(78); + else if (level == UserLevelEnum.superVIP) + return new BigDecimal(85); + else if (level == UserLevelEnum.tearcher) + return new BigDecimal(86); + return null; + } + + @Override + public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, + int deep) { + if (deep == 1) {// 鐩存帴閭�璇蜂汉濂栭噾 + UserTeamLevel boss = bossLevelList.get(0); + BigDecimal rate = null; + if (bossLevelList == null || bossLevelList.size() < 1) + return null; + + if (buyerLevel == UserLevelEnum.daRen && boss.getLevel() == UserLevelEnum.daRen) { + rate = new BigDecimal(9); + } else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) { + rate = new BigDecimal(9); + } else { + BigDecimal bossRate = getRateByLevel(boss.getLevel()); + BigDecimal buyerRate = getRateByLevel(buyerLevel); + rate = bossRate.subtract(buyerRate); + if (rate.compareTo(new BigDecimal(0)) < 0) + rate = new BigDecimal(0); + } + + return new UserTeamRate(boss.getUid(), boss.getLevel(), rate); + + } else if (deep == 2) {// 闂存帴閭�璇蜂汉濂栭噾 + if (bossLevelList == null || bossLevelList.size() < 2) + return null; + + BigDecimal buyerRate = getRateByLevel(buyerLevel); + BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, 1).getRate(); + + UserTeamLevel boss = bossLevelList.get(1); + UserTeamLevel firstBoss = bossLevelList.get(0); + BigDecimal rate = null; + if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.daRen) { + if (boss.getLevel() == UserLevelEnum.daRen) + rate = new BigDecimal(1); + else { + rate = null; + } + } else if (buyerLevel == UserLevelEnum.normalVIP && firstBoss.getLevel() == UserLevelEnum.normalVIP) { + if (boss.getLevel() == UserLevelEnum.normalVIP) + rate = new BigDecimal(1); + else { + rate = null; + } + } + // 鏋佸樊璁$畻娉� + if (rate == null) { + rate = getRateByLevel(boss.getLevel()).subtract(buyerRate).subtract(firstRate); + if (rate.compareTo(new BigDecimal(0)) < 0) + rate = new BigDecimal(0); + } + + return new UserTeamRate(boss.getUid(), boss.getLevel(), rate); + } else + return null; + } + + @Override + public List<UserTeamRate> getTeamRewardMoreThan2LevelRates(UserLevelEnum buyerLevel, + List<UserTeamLevel> bossLevelList) { + if (bossLevelList == null || bossLevelList.size() < 3) + return null; + + UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, 1); + if (firstBoss == null) + return null; + UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, 2); + if (secondBoss == null) + return null; + + BigDecimal buyerRate = getRateByLevel(buyerLevel); + + BigDecimal totalRate = firstBoss.getRate().add(secondBoss.getRate()).add(buyerRate); + + List<UserTeamRate> rateList = new ArrayList<>(); + + for (int i = 2; i < bossLevelList.size(); i++) { + BigDecimal rate = getRateByLevel(bossLevelList.get(i).getLevel()); + if (rate.compareTo(totalRate) > 0) { + BigDecimal subRate = rate.subtract(totalRate); + totalRate = subRate.add(totalRate);// 绱鍒嗘垚姣斾緥 + rateList.add(new UserTeamRate(bossLevelList.get(i).getUid(), bossLevelList.get(i).getLevel(), subRate)); + } + } + + return rateList; + } + + // 鍥㈤槦鍒嗙孩 + @Override + public List<UserTeamRate> getTeamDividentsRates(UserLevelEnum buyerLevel, + List<UserTeamLevel> bossLevelList) { + List<UserTeamRate> rateList = new ArrayList<>(); + + List<UserTeamLevel> levelList = new ArrayList<>(); + levelList.add(new UserTeamLevel(null, buyerLevel)); + levelList.addAll(bossLevelList); + UserLevelEnum maxLevel = buyerLevel; + + List<UserTeamLevel> vipList = new ArrayList<>(); + List<UserTeamLevel> highList = new ArrayList<>(); + + for (int i = 1; i < levelList.size(); i++) { + if (maxLevel.getLevel() <= levelList.get(i).getLevel().getLevel()) { + maxLevel = levelList.get(i).getLevel(); + if (levelList.get(i).getLevel() == UserLevelEnum.highVIP) + highList.add(levelList.get(i)); + else if (levelList.get(i).getLevel() == UserLevelEnum.superVIP) { + vipList.add(levelList.get(i)); + } + } + } + + if (vipList.size() >= 4) {// 鏈�澶氬垎4绾� + vipList = vipList.subList(0, 4); + } + + if (highList.size() >= 4) {// 鏈�澶氬垎4绾� + highList = highList.subList(0, 4); + } + + BigDecimal highTotalRate = new BigDecimal("0.9"); + BigDecimal vipTotalRate = new BigDecimal("1.5"); + + if (vipList.size() > 0 && highList.size() > 0) { + + } else if (vipList.size() == 0) { + highTotalRate = highTotalRate.add(vipTotalRate); + } else { + vipTotalRate = highTotalRate.add(vipTotalRate); + } + + // 楂樼骇浼氬憳鍒嗙孩 + if (highList.size() > 0) { + int count = 0; + for (int i = 0; i < highList.size(); i++) { + count += (4 - i); + } + + BigDecimal per = MoneyBigDecimalUtil.div(highTotalRate, new BigDecimal(count), 4); + for (int i = 0; i < highList.size(); i++) { + BigDecimal rate = MoneyBigDecimalUtil.mul(per, new BigDecimal(4 - i), 4); + rateList.add(new UserTeamRate(highList.get(i), rate)); + } + } + + // 瓒呯骇浼氬憳鍒嗙孩 + if (vipList.size() > 0) { + int count = 0; + for (int i = 0; i < vipList.size(); i++) { + count += (4 - i); + } + + BigDecimal per = MoneyBigDecimalUtil.div(vipTotalRate, new BigDecimal(count), 4); + + for (int i = 0; i < vipList.size(); i++) { + BigDecimal rate = MoneyBigDecimalUtil.mul(per, new BigDecimal(4 - i), 4); + rateList.add(new UserTeamRate(vipList.get(i), rate)); + } + + } + + // 瀵煎笀鍒嗙孩 + for (UserTeamLevel level : bossLevelList) { + if (level.getLevel() == UserLevelEnum.tearcher) { + rateList.add(new UserTeamRate(level, new BigDecimal("0.6"))); + break; + } + } + + return rateList; + } + + @Override + public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money, + List<UserTeamLevel> bossLevelList) { + // TODO Auto-generated method stub + return null; + } + } -- Gitblit v1.8.0