| | |
| | | package com.yeshi.fanli.service.impl.order;
|
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.util.Date;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | 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.MoneyBigDecimalUtil;
|
| | |
|
| | | @Service
|
| | | public class OrderHongBaoMoneyComputeServiceImpl implements OrderHongBaoMoneyComputeService {
|
| | |
|
| | | @Resource
|
| | | private HongBaoManageService hongBaoManageService;
|
| | |
|
| | | // 获取基础佣金
|
| | | 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(), userLevel, false));
|
| | | 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(), userLevel, true));
|
| | | 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) {
|
| | | if (buyer == UserLevelEnum.superVIP) {
|
| | | BigDecimal rate = hongBaoManageService.getByKeyAndMaxTime("new_share_vip_21",
|
| | | order.getThirdCreateTime().getTime());
|
| | | BigDecimal fanLiMoney = computeFanliMoney(order, buyer);
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, fanLiMoney), new BigDecimal(100));
|
| | | }
|
| | |
|
| | | BigDecimal 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, 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 computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer) {
|
| | | if (buyer == UserLevelEnum.superVIP)
|
| | | 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, 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 computeFirstTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
|
| | | UserLevelEnum userLevel) {
|
| | | BigDecimal rate = getTeamSubsidyRate(placeOrderTime, buyerUserLevel, userLevel, true);
|
| | | if (rate == null)
|
| | | return null;
|
| | | BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(placeOrderTime.getTime());
|
| | | BigDecimal officialSubsidyRate = getOfficialSubsidyRate(placeOrderTime, userLevel, 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)
|
| | | return null;
|
| | | BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(placeOrderTime.getTime());
|
| | | BigDecimal officialSubsidyRate = getOfficialSubsidyRate(placeOrderTime, userLevel, false);
|
| | | return MoneyBigDecimalUtil.div(fanLiMoney.multiply(baseRate).multiply(rate),
|
| | | baseRate.add(officialSubsidyRate).multiply(new BigDecimal(100)));
|
| | | }
|
| | |
|
| | | @Override
|
| | | public BigDecimal computeFirstTeamReward(BigDecimal money, Date placeOrderTime, UserLevelEnum userLevel) {
|
| | |
|
| | | if (userLevel != UserLevelEnum.superVIP)
|
| | | return null;
|
| | |
|
| | | BigDecimal firstRate = getTeamRewardRate(placeOrderTime, userLevel, true);
|
| | |
|
| | | if (firstRate == null)
|
| | | return null;
|
| | |
|
| | | BigDecimal reward = MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(firstRate, money), new BigDecimal(100));
|
| | |
|
| | | return reward;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 计算二级团队奖励
|
| | | * @Title: computeSecondTeamReward
|
| | | * @Description: |
| | | * @param secondTeamSubsidy 购买者上两级团队补贴
|
| | | * @param userLevel 当前用户的等级
|
| | | * @return |
| | | * BigDecimal 返回类型
|
| | | * @throws
|
| | | */
|
| | | public BigDecimal computeSecondTeamReward(BigDecimal secondTeamSubsidy, Date placeOrderTime,
|
| | | UserLevelEnum userLevel) {
|
| | | if (userLevel != UserLevelEnum.superVIP)
|
| | | return null;
|
| | | // 获取奖励比例
|
| | | BigDecimal secondRate = getTeamRewardRate(placeOrderTime, userLevel, false);
|
| | | if (secondRate == null)
|
| | | return null;
|
| | | BigDecimal secondReward = MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(secondRate, secondTeamSubsidy),
|
| | | new BigDecimal(100));
|
| | | return secondReward;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取粉丝的补贴比例
|
| | | * @Title: getSecondTeamSubsidy
|
| | | * @Description: |
| | | * @param date
|
| | | * @param buyerUserLevel
|
| | | * @param userLevel
|
| | | * @return |
| | | * BigDecimal 返回类型
|
| | | * @throws
|
| | | */
|
| | | private BigDecimal getTeamSubsidyRate(Date date, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel,
|
| | | boolean first) {
|
| | | String key = null;
|
| | | if (first)
|
| | | 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());
|
| | | BigDecimal rate = null;
|
| | | if (date != null)
|
| | | rate = hongBaoManageService.getByKeyAndMaxTime(key, date.getTime());
|
| | | else
|
| | | rate = new BigDecimal(hongBaoManageService.get(key));
|
| | | return rate;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取官方补贴比例
|
| | | * @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.getByKeyAndMaxTime(key, date.getTime());
|
| | | else
|
| | | rate = new BigDecimal(hongBaoManageService.get(key));
|
| | | return rate;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取团队奖励比例
|
| | | * @Title: getTeamRewardRate
|
| | | * @Description: |
| | | * @param date
|
| | | * @param userLevel
|
| | | * @param first
|
| | | * @return |
| | | * BigDecimal 返回类型
|
| | | * @throws
|
| | | */
|
| | | private BigDecimal getTeamRewardRate(Date date, UserLevelEnum userLevel, boolean first) {
|
| | | if (userLevel == null)
|
| | | return null;
|
| | | if (userLevel != UserLevelEnum.superVIP)
|
| | | return new BigDecimal(0);
|
| | |
|
| | | String key = null;
|
| | | if (first)
|
| | | key = "team_reward_6_10";
|
| | | else
|
| | | key = "team_reward_7_10";
|
| | | BigDecimal rate = null;
|
| | | if (date != null)
|
| | | rate = hongBaoManageService.getByKeyAndMaxTime(key, date.getTime());
|
| | | else
|
| | | rate = new BigDecimal(hongBaoManageService.get(key));
|
| | | 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; |
| | | } |
| | | |
| | | // 获取基础佣金 |
| | | 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; |
| | | } |
| | | |
| | | } |