Quellcode durchsuchen

Merge remote-tracking branch 'origin/dev' into dev

lsm12139 vor 1 Monat
Ursprung
Commit
3de3dad45d

+ 12 - 2
app/Http/Controllers/API/ActionController.php

@@ -8,7 +8,9 @@ use App\Models\Action;
 use App\Models\Enums\ActionObjectType;
 use App\Models\Enums\FileObjectType;
 use App\Models\Enums\ObjectAction;
+use App\Models\File;
 use App\Repositories\ActionRepository;
+use App\Repositories\ContainerFileRepository;
 use App\Services\File\FileAssociationService;
 use App\Services\File\ImageUrlService;
 use DOMDocument;
@@ -21,10 +23,18 @@ class ActionController extends Controller
     {
         $actionObjectType = ActionObjectType::from($objectType);
 
-        $actionObjectType->modelBuilder()->where("company_id", Auth::user()->company_id)->findOrFail($objectId);
+        $model = $actionObjectType->modelBuilder()->where("company_id", Auth::user()->company_id)->findOrFail($objectId);
+
+        $objectIds = [$objectId];
+        if (ActionObjectType::CONTAINER_FILE->value == $objectType) {
+            ContainerFileRepository::getSourceFileFiles($model)->each(function ($file) use (&$objectIds) {
+                $objectIds[] = $file->id;
+                $objectIds[] = $file->source_file_id;
+            });
+        }
 
         return $this->success([
-            'data' => ActionRepository::actionWithHistory($actionObjectType, $objectId),
+            'data' => ActionRepository::actionWithHistory($actionObjectType, array_unique($objectIds)),
         ]);
     }
 

+ 11 - 10
app/Http/Controllers/API/AssetController.php

@@ -175,16 +175,17 @@ class AssetController extends Controller
     public function tree()
     {
         $attachmentArray = [];
-        $assets = Asset::allowed()->get(['id', 'name', 'parent_id'])->each(function ($assets)use (&$attachmentArray){
-            $attachmentArray[]=[
-            'parent_id'=>$assets->id,
-            'type'=>'attachment',
-            'name'=>'attachment',
-            'uuId'=>'attachment_'.$assets->id,
-            'id'=>'asset_id_'.$assets->id,
-        ];
-            $assets->type='asset';
-            $assets->uniId=$assets->type.'_'.$assets->id;
+        $assets = Asset::select(['id', 'name', 'parent_id'])->withCount('library')->allowed()->get()
+            ->each(function ($assets) use (&$attachmentArray) {
+                $attachmentArray[]=[
+                    'parent_id'=>$assets->id,
+                    'type'=>'attachment',
+                    'name'=>'attachment',
+                    'uuId'=>'attachment_'.$assets->id,
+                    'id'=>'asset_id_'.$assets->id,
+                ];
+                $assets->type='asset';
+                $assets->uniId=$assets->type.'_'.$assets->id;
         });
 
         return $this->success([

+ 3 - 1
app/Http/Controllers/API/ContainerController.php

@@ -220,7 +220,9 @@ class ContainerController extends Controller
 
     public function linkage(string $libraryId)
     {
-        $items = Container::query()->allowed()->where("library_id", $libraryId)->get(['id', 'name'])->each(function ($items) {
+        $items = Container::select(['id', 'name'])->withCount(['folder' => function ($query) {
+            $query->where('parent_id', 0);
+        }])->allowed()->where("library_id", $libraryId)->get()->each(function ($items) {
             // 设置固定的type值
             $items->type = 'container';
             $items->uniId=$items->type.'_'.$items->id;

+ 3 - 2
app/Http/Controllers/API/FileController.php

@@ -12,13 +12,13 @@ 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\Enums\ActionObjectType;
 use App\Models\Enums\BimFileConvertStatus;
 use App\Models\Enums\BimFileModelType;
 use App\Models\Enums\FileObjectType;
 use App\Models\Enums\ObjectAction;
 use App\Models\File;
 use App\Repositories\ActionRepository;
-use App\Repositories\CustomFieldRepository;
 use App\Services\File\BimService;
 use App\Services\File\DownloadService;
 use App\Services\File\FileHideService;
@@ -45,7 +45,7 @@ class FileController extends Controller
             return $this->badRequest(sprintf("File ID: %s, no permission to access", $file->id));
         }
 
-        ActionRepository::createByFile($file->object_id, $file->object_type, ObjectAction::DOWNLOAD);
+        ActionRepository::create($id, ActionObjectType::CONTAINER_FILE, ObjectAction::DOWNLOAD);
         return new FileDownloadResource($file);
     }
 
@@ -361,6 +361,7 @@ class FileController extends Controller
             ->where('is_bim', 1)
             ->where('object_type', $file->object_type)
             ->where('object_id', $file->object_id)
+            ->where('folder_id', $file->folder_id)
             ->where('title', $file->title)
             ->latest('version')
             ->paginate($pageSize);

+ 4 - 13
app/Http/Controllers/API/FolderController.php

@@ -26,28 +26,20 @@ class FolderController extends Controller
     /**
      * Display a listing of the resource.
      */
-    public function tree(string $objectType, string $objectId)
+    public function tree(string $objectType, string $objectId, $parentFolderId = 0)
     {
         $folderObjectType = FolderObjectType::from($objectType);
 
         $object=$folderObjectType->modelBuilderAllowed()->with(['library'])->findOrFail($objectId);
 
-        $folders = Folder::query()
+        $folders = Folder::select(['id', 'name', 'parent_id'])->withCount('children')
             ->where([
                 'object_type' => $objectType,
                 'object_id' => $objectId,
             ])
-            //            ->when(request("parent_id", 0) > 0, function ($query) {
-            //                return $query->where("path", "like", "%," . \request("parent_id") . ",%")->where("id", "!=", \request("parent_id"));
-            //            })
-            //          文件夹树暂时显示一层
-            ->where('parent_id',0)
+            ->where('parent_id', $parentFolderId)
             ->orderByDesc("sequence")
-            ->get([
-                'id',
-                'name',
-                'parent_id'
-            ])
+            ->get()
             ->each(function ($folders){
                 $folders->type='folder';
                 $folders->uniId=$folders->type.'_'.$folders->id;
@@ -64,7 +56,6 @@ class FolderController extends Controller
         ];
 
         return $this->success([
-            //'data' => make_tree($folders->toArray(), \request("parent_id", 0)),
             'object'=> $container,
             'data' => $folders
         ]);

+ 2 - 2
app/Http/Controllers/API/LibraryController.php

@@ -117,10 +117,10 @@ class LibraryController extends Controller
             LibraryType::CUSTOM => []
         };
 
-        $libraries = Library::query()
+        $libraries = Library::select(['id', 'name', 'created_at', 'updated_at'])->withCount('container')
             ->allowed()
             ->where("type", $type)->when($where, fn($query) => $query->where($where))
-            ->get(['id', 'name', 'created_at', 'updated_at'])
+            ->get()
             ->each(function ($libraries) {
                 // 设置固定的type值
                 $libraries->type = 'library';

+ 6 - 0
app/Models/Container.php

@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use App\Models\Enums\ActionObjectType;
 use App\Models\Enums\ContainerACL;
 use App\Models\Scopes\CompanyScope;
 use EloquentFilter\Filterable;
@@ -62,4 +63,9 @@ class Container extends Model
 
         return $this->hasOne(ContainerContent::class, "container_id")->where("version", $version);
     }
+
+    public function folder()
+    {
+        return $this->hasMany(Folder::class, "object_id")->where("object_type", ActionObjectType::CONTAINER->value);
+    }
 }

+ 2 - 2
app/Repositories/ActionRepository.php

@@ -387,12 +387,12 @@ class ActionRepository
         return $objectNames;
     }
 
-    public static function actionWithHistory(ActionObjectType $actionObjectType, string $objectId): array
+    public static function actionWithHistory(ActionObjectType $actionObjectType, array $objectIds): array
     {
         $actions = Action::query()
             ->with(['histories', 'createdBy'])
             ->where("object_type", $actionObjectType->value)
-            ->where("object_id", $objectId)
+            ->whereIn("object_id", $objectIds)
             ->orderBy("created_at")
             ->get();
 

+ 19 - 0
app/Repositories/ContainerFileRepository.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Repositories;
+
+use App\Models\File;
+use Illuminate\Database\Eloquent\Collection;
+
+class ContainerFileRepository
+{
+    public static function getSourceFileFiles(File $file): Collection|array
+    {
+        return File::query()
+            ->where('object_type', $file->object_type)
+            ->where('object_id', $file->object_id)
+            ->where("source_file_id", $file->source_file_id)
+            ->where("folder_id", $file->folder_id)
+            ->get();
+    }
+}

+ 7 - 13
app/Services/File/Upload/FilesUploadTrait.php

@@ -153,26 +153,20 @@ trait FilesUploadTrait
     protected function storeFile(array $fileArr): File
     {
         if ($fileArr['object_id'] && $fileArr['source'] == 1 || $fileArr['uuid'] && $fileArr['source'] == 1) {
-            $version = File::query()
+            $sameNameFile = File::query()
                 ->where('object_type', $fileArr['object_type'])
                 ->where('object_id', $fileArr['object_id'])
                 ->where("title", $fileArr['title'])
                 ->where("source", 1)
                 ->where("folder_id", $fileArr['folder_id'] ?? 0)
-                ->count();
-            $fileArr['version'] = $version + 1;
+                ->where('is_latest_version', 1)
+                ->first();
+
+            $fileArr['version'] = intval($sameNameFile?->version) + 1;
             $fileArr['is_latest_version'] = 1;
+            $fileArr['source_file_id'] = $sameNameFile?->source_file_id ? $sameNameFile->source_file_id : $sameNameFile?->id;
 
-            File::query()
-                ->where('object_type', $fileArr['object_type'])
-                ->where('object_id', $fileArr['object_id'])
-                ->where("title", $fileArr['title'])
-                ->where("folder_id", $fileArr['folder_id'] ?? 0)
-                ->where("source", 1)
-                ->where("is_latest_version", 1)
-                ->update([
-                    'is_latest_version' => 0
-                ]);
+            $sameNameFile?->update(['is_latest_version' => 0]);
         }
 
         $file = File::query()->create($fileArr);

+ 1 - 1
routes/api.php

@@ -62,7 +62,7 @@ Route::middleware(['auth:sanctum','account.limit'])->group(function () {
     Route::get("department-items", [API\DepartmentController::class, "publicSearch"]);
     Route::get("container-linkage/{library_id}", [API\ContainerController::class, "linkage"]);
     Route::get("folder-open", [API\FolderController::class, "open"]);
-    Route::get("folder-tree/{object_type}/{object_id}", [API\FolderController::class, "tree"]);
+    Route::get("folder-tree/{object_type}/{object_id}/{parent_folder_id?}", [API\FolderController::class, "tree"]);
     Route::get("file/{object_type}/{object_id}", [API\FileController::class, "byObject"]);
     Route::get("folder/file-version-tree/{object_type}/{object_id}", [API\FolderController::class, "versionFileTreeByObject"]);
     Route::get("project-asset-tree/{project_id}", [API\ProjectController::class, "projectAssetTree"]);