Browse Source

调整模型列表接口

waymen 4 months ago
parent
commit
0f1ce754fa

+ 23 - 14
app/Http/Controllers/API/FileController.php

@@ -6,14 +6,12 @@ use App\Http\Controllers\Controller;
 use App\Http\Requests\API\File\DownloadZipRequest;
 use App\Http\Requests\API\File\FileUploadRequest;
 use App\Http\Requests\API\File\KeepDirectoryUploadRequest;
-use App\Http\Resources\API\BimFileResource;
 use App\Http\Resources\API\FileByObjectResource;
 use App\Http\Resources\API\FileDownloadResource;
+use App\Http\Resources\API\FileSimpleResource;
 use App\Http\Resources\API\FileUploadSuccessResource;
 use App\Libraries\BIM\BIMDriverEnum;
 use App\Libraries\ChunkedUpload\Disks\Cos;
-use App\Models\BimFile;
-use App\Models\Container;
 use App\Models\Enums\BimFileConvertStatus;
 use App\Models\Enums\BimFileModelType;
 use App\Models\Enums\FileObjectType;
@@ -144,7 +142,6 @@ class FileController extends Controller
         return $this->success([
             'data' => $uploadedFiles
         ]);
-
     }
 
     /**
@@ -283,7 +280,6 @@ class FileController extends Controller
                 'bim_view' => $result,
             ]
         ]);
-
     }
 
     /**
@@ -303,7 +299,17 @@ class FileController extends Controller
      */
     public function models(Request $request)
     {
-        $containerId = $request->container_id;
+        $inputArr = $this->validate($request, [
+            'model_type' => 'in:bim,gis',
+            'container_id' => 'int',
+            'library_id' => 'int',
+            'asset_id' => 'int',
+            'project_id' => 'int',
+        ]);
+        $containerId = (int) ($inputArr['container_id'] ?? 0);
+        $libraryId = (int) ($inputArr['library_id'] ?? 0);
+        $assetId = (int) ($inputArr['asset_id'] ?? 0);
+        $projectId = (int) ($inputArr['project_id'] ?? 0);
         $pageSize = (int) $request->get('page_size', 10);
         $modelType = $request->get('model_type', 'bim');
 
@@ -312,17 +318,20 @@ class FileController extends Controller
             default => $modelTypeArr = [BimFileModelType::BIM->value, BimFileModelType::CAD->value],
         };
 
-        $container = Container::query()->allowed()->findOrFail($containerId);
-
-        $bimFiles = BimFile::query()
-            ->modelType($modelTypeArr)
-            ->whereHas('file', function ($query) use ($container) {
-                return $query->containerLibraryId($container->library_id);
+        $bimFiles = File::query()
+            ->where('is_bim', 1)
+            ->where('is_latest_version', 1)
+            ->projectId($projectId)
+            ->assetId($assetId)
+            ->containerId($containerId)
+            ->containerLibraryId($libraryId)
+            ->with('bimFile')
+            ->whereHas('bimFile', function ($query) use ($modelTypeArr) {
+                return $query->modelType($modelTypeArr)->where('convert_status', BimFileConvertStatus::DONE->value);
             })
-            ->with('file')
             ->latest('id')
             ->paginate($pageSize);
 
-        return BimFileResource::collection($bimFiles);
+        return FileSimpleResource::collection($bimFiles);
     }
 }

+ 3 - 3
app/Http/Resources/API/BimFileResource.php

@@ -23,9 +23,9 @@ class BimFileResource extends BaseResource
             'lightweight_size' => $extraArr['achievementFileSize'] ?? 0,
             'data_version' => $extraArr['dataVersion'] ?? '',
             'software_type' => $extraArr['softwareType'] ?? ($extraArr['fileOwnership'] ?? ''),
-            'file_title' => $this->file->title,
-            'file_size' => $this->file->size,
-            'file_created_at' => (string) $this->file->created_at,
+            // 'file_title' => $this->file->title,
+            // 'file_size' => $this->file->size,
+            // 'file_created_at' => (string) $this->file->created_at,
         ];
     }
 }

+ 8 - 2
app/Http/Resources/API/FileSimpleResource.php

@@ -6,7 +6,7 @@ use Illuminate\Http\Request;
 use Illuminate\Http\Resources\Json\JsonResource;
 use Illuminate\Support\Facades\Storage;
 
-class FileSimpleResource extends JsonResource
+class FileSimpleResource extends BaseResource
 {
     /**
      * Transform the resource into an array.
@@ -15,12 +15,18 @@ class FileSimpleResource extends JsonResource
      */
     public function toArray(Request $request): array
     {
-        return [
+        $data =  [
             'id' => $this->id,
             'title' => $this->title,
             'extension' => $this->extension,
             'size' => $this->size,
             'version' => $this->version,
         ];
+
+        if (isset($this->bimFile)) {
+            $data['bim_file'] = new BimFileResource($this->bimFile);
+        }
+
+        return $data;
     }
 }

+ 36 - 1
app/Models/File.php

@@ -8,7 +8,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Facades\Auth;
-use Predis\Command\Redis\SDIFF;
 
 class File extends Model
 {
@@ -58,6 +57,12 @@ class File extends Model
         return $this->belongsTo(Container::class, 'object_id')->where('object_type', FileObjectType::CONTAINER->value);
     }
 
+    public function containerLibrary()
+    {
+        return $this->hasOneThrough(Library::class, Container::class, 'id', 'id', 'object_id', 'library_id')
+            ->where('object_type', FileObjectType::CONTAINER->value);
+    }
+
     public function bimFile(): \Illuminate\Database\Eloquent\Relations\HasOne
     {
         return $this->hasOne(BimFile::class);
@@ -72,4 +77,34 @@ class File extends Model
             }
         });
     }
+
+    // 某个容器的文件
+    public function scopeContainerId($query, int $containerId = 0)
+    {
+        return $query->whereHas('container', function ($query) use ($containerId) {
+            if ($containerId > 0) {
+                return $query->where('id', $containerId);
+            }
+        });
+    }
+
+    // 某个资产的文件
+    public function scopeAssetId($query, int $assetId = 0)
+    {
+        return $query->whereHas('containerLibrary', function ($query) use ($assetId) {
+            if ($assetId > 0) {
+                return $query->where('asset_id', $assetId);
+            }
+        });
+    }
+
+    // 某个项目的文件
+    public function scopeProjectId($query, int $projectId = 0)
+    {
+        return $query->whereHas('containerLibrary', function ($query) use ($projectId) {
+            if ($projectId > 0) {
+                return $query->where('project_id', $projectId);
+            }
+        });
+    }
 }

+ 1 - 1
app/Models/Scopes/CompanyScope.php

@@ -13,7 +13,7 @@ class CompanyScope implements Scope
     public function apply(Builder $builder, Model $model): void
     {
         if (Auth::user()) {
-            $builder->where('company_id', '=', Auth::user()->company_id);
+            $builder->where($model->getTable() . '.company_id', '=', Auth::user()->company_id);
         }
     }
 }

+ 2 - 2
app/Tools/ApiAnonymousResourceCollection.php

@@ -12,11 +12,11 @@ class ApiAnonymousResourceCollection extends AnonymousResourceCollection
             'meta' => [
                 'current_page' => $paginated['current_page'],
                 'from' => $paginated['from'],
-                'last_page' => $paginated['last_page'],
+                'last_page' => $paginated['last_page'] ?? null,
                 // 'path' => $paginated['path'],
                 'per_page' => $paginated['per_page'],
                 'to' => $paginated['to'],
-                'total' => $paginated['total'],
+                'total' => $paginated['total'] ?? null,
             ]
         ];
     }

+ 1 - 1
config/queue.php

@@ -76,7 +76,7 @@ return [
             'queue' => env('RABBITMQ_QUEUE', 'autocde'),
             'hosts' => [
                 [
-                    'host' => env('RABBITMQ_HOST', '192.168.224.141'),
+                    'host' => env('RABBITMQ_HOST', '127.0.0.1'),
                     'port' => env('RABBITMQ_PORT', 5672),
                     'user' => env('RABBITMQ_USER', 'myuser'),
                     'password' => env('RABBITMQ_PASSWORD', 'mypass'),