| | |
| | | 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;
|
| | |
| | | else
|
| | | return null;
|
| | | } else {
|
| | | BigDecimal rate = hongBaoManageService.getFanLiRate(order.getThirdCreateTime().getTime());
|
| | | BigDecimal rate = hongBaoManageService.getFanLiRate(UserLevelEnum.daRen,
|
| | | order.getThirdCreateTime().getTime());
|
| | | if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
|
| | | else if (order.getEstimate() != null)
|
| | |
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
|
| | | else
|
| | | return null;
|
| | |
|
| | | }
|
| | |
|
| | | @Override
|
| | |
| | | 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;
|
| | | }
|
| | |
|
| | | }
|