fly 4 years ago
parent
commit
cb1f3738e8
3 changed files with 53 additions and 25 deletions
  1. 12 0
      src/Helpers/AliOSSHelper.php
  2. 1 10
      src/Jobs/ExportTaskJob.php
  3. 40 15
      src/Services/Export/AbstractExportTask.php

+ 12 - 0
src/Helpers/AliOSSHelper.php

@@ -42,4 +42,16 @@ class AliOSSHelper
             return null;
         }
     }
+
+    public function delFile(string $oss_path, string $bucket = null)
+    {
+        $bucket = $bucket ? $bucket : $this->bucket;
+        try {
+            $oss_file = $this->oss_client->deleteObject($bucket, $oss_path);
+            return $oss_file['oss-request-url'];
+        } catch (OssException $e) {
+            Log::error($e->getMessage());
+            return null;
+        }
+    }
 }

+ 1 - 10
src/Jobs/ExportTaskJob.php

@@ -44,16 +44,7 @@ class ExportTaskJob implements ShouldQueue
         $file_name = md5($task_model->id . strtotime($task_model->created_at)) . ".csv";
         $local_path = storage_path('tmp');
         ExcelHelper::saveFileCsv($headers, $data, $file_name, $local_path);
-        $oss_service = new AliOSSHelper;
-        $oss_path = $oss_service->uploadFile("reports", $local_path);
+        $this->task->saveExportTaskFilePath($local_path);
         unlink($local_path . '/' . $file_name);
-        if ($oss_path) {
-            $task_model->file_path = $oss_path;
-            $this->task->setModel($task_model);
-            $this->task->setStatus(AbstractExportTask::complete);
-        } else {
-            $this->task->setStatus(AbstractExportTask::failure);
-        }
-        $task_model->save();
     }
 }

+ 40 - 15
src/Services/Export/AbstractExportTask.php

@@ -2,10 +2,12 @@
 
 namespace General\Services\Export;
 
+use General\Helpers\AliOSSHelper;
 use Illuminate\Database\Eloquent\Model;
 
 /**
  * 导出任务
+ * $model 对象必须有name,query_condition,status,file_path,is_file_deleted 逻辑不能变
  */
 abstract class AbstractExportTask
 {
@@ -17,7 +19,7 @@ abstract class AbstractExportTask
     const complete = 3;
     const failure = 4;
 
-    public function __construct(Model $model, ExportQueryData $query_data)
+    public function __construct(Model $model, ExportQueryData $query_data = null)
     {
         $this->model = $model;
         $this->query_data = $query_data;
@@ -30,20 +32,14 @@ abstract class AbstractExportTask
      */
     public function addTask(array $query_params)
     {
-        $params = array_merge($this->getTaskData(), [
-            'name' => $this->query_data->memu_name,
-            'query_condition' => $this->query_data->getQueryParamsContent($query_params),
-            'status' => self::ready,
-        ]);
-        $this->setModel($this->model::create($params));
-    }
-
-    /**
-     * 更新任务状态
-     */
-    public function updateTask(int $id, int $status)
-    {
-        return $this->model::where('id', $id)->update(['status' => $status]);
+        if ($this->query_data) {
+            $params = array_merge($this->getTaskData(), [
+                'name' => $this->query_data->memu_name,
+                'query_condition' => $this->query_data->getQueryParamsContent($query_params),
+                'status' => self::ready,
+            ]);
+            $this->setModel($this->model::create($params));
+        }
     }
 
     public function setModel(Model $model)
@@ -56,9 +52,38 @@ abstract class AbstractExportTask
         return $this->model;
     }
 
+    /**
+     * 设置状态
+     */
     public function setStatus(int $status)
     {
         $this->model->status = $status;
         $this->model->save();
     }
+
+    /**
+     * 保存文件
+     */
+    public function saveExportTaskFilePath(string $local_path)
+    {
+        $service = new AliOSSHelper;
+        $oss_path = $service->uploadFile("reports", $local_path);
+        if ($oss_path) {
+            $this->model->file_path = $oss_path;
+            $this->setStatus(self::complete);
+        } else {
+            $this->task->setStatus(self::failure);
+        }
+    }
+
+    /**
+     * 删除文件
+     */
+    public function delOssFile()
+    {
+        $service = new AliOSSHelper;
+        $service->delFile($this->model->file_path);
+        $this->model->is_file_deleted = 1;
+        $this->model->save();
+    }
 }