From 62a447d89331aee1feae7724c7616aa1bb2cfe79 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 16 十月 2024 14:28:37 +0800
Subject: [PATCH] 将CMQ替换为rabbitmq
---
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMoneyComputeServiceImpl.java | 873 ++++++++++++++++++++++++++++++---------------------------
1 files changed, 456 insertions(+), 417 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 0e9e894..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,417 +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 com.yeshi.fanli.entity.SystemEnum;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-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;
-
- @Resource
- private UserInfoService userInfoService;
-
- @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 = 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());
- 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());
- 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());
- BigDecimal rate = null;
- if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
- rate = getTeamRewardRate(buyer, bossLevelList, order.getThirdCreateTime(), 2,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_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) {
- 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) {
- 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 (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 (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) {
- 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 ConfigParamsDTO getShowComputeRate(String platform, String version, UserLevelEnum userLevel,SystemEnum system) {
- BigDecimal fanLiRate = getFanliRate(new Date(), userLevel,system);
- BigDecimal shareRate = fanLiRate;
- ConfigParamsDTO paramsDTO = new ConfigParamsDTO(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 ConfigParamsDTO 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;
- }
-
-}
+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