Browse Source

注册公司上传附件调整

kely 8 months ago
parent
commit
62e5c7de31

+ 19 - 7
app/Http/Controllers/API/CompanyController.php

@@ -12,6 +12,7 @@ namespace App\Http\Controllers\API;
 use App\Mail\CompanyAction;
 use App\Models\CaptchaMail;
 use App\Models\Enums\FileObjectType;
+use App\Models\File;
 use App\Services\Notification\ActionEmail\ActionEmailService;
 use Illuminate\Mail\Mailable;
 use Illuminate\Support\Facades\DB;
@@ -97,24 +98,35 @@ class CompanyController extends Controller
     {
         $company = new Company();
 
-        $service->check(
-          $request->get("file_ids",[]),
-          FileObjectType::COMPANY,
-          $request->get("file_uuid"),
-        );
-
         $company->fill([
             ...$request->all(),
         ]);
 
         $company->save();
 
-        $service->association($company->id);
+        $this->filesAssociationCompany($request->get("file_ids", []), FileObjectType::COMPANY,$company->id);
 
 
         return $this->created();
     }
 
+    public function filesAssociationCompany(array $fileIds, FileObjectType $fileObjectType,string $companyId){
+        if (! $fileIds) {
+            return;
+        }
+        foreach ($fileIds as $fileId){
+            $file=File::query()
+                ->where('object_type',$fileObjectType->value)
+                ->whereNull("object_id")
+                ->where('id',$fileId)
+                ->first();
+            $file->company_id=$companyId;
+            $file->object_id =$companyId;
+            $file->save();
+        }
+
+    }
+
     //公司审核
     public function action(ActionRequest $request){
         $company = Company::findOrFail($request->id);

+ 10 - 0
app/Http/Controllers/API/FileController.php

@@ -15,6 +15,7 @@ use App\Models\Folder;
 use App\Services\File\BIM\BIMFactory;
 use App\Services\File\DownloadService;
 use App\Services\File\FileHideService;
+use App\Services\File\Upload\CompanyUploadService;
 use App\Services\File\Upload\FilesUploadService;
 use App\Services\File\Upload\KeepDirectoryUploadService;
 use Illuminate\Http\Request;
@@ -128,6 +129,15 @@ class FileController extends Controller
 
     }
 
+    public function companyUpload(FileUploadRequest $request){
+        set_time_limit(0);
+        $uploadedFiles = (new CompanyUploadService($request))->upload();
+
+        return $this->success([
+            'data' => $uploadedFiles
+        ]);
+    }
+
 
     /**
      * 文件夹上传

+ 14 - 14
app/Http/Controllers/API/UserController.php

@@ -213,19 +213,19 @@ class UserController extends Controller
 //
 //    }
 
-    /**
-     * 注册用户
-     * @return \Illuminate\Http\Response
-     */
-    public function registerCompanyUser(CreateCompanyUserRequest $request){
-        $password = Hash::make($request->password);
-        $userRequest=$request->all();
-        $userRequest['password']=$password;
-        User::create([
-            ...$userRequest,
-            'created_by' => Auth::id(),
-        ]);
-        return $this->created();
-    }
+//    /**
+//     * 注册用户
+//     * @return \Illuminate\Http\Response
+//     */
+//    public function registerCompanyUser(CreateCompanyUserRequest $request){
+//        $password = Hash::make($request->password);
+//        $userRequest=$request->all();
+//        $userRequest['password']=$password;
+//        User::create([
+//            ...$userRequest,
+//            'created_by' => Auth::id(),
+//        ]);
+//        return $this->created();
+//    }
 
 }

+ 4 - 1
app/Models/File.php

@@ -6,6 +6,7 @@ use App\Models\Scopes\CompanyScope;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
+use Illuminate\Support\Facades\Auth;
 
 class File extends Model
 {
@@ -15,7 +16,9 @@ class File extends Model
 
     protected static function booted(): void
     {
-        static::addGlobalScope(new CompanyScope);
+        if(Auth::check()){
+            static::addGlobalScope(new CompanyScope);
+        }
     }
 
     public function createdBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo

+ 76 - 0
app/Services/File/Upload/CompanyUploadService.php

@@ -0,0 +1,76 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: kelyliang
+ * Date: 2024/7/2
+ * Time: 下午 12:05
+ */
+
+namespace App\Services\File\Upload;
+
+
+use App\Http\Resources\API\FileUploadSuccessResource;
+use App\Models\File;
+use Illuminate\Http\Request;
+use Illuminate\Http\UploadedFile;
+
+class CompanyUploadService
+{
+    public function __construct(protected Request $request)
+    {
+
+    }
+
+    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);
+            $item['file']['title'] = $fileNames[$index] ?? $item['file']['title'];
+
+            $items[] = $item;
+        }
+        $uploadedFiles = $this->storeFiles($items);
+
+        return $uploadedFiles;
+    }
+
+    protected function uploadFile(Request $request, UploadedFile $file): array
+    {
+        $extension = $file->getClientOriginalExtension() ? $file->getClientOriginalExtension(): pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
+
+        $pathname = $file->storeAs(
+            sprintf("c%s/%s/%s", uniqid(), $request->get("object_type"), date("Ymd")),
+            sprintf("%s.%s", md5(uniqid()), $extension)
+        );
+        throw_validation_if(! $pathname, "File upload failed.");
+
+        $data['file'] = [
+            'pathname' => $pathname,
+            'title' => $file->getClientOriginalName(),
+            'size' => $file->getSize(),
+            'extension' => $extension,
+            'company_id' => uniqid(),
+            'object_type' => $request->object_type,
+            'source' => $request->get("source", 1),
+        ];
+
+        return $data;
+    }
+
+
+    protected function storeFiles(array $items)
+    {
+        $uploadedFiles = [];
+        foreach ($items as $item) {
+            $fileInfo = $item['file'];
+            $file = File::query()->create($fileInfo);
+            $uploadedFiles[] = new FileUploadSuccessResource($file);
+        }
+
+        return $uploadedFiles;
+    }
+
+}

+ 2 - 2
routes/api.php

@@ -16,9 +16,9 @@ use App\Http\Controllers\API;
 */
 
 Route::post("/login", [API\AuthController::class, "login"]);
-Route::post("register/company-user", [API\UserController::class, "registerCompanyUser"]);
+//Route::post("register/company-user", [API\UserController::class, "registerCompanyUser"]);
 Route::post("register/company", [API\CompanyController::class, "registerCompany"]);
-Route::post("company-file-upload", [API\FileController::class, "upload"]);
+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");