From 83bb6e0580b646c5d89da1cdb4085787c8136822 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期四, 23 四月 2020 14:29:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java |  174 ++++++++++++++++++++++------------------------------------
 1 files changed, 66 insertions(+), 108 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 6f4bcbb..7c34e4b 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
@@ -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;
 	}

--
Gitblit v1.8.0