yujian
2020-04-23 2bd2200f209ddb7bcc59b636d9de6f8b3f762958
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;
   }
}