1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- namespace App\Services\File\Upload;
- use App\BO\BimFileBO;
- use App\Jobs\ConvertBimFile;
- use App\Models\Folder;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Storage;
- class FilesUploadService
- {
- use FilesUploadTrait;
- protected int $filesSize = 0;
- protected ?ProgressBar $progressBar = null;
- protected ?Folder $parentFolder = null;
- public function __construct(protected Request $request)
- {
- $this->filesSize = $this->checkRequestData($this->request);
- if ($this->request->get("request_id")) {
- $this->progressBar = new ProgressBar($this->request->get("request_id"), $this->filesSize);
- }
- $this->parentFolder = $this->request->get("folder_id")
- ? Folder::query()->findOrFail($this->request->get("folder_id"))
- : null;
- }
- public function upload(): array
- {
- $items = [];
- $fileNames = $this->request->get("file_names", []);
- foreach ($this->request->file("files") as $index => $file) {
- $item = $this->uploadFile($this->request, $file, $this->progressBar);
- $item['file']['title'] = $fileNames[$index] ?? $item['file']['title'];
- $item['file']['naming_rule_id'] = $this->parentFolder?->naming_rule_id;
- $items[] = $item;
- }
- $uploadedFiles = $this->storeFiles($items);
- $this->updateUsedStorageCapacity($this->filesSize);
- $this->progressBar?->completed();
- return $uploadedFiles;
- }
- /**
- * 上传BIM模型
- * @return array
- */
- public function uploadModels(): array
- {
- $files = $this->request->get("files", []);
- $uploadedFiles = [];
- DB::transaction(function() use ($files, &$uploadedFiles) {
- foreach ($files as $file) {
- $uploadedFiles[] = $this->uploadFileWithPath($this->request, $file['pathname'], $file['title'], $file['size'], $this->parentFolder?->naming_rule_id);
- }
- });
- $gisType = $this->request->input('gis_type', '');
- foreach ($uploadedFiles as $uploadedFile) {
- if ($uploadedFile['is_bim'] == 1) {
- $bimFileBO = new BimFileBO($uploadedFile->extension, $uploadedFile->title, Auth::user()->name, $gisType);
- $bimFileBO->setConfigJson($this->request->input('configJson', []));
- $bimFileBO->setPointCloudConfigJson($this->request->input('pointCloudConfigJson', []));
- ConvertBimFile::dispatch($uploadedFile['id'], $bimFileBO);
- }
- }
- $this->updateObjectVersion();
- return $uploadedFiles;
- }
- }
|