优化代码:提高运费计算效率

这段代码主要用于计算商品的运费。以下提供一些优化建议,可以有效提高代码的执行效率:

1. 使用批量查询代替循环单个查询:

  • 减少数据库访问次数:将循环中查询商品信息的代码改为一次性批量查询商品信息,例如使用 iProductApi.muchProductDetail() 获取多个商品详情信息。
  • 减少远程调用接口次数:将循环中查询模板信息的代码改为一次性批量查询模板信息,例如使用 yxShippingTemplatesRegionMapper.selectList() 查询多个模板信息。
  • 减少缓存访问次数:将循环中获取缓存数据的代码改为一次性批量获取缓存数据,例如使用 cache.getMultiple(PRODUCT_DETAIL_CACHE, productIds) 获取多个商品信息。

2. 避免重复查询:

  • 将模板信息查询放在循环外部进行:在循环开始前查询所有需要的模板信息,避免在循环中重复查询。
  • 将商品信息查询放在循环外部进行:在循环开始前查询所有需要的商品信息,避免在循环中重复查询。

3. 使用缓存策略:

  • 使用缓存保存查询结果:将查询结果缓存起来,避免重复查询,例如将商品信息和模板信息缓存到本地缓存或分布式缓存中。

4. 重构代码:

  • 提取公共方法:将重复的代码抽取成方法,提高代码复用性和可读性。例如,可以将获取商品信息的逻辑提取成一个单独的方法。

示例代码优化:

List<FreightPriceDto> freightPriceDtoList = new LinkedList<>();
Map<Long, Integer> productMap = new LinkedHashMap<>();
List<Long> notTempIdProduct = new LinkedList<>();

// 1. 批量查询商品信息
Map<Long, ProductVo> productDetails = iProductApi.muchProductDetail(productIds, 1);

// 2. 使用缓存保存商品信息
productDetails.forEach((productId, productVo) -> {
  if (productVo != null && productVo.getProductInfo() != null && productVo.getProductInfo().getTempId() != null) {
    productMap.put(productId, productVo.getProductInfo().getTempId());
  } else {
    notTempIdProduct.add(productId);
  }
});

// 3. 查询模板信息
List<YxShippingTemplatesRegion> yxShippingTemplatesRegion = templateRegionListLocalCache.get(TEMPLATE_REGION + tempId);

// 4. 使用缓存保存模板信息
if (CollectionUtil.isEmpty(yxShippingTemplatesRegion)) {
  LambdaQueryWrapper<YxShippingTemplatesRegion> wrapper = new LambdaQueryWrapper<>();
  wrapper.eq(YxShippingTemplatesRegion::getTempId, tempId);
  yxShippingTemplatesRegion = yxShippingTemplatesRegionMapper.selectList(wrapper);
  templateRegionListLocalCache.setLocalCache(key, yxShippingTemplatesRegion);
}

// 5. 循环计算运费
for (Long productId : productIds) {
  FreightPriceDto freightPriceDto = new FreightPriceDto();
  freightPriceDto.setProductId(productId);
  freightPriceDto.setTemplatesRegions(yxShippingTemplatesRegion);
  freightPriceDto.setRegionInfo(productUnDelivery(productMap.get(productId)));
  freightPriceDtoList.add(freightPriceDto);
}

return freightPriceDtoList;

优化效果:

  • 减少数据库访问次数和远程调用接口次数,提高代码执行效率。
  • 使用缓存保存查询结果,减少重复查询次数,进一步提高效率。
  • 代码更加简洁易懂,易于维护。

注意:

  • 缓存策略需要根据实际情况进行调整,例如缓存大小、失效时间等。
  • 批量查询和缓存的使用需要考虑数据量的大小和系统资源的限制。
  • 代码优化需要结合具体的业务场景进行分析和设计。
优化代码:提高运费计算效率

原文地址: https://www.cveoy.top/t/topic/ovp6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录