Browse Source

管理员审批公司

kely 8 months ago
parent
commit
6b9558ce1b

+ 24 - 8
app/Http/Controllers/API/CompanyController.php

@@ -9,6 +9,7 @@
 namespace App\Http\Controllers\API;
 
 
+use function App\Http\Controllers\badRequest;
 use App\Http\Controllers\Controller;
 
 use App\Http\Requests\API\Company\ActionRequest;
@@ -17,6 +18,7 @@ use App\Http\Resources\API\CompanyResource;
 use App\Models\Company;
 use App\Models\User;
 use App\Services\File\FileAssociationService;
+use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use App\Models\Enums\CompanyReviewStatus;
@@ -105,17 +107,31 @@ class CompanyController extends Controller
     }
 
     //公司审核
-    public function action(ActionRequest $request, string $id){
-        $company = Company::findOrFail($id);
-        $status=$request->status;
-        match($status) {
-            1 => $company->review_status=CompanyReviewStatus::APPROVED,
-            default => $company->review_status=CompanyReviewStatus::REJECTED,
-        };
-        $company->save();
+    public function action(ActionRequest $request){
+        $companys = Company::query()->whereIn('id',$request->get('ids'))->get();
+        foreach ($companys as $company){
+            if($company->review_status===CompanyReviewStatus::APPROVED->value){
+                badRequest(sprintf("Company ID: %s,has been approved", $company->id));
+            }
+            $status=$request->get('status');
+            $expDate=$request->get('exp_data');
+            match($status) {
+                1 =>$this->approved($company,$expDate),
+                default => $company->review_status=CompanyReviewStatus::REJECTED,
+            };
+            $company->save();
+        }
+
         return $this->noContent();
     }
 
+    protected function approved(Company $company,$expDate = null): void
+    {
+        $company->review_status=CompanyReviewStatus::APPROVED;
+        $expDate=$expDate===null?Carbon::now()->addYear()->toDateString():$expDate;
+        $company->exp_date=$expDate;
+    }
+
 
 
 }

+ 3 - 7
app/Http/Middleware/CheckPermission.php

@@ -24,15 +24,11 @@ class CheckPermission
 
         $permission=$this->RouteGetType($request,$permission);
 
-        if (!Auth::user()->hasPermissionTo($permission)) {
-            throw UnauthorizedException::forPermissions([$permission]);
-        }
-        //检查公司是否被限制访问
-        if (Auth::user()->company()->review_status == CompanyReviewStatus::REJECTED){
-            throw new \Exception('Companies are restricted from accessing');
+        if (Auth::user()->hasPermissionTo($permission)) {
+            return $next($request);
         }
 
-        return $next($request);
+        throw UnauthorizedException::forPermissions([$permission]);
     }
 
     public function RouteGetType(Request $request,string $permission){

+ 34 - 0
app/Http/Requests/API/Company/ActionRequest.php

@@ -0,0 +1,34 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: kelyliang
+ * Date: 2024/6/27
+ * Time: 下午 03:58
+ */
+
+namespace App\Http\Requests\API\Company;
+
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ActionRequest  extends FormRequest
+{
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
+     */
+    public function rules(): array
+    {
+        return [
+            "status" => "required|in:1,2",
+            "ids" => "required|array",
+        ];
+    }
+
+}

+ 20 - 0
app/Models/Enums/CompanyReviewStatus.php

@@ -0,0 +1,20 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: kelyliang
+ * Date: 2024/6/27
+ * Time: 下午 02:50
+ */
+
+namespace App\Models\Enums;
+
+
+enum CompanyReviewStatus: string
+{
+    case WAIT = 'wait'; //未开始
+
+    case APPROVED = 'approved'; // 已批准
+
+    case REJECTED = 'rejected';
+
+}

+ 31 - 0
database/migrations/2024_06_27_144414_add_review_status_and_exp_date_to_company.php

@@ -0,0 +1,31 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::table('company', function (Blueprint $table) {
+            //
+            $table->string("review_status", 30)->nullable()->default(\App\Models\Enums\CompanyReviewStatus::WAIT->value);
+            $table->date("exp_date")->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('company', function (Blueprint $table) {
+            //
+            $table->dropColumn(['review_status','exp_date']);
+        });
+    }
+};

+ 2 - 1
routes/api.php

@@ -39,6 +39,8 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::post("config/message-notification-setting", [API\ConfigController::class, "storeMessageNotificationSetting"])
             ->name("config.store-message-notification-setting");
 
+        Route::put("company/action", [API\CompanyController::class, "action"])->name("company.action");
+
         Route::apiResource("company", API\CompanyController::class)->only([
             'store', 'update', 'destroy'
         ]);
@@ -54,7 +56,6 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("role/{role}/menus", [API\RoleController::class, "menus"])->name("role.menus");
 //        Route::patch("user/userInfo/{user_id}",[API\UserController::class, 'updateUserInfo'])->name('user.updateUserInfo');
 
-        Route::patch("company/{company_id}/action", [API\CompanyController::class, "action"]);
 
 
     });