Authored by tanling

Merge branch 'test6.9.10' of http://git.yoho.cn/ufo/yohoufo-fore into test6.9.10

... ... @@ -11,6 +11,7 @@ import com.yohoufo.order.service.support.SellerPlatformServiceFeeSupport;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.OrderAssist;
import com.yohoufo.order.utils.SellerGoodsHelper;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
... ... @@ -29,33 +30,11 @@ public class GoodsAmountService {
@Autowired
private SellerPlatformServiceFeeSupport sellerPlatformServiceFeeSupport;
@Autowired
private OrderDynamicConfig orderDynamicConfig;
private static Comparator<GoodsServiceFeeRateWrapper> buildGoodsServiceFeeRateWrapperComp(){
return (GoodsServiceFeeRateWrapper o1, GoodsServiceFeeRateWrapper o2) -> {
BigDecimal o1gpr = o1.getGoodsPaymentRate(), o2gpr = o2.getGoodsPaymentRate();
if (o1gpr == null){
if (o2gpr == null){
return 0;
}else{
return 1;
}
}else{
if (o2gpr == null){
return -1;
}else {
return o1gpr.compareTo(o2gpr);
}
}
};
}
public SellerOrderComputeResult getGoodsServiceFeeRate(int uid, int storageId, PrdPrice prdPrice, SkupType skupType){
public SellerOrderComputeResult getGoodsServiceFeeRate(int uid, int storageId, PrdPrice prdPrice, SkupType skupType) {
logger.info("in GoodsAmountService.getGoodsServiceFeeRate uid {}, storageId {},prdPrice {} skupType {}",
uid, storageId, prdPrice, skupType);
ServiceFeeRate rate = orderDynamicConfig.getServiceFeeRate(skupType);
... ... @@ -69,79 +48,48 @@ public class GoodsAmountService {
return highPriority;
}
}
List<ServiceFeeRate> allConfig = Lists.newArrayListWithCapacity(4);
List<ServiceFeeRate> allConfig = Lists.newArrayListWithCapacity(3);
//build One User One GoodsType 卖家不同商品类型的指定费率
allConfig.add(buildOneUserOneGoodsType(uid, skupType,rate));
CollectionUtils.addIgnoreNull(allConfig, buildOneUserOneGoodsType(uid, skupType, rate));
// build by skn
allConfig.add(buildWithSkn(prdPrice,rate));
CollectionUtils.addIgnoreNull(allConfig, buildWithSkn(prdPrice, rate));
//build by goods type 不同商品类型指定的费率
allConfig.add(buildWithGoodsType(rate));
CollectionUtils.addIgnoreNull(allConfig, buildWithGoodsType(rate));
logger.info("in GoodsAmountService.getGoodsServiceFeeRate uid {}, storageId {}, skupType {} prdPrice {} allConfig {}",
uid, storageId, skupType, prdPrice, allConfig);
// Optional<GoodsServiceFeeRateWrapper> minGSFRW = allConfig.stream()
// .min(buildGoodsServiceFeeRateWrapperComp());
SellerOrderComputeResult socr = new SellerOrderComputeResult();
// if(minGSFRW.isPresent()) {
// rate.setGoodsPaymentRate(minGSFRW.get().getGoodsPaymentRate());
// }
socr.setServiceFeeRates(allConfig);
return socr;
}
public GoodsServiceFeeRateWrapper buildWithSkn(PrdPrice prdPrice,ServiceFeeRate rate) {
GoodsServiceFeeRateWrapper gsfrw = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.SKN,rate);
if (Objects.nonNull(prdPrice)) {
gsfrw.setGoodsPaymentRate(prdPrice.getGoodsPaymentRateOfSkn());
double min = Objects.isNull(prdPrice.getGoodsPaymentMinPriceOfSkn()) ?
0 : prdPrice.getGoodsPaymentMinPriceOfSkn().doubleValue();
double max = Objects.isNull(prdPrice.getGoodsPaymentMaxPriceOfSkn()) ?
1000000 : prdPrice.getGoodsPaymentMaxPriceOfSkn().doubleValue();
gsfrw.setGoodsPaymentPriceRange(PriceRange.builder().min(min).max(max).build());
private GoodsServiceFeeRateWrapper buildWithSkn(PrdPrice prdPrice, ServiceFeeRate rate) {
if (Objects.isNull(prdPrice) || Objects.isNull(prdPrice.getGoodsPaymentRateOfSkn())) {
return null;
}
GoodsServiceFeeRateWrapper gsfrw = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.SKN, rate);
gsfrw.setGoodsPaymentRate(prdPrice.getGoodsPaymentRateOfSkn());
double min = Objects.isNull(prdPrice.getGoodsPaymentMinPriceOfSkn()) ?
0 : prdPrice.getGoodsPaymentMinPriceOfSkn().doubleValue();
double max = Objects.isNull(prdPrice.getGoodsPaymentMaxPriceOfSkn()) ?
1000000 : prdPrice.getGoodsPaymentMaxPriceOfSkn().doubleValue();
gsfrw.setGoodsPaymentPriceRange(PriceRange.builder().min(min).max(max).build());
return gsfrw;
}
public GoodsServiceFeeRateWrapper buildWithGoodsType(ServiceFeeRate rate){
GoodsServiceFeeRateWrapper gsfrw = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.GOODS_TYPE,rate);
gsfrw.setGoodsPaymentRate(rate == null ? null : rate.getGoodsPaymentRate());
return gsfrw;
private GoodsServiceFeeRateWrapper buildWithGoodsType(ServiceFeeRate rate) {
return new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.GOODS_TYPE, rate);
}
public GoodsServiceFeeRateWrapper buildOneUserOneGoodsType(int uid, SkupType skupType,ServiceFeeRate rate){
private GoodsServiceFeeRateWrapper buildOneUserOneGoodsType(int uid, SkupType skupType, ServiceFeeRate rate) {
BigDecimal feeRate = sellerPlatformServiceFeeSupport.getPlatformServiceFeeRate(uid, skupType);
GoodsServiceFeeRateWrapper gsfrw = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.ONE_USER_ONE_GOODS_TYPE,rate);
if (Objects.isNull(feeRate)) {
return null;
}
GoodsServiceFeeRateWrapper gsfrw = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.ONE_USER_ONE_GOODS_TYPE, rate);
gsfrw.setGoodsPaymentRate(feeRate);
return gsfrw;
}
public static void main(String[] args) {
ServiceFeeRate rate = new ServiceFeeRate();
rate.setGoodsPaymentRate(BigDecimal.valueOf(0.05));
List<GoodsServiceFeeRateWrapper> allConfig = Lists.newArrayListWithCapacity(4);
GoodsServiceFeeRateWrapper gsfrw4 = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.GOODS_TYPE,rate);
gsfrw4.setGoodsPaymentRate(new BigDecimal(0.045D));
allConfig.add(gsfrw4);
GoodsServiceFeeRateWrapper gsfrw3 = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.ONE_USER_ONE_SKN,rate);
//gsfrw3.setGoodsPaymentRate(BigDecimal.ZERO);
allConfig.add(gsfrw3);
GoodsServiceFeeRateWrapper gsfrw2 = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.ONE_USER_ONE_GOODS_TYPE,rate);
gsfrw2.setGoodsPaymentRate(new BigDecimal(0.05D));
allConfig.add(gsfrw2);
GoodsServiceFeeRateWrapper gsfrw1 = new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.SKN,rate);
allConfig.add(gsfrw1);
//
GoodsServiceFeeRateWrapper minGSFRW = allConfig.stream()
.min(buildGoodsServiceFeeRateWrapperComp())
.orElse(new GoodsServiceFeeRateWrapper(GoodsServiceFeeRateDimension.GOODS_TYPE,rate));
System.out.println("test getGoodsServiceFeeRate -> " + minGSFRW);
}
}
... ...