Browse Source

sync bim conver status

moell 10 months ago
parent
commit
0b64391162

+ 53 - 0
app/Console/Commands/SyncBimConvertStatus.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Models\BimFile;
+use App\Models\Enums\BimFileConvertStatus;
+use App\Services\File\BIM\BIMFactory;
+use Carbon\Carbon;
+use Illuminate\Console\Command;
+use Illuminate\Database\Eloquent\Collection;
+
+class SyncBimConvertStatus extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'lpc:sync-bim-convert-status';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'sync bim convert status';
+
+    /**
+     * Execute the console command.
+     */
+    public function handle()
+    {
+        BimFile::query()
+            ->where("created_at", ">=", Carbon::now()->subDay())
+            ->whereIn("convert_status", BimFileConvertStatus::unfinishedStatus())
+            ->chunkById(2000, function (Collection $bimFiles) {
+                $this->queryStatus($bimFiles);
+            });
+    }
+
+    protected function queryStatus(Collection $bimFiles)
+    {
+        foreach ($bimFiles as $bimFile) {
+            try {
+                $status = BIMFactory::make($bimFile->bim_driver)->findConvertStatus($bimFile->bim_data_set_id);
+
+                $bimFile->convert_status = $status;
+                $bimFile->save();
+            } catch (\Exception $exception) {
+            }
+        }
+    }
+}

+ 4 - 1
app/Console/Kernel.php

@@ -3,6 +3,7 @@
 namespace App\Console;
 
 use App\Console\Commands\AddBimToConvertQueue;
+use App\Console\Commands\SyncBimConvertStatus;
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 
@@ -15,7 +16,9 @@ class Kernel extends ConsoleKernel
     {
         // $schedule->command('inspire')->hourly();
 
-        $schedule->command(AddBimToConvertQueue::class)->everyFiveMinutes();
+        $schedule->command(AddBimToConvertQueue::class)->everyFiveMinutes()->runInBackground();
+
+        $schedule->command(SyncBimConvertStatus::class)->everyTenMinutes()->runInBackground();
     }
 
     /**

+ 13 - 0
app/Models/Enums/BimFileConvertStatus.php

@@ -11,4 +11,17 @@ enum BimFileConvertStatus: int
     case IN_QUEUE = 2;
 
     case CONVERTING = 3;
+
+    case PAUSE = 4;
+
+    case DONE = 5;
+
+    public static function unfinishedStatus(): array
+    {
+        return [
+            self::IN_QUEUE->value,
+            self::CONVERTING->value,
+            self::PAUSE->value,
+        ];
+    }
 }

+ 8 - 1
app/Services/File/BIM/BlackHole/BlackHole.php

@@ -2,6 +2,7 @@
 
 namespace App\Services\File\BIM\BlackHole;
 
+use App\Models\Enums\BimFileConvertStatus;
 use App\Services\File\BIM\BIMDriverEnum;
 use App\Services\File\BIM\Contacts\BIMContact;
 use Illuminate\Http\UploadedFile;
@@ -64,7 +65,13 @@ class BlackHole implements BIMContact
             ]
         ]);
 
-        return $result['data'] ?? [];
+        return match ($result['data']['status']) {
+            0, 1 => BimFileConvertStatus::IN_QUEUE->value,
+            2 => BimFileConvertStatus::CONVERTING->value,
+            5 => BimFileConvertStatus::PAUSE->value,
+            10 => BimFileConvertStatus::DONE->value,
+            20 => BimFileConvertStatus::FAILED_TO_ADD_QUEUE->value,
+        };
     }
 
     public function addToConvertQueue(string $dataSetId): array