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, buyerUserLevel, 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, 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;
|
}
|
|
/**
|
* 获取粉丝的补贴比例
|
* @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;
|
}
|
|
}
|