Authored by chenchao

fetch platform fee from config in DB

... ... @@ -75,7 +75,8 @@ public class CacheKeyBuilder {
PRESALE_THRESHOLD("ufo:order:presale:threshold", ""),
ORDER_CODE_RULE("ufo:order:code:rule", ""),
SELLER_GOODS_FEE_RATE("ufo:order:seller:goods:service:feeRate", "")
SELLER_GOODS_FEE_RATE("ufo:order:seller:goods:service:feeRate", ""),
SELLER_GOODS_PLATFORM_FEE("ufo:order:seller:goods:platform:fee", "")
;
private String fix;
... ...
... ... @@ -288,4 +288,19 @@ public class MetaConfigService {
return sfrMap;
}
public Map<String,PlatformFeeDto> getPlatformFeeMap(){
CacheKeyBuilder.KeyTemp kt = CacheKeyBuilder.KeyTemp.SELLER_GOODS_PLATFORM_FEE;
RedisKeyBuilder rkb = kt.builderKeyOnlyFixed();
final String key = MetaConfigKey.SELLER_GOODS_PLATFORM_FEE;
String configVal = new DataProcesser(rkb, key, ExpiredTime.ORDER_BASE_CONFIG).getConfigVal();
Map<String,PlatformFeeDto> pfMap = new HashMap<String,PlatformFeeDto>(10);
try{
pfMap = JSONObject.parseObject(configVal, new TypeReference<Map<String,PlatformFeeDto>>(){});
}catch (Exception ex){
logger.warn("in getPlatformFeeMap parseObject fail, metaVal {}", configVal, ex);
}
return pfMap;
}
}
... ...
... ... @@ -10,6 +10,8 @@ import org.springframework.beans.factory.annotation.Value;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Supplier;
/**
* Created by chao.chen on 2019/2/1.
... ... @@ -105,8 +107,18 @@ public abstract class AbsSellerOrderComputeHandler implements OrderComputeHandle
protected PlatformFeeDto calPlatformFee(BigDecimal price, ServiceFeeRate serviceFeeRate, PlatformFeeDto ppf){
BigDecimal goodsServiceRate = serviceFeeRate.getGoodsPaymentRate();
PlatformFeeDto platformFee = new PlatformFeeDto();
BigDecimal appraiseFee = ppf!=null && ppf.getAppraiseFee() != null ? ppf.getAppraiseFee() : new BigDecimal(getAppraiseFee());
BigDecimal packageFee = ppf!=null && ppf.getPackageFee() != null ? ppf.getPackageFee() : new BigDecimal(getPackageFee());
Supplier<PlatformFeeDto> plaformFeeConfigSupplier = ()->getPlatformFeeDtoConfig();
BigDecimal appraiseFee;
BigDecimal packageFee;
if (ppf == null){
PlatformFeeDto pfc = plaformFeeConfigSupplier.get();
appraiseFee = pfc.getAppraiseFee();
packageFee = pfc.getPackageFee();
}else{
appraiseFee = ppf.getAppraiseFee() != null ? ppf.getAppraiseFee() : plaformFeeConfigSupplier.get().getAppraiseFee();
packageFee = ppf.getPackageFee() != null ? ppf.getPackageFee() : plaformFeeConfigSupplier.get().getPackageFee();
}
BigDecimal serviceFee = price.multiply(goodsServiceRate);
platformFee.setAppraiseFee(halfUp(appraiseFee));
... ... @@ -118,13 +130,14 @@ public abstract class AbsSellerOrderComputeHandler implements OrderComputeHandle
return platformFee;
}
public Double getAppraiseFee() {
return appraiseFee;
public PlatformFeeDto getPlatformFeeDtoConfig(){
PlatformFeeDto platformFeeDto = new PlatformFeeDto();
platformFeeDto.setPackageFee(new BigDecimal(packageFee));
platformFeeDto.setAppraiseFee(new BigDecimal(appraiseFee));
return platformFeeDto;
}
public Double getPackageFee() {
return packageFee;
}
/**
* add input
... ...
... ... @@ -3,6 +3,7 @@ package com.yohoufo.order.service.seller.overseas;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohoufo.order.model.dto.BuyerPenalty;
import com.yohoufo.order.model.dto.EarnestMoney;
import com.yohoufo.order.model.dto.PlatformFeeDto;
import com.yohoufo.order.model.dto.ServiceFeeRate;
import com.yohoufo.order.service.impl.MetaConfigService;
import com.yohoufo.order.service.seller.AbsSellerOrderComputeHandler;
... ... @@ -12,6 +13,7 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
/**
... ... @@ -69,5 +71,21 @@ public class HongkongInStockComputeHandler extends AbsSellerOrderComputeHandler
return null;
}
@Override
public PlatformFeeDto getPlatformFeeDtoConfig() {
SkupType skupType = getSkupType();
Map<String,PlatformFeeDto> pfm = metaConfigService.getPlatformFeeMap();
PlatformFeeDto pf = pfm.get(skupType.getLocalCacheKey());
if (pf == null){
pf = buildDefaultPlatformFeeDto();
}
return pf;
}
private PlatformFeeDto buildDefaultPlatformFeeDto(){
PlatformFeeDto dpf = new PlatformFeeDto();
dpf.setAppraiseFee(new BigDecimal(15));
dpf.setPackageFee(new BigDecimal(6));
return dpf;
}
}
... ...