优化后的代码:
FreightPriceDto freightPriceDto = new FreightPriceDto();
//判断当前城市是否加运费
String key = TEMPLATE_REGION + tempId + ":" + cityId;
YxShippingTemplatesRegion yxShippingTemplatesRegion = templateRegionLocalCache.get(key);
if (yxShippingTemplatesRegion == null) {
yxShippingTemplatesRegion = yxShippingTemplatesRegionMapper.selectOne(
new LambdaQueryWrapper()
.eq(YxShippingTemplatesRegion::getTempId, tempId)
.eq(YxShippingTemplatesRegion::getCityId, cityId)
.last("limit 1")
);
//数据库不存在的数据进行标识
if (yxShippingTemplatesRegion == null) {
yxShippingTemplatesRegion = new YxShippingTemplatesRegion();
yxShippingTemplatesRegion.setIsExist(false);
}
templateRegionLocalCache.setLocalCache(key, yxShippingTemplatesRegion);
}
//如果数据库查不到数据就是包邮
if (!yxShippingTemplatesRegion.getIsExist()) {
freightPriceDto.setIsFreight(true);
freightPriceDto.setFreightPrice(BigDecimal.ZERO);
freightPriceDto.setRegionInfo(null);
return freightPriceDto;
}
freightPriceDto.setIsFreight(false);
BigDecimal quantity = new BigDecimal(productQuantity);
//根据计费方式计算运费并且判断是否首件
BigDecimal typeValue = quantity;
//判断是否首收件
if (typeValue.compareTo(yxShippingTemplatesRegion.getFirst()) < 0) {
freightPriceDto.setFreightPrice(yxShippingTemplatesRegion.getFirstPrice());
return freightPriceDto;
}
//首件费用+续件件数*续件费用
int continues = (typeValue.subtract(yxShippingTemplatesRegion.getFirst())).divide(yxShippingTemplatesRegion.getContinues()).intValue();
BigDecimal freightPrice = yxShippingTemplatesRegion.getFirstPrice().add(new BigDecimal(continues).multiply(yxShippingTemplatesRegion.getContinuePrice()));
freightPriceDto.setFreightPrice(freightPrice);
return freightPriceDto;
优化细节说明:
- 使用 == null 替换 ObjectUtil.isEmpty()
- 删除不必要的 typeValue 变量
- 使用 < 0 替换 compareTo() == -1
- 使用 Lambda 表达式简化代码
- 删除无用的 BigDecimal.ZERO 和 null 赋值
- 删除不必要的注