justbetter / laravel-magento-stock
该软件包提供了一种通用的方式将库存推送到 Magento。
Requires
- php: ^8.2
- justbetter/laravel-magento-async: ^1.0
- justbetter/laravel-magento-client: ^2.6.1
- justbetter/laravel-magento-products: ^1.4
- laravel/framework: 11.*
- spatie/laravel-activitylog: ^4.7
Requires (Dev)
- doctrine/dbal: ^3.4
- larastan/larastan: ^2.9
- laravel/pint: ^1.6
- orchestra/testbench: 9.*
- pestphp/pest: ^2.0
- phpstan/phpstan-mockery: ^1.1
- phpunit/phpunit: ^10.0
README
Laravel Magento Stock
该软件包提供了一种从可配置源将库存推送到 Magento 的方法。支持简单库存和 MSI。
特性
此软件包提供了推送到 Magento 的所有逻辑。它只需实现检索库存的实现。
特性
- 从任何来源检索库存
- MSI 支持
- 仅在库存有修改时更新库存
- 当错误太多时自动停止同步(可配置)
- 比较 Magento 和本软件包之间的库存
- 支持使用 Laravel Magento Async 更新库存的 Magento 2 异步批量请求
- 使用 Spatie activitylog 记录活动
- 使用 JustBetter Magento Products 检查 Magento 产品是否存在
请参阅我们的其他 Laravel Magento 软件包!我们还有一个 Magento 客户端,可以轻松地将 Laravel 连接到 Magento!
安装
需要此软件包:composer require justbetter/laravel-magento-stock
发布配置
php artisan vendor:publish --provider="JustBetter\MagentoStock\ServiceProvider" --tag="config"
发布活动日志的迁移
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"
运行迁移。
php artisan migrate
提示:本软件包中的所有操作都是通过作业运行的,我们建议使用 Laravel Horizon 或其他排队系统来运行这些操作
将以下命令添加到您的计划任务中。
protected function schedule(Schedule $schedule): void { // Process stocks marked for retrieval / update $schedule->command(\JustBetter\MagentoStock\Commands\ProcessStocksCommand::class)->everyMinute(); // Retrieve all stock daily $schedule->job(\JustBetter\MagentoStock\Commands\Retrieval\RetrieveAllStockCommand::class)->dailyAt('05:00'); // Retrieve modified stock every fifteen minutes, with a small overlap $schedule->job(\JustBetter\MagentoStock\Commands\Retrieval\RetrieveAllStockCommand::class, ['from' => 'now -1 hour'])->everyFifteenMinutes(); }
Laravel Nova
我们为此软件包提供了一个 Laravel Nova 集成。
设置
此软件包要求您实现一个库存仓库,该仓库负责检索库存。
检索库存
实现 retrieve
方法,并返回一个包含库存字段的 StockData
对象。
<?php namespace App\Integrations\MagentoStock; use JustBetter\MagentoStock\Repositories\Repository; use JustBetter\MagentoStock\Data\StockData; use JustBetter\MagentoStock\Enums\Backorders; class MyStockRepository implements Repository { public function retrieve(string $sku): ?StockData { // Retrieve stock from your source return StockData::of([ 'sku' => $sku, 'quantity' => 10, 'in_stock' => true, 'backorders' => Backorders::BackordersNotify, ]); } }
检索 SKU
默认情况下,您所扩展的 Repository
将从 justbetter/laravel-magento-products 中检索 SKU。如果您想使用它,您必须将命令添加到您的计划任务中,以自动导入产品。
如果您有其他来源的 SKU,您可以自己实现 skus
方法。它接受一个可选的 carbon 实例,以仅检索已修改的库存。
<?php namespace App\Integrations\MagentoStock; use JustBetter\MagentoStock\Repositories\Repository; use Illuminate\Support\Carbon; use Illuminate\Support\Collection; class MyStockRepository implements Repository { public function skus(?Carbon $from = null): ?Collection { return collect(['sku_1', 'sku_2']); } }
配置仓库
仓库类有几个可以调整的设置
class BaseRepository { protected string $name = 'Repository'; // How many stocks may be retrieved at once when the process job runs protected int $retrieveLimit = 250; // How many stocks may be updated at once when the process job runs protected int $updateLimit = 250; // How many times an update to Magento may fail before it stops trying protected int $failLimit = 3; // If MSI is enabled protected bool $msi = false; // Enable if the package should update backorders protected bool $backorders = false; }
在创建和配置仓库后,您必须在配置文件中设置它
<?php return [ 'repository' => \App\Integrations\MagentoStock\MyStockRepository::class, ];
使用
要检索库存,您可以使用以下命令。
处理标记为检索/更新的库存
php artisan magento-stock:process
每个库存记录都有两个标志,retrieve
和 update
。此命令将调度作业以运行这些操作。它主要用于更新,但您可以在您的应用程序中实现检索标志以减慢检索速度。
检索单个 SKU 的库存
php artisan magento-stock:retrieve {sku}
这将直接将SKU传递到您的仓库并处理结果。如果库存已修改,它将设置更新标志。
检索所有或已修改的SKU的库存
php artisan magento-stock:retrieve-all {from?}
这将调用您的仓库中的skus
方法,并为从您的仓库返回的所有SKU调度检索作业。
更新单个SKU的库存
php artisan magento-stock:update {sku}
更新所有库存
php artisan magento-stock:update-all
比较库存
php artisan magento-stock:compare
这将比较Magento中的库存和数据库表中的库存。如果它们不同,它将强制更新Magento。
Magento MSI
如果您启用了Magento MSI,您必须在仓库中返回每个来源的数量和状态。
注意:请确保将仓库中的
msi
设置设置为true
!
例如
<?php namespace App\Integrations\MagentoStock; use JustBetter\MagentoStock\Repositories\Repository; use JustBetter\MagentoStock\Data\StockData; use JustBetter\MagentoStock\Enums\Backorders; class MyStockRepository implements Repository { public function retrieve(string $sku): ?StockData { return StockData::of([ 'sku' => $sku, 'backorders' => Backorders::BackordersNotify, 'msi_status' => [ 'A' => true, // Source A is in stock 'B' => false, // Source B is out of stock ], 'msi_quantity' => [ 'A' => 10, // Source A has qty of 10 'B' => 0, // Source B has qty of 0 ], ]); } }
比较
此功能需要作业批处理
此包提供了一种比较Magento中库存数量与Laravel数据库中库存数量的方法。如果检测到差异,它将开始更新该产品。
当检测到差异时,将触发一个事件\JustBetter\MagentoStock\Events\DifferenceDetectedEvent
。
处理失败
当更新失败时,它会再次尝试。模型中存储了一个失败计数器,每次失败都会增加。在仓库中,您可以指定更新可以尝试的次数。您可以通过将数据库中的sync
字段设置为true来重新启动产品的更新。
质量
为确保本包的质量,请运行以下命令
composer quality
这将执行三个任务
- 确保所有测试都通过
- 使用静态代码分析检查任何问题
- 检查代码是否正确格式化
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请参阅我们的安全策略以了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。