admin
2020-04-23 2ff38cf4200a2235567e8ff6f5560a7026e1f1a6
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java
@@ -95,89 +95,53 @@
   }
   @Override
   public BigDecimal computeFirstInviteMoney(CommonOrder order, UserLevelEnum buyer) {
      BigDecimal rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_6", order.getThirdCreateTime().getTime());
      if (buyer == UserLevelEnum.superVIP || buyer == UserLevelEnum.tearcher)
         rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_vip_6", order.getThirdCreateTime().getTime());
      if (rate.compareTo(new BigDecimal(0)) == 0)
         return null;
      if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
         return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
               new BigDecimal(100));
      else if (order.getEstimate() != null)
         return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
               new BigDecimal(100));
      else
         return null;
   }
   @Override
   public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer) {
      if (buyer == UserLevelEnum.superVIP || buyer == UserLevelEnum.tearcher)
         return null;
      BigDecimal rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_7", order.getThirdCreateTime().getTime());
      if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
         return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
               new BigDecimal(100));
      else if (order.getEstimate() != null)
         return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
               new BigDecimal(100));
      else
         return null;
   }
   @Override
   public BigDecimal computeFirstTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
         UserLevelEnum userLevel) {
      BigDecimal rate = getTeamSubsidyRate(placeOrderTime, buyerUserLevel, userLevel, true);
      if (rate == null || rate.compareTo(new BigDecimal(0)) == 0)
         return null;
      BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(placeOrderTime.getTime());
      BigDecimal officialSubsidyRate = getOfficialSubsidyRate(placeOrderTime, buyerUserLevel, false);
      return MoneyBigDecimalUtil.div(fanLiMoney.multiply(baseRate).multiply(rate),
            baseRate.add(officialSubsidyRate).multiply(new BigDecimal(100)));
   }
   @Override
   public BigDecimal computeSecondTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
         UserLevelEnum userLevel) {
      BigDecimal rate = getTeamSubsidyRate(placeOrderTime, buyerUserLevel, userLevel, false);
      if (rate == null || rate.compareTo(new BigDecimal(0)) == 0)
         return null;
      BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(placeOrderTime.getTime());
      BigDecimal officialSubsidyRate = getOfficialSubsidyRate(placeOrderTime, buyerUserLevel, false);
      return MoneyBigDecimalUtil.div(fanLiMoney.multiply(baseRate).multiply(rate),
            baseRate.add(officialSubsidyRate).multiply(new BigDecimal(100)));
   }
   /**
    * 获取粉丝的补贴比例
    * @Title: getSecondTeamSubsidy
    * @Description:
    * @param date
    * @param buyerUserLevel
    * @param userLevel
    * @return
    * BigDecimal 返回类型
    * @throws
    */
   @Override
   public BigDecimal getTeamSubsidyRate(Date date, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel,
         boolean direct) {
      String key = null;
      if (direct)
         key = String.format("team_subsidy_6_pre_%s_%s", buyerUserLevel.getLevel(), userLevel.getLevel());
      else
         key = String.format("team_subsidy_7_pre_%s_%s", buyerUserLevel.getLevel(), userLevel.getLevel());
   public BigDecimal computeFirstInviteMoney(CommonOrder order, UserLevelEnum buyer,
         List<UserTeamLevel> bossLevelList) {
      BigDecimal rate = null;
      if (date != null)
         rate = hongBaoManageService.getByKeyAndMaxTime(key, date.getTime());
      else
         rate = new BigDecimal(hongBaoManageService.get(key));
      return rate;
      if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
         rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 1).getRate();
         if (rate == null)
            return null;
         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 {// 老的返利比例
         rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_6", order.getThirdCreateTime().getTime());
         if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
                  new BigDecimal(100));
         else if (order.getEstimate() != null)
            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
                  new BigDecimal(100));
      }
      return null;
   }
   @Override
   public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer,
         List<UserTeamLevel> bossLevelList) {
      BigDecimal rate = null;
      if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
         rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 2).getRate();
         if (rate == null)
            return null;
         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 {// 老的返利比例
         rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_7", order.getThirdCreateTime().getTime());
         if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
                  new BigDecimal(100));
         else if (order.getEstimate() != null)
            return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
                  new BigDecimal(100));
      }
      return null;
   }
   /**
@@ -205,22 +169,16 @@
      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;
   private BigDecimal getRateByLevel(UserLevelEnum level, Date date) {
      BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(date.getTime());
      BigDecimal subsidyRate = getOfficialSubsidyRate(date, level, false);
      return baseRate.add(subsidyRate);
   }
   @Override
   public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList,
   public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, Date date,
         int deep) {
      if (deep == 1) {// 直接邀请人奖金
         UserTeamLevel boss = bossLevelList.get(0);
@@ -233,8 +191,8 @@
         } else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) {
            rate = new BigDecimal(9);
         } else {
            BigDecimal bossRate = getRateByLevel(boss.getLevel());
            BigDecimal buyerRate = getRateByLevel(buyerLevel);
            BigDecimal bossRate = getRateByLevel(boss.getLevel(), date);
            BigDecimal buyerRate = getRateByLevel(buyerLevel, date);
            rate = bossRate.subtract(buyerRate);
            if (rate.compareTo(new BigDecimal(0)) < 0)
               rate = new BigDecimal(0);
@@ -246,8 +204,8 @@
         if (bossLevelList == null || bossLevelList.size() < 2)
            return null;
         BigDecimal buyerRate = getRateByLevel(buyerLevel);
         BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, 1).getRate();
         BigDecimal buyerRate = getRateByLevel(buyerLevel, date);
         BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, date, 1).getRate();
         UserTeamLevel boss = bossLevelList.get(1);
         UserTeamLevel firstBoss = bossLevelList.get(0);
@@ -267,7 +225,7 @@
         }
         // 极差计算法
         if (rate == null) {
            rate = getRateByLevel(boss.getLevel()).subtract(buyerRate).subtract(firstRate);
            rate = getRateByLevel(boss.getLevel(), date).subtract(buyerRate).subtract(firstRate);
            if (rate.compareTo(new BigDecimal(0)) < 0)
               rate = new BigDecimal(0);
         }
@@ -279,25 +237,25 @@
   @Override
   public List<UserTeamRate> getTeamRewardMoreThan2LevelRates(UserLevelEnum buyerLevel,
         List<UserTeamLevel> bossLevelList) {
         List<UserTeamLevel> bossLevelList, Date date) {
      if (bossLevelList == null || bossLevelList.size() < 3)
         return null;
      UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, 1);
      UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 1);
      if (firstBoss == null)
         return null;
      UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, 2);
      UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 2);
      if (secondBoss == null)
         return null;
      BigDecimal buyerRate = getRateByLevel(buyerLevel);
      BigDecimal buyerRate = getRateByLevel(buyerLevel, date);
      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());
         BigDecimal rate = getRateByLevel(bossLevelList.get(i).getLevel(), date);
         if (rate.compareTo(totalRate) > 0) {
            BigDecimal subRate = rate.subtract(totalRate);
            totalRate = subRate.add(totalRate);// 累计分成比例
@@ -310,8 +268,8 @@
   // 团队分红
   @Override
   public List<UserTeamRate> getTeamDividentsRates(UserLevelEnum buyerLevel,
         List<UserTeamLevel> bossLevelList) {
   public List<UserTeamRate> getTeamDividentsRates(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList,
         Date date) {
      List<UserTeamRate> rateList = new ArrayList<>();
      List<UserTeamLevel> levelList = new ArrayList<>();
@@ -395,7 +353,7 @@
   @Override
   public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money,
         List<UserTeamLevel> bossLevelList) {
         List<UserTeamLevel> bossLevelList, Date date) {
      // TODO Auto-generated method stub
      return null;
   }