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