justbetter/laravel-magento-stock

该软件包提供了一种通用的方式将库存推送到 Magento。

2.1.0 2024-09-10 06:45 UTC

README

Package banner

Laravel Magento Stock

Tests Coverage Analysis Total downloads

该软件包提供了一种从可配置源将库存推送到 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

每个库存记录都有两个标志,retrieveupdate。此命令将调度作业以运行这些操作。它主要用于更新,但您可以在您的应用程序中实现检索标志以减慢检索速度。

检索单个 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

这将执行三个任务

  1. 确保所有测试都通过
  2. 使用静态代码分析检查任何问题
  3. 检查代码是否正确格式化

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请参阅我们的安全策略以了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

JustBetter logo