优化日志
This commit is contained in:
parent
24c131802c
commit
67f55c9df1
@ -417,44 +417,7 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl<S
|
||||
logger.debug(storeName + "下单时,店铺与收货地址经纬度是{},{},{},{} 距离为{}米。", storeLng, storeLat, orderLongitude, orderLatitude, distance);
|
||||
|
||||
// ### 基础配送费计算
|
||||
BigDecimal deliveryBaseFee = transportBase.getDelivery_base_fee();
|
||||
// 只能大于等于0
|
||||
if (deliveryBaseFee.compareTo(BigDecimal.ZERO) < 0) {
|
||||
deliveryBaseFee = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
// 每增加一个距离累加运费
|
||||
if (transportBase.getDistance_increase_km() != null && transportBase.getDistance_increase_fee() != null && distance > transportBase.getDistance_base() * 1000) {
|
||||
// 实际配送距离超出基础距离,单位km
|
||||
BigDecimal diffDistanceM = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(distance - transportBase.getDistance_base() * 1000).divide(BigDecimal.valueOf(1000)));
|
||||
// 倍数
|
||||
BigDecimal times = BigDecimal.ZERO;
|
||||
if (transportBase.getDistance_increase_km() > 0 && diffDistanceM.intValue() > transportBase.getDistance_increase_km()) {
|
||||
// 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3
|
||||
times = NumberUtil.div(diffDistanceM, transportBase.getDistance_increase_km()).setScale(0, RoundingMode.UP);
|
||||
}
|
||||
|
||||
// 超过基础运费距离后,累加上运费
|
||||
deliveryBaseFee = deliveryBaseFee.add(transportBase.getDistance_increase_fee().multiply(times));
|
||||
}
|
||||
|
||||
// 每增加一个重量累加运费(重量暂时忽略,配置的时候设置0)
|
||||
if (transportBase.getWeight_increase_kg() != null && transportBase.getWeight_increase_fee() != null && weightGram > transportBase.getWeight_base() * 1000) {
|
||||
// 实际配送重量超出基础重量,单位kg
|
||||
BigDecimal diffWeightKg = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(weightGram - transportBase.getWeight_base() * 1000).divide(BigDecimal.valueOf(1000)));
|
||||
// 倍数
|
||||
BigDecimal times = BigDecimal.ZERO;
|
||||
if (transportBase.getWeight_increase_kg() > 0 && diffWeightKg.intValue() > transportBase.getWeight_increase_kg()) {
|
||||
// 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3
|
||||
times = NumberUtil.div(diffWeightKg, transportBase.getDistance_increase_km()).setScale(0, RoundingMode.UP);
|
||||
}
|
||||
|
||||
deliveryBaseFee = deliveryBaseFee.add(transportBase.getWeight_increase_fee().multiply(times));
|
||||
}
|
||||
|
||||
logger.debug(storeName + "下单时,因超出基础距离或重量,所以额外增加{}元运费。", deliveryBaseFee);
|
||||
// #### 基础配送费计算完毕
|
||||
|
||||
BigDecimal deliveryBaseFee = Convert.toBigDecimal(transportBase.getDelivery_base_fee(), BigDecimal.ZERO);
|
||||
|
||||
// 优惠(减免)的配送费(重要)
|
||||
BigDecimal reduceDeliveryFee = BigDecimal.ZERO;
|
||||
@ -475,7 +438,7 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl<S
|
||||
for (ShopStoreSameCityTransport transport : transportList) {
|
||||
DeliveryFeeResultDTO deliveryFeeResultDTO = new DeliveryFeeResultDTO();
|
||||
deliveryFeeResultDTO.setId(transport.getTransport_id());
|
||||
logger.debug(storeName + "下单时,配送范围为{}米内,店铺与收货地址距离是{}米。", distance, transport.getMax_delivery_radius());
|
||||
logger.debug(storeName + "下单时,配送范围/收货实际距离:{}/{}米。", transport.getMax_delivery_radius(), distance);
|
||||
|
||||
// 判断订单距离在不在配送范围内?
|
||||
if (transport.getMax_delivery_radius() < distance) {
|
||||
@ -554,7 +517,7 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl<S
|
||||
|
||||
// logger.debug(storeName + "下单时,根据商家运费设置规则减免{}元运费", reduceDeliveryFee);
|
||||
// logger.debug(storeName + "下单时,不符合规则的:\n {}\n符合规则的:{}", JSONUtil.toJsonStr(noPassed), JSONUtil.toJsonStr(passed));
|
||||
|
||||
boolean canDelivery = true;
|
||||
if (passed.size() == 0 && noPassed.size() > 0) {
|
||||
// 没有一个满足起送距离和起送金额的规则订单
|
||||
String canNotDeliveryReason = storeName + "订单不在配送范围内或未达起送金额,请检查!";
|
||||
@ -573,13 +536,55 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl<S
|
||||
if (canThrow) {
|
||||
throw new ApiException(I18nUtil._(canNotDeliveryReason));
|
||||
}
|
||||
return new SameCityDeliveryFeeRespDTO(false, false, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, canNotDeliveryReason);
|
||||
|
||||
canDelivery = false;
|
||||
return new SameCityDeliveryFeeRespDTO(canDelivery, false, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, canNotDeliveryReason);
|
||||
}
|
||||
|
||||
// ### 额外配送费计算开始
|
||||
if (canDelivery) {
|
||||
// 能配送的情况下,才计算额外增加了什么运费。
|
||||
|
||||
// 每增加一个距离累加运费
|
||||
if (transportBase.getDistance_increase_km() != null && transportBase.getDistance_increase_fee() != null && distance > transportBase.getDistance_base() * 1000) {
|
||||
// 实际配送距离超出基础距离,单位km
|
||||
BigDecimal diffDistanceM = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(distance - transportBase.getDistance_base() * 1000).divide(BigDecimal.valueOf(1000)));
|
||||
// 倍数
|
||||
BigDecimal times = BigDecimal.ZERO;
|
||||
if (transportBase.getDistance_increase_km() > 0 && diffDistanceM.intValue() > transportBase.getDistance_increase_km()) {
|
||||
// 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3
|
||||
times = NumberUtil.div(diffDistanceM, transportBase.getDistance_increase_km()).setScale(0, RoundingMode.UP);
|
||||
}
|
||||
|
||||
// 超过基础运费距离后,累加上运费
|
||||
deliveryBaseFee = deliveryBaseFee.add(transportBase.getDistance_increase_fee().multiply(times));
|
||||
}
|
||||
|
||||
// 每增加一个重量累加运费(重量暂时忽略,配置的时候设置0)
|
||||
if (transportBase.getWeight_increase_kg() != null && transportBase.getWeight_increase_fee() != null && weightGram > transportBase.getWeight_base() * 1000) {
|
||||
// 实际配送重量超出基础重量,单位kg
|
||||
BigDecimal diffWeightKg = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(weightGram - transportBase.getWeight_base() * 1000).divide(BigDecimal.valueOf(1000)));
|
||||
// 倍数
|
||||
BigDecimal times = BigDecimal.ZERO;
|
||||
if (transportBase.getWeight_increase_kg() > 0 && diffWeightKg.intValue() > transportBase.getWeight_increase_kg()) {
|
||||
// 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3
|
||||
times = NumberUtil.div(diffWeightKg, transportBase.getDistance_increase_km()).setScale(0, RoundingMode.UP);
|
||||
}
|
||||
|
||||
deliveryBaseFee = deliveryBaseFee.add(transportBase.getWeight_increase_fee().multiply(times));
|
||||
}
|
||||
|
||||
if (deliveryBaseFee != null && deliveryBaseFee.compareTo(BigDecimal.ZERO) > 0) {
|
||||
logger.debug(storeName + "下单时,超出基础距离、重量的额外配送费:{}元。", deliveryBaseFee);
|
||||
}
|
||||
}
|
||||
// #### 额外配送费计算完毕
|
||||
|
||||
|
||||
// 配送费不能负数,就是说优惠运费不能高于基础运费
|
||||
BigDecimal deliveryFee = deliveryBaseFee.subtract(reduceDeliveryFee);
|
||||
boolean isFee = deliveryFee.compareTo(BigDecimal.ZERO) <= 0;
|
||||
|
||||
return new SameCityDeliveryFeeRespDTO(true, isFee, deliveryBaseFee, reduceDeliveryFee, isFee ? BigDecimal.ZERO : deliveryFee, "");
|
||||
return new SameCityDeliveryFeeRespDTO(canDelivery, isFee, deliveryBaseFee, reduceDeliveryFee, isFee ? BigDecimal.ZERO : deliveryFee, "");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user