From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java |  856 ++++++++++++++++++++++++++++++--------------------------
 1 files changed, 456 insertions(+), 400 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 9585a92..c3020ec 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,400 +1,456 @@
-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.ConfigParamsDTO;
-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;
-import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.TimeUtil;
-import com.yeshi.fanli.util.VersionUtil;
-import com.yeshi.fanli.util.user.UserLevelUtil;
-
-@Service
-public class OrderHongBaoMoneyComputeServiceImpl implements OrderHongBaoMoneyComputeService {
-
-	@Resource
-	private HongBaoManageService hongBaoManageService;
-
-	@Override
-	public BigDecimal computeBaseFanliMoney(CommonOrder order) {
-		return getBaseCommission(order);
-	}
-
-	@Override
-	public BigDecimal computeBaseShareMoney(CommonOrder order) {
-		return getBaseCommission(order);
-	}
-
-	private UserLevelEnum getCommonUserLevel(Date time, UserLevelEnum userLevel) {
-		if (userLevel == null)
-			return UserLevelEnum.daRen;
-		if (time.getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
-			return UserLevelUtil.getOldLevel(userLevel);
-		else
-			return userLevel;
-	}
-
-	// 鑾峰彇鍩虹浣i噾
-	private BigDecimal getBaseCommission(CommonOrder order) {
-		BigDecimal rate = hongBaoManageService.getBaseFanliRate(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
-	public BigDecimal computeFanliMoney(CommonOrder order, UserLevelEnum userLevel) {
-
-		BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime())
-				.add(getOfficialSubsidyRate(order.getThirdCreateTime(),
-						getCommonUserLevel(order.getThirdCreateTime(), userLevel), false));
-		if (userLevel == UserLevelEnum.normalVIP) {
-			rate = new BigDecimal("61");
-		}
-
-		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
-	public BigDecimal computeShareMoney(CommonOrder order, UserLevelEnum userLevel) {
-		BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime())
-				.add(getOfficialSubsidyRate(order.getThirdCreateTime(),
-						getCommonUserLevel(order.getThirdCreateTime(), userLevel), true));
-
-		if (userLevel == UserLevelEnum.normalVIP) {
-			rate = new BigDecimal("61");
-		}
-
-		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
-	public BigDecimal computeFirstInviteMoney(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(), 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;
-	}
-
-	/**
-	 * 鑾峰彇瀹樻柟琛ヨ创姣斾緥
-	 * @Title: getOfficialSubsidyRate
-	 * @Description: 
-	 * @param date
-	 * @param userLevel
-	 * @param share
-	 * @return 
-	 * BigDecimal 杩斿洖绫诲瀷
-	 * @throws
-	 */
-	private BigDecimal getOfficialSubsidyRate(Date date, UserLevelEnum userLevel, boolean share) {
-		String key = null;
-		if (share)
-			key = String.format("official_subsidy_share_%s", userLevel.getLevel());
-		else
-			key = String.format("official_subsidy_zigou_%s", userLevel.getLevel());
-		BigDecimal rate = null;
-		if (date != null)
-			rate = hongBaoManageService.getByKeyAndMaxTimeCache(key, TimeUtil
-					.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"));
-		else
-			rate = new BigDecimal(hongBaoManageService.get(key));
-		return rate;
-	}
-
-	private BigDecimal getRateByLevel(UserLevelEnum level, Date date) {
-		BigDecimal baseRate = hongBaoManageService.getBaseFanliRateCache(
-				TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"));
-
-		BigDecimal subsidyRate = getOfficialSubsidyRate(date, level, false);
-
-		return baseRate.add(subsidyRate);
-	}
-
-	@Override
-	public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, Date date,
-			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 = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime());
-			} else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) {
-				rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime());
-			} else {
-				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);
-			}
-
-			return new UserTeamRate(boss.getUid(), boss.getLevel(), rate);
-
-		} else if (deep == 2) {// 闂存帴閭�璇蜂汉濂栭噾
-			if (bossLevelList == null || bossLevelList.size() < 2)
-				return null;
-
-			BigDecimal buyerRate = getRateByLevel(buyerLevel, date);
-			BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, date, 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 = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime());
-				else {
-					rate = null;
-				}
-			} else if (buyerLevel == UserLevelEnum.normalVIP && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
-				if (boss.getLevel() == UserLevelEnum.normalVIP)
-					rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime());
-				else {
-					rate = null;
-				}
-			} else if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
-				if (boss.getLevel() == UserLevelEnum.normalVIP)
-					rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime());
-				else {
-					rate = null;
-				}
-			}
-			// 鏋佸樊璁$畻娉�
-			if (rate == null) {
-				rate = getRateByLevel(boss.getLevel(), date).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, Date date) {
-		if (bossLevelList == null || bossLevelList.size() < 3)
-			return null;
-
-		UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 1);
-		if (firstBoss == null)
-			return null;
-		UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 2);
-		if (secondBoss == null)
-			return null;
-
-		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(), date);
-			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,
-			Date date) {
-		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 = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_high",
-				date.getTime());
-		BigDecimal vipTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_super",
-				date.getTime());
-
-		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,
-						hongBaoManageService.getByKeyAndMaxTime("dividents_rate_tearcher", date.getTime())));
-				break;
-			}
-		}
-
-		return rateList;
-	}
-
-	@Override
-	public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money,
-			List<UserTeamLevel> bossLevelList, Date date) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	private BigDecimal getFanliRate(Date time, UserLevelEnum userLevel) {
-		BigDecimal rate = hongBaoManageService
-				.getBaseFanliRateCache(TimeUtil
-						.convertToTimeTemp(TimeUtil.getGernalTime(time.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"))
-				.add(getOfficialSubsidyRate(time, getCommonUserLevel(time, userLevel), false));
-
-		if (userLevel == UserLevelEnum.normalVIP)
-			rate = new BigDecimal("61");
-		return rate;
-	}
-
-	@Override
-	public ConfigParamsDTO getShowComputeRate(String platform, String version, UserLevelEnum userLevel) {
-		BigDecimal fanLiRate = getFanliRate(new Date(), userLevel);
-		BigDecimal shareRate = fanLiRate;
-		ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE,
-				getFanliRate(new Date(), UserLevelEnum.superVIP));
-		if (VersionUtil.greaterThan_2_0_5(platform, version)) {
-			paramsDTO.setMaxRewardRate(null);
-		}
-		return paramsDTO;
-	}
-
-	@Override
-	public ConfigParamsDTO getShowComputeRate(String platform, String version) {
-		return getShowComputeRate(platform, version, UserLevelEnum.daRen);
-	}
-
-}
+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 com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.lijin.manager.UserLijinMnager;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
+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;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import org.yeshi.utils.TimeUtil;
+import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.util.user.UserLevelUtil;
+
+@Service
+public class OrderHongBaoMoneyComputeServiceImpl implements OrderHongBaoMoneyComputeService {
+
+    @Resource
+    private HongBaoManageService hongBaoManageService;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    private UserLijinMnager userLijinMnager;
+
+    @Override
+    public BigDecimal computeBaseFanliMoney(CommonOrder order) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        return getBaseCommission(order, system);
+    }
+
+    @Override
+    public BigDecimal computeBaseShareMoney(CommonOrder order) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        return getBaseCommission(order, system);
+    }
+
+    private UserLevelEnum getCommonUserLevel(Date time, UserLevelEnum userLevel) {
+        if (userLevel == null)
+            return UserLevelEnum.daRen;
+        if (time.getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME)
+            return UserLevelUtil.getOldLevel(userLevel);
+        else
+            return userLevel;
+    }
+
+    // 鑾峰彇鍩虹浣i噾
+    private BigDecimal getBaseCommission(CommonOrder order, SystemEnum system) {
+        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system);
+        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
+    public BigDecimal computeFanliMoney(CommonOrder order, UserLevelEnum userLevel) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        BigDecimal rate = null;
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            rate = userLijinMnager.getUserFanliRate(order.getUserInfo().getId(), order.getThirdCreateTime());
+        } else {
+            rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system)
+                    .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
+                            getCommonUserLevel(order.getThirdCreateTime(), userLevel), false, system));
+            if (userLevel == UserLevelEnum.normalVIP) {
+                rate = new BigDecimal("61");
+            }
+        }
+
+
+        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
+    public BigDecimal computeShareMoney(CommonOrder order, UserLevelEnum userLevel) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+
+        BigDecimal rate = hongBaoManageService.getBaseFanliRate(order.getThirdCreateTime().getTime(), system)
+                .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
+                        getCommonUserLevel(order.getThirdCreateTime(), userLevel), true, system));
+        if (userLevel == UserLevelEnum.normalVIP) {
+            rate = new BigDecimal("61");
+        }
+
+
+        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
+    public BigDecimal computeFirstInviteMoney(CommonOrder order, UserLevelEnum buyer,
+                                              List<UserTeamLevel> bossLevelList) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        BigDecimal rate = null;
+        if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
+            rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 1, system).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(), system);
+            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+            else if (order.getEstimate() != null)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+        }
+
+        return null;
+    }
+
+    @Override
+    public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer,
+                                               List<UserTeamLevel> bossLevelList) {
+        SystemEnum system = userInfoService.getUserSystem(order.getUserInfo().getId());
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        BigDecimal rate = null;
+        if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
+            UserTeamRate teamRate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 2, system);
+            if (teamRate != null) {
+                rate = teamRate.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(), system);
+            if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+            else if (order.getEstimate() != null)
+                return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order, system)),
+                        new BigDecimal(100));
+        }
+
+        return null;
+    }
+
+    /**
+     * 鑾峰彇瀹樻柟琛ヨ创姣斾緥
+     *
+     * @param date
+     * @param userLevel
+     * @param share
+     * @return BigDecimal 杩斿洖绫诲瀷
+     * @throws
+     * @Title: getOfficialSubsidyRate
+     * @Description:
+     */
+    private BigDecimal getOfficialSubsidyRate(Date date, UserLevelEnum userLevel, boolean share, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        String key = null;
+        if (share)
+            key = String.format("official_subsidy_share_%s", userLevel.getLevel());
+        else
+            key = String.format("official_subsidy_zigou_%s", userLevel.getLevel());
+        BigDecimal rate = null;
+        if (date != null)
+            rate = hongBaoManageService.getByKeyAndMaxTimeCache(key, TimeUtil
+                    .convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"), system);
+        else
+            rate = new BigDecimal(hongBaoManageService.get(key, system));
+        return rate;
+    }
+
+    private BigDecimal getRateByLevel(UserLevelEnum level, Date date, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return new BigDecimal(0);
+        }
+        BigDecimal baseRate = hongBaoManageService.getBaseFanliRateCache(
+                TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"), system);
+
+        BigDecimal subsidyRate = getOfficialSubsidyRate(date, level, false, system);
+
+        return baseRate.add(subsidyRate);
+    }
+
+    @Override
+    public UserTeamRate getTeamRewardRate(UserLevelEnum buyerLevel, List<UserTeamLevel> bossLevelList, Date date,
+                                          int deep, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return null;
+        }
+        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 = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime(), system);
+            } else if (buyerLevel == UserLevelEnum.normalVIP && boss.getLevel() == UserLevelEnum.normalVIP) {
+                rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_6", date.getTime(), system);
+            } else {
+                BigDecimal bossRate = getRateByLevel(boss.getLevel(), date, system);
+                BigDecimal buyerRate = getRateByLevel(buyerLevel, date, system);
+                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, date, system);
+            BigDecimal firstRate = getTeamRewardRate(buyerLevel, bossLevelList, date, 1, system).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 = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(), system);
+                else {
+                    rate = null;
+                }
+            } else if (buyerLevel == UserLevelEnum.normalVIP && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
+                if (boss.getLevel() == UserLevelEnum.normalVIP)
+                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(), system);
+                else {
+                    rate = null;
+                }
+            } else if (buyerLevel == UserLevelEnum.daRen && firstBoss.getLevel() == UserLevelEnum.normalVIP) {
+                if (boss.getLevel() == UserLevelEnum.normalVIP)
+                    rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_daren_7", date.getTime(), system);
+                else {
+                    rate = null;
+                }
+            }
+            // 鏋佸樊璁$畻娉�
+            if (rate == null) {
+                rate = getRateByLevel(boss.getLevel(), date, system).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, Date date, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return null;
+        }
+        if (bossLevelList == null || bossLevelList.size() < 3)
+            return null;
+
+        UserTeamRate firstBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 1, system);
+        if (firstBoss == null)
+            return null;
+        UserTeamRate secondBoss = getTeamRewardRate(buyerLevel, bossLevelList, date, 2, system);
+        if (secondBoss == null)
+            return null;
+
+        BigDecimal buyerRate = getRateByLevel(buyerLevel, date, system);
+
+        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(), date, system);
+            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,
+                                                    Date date, SystemEnum system) {
+        if (system == SystemEnum.yhqjx || system == SystemEnum.hsb) {
+            return null;
+        }
+        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 = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_high",
+                date.getTime(), system);
+        BigDecimal vipTotalRate = hongBaoManageService.getByKeyAndMaxTime("dividents_rate_same_level_super",
+                date.getTime(), system);
+
+        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,
+                        hongBaoManageService.getByKeyAndMaxTime("dividents_rate_tearcher", date.getTime(), system)));
+                break;
+            }
+        }
+
+        return rateList;
+    }
+
+    @Override
+    public UserTeamRate getTearcherSubsidy(UserLevelEnum buyerLevel, BigDecimal money,
+                                           List<UserTeamLevel> bossLevelList, Date date, SystemEnum system) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    private BigDecimal getFanliRate(Date time, UserLevelEnum userLevel, SystemEnum system) {
+        BigDecimal rate = hongBaoManageService
+                .getBaseFanliRateCache(TimeUtil
+                        .convertToTimeTemp(TimeUtil.getGernalTime(time.getTime(), "yyyy-MM-dd HH"), "yyyy-MM-dd HH"), system)
+                .add(getOfficialSubsidyRate(time, getCommonUserLevel(time, userLevel), false, system));
+
+        if (userLevel == UserLevelEnum.normalVIP)
+            rate = new BigDecimal("61");
+        return rate;
+    }
+
+    @Override
+    public GoodsMoneyConfigParamsDTO getShowComputeRate(String platform, String version, UserLevelEnum userLevel, SystemEnum system) {
+        BigDecimal fanLiRate = getFanliRate(new Date(), userLevel, system);
+        BigDecimal shareRate = fanLiRate;
+        GoodsMoneyConfigParamsDTO paramsDTO = new GoodsMoneyConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE,
+                getFanliRate(new Date(), UserLevelEnum.superVIP, system));
+        if (VersionUtil.greaterThan_2_0_5(platform, version)) {
+            paramsDTO.setMaxRewardRate(null);
+        }
+        return paramsDTO;
+    }
+
+    @Override
+    public GoodsMoneyConfigParamsDTO getShowComputeRate(String platform, String version, SystemEnum system) {
+        return getShowComputeRate(platform, version, UserLevelEnum.daRen, system);
+    }
+
+    @Override
+    public BigDecimal getFanliRate(UserLevelEnum userLevel, Date date, SystemEnum system) {
+        BigDecimal rate = hongBaoManageService.getBaseFanliRate(date.getTime(), system)
+                .add(getOfficialSubsidyRate(date, getCommonUserLevel(date, userLevel), false, system));
+        return rate;
+    }
+
+}

--
Gitblit v1.8.0