Я использую 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(),
];
}
}
}
}