| | |
| | | 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.user.UserLevelUtil;
|
| | |
|
| | | @Service
|
| | | public class OrderHongBaoMoneyComputeServiceImpl implements OrderHongBaoMoneyComputeService {
|
| | |
| | | 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;
|
| | | }
|
| | |
|
| | | // 获取基础佣金
|
| | | 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;
|
| | |
|
| | | if (order.getThirdCreateTime().getTime() >= Constant.NEW_ORDER_FANLI_RULE_TIME) {
|
| | | 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;
|
| | | } else {
|
| | | BigDecimal rate = hongBaoManageService.getFanLiRate(UserLevelEnum.daRen,
|
| | | 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));
|
| | | .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
|
| | | getCommonUserLevel(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));
|
| | | .add(getOfficialSubsidyRate(order.getThirdCreateTime(),
|
| | | getCommonUserLevel(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)
|
| | |
| | |
|
| | | @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 (buyer == UserLevelEnum.superVIP || buyer == UserLevelEnum.tearcher)
|
| | | rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_vip_6", order.getThirdCreateTime().getTime());
|
| | |
|
| | | if (rate.compareTo(new BigDecimal(0)) == 0)
|
| | | return null;
|
| | |
|
| | | if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
|
| | | new BigDecimal(100));
|
| | | else if (order.getEstimate() != null)
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
|
| | | new BigDecimal(100));
|
| | | else
|
| | | return null;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public BigDecimal computeSecondInviteMoney(CommonOrder order, UserLevelEnum buyer) {
|
| | | if (buyer == UserLevelEnum.superVIP)
|
| | | if (buyer == UserLevelEnum.superVIP || buyer == UserLevelEnum.tearcher)
|
| | | return null;
|
| | |
|
| | | BigDecimal rate = hongBaoManageService.getByKeyAndMaxTime("new_invite_7", order.getThirdCreateTime().getTime());
|
| | | if (order.getState() == CommonOrder.STATE_JS || order.getState() == CommonOrder.STATE_WQ)
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.geteIncome()), new BigDecimal(100));
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
|
| | | new BigDecimal(100));
|
| | | else if (order.getEstimate() != null)
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, order.getEstimate()), new BigDecimal(100));
|
| | | return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
|
| | | new BigDecimal(100));
|
| | | else
|
| | | return null;
|
| | | }
|
| | |
| | | public BigDecimal computeFirstTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
|
| | | UserLevelEnum userLevel) {
|
| | | BigDecimal rate = getTeamSubsidyRate(placeOrderTime, buyerUserLevel, userLevel, true);
|
| | | if (rate == null)
|
| | | if (rate == null || rate.compareTo(new BigDecimal(0)) == 0)
|
| | | return null;
|
| | | BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(placeOrderTime.getTime());
|
| | | BigDecimal officialSubsidyRate = getOfficialSubsidyRate(placeOrderTime, buyerUserLevel, false);
|
| | |
| | | public BigDecimal computeSecondTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
|
| | | UserLevelEnum userLevel) {
|
| | | BigDecimal rate = getTeamSubsidyRate(placeOrderTime, buyerUserLevel, userLevel, false);
|
| | | if (rate == null)
|
| | | if (rate == null || rate.compareTo(new BigDecimal(0)) == 0)
|
| | | return null;
|
| | | BigDecimal baseRate = hongBaoManageService.getBaseFanliRate(placeOrderTime.getTime());
|
| | | BigDecimal officialSubsidyRate = getOfficialSubsidyRate(placeOrderTime, buyerUserLevel, false);
|
| | | return MoneyBigDecimalUtil.div(fanLiMoney.multiply(baseRate).multiply(rate),
|
| | | baseRate.add(officialSubsidyRate).multiply(new BigDecimal(100)));
|
| | | }
|
| | |
|
| | | @Override
|
| | | public BigDecimal 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;
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | * BigDecimal 返回类型
|
| | | * @throws
|
| | | */
|
| | | private BigDecimal getTeamSubsidyRate(Date date, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel,
|
| | | boolean first) {
|
| | | @Override
|
| | | public BigDecimal getTeamSubsidyRate(Date date, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel,
|
| | | boolean direct) {
|
| | | String key = null;
|
| | | if (first)
|
| | | if (direct)
|
| | | key = String.format("team_subsidy_6_pre_%s_%s", buyerUserLevel.getLevel(), userLevel.getLevel());
|
| | | else
|
| | | key = String.format("team_subsidy_7_pre_%s_%s", buyerUserLevel.getLevel(), userLevel.getLevel());
|
| | |
| | | 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());
|