package com.yeshi.fanli.service.impl.order.config;
|
|
import java.math.BigDecimal;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper;
|
import com.yeshi.fanli.dto.order.OrderHongBaoRateParams;
|
import com.yeshi.fanli.entity.bus.user.HongBaoManage;
|
import com.yeshi.fanli.entity.order.CommonOrder;
|
import com.yeshi.fanli.exception.order.HongBaoException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
|
@Service
|
public class HongBaoManageServiceImpl implements HongBaoManageService {
|
|
@Resource
|
private HongBaoManageMapper hongBaoManageMapper;
|
|
@Transactional
|
public void update(List<HongBaoManage> hongBaoManageList) {
|
for (HongBaoManage hongBaoManage : hongBaoManageList) {
|
hongBaoManageMapper.updateByPrimaryKeySelective(hongBaoManage);
|
}
|
}
|
|
@Cacheable(value = "homeBaoManage", key = "#p0")
|
public String get(final String key) {
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
hongBaoManage.getValue();
|
return null;
|
}
|
|
/**
|
* 根据键值与时间查询比例
|
*
|
* @param key
|
* @param time
|
* @return
|
*/
|
public BigDecimal getByKeyAndMaxTime(String key, Long time) {
|
if (time == null)
|
time = System.currentTimeMillis();
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
return null;
|
}
|
|
@Cacheable(value = "homeBaoManage", key = "'convertMap'")
|
public Map<String, String> convertMap() {
|
List<HongBaoManage> list = hongBaoManageMapper.listAll();
|
Map<String, String> map = new HashMap<String, String>();
|
for (HongBaoManage hongBaoManage : list) {
|
map.put(hongBaoManage.getKey(), hongBaoManage.getValue());
|
}
|
return map;
|
}
|
|
@Override
|
public BigDecimal getFanLiRate(long time) {
|
String key = "hongbao_goods_proportion";
|
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return null;
|
}
|
|
@Override
|
public BigDecimal getShareRate(long time) {
|
String key = "share_proportion";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取分享赚分成比例出错");
|
return null;
|
}
|
|
@Override
|
public BigDecimal getFanLiRate() {
|
return getFanLiRate(System.currentTimeMillis());
|
}
|
|
@Override
|
public BigDecimal getShareRate() {
|
return getShareRate(System.currentTimeMillis());
|
}
|
|
@Override
|
public BigDecimal getFirstInviteRate(int urank) {
|
return getFirstInviteRate(urank, System.currentTimeMillis());
|
}
|
|
@Override
|
public BigDecimal getFirstInviteRate(int urank, long time) {
|
String key = "sale_6_" + urank;
|
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getSecondInviteRate(int urank) {
|
return getSecondInviteRate(urank, System.currentTimeMillis());
|
}
|
|
@Override
|
public BigDecimal getSecondInviteRate(int urank, long time) {
|
String key = "sale_7_" + urank;
|
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getFirstShareRate(int urank) {
|
String key = "share_21_" + urank;
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, System.currentTimeMillis());
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getFirstShareRate(int urank, long time) {
|
String key = "share_21_" + urank;
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getSecondShareRate(int urank) {
|
String key = "share_22_" + urank;
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, System.currentTimeMillis());
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getSecondShareRate(int urank, long time) {
|
String key = "share_22_" + urank;
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getTLJFanLiRate() {
|
String key = "tlj_fanli_proportion";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, System.currentTimeMillis());
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取淘礼金返利分成比例出错");
|
return null;
|
}
|
|
@Override
|
public BigDecimal getTLJShareRate(long time) {
|
String key = "tlj_share_proportion";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取淘礼金分享赚分成比例出错");
|
return null;
|
}
|
|
@Override
|
public BigDecimal getInviteFirstLevelSubsidyRate(Long time) {
|
String key = "invite_subsidy_6";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getInviteSecondLevelSubsidyRate(Long time) {
|
String key = "invite_subsidy_7";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
return new BigDecimal(0);
|
}
|
|
@Override
|
public BigDecimal getVIPFanLiRate(long time) {
|
String key = "hongbao_goods_proportion_vip";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return null;
|
}
|
|
@Override
|
public BigDecimal getVIPShareRate(long time) {
|
String key = "share_proportion_vip";
|
HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
|
if (hongBaoManage == null)
|
hongBaoManage = hongBaoManageMapper.selectByKey(key);
|
if (hongBaoManage != null)
|
return new BigDecimal(hongBaoManage.getValue());
|
LogHelper.error("获取返利分成比例出错");
|
return null;
|
}
|
|
@Override
|
public BigDecimal getVIPFanLiRate() {
|
return getVIPFanLiRate(System.currentTimeMillis());
|
}
|
|
@Override
|
public BigDecimal getVIPShareRate() {
|
return getVIPShareRate(System.currentTimeMillis());
|
}
|
|
/**
|
* 获取比例
|
*
|
* @param level
|
* 0-本级 1-下级 2-下下级
|
* @param orderType
|
* @param isVip本级是否为VIP
|
* @param isWorkerVip下级是否为VIP
|
* @return
|
*/
|
public BigDecimal getRate(OrderHongBaoRateParams params) throws HongBaoException {
|
if (params == null)
|
throw new HongBaoException(1, "比例参数错误");
|
|
long time = params.getOrderCreateTime().getTime();
|
|
if (params.getLevel() == 0) {// 本级
|
|
if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {
|
if (params.isVip())
|
return getVIPFanLiRate(time);
|
else
|
return getFanLiRate(time);
|
} else {
|
if (params.isVip())
|
return getVIPShareRate(time);
|
else
|
return getShareRate(time);
|
}
|
|
} else if (params.getLevel() == 1) {// 上级
|
if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {// 自购
|
if (params.isSubsidy()) {// 补贴比例
|
if (params.isVip()) {// 下级为会员不补贴
|
return new BigDecimal("0");
|
} else {
|
return getInviteFirstLevelSubsidyRate(time);
|
}
|
} else {// 奖金比例
|
if (params.isVip()) {
|
return getByKeyAndMaxTime("new_invite_vip_6", time);
|
} else {
|
return getByKeyAndMaxTime("new_invite_6", time);
|
}
|
}
|
} else {// 分享
|
if (params.isVip()) {
|
return getByKeyAndMaxTime("new_share_vip_21", time);
|
} else {
|
return getByKeyAndMaxTime("new_share_21", time);
|
}
|
}
|
} else if (params.getLevel() == 2) {// 上上级
|
if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {// 自购
|
if (params.isSubsidy()) {// 补贴比例
|
if (params.isVip()) {// 下下级为会员不补贴
|
return new BigDecimal("0");
|
} else {
|
return getInviteSecondLevelSubsidyRate(time);
|
}
|
} else {// 奖金比例
|
if (params.isVip())
|
return new BigDecimal("0");
|
else
|
return getByKeyAndMaxTime("new_invite_7", time);
|
}
|
} else {// 分享
|
if (params.isVip())
|
return new BigDecimal("0");
|
else
|
return getByKeyAndMaxTime("new_share_22", time);
|
}
|
}
|
throw new HongBaoException(2, "未匹配到比例参数");
|
}
|
|
}
|