Forráskód Böngészése

调整模型上传

waymen 6 hónapja
szülő
commit
7fbb5f12c7

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

@@ -8,6 +8,7 @@ use App\Models\Enums\BimFileConvertStatus;
 use Carbon\Carbon;
 use Illuminate\Console\Command;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Log;
 
 class SyncBimConvertStatus extends Command
 {
@@ -30,6 +31,8 @@ class SyncBimConvertStatus extends Command
      */
     public function handle()
     {
+        Log::info('start to sync bim convert status');
+        
         BimFile::query()
             ->where("created_at", ">=", Carbon::now()->subDay())
             ->whereIn("convert_status", BimFileConvertStatus::unfinishedStatus())

+ 18 - 0
app/Http/Controllers/API/GlendaleController.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Http\Controllers\API;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
+
+class GlendaleController extends Controller
+{
+    public function callback(Request $request)
+    {
+        $input = $request->all();
+        Log::info('glendale callback params:', $input);
+
+        return $this->success($input);
+    }
+}

+ 5 - 0
app/Libraries/BIM/Abstracts/BIMAbstract.php

@@ -13,4 +13,9 @@ abstract class BIMAbstract implements BIMContact
             'source_status' => $sourceStatus
         ];
     }
+
+    public function isBIM(string $ext)
+    {
+        return array_key_exists($ext, array_merge(config('bim.gis_extensions'), config('bim.extensions')));
+    }
 }

+ 5 - 1
app/Libraries/BIM/Glendale/Client.php

@@ -15,8 +15,12 @@ class Client {
 
     protected function __construct()
     {
+        $intranetHost = config('bim.glendale.intranet_host', '');
+
+        $baseUri = !empty($intranetHost) ? $intranetHost : config("bim.glendale.host");
+
         $this->client = new \GuzzleHttp\Client([
-            'base_uri' => config("bim.glendale.host"),
+            'base_uri' => $baseUri,
             'http_errors' => false,
             'debug' => false,
             'headers' => [

+ 46 - 9
app/Libraries/BIM/Glendale/Glendale.php

@@ -11,26 +11,63 @@ use Ramsey\Uuid\Uuid;
 
 class Glendale extends BIMAbstract
 {
-
-    public function uploadFile(UploadedFile $file, array $params = [])
+    /**
+     * 指定url方式上传模型到引擎服务器
+     * @param string $fileUrl
+     * @param mixed $params
+     * @return array
+     */
+    protected function uploadFileByUrl(string $fileUrl, $params): array
     {
-        $uploadFormData = [
-            ['name' => 'file', 'contents' => fopen($file, 'r+'), 'filename' => $file->getClientOriginalName()]
-        ];
+        return Client::getInstance()->post('/api/app/model/transcode-file', [
+            'query' => [
+                'input' => json_encode([
+                    'modelDownloadUrl' => $fileUrl,
+                    'name' => $params['name'] ?? '',
+                    'initiatingUser' => Auth::user()->name,
+                    'uniqueCode' => Uuid::uuid4(),
+                    'priority' => 205,
+                    'isCAD' => $params['is_cad'],
+                    'configJson' => ExtensionModelConfig::getConfigOption($params['extension']),
+                    'callbackInterfaceURL' => route('glendale.callback'),
+                ])
+            ]
+        ]);
+    }
 
-        $result = Client::getInstance()->post('/api/app/model/upload-file', [
+    /**
+     * 文件流方式上传模型到引擎服务器
+     * @param \Illuminate\Http\UploadedFile $file
+     * @param array $params
+     * @return array
+     */
+    protected function uploadFileByStream(UploadedFile $file, array $params = []): array
+    {
+        return Client::getInstance()->post('/api/app/model/upload-file', [
             'query' => [
                 'input' => json_encode([
-                    'name' => $file->getClientOriginalName(),
+                    'name' => $params['name'] ?? '',
                     'initiatingUser' => Auth::user()->name,
                     'uniqueCode' => Uuid::uuid4(),
                     'priority' => 205,
                     'isCAD' => $params['is_cad'],
-                    "configJson" => ExtensionModelConfig::getConfigOption($params['extension']),
+                    'configJson' => ExtensionModelConfig::getConfigOption($params['extension']),
+                    'callbackInterfaceURL' => route('glendale.callback'),
                 ])
             ],
-            'multipart' => $uploadFormData,
+            'multipart' => ['name' => 'file', 'contents' => fopen($file, 'r+'), 'filename' => $params['name'] ?? ''],
         ]);
+    }
+
+    public function uploadFile(UploadedFile $file, array $params = []): array
+    {
+        $modelDownloadUrl = $params['modelDownloadUrl'] ?? '';
+
+        if (!empty($modelDownloadUrl)) { //指定URL方式上传
+            $result = $this->uploadFileByUrl($modelDownloadUrl, $params);
+        } else { //文件流方式上传
+            $result = $this->uploadFileByStream($file, $params);
+        }
 
         return [
             'bim_data_set_id' => $result['datas']['lightweightName'],

+ 2 - 2
app/Libraries/ChunkedUpload/Disks/Cos.php

@@ -41,7 +41,7 @@ class Cos implements ChunkedUploadContact
             $cosClient->upload(
                 sprintf("%s-%s", config('filesystems.disks.cos.bucket'), config('filesystems.disks.cos.app_id')),
                 $pathname,
-                fopen($file->getRealPath(),  'rb'),
+                fopen($file->getRealPath(), 'rb'),
                 $options,
             );
 
@@ -49,7 +49,7 @@ class Cos implements ChunkedUploadContact
                 $progressBar?->increment($notUploadedSize);
             }
         } catch (\Exception $exception) {
-            Log::error($exception->getTraceAsString());
+            Log::error('File upload failed messge:' . $exception->getMessage());
 
             throw new UploadFailedException("File upload failed.");
         }

+ 4 - 0
app/Services/File/Upload/FilesUploadTrait.php

@@ -12,6 +12,7 @@ use App\Models\File;
 use Illuminate\Http\Request;
 use Illuminate\Http\UploadedFile;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Storage;
 
 trait FilesUploadTrait
 {
@@ -54,6 +55,7 @@ trait FilesUploadTrait
             sprintf("%s.%s", md5(uniqid()), $extension),
             $progressBar
         );
+        $modelDownloadUrl = Storage::url($pathname);
 
         $data = [
             'bim' => [],
@@ -63,7 +65,9 @@ trait FilesUploadTrait
         if (in_array($extension, config("bim.extensions")) && $request->object_type == FileObjectType::CONTAINER->value) {
             $isBimFile = true;
             $data['bim'] = BIMFactory::make()->uploadFile($file, [
+                'modelDownloadUrl' => $modelDownloadUrl,
                 'pathname' => $pathname,
+                'name' => $file->getClientOriginalName(),//原文件名
                 'extension' => $extension,
                 'is_cad' => in_array($extension, ['dwg', 'dwf', 'dws', 'dwt']),
             ]);

+ 2 - 1
config/bim.php

@@ -16,7 +16,8 @@ return [
     ],
 
     'glendale' => [
-        'host' => env("GLENDALE_HOST", "http://159.75.168.101:18086/"),
+        'host' => env("GLENDALE_HOST", "http://159.75.168.101:18086"),
+        'intranet_host' => env('GLENDALE_INTRANET_HOST', ''),
         'view_url' => env("GLENDALE_VIEW_URL", "http://159.75.168.101:18083"),
         'token' => env("GLENDALE_TOKEN"),
         'project_id' => env("GLENDALE_PROJECT_ID"),

+ 1 - 1
routes/api.php

@@ -24,7 +24,7 @@ Route::post("company-file-upload", [API\FileController::class, "companyUpload"])
 //暂时为免登录
 Route::get("file/download/{uuid}/share-file", [API\FileController::class, "downloadShareFile"])
     ->name("file.download-share-file");
-
+Route::post("glendale/callback", [API\GlendaleController::class, "callback"])->name('glendale.callback');
 
 
 Route::middleware(['auth:sanctum','account.limit'])->group(function () {