Разбиение Excel на сообщения перед отправкой в ​​очередь SQS - PullRequest
0 голосов
/ 22 января 2020

Я использую Laravel Excel для импорта файла Excel, но проблема в том, что весь файл отправляется в сообщении Очередь, и Очередь выполняет его. Что я хочу сделать, это сломать файл и передать его как многократные сообщения, потому что у sqs есть предел для сообщений. Вот как я могу реализовать импорт

class StoreProductImport implements ToCollection, WithHeadingRow,ShouldQueue,WithChunkReading, WithEvents
{

    use Dispatchable,InteractsWithQueue, Queueable, SerializesModels,Importable, Notifications;


    protected $sub_category;
    protected $product_service;
    protected $group_id;
    protected $errors_data;
    protected $user;
    protected $sub_category_service;
    protected $sub_category_id;

    public function __construct(SubCategoryServiceContract $sub_category_service, $product_service,$user)
    {
        $this->product_service = $product_service;
        $this->user = $user;
        $this->sub_category_service = $sub_category_service;
    }

    public function collection(Collection $rows)
    {
        $progress = [];
        $errors_data = [];

        foreach ($rows->toArray() as $index=>$row) {

            try {
                $product = $row;
                $product = $this->mappingExcelDataToProductData($product);
                $product['store_id'] = $this->user->user_id;
                $products[] = $product;
                if ($product['is_main'] == 1) {

                    $result = $this->product_service->store($product);

                    $this->group_id = $this->product_service->getLastInsertedProductId()['group_id'];

                }
            } catch (\Illuminate\Validation\ValidationException $ex) {
                $error = [];
                    foreach ($ex->errors() as $key=>$value)
                    {
                        if ($key == 'handling_day')
                        {
                            $key = 'handling_time';
                            $value = str_replace('handling day','handling time',$value);
                            $error[] = [$key=>$value];

                        }else{
                            $error[] = [$key=>$value];

                        }
                    }
                $errors_data[] = [
                    'row_number' => ($index+1),
                    'error_message'=>json_encode($error),
                    'factory_id'=>Cache::get('factory_id'),
                    'created_at'=>Carbon::now(),
                    'updated_at'=>Carbon::now(),
                ];
            }

     }

    }
}
...