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.Constant;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
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;
|
}
|
|
// 获取基础佣金
|
private BigDecimal getBaseCommission(CommonOrder order) {
|
|
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(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 (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 (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) {
|
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, getBaseCommission(order)),
|
new BigDecimal(100));
|
else if (order.getEstimate() != null)
|
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 || 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, getBaseCommission(order)),
|
new BigDecimal(100));
|
else if (order.getEstimate() != null)
|
return MoneyBigDecimalUtil.div(MoneyBigDecimalUtil.mul(rate, getBaseCommission(order)),
|
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 || 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 computeSecondTeamSubsidy(BigDecimal fanLiMoney, Date placeOrderTime, UserLevelEnum buyerUserLevel,
|
UserLevelEnum userLevel) {
|
BigDecimal rate = getTeamSubsidyRate(placeOrderTime, buyerUserLevel, userLevel, false);
|
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)));
|
}
|
|
/**
|
* 获取粉丝的补贴比例
|
* @Title: getSecondTeamSubsidy
|
* @Description:
|
* @param date
|
* @param buyerUserLevel
|
* @param userLevel
|
* @return
|
* BigDecimal 返回类型
|
* @throws
|
*/
|
@Override
|
public BigDecimal getTeamSubsidyRate(Date date, UserLevelEnum buyerUserLevel, UserLevelEnum userLevel,
|
boolean direct) {
|
String key = null;
|
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());
|
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;
|
}
|
|
}
|