Lunar物流系统开发教程:实现表费率运输和区域定价

【免费下载链接】lunar An open-source package that brings the power of modern headless e-commerce functionality to Laravel. 【免费下载链接】lunar 项目地址: https://gitcode.com/gh_mirrors/lun/lunar

Lunar是一个开源的Laravel电商解决方案,它提供了现代化的无头电商功能。本教程将详细介绍如何在Lunar中实现表费率运输和区域定价功能,帮助你为不同地区的客户设置灵活的运费计算规则。

1. 表费率运输系统概述

表费率运输(Table Rate Shipping)是一种基于预设规则计算运费的方法,支持根据目的地、重量、订单金额等多种条件设置不同的运费率。Lunar通过table-rate-shipping包提供了完整的表费率运输解决方案,位于packages/table-rate-shipping/目录下。

该系统核心功能包括:

  • 多维度运费计算规则(按区域、重量、订单金额等)
  • 灵活的区域划分(国家、州/省、邮政编码)
  • 客户组特定定价
  • 运费 tax 计算支持

2. 配置表费率运输

首先需要确保表费率运输功能已启用。打开配置文件packages/table-rate-shipping/config/shipping-tables.php,确认以下设置:

return [
    'enabled' => env('LUNAR_SHIPPING_TABLES_ENABLED', true),
    
    /*
     * 运费税率计算方法
     * 'default' 使用系统默认税率
     * 'highest' 选择购物车中最高税率
     */
    'shipping_rate_tax_calculation' => 'default',
];

3. 实现区域定价

3.1 了解运输区域解析器

Lunar使用ShippingZoneResolver类来根据客户地址确定适用的运输区域。查看packages/table-rate-shipping/src/Resolvers/ShippingZoneResolver.php了解其工作原理:

// 关键代码片段
public function get(): Collection
{
    $query = ShippingZone::query()->whereType('unrestricted');
    
    // 根据国家、州、邮政编码筛选运输区域
    // ...
}

区域解析逻辑支持三种匹配类型:

  • 国家级别匹配
  • 州/省级别匹配
  • 邮政编码级别匹配

3.2 创建运输区域

在Lunar系统中,运输区域(Shipping Zone)是运费计算的基础。通过后台管理界面或代码创建区域:

  1. 无限制区域:对所有客户开放
  2. 国家区域:限制特定国家
  3. 州/省区域:限制特定州或省份
  4. 邮政编码区域:限制特定邮政编码范围

4. 设置运费计算规则

4.1 运费计算驱动

Lunar提供多种运费计算驱动,位于packages/table-rate-shipping/src/Drivers/ShippingMethods/目录:

  • FlatRate.php:固定费率计算
  • ShipBy.php:基于订单金额或重量的阶梯费率
  • Collection.php:自提方式(零运费)

以阶梯费率为例,ShipBy.php实现了基于订单金额的多段定价:

$pricing = Pricing::for($shippingRate)->customerGroups($customerGroups)->qty($tier)->get();
$prices = $pricing->priceBreaks;

4.2 配置客户组特定定价

Lunar支持为不同客户组设置不同的运费率,在ShipBy.php中可以看到相关实现:

if (! $pricing->customerGroupPrices->isEmpty()) {
    $prices = $pricing->customerGroupPrices;
}

这允许你为批发客户、零售客户或VIP客户设置差异化的运费策略。

5. 高级功能与最佳实践

5.1 排除特定产品

使用ShippingExclusion模型可以排除某些产品应用特定运费规则,位于packages/table-rate-shipping/src/Models/ShippingExclusion.php

/**
 * Return the shipping zone relationship.
 */
public function zone()
{
    return $this->belongsTo(ShippingZone::class);
}

5.2 邮政编码解析

Lunar能够智能解析邮政编码,支持部分匹配和范围匹配:

$postcodeParts = (new PostcodeResolver)->getParts(
    $this->postcodeLookup->postcode
);
$query->whereIn('postcode', $postcodeParts);

6. 总结

通过Lunar的表费率运输系统,你可以轻松实现复杂的物流定价策略。关键步骤包括:

  1. 配置运输系统基础设置
  2. 创建地理区域划分
  3. 设置多维度运费计算规则
  4. 应用客户组特定定价
  5. 配置产品排除规则

利用packages/table-rate-shipping/提供的功能,你可以为电商平台构建灵活且强大的物流解决方案,满足不同地区和客户群体的需求。

如需进一步定制,可以扩展ShippingZoneResolver或创建自定义的运费计算驱动,以适应特定的业务场景。

【免费下载链接】lunar An open-source package that brings the power of modern headless e-commerce functionality to Laravel. 【免费下载链接】lunar 项目地址: https://gitcode.com/gh_mirrors/lun/lunar

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐