dandysi/laravel-batch-upload

一个用于管理/自动化/处理数据上传(如CSV)的框架,使用您的业务逻辑

v1.0.1 2024-02-05 19:19 UTC

This package is auto-updated.

Last update: 2024-09-05 20:32:38 UTC


README

一个用于帮助管理/自动化/处理数据上传(如CSV)的框架,使用您的业务逻辑。它具有成为不仅仅是数据库更新工具的潜力。

  • 调度 - 定义您希望上传何时被处理
  • 验证 - 添加规则以确保数据在处理前有效,并在失败时提供反馈
  • 可配置 - 全局或按处理器粒度
  • 无头 - 创建前端和审批流程以适应您的具体需求

安装

composer require dandysi/laravel-batch-upload

配置

php artisan vendor:publish --provider="Dandysi\Laravel\BatchUpload\BatchUploadServiceProvider"

通过更改 config/batch-upload.php 中的值来配置此包。

入门

第一步是创建一个处理器(处理行数据的一个引擎)。它是一个简单的PHP类,可以使用以下maker命令创建:

php artisan make:batch-upload-processor CreateCategoriesProcessor create_categories

将处理器添加到 config/batch-upload.php 配置文件中。

/**
 * Register processors here
 */
'processors' => [
    App\BatchUploads\CreateCategoriesProcessor::class
],

定义列/验证规则并实现处理上传行数据的代码。

class CreateCategoriesProcessor implements ProcessorInterface
{
    public function config(): ProcessorConfig 
    {
        return ProcessorConfig::create()
            ->column('code', 'Code', 'required')
            ->column('name', 'Name', 'required')
        ;
    }

    public function __invoke(array $row): void
    {
        $category = Cagegory::create([
            'code' => $row['code'],
            'name' => $row['name]
        ]);

        //more than just a simple data upload as you can add any other business logic here
    }

创建批次

通常这不会是一步完成,但以下概述了所有必需的阶段。

use Dandysi\Laravel\BatchUpload\Services\BatchService;

//Step 1 - Create
$service = app(BatchService::class);
$options = $service->options('create_categories', '/data/categories.csv');

$batch = $service->create($options);

//Step 2 - Approve
$batch->status = Batch::STATUS_APPROVE;
$batch->save();

//Step 3 - Dispatch (each row will be a seperate queued job)
$service->dispatch($batch);

如果发生验证错误,它们将记录在每一行上,批次/行的状态将反映这一点。

计划中的批次

使用附加选项计划批次,而无需执行上述第3步。

$options = $service
    ->options('create_categories', '/data/categories.csv')
    ->schedule(now()->tommorow())
;

为确保计划中的批次被调度,您需要向控制台内核添加一个调度命令

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     */
    protected function schedule(Schedule $schedule): void
    {
        $schedule->command('batch-upload:dispatch')->everyTenMinutes();
    }

或创建自己的cron条目以执行以下操作

php artisan batch-upload:dispatch

用户批次

如果您的批次需要通过用户来识别,可以在创建步骤中添加另一个选项

$options = $service
    ->options('create_categories', '/data/categories.csv')
    ->user('user123')
;

控制台命令

立即创建和调度一个批次

php artisan batch-upload:create create_categories /data/categories.csv --force-dispatch

延迟分钟 --delay=60 或用用户标识 --user=user123。延迟将需要上述调度命令/cron步骤。

许可证

开源软件,许可协议为MIT许可证