gtd / simple-order
There is no license information available for the latest version (dev-master) of this package.
laravel order
dev-master
2019-12-06 07:29 UTC
Requires
- laravel/framework: ~5.5||~6.0
This package is auto-updated.
Last update: 2024-11-13 11:50:35 UTC
README
简单的订单模块实现,通过商品单价及数量确认订单数据。 并可对订单某项目的某个单位做单独处理,如金额的调整(优惠券)等, 可自动由下至上计算整个订单金额
注:暂不涉及维护订单状态/运输状态/支付状态
安装
引入
composer require gtd/simple-order
发布迁移文件
php artisan vendor:publish --tag=simple-order-migrations
[可选]发布配置文件
php artisan vendor:publish --tag=simple-order-config
使用
在用户模型引入HasOrder
Trait
use Illuminate\Database\Eloquent\Model;
use Gtd\SimpleOrder\Traits\HasOrder;
class User extends Model
{
use HasOrder;
}
创建订单
$order = $user->createOrder();
$order = $user->createOrder($attributes);
自定义订单号生成规则
可在AppServiceProvider
的boot
方法中添加如下定义:
public function boot()
{
\Gtd\SimpleOrder\Models\Order::setNumberGenerate(function () {
return \Str::random(30);
});
}
增加订单子项目
$item1 = $order->addItem(Product::find(1));
$item2 = $order->addItem(Product::find(2), 5000);
$item3 = $order->addItem(Product::find(3), 5000, 2);
addItem
(添加项目)参数说明:
该方法创建订单子项目的同时会创建对应数量的最小单位,方便后续对最小单位的操作
$orderable
商品详情 数组或者模型实例$orderable_unit_price
商品单价, 默认值0$quantity
商品数量,默认值1
更新子项目
$item1->update($attributes);
更新单价
$item1->updateUnitPrice(100);
更新数量
注:数量更新后会重新创建单位,之前如果对单位分配了调整金额将会丢失
$item1->updateQuantity(2);
设置金额调整
如运费,优惠券,商品税等调整金额
// 作用至订单
$order->addAdjustment('运费', 10);
// 作用至子项目
$item1->addAdjustment('优惠券', '-3');
$item2->addAdjustment('折扣', '-5');
$item3->addUnIncludedAdjustment('商品税', 5);
// 作用至最小单位
$item->units()->first()->addAdjustment('第二件半价', '-10');
addAdjustment
(新增调整金额)参数说明:
$label
标注,调整金额标注,可传递字符串或模型实例$amount
金额, 默认0
addUnIncludedAdjustment
(新增不纳入最终计算的调整金额)参数说明:
此方法新增的调整金额included字段值为false,将不会在计算订单金额时引入,如商品税等金额一般由商家承担,却在小票中需要打印
$label
标注,调整金额标注,可传递字符串或模型实例$amount
金额, 默认0
订单金额计算
在对订单的子项目或者最小单位进行 新增,删除,修改都将会影响到订单价格
$order->calculator();
查询
获取订单下所有数据
$order->loadTrunk()->toArray();
// 等同于:
$order->load([
'amount', // 金额详情
'adjustments', // 调整金额
'items.amount', // 子项目金额详情
'items.adjustments', // 子项目调整金额
'items.units.amount', // 子项目单位金额详情
'items.units.adjustments' // 子项目单位调整金额
])->toArray();
通过订单号查找订单
use Gtd\SimpleOrder\Models\Order;
Order::findByNumber($number);
获取订单的子项目
$order->items;
获取项目的子单位
$item->units;
获取 订单/项目/单位 的调整金额
$order->adjustments;
$item->adjustments;
$unit->adjustments;
获取 订单/项目/单位 的最终金额
$order->amount;
$item->amount;
$unit->amount;
获取 调整金额/最终金额 所属模型
$adjustment->belong;
$amount->belong;
触发事件
Event | 描述 | 参数 |
---|---|---|
OrderCreated | 订单创建完成 | order:订单实例 |
完整示例🌰
// 创建订单
$order = $user->createOrder();
// 创建订单项目
$item1 = $order->addItem($product, 100);
$item2 = $order->addItem(['title' => 'foo', 'amount' => 200], 200, 2);
$item3 = $order->addItem($sku, 150, 3);
// 调整金额
$item1->adjustments()->create(['label' => '优惠券', 'amount' => '-10']);
$item2->addAdjustment('超重运费', 10);
$item3->addUnIncludedAdjustment('包邮', '10');
$item3->units()->first()->addAdjustment('第二件半价', '-75');
// 返回订单数据(携带所有子项目及单位)
return $order->loadTrunk();