diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java index 8c9140d0..a522ca10 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java @@ -417,44 +417,7 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl 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 0) { // 没有一个满足起送距离和起送金额的规则订单 String canNotDeliveryReason = storeName + "订单不在配送范围内或未达起送金额,请检查!"; @@ -573,13 +536,55 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl 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, ""); } }