ExportTaskJob.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace General\Jobs;
  3. use General\Helpers\AliOSSHelper;
  4. use General\Helpers\ExcelHelper;
  5. use General\Services\Export\AbstractDataExportHandle;
  6. use General\Services\Export\AbstractExportTask;
  7. use Illuminate\Bus\Queueable;
  8. use Illuminate\Queue\SerializesModels;
  9. use Illuminate\Queue\InteractsWithQueue;
  10. use Illuminate\Contracts\Queue\ShouldQueue;
  11. use Illuminate\Foundation\Bus\Dispatchable;
  12. class ExportTaskJob implements ShouldQueue
  13. {
  14. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  15. private $task;
  16. private $export_handle;
  17. /**
  18. * Create a new job instance.
  19. *
  20. * @return void
  21. */
  22. public function __construct(AbstractExportTask $task, AbstractDataExportHandle $handle)
  23. {
  24. $this->task = $task;
  25. $this->export_handle = $handle;
  26. }
  27. /**
  28. * Execute the job.
  29. *
  30. * @return void
  31. */
  32. public function handle()
  33. {
  34. $task_model = $this->task->getModel();
  35. $this->task->setStatus(AbstractExportTask::running);
  36. $data = $this->export_handle->getExportData();
  37. $headers = $this->export_handle->getHeaders();
  38. $file_name = md5($task_model->id . strtotime($task_model->created_at)) . ".csv";
  39. $local_path = storage_path('tmp');
  40. ExcelHelper::saveFileCsv($headers, $data, $file_name, $local_path);
  41. $oss_service = new AliOSSHelper;
  42. $oss_path = $oss_service->uploadFile("reports", $local_path);
  43. unlink($local_path . '/' . $file_name);
  44. if ($oss_path) {
  45. $task_model->file_path = $oss_path;
  46. $this->task->setModel($task_model);
  47. $this->task->setStatus(AbstractExportTask::complete);
  48. } else {
  49. $this->task->setStatus(AbstractExportTask::failure);
  50. }
  51. $task_model->save();
  52. }
  53. }